Вопрос или проблема
Я экспериментирую с firecracker VMM. Я извлёк rootfs из образа python docker следующим образом.
docker export $(docker create python:latest) --output="python.tar"
mkdir python
tar -xf python.tar -C python/
dd if=/dev/zero of=python.ext4 bs=1M count=1500
mkfs.ext4 python.ext4
mkdir python-mnt
sudo mount python.ext4 python-mnt
sudo cp -r python/* python-mnt/
sudo umount python-mnt
Я использую ядро, которое предоставляется в readme firecracker.
Если я попробую запустить это sudo ./firecracker --api-sock "fc1.socket" --config-file vmconfig.json
, то получу паническое завершение работы ядра, так как оно не может найти init-систему.
Я скомпилировал минималистичный init (sinit) и попробовал использовать его, но моя виртуальная машина не запускается. Возможно, я что-то делаю неправильно с файлом конфигурации.
{
"boot-source": {
"kernel_image_path": "vmlinux",
"boot_args": "console=ttyS0 reboot=k panic=1 pci=off "
},
"drives": [
{
"drive_id": "init",
"is_root_device": false,
"is_read_only": false,
"path_on_host": "sinit"
},
{
"drive_id": "rootfs",
"is_root_device": true,
"is_read_only": false,
"path_on_host": "python.ext4"
}
],
"machine-config": {
"vcpu_count": 2,
"mem_size_mib": 1024,
"smt": false,
"track_dirty_pages": false,
"huge_pages": "None"
},
"cpu-config": null,
"balloon": null,
"network-interfaces": [],
"vsock": null,
"logger": null,
"metrics": null,
"mmds-config": null,
"entropy": null
}
У меня здесь два диска, потому что я следую примеру из https://github.com/superfly/init-snapshot/blob/public/README.md. Это не сработало, поэтому я решил начать с простого init.
PS: Я совсем новичок в этой теме и интересуюсь, чтобы узнать больше. Возможно, я задал очень глупый вопрос, и, пожалуйста, укажите мне на ресурсы, где я могу об этом узнать.
Ответ или решение
Запуск виртуальных машин с использованием Firecracker VMM может быть сложной задачей, особенно для новичков в этой области. Распространенной проблемой, с которой сталкиваются пользователи, является неудача при запуске init-системы, такой как sinit
. Давайте рассмотрим возможные причины и решения этой проблемы.
Проблемы и решения
-
Неправильный путь к ядру и аргументам загрузки:
Убедитесь, что указанный путь к ядруvmlinux
в конфигурационном файлеvmconfig.json
верный. Аргументы загрузки должны включать указание устройства для корневой файловой системы, например,root=/dev/vda
еслиpython.ext4
представлена какvda
. -
Конфигурация и формат образа rootfs:
Вы использовалиmkfs.ext4
для создания файловой системы. Это правильно, но также проверьте, что все необходимые файлы и директории, такие как/bin
,/sbin
,/etc
, и библиотечные зависимости, присутствуют в вашем образе. Кроме того, проверьте наличие исполняемого файла init, такого какsinit
, в корне или в одном из стандартных путей. -
Правильная компиляция и размещение init-системы:
Убедитесь, чтоsinit
компилирован под целевую архитектуру и может выполняться в вашем окружении. Переместите его в соответствующую директорию, например,/sbin/init
, и проверьте, установлены ли у него правильные права на выполнение. -
Отсутствие зависимостей:
Возможно, в системе отсутствуют зависимости, необходимые для работыsinit
. Убедитесь, что все зависимости включены в образ rootfs. Используйте инструментldd
на хосте, чтобы проверить, какие библиотеки требуются. -
Ошибки в конфигурации Firecracker:
В конфигурационном файле вы указали два устройства. Убедитесь, что они настроены правильно. Удалите или исправьте неверно указанный дискinit
, если он не используется.
Ресурсы для изучения
Чтобы углубить свои знания, рассмотрите следующие ресурсы:
- Официальная документация Firecracker на GitHub и AWS. Она содержит множество примеров и пояснений.
- Сообщество и форумы, такие как Stack Overflow или Reddit, где можно найти аналогичные вопросы и решения.
- Учебные онлайн-курсы по виртуализации и Linux, которые помогут понять основные концепции работы с VMM.
Заключение
Эта проблема требует внимательного подхода к настройке каждого компонента вашей виртуальной машины. Начните с проверки файлов и конфигурации, убедитесь в правильности путей и прав доступа, и обращайтесь к сообществу за поддержкой по пути. Постепенно вы сможете более уверенно работать с Firecracker и виртуализацией в целом.