Инструменты5 сентября 2026 г., 23:46 МСК🤖 Auto

Bake: Самодостаточные microVM без root и Docker

Инструмент Bake позволяет упаковать Firecracker, ядро и корневую файловую систему в один ELF-бинарник, запуская изолированные контейнеры с сетью и шарингом файлов без прав root.

Баннер новости 6869

Суть инновации: один бинарник вместо кучи зависимостей

Bake — это утилита командной строки для Linux, которая решает проблему переносимости микровиртуальных машин (microVM). Вместо того чтобы разворачивать сложную инфраструктуру с отдельными файлами ядра, initrd, бинарником Firecracker и образами дисков, разработчик может создать единый исполняемый файл формата ELF. Этот файл содержит все необходимые ресурсы и логику для запуска изолированной среды.

Ключевое преимущество Bake — работа в пространстве пользователя (userspace) без необходимости получения прав root. Взаимодействие между хостом и гостевой VM происходит через vsock, что обеспечивает безопасность и простоту развертывания в ограниченных средах.

Техническая реализация: как это работает

Процесс работы Bake делится на два основных режима: Build (сборка) и Run (запуск). На этапе сборки утилита принимает входные файлы (ядро, initrd, rootfs, firecracker) и «зашивает» их в исполняемый файл. При запуске бинарник определяет контекст:

  • Run Mode (на хосте): Бинарник извлекает ресурсы в память (memfd), настраивает vsock-эндпоинты для сети (SOCKS5 прокси, UDP мост, 9p файловый сервер) и запускает Firecracker.
  • VMinit Mode (внутри VM): Если процесс запущен как PID 1, Bake выполняет инициализацию: монтирует файловые системы, настраивает overlay-диск для временных данных, поднимает сеть через tun2socks и запускает контейнер через runc.

Сетевая конфигурация реализована через прокси SOCKS5 на порту vsock 10 и UDP-мост на порту 11, что позволяет гостевой системе иметь доступ к интернету и хосту без сложных правил iptables.

Возможности и метрики

Bake предоставляет гибкое управление ресурсами и доступом. Ниже приведена таблица ключевых параметров, поддерживаемых утилитой:

Параметр Описание и пример использования Значение по умолчанию
--cpus Количество виртуальных CPU-ядер Не указано (зависит от хоста)
--memory Объем оперативной памяти в МБ 256 MB
-p, --publish Проброс портов: HOST:VM (например, 8080:8080) Нет
-v, --volume Маппинг директорий: HOST:VM[:ro] Нет
--allow-net Разрешить исходящий трафик на IPv4 CIDR Заблокировано (если не задано)
--wireguard-conf-file Путь к конфигу WireGuard Нет

Пример использования

Разработчики могут собрать самодостаточное приложение, используя Docker-образ Bake. Для сборки бинарника app.elf из образа ghcr.io/losfair/bake и локального корня rootfs.squashfs.img используется следующая команда:

docker run -it --rm \
  -v ./rootfs.squashfs.img:/rootfs.img:ro \
  -v ./output:/output \
  --entrypoint /opt/bake/bake.amd64 \
  ghcr.io/losfair/bake \
  --input /opt/bake/bake.amd64 \
  --firecracker /opt/bake/firecracker.amd64 \
  --kernel /opt/bake/kernel.amd64 \
  --initrd /opt/bake/initrd.amd64.img \
  --rootfs /rootfs.img \
  --output /output/app.elf

После сборки полученный файл app.elf можно запустить напрямую. Например, чтобы выполнить команду uname -a внутри изолированной среды:

./output/app.elf -- uname -a

Результат покажет ядро Linux версии 6.1.149-bottlefire, что подтверждает работу внутри микровиртуальной машины.

Почему это важно

Bake устраняет барьеры для внедрения Firecracker в сценариях, где установка Docker или прав root невозможна или нежелательна. Возможность упаковать всю среду выполнения в один файл упрощает CI/CD пайплайны, безопасное выполнение недоверенного кода и развертывание в edge-вычислениях. Поддержка WireGuard и проброса портов делает инструмент готовым к использованию в production-средах с требованиями к сетевой изоляции.

Источник: Github ↗