sinit не удается запустить в firecracker vmm

Вопрос или проблема

Я экспериментирую с 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. Давайте рассмотрим возможные причины и решения этой проблемы.

Проблемы и решения

  1. Неправильный путь к ядру и аргументам загрузки:
    Убедитесь, что указанный путь к ядру vmlinux в конфигурационном файле vmconfig.json верный. Аргументы загрузки должны включать указание устройства для корневой файловой системы, например, root=/dev/vda если python.ext4 представлена как vda.

  2. Конфигурация и формат образа rootfs:
    Вы использовали mkfs.ext4 для создания файловой системы. Это правильно, но также проверьте, что все необходимые файлы и директории, такие как /bin, /sbin, /etc, и библиотечные зависимости, присутствуют в вашем образе. Кроме того, проверьте наличие исполняемого файла init, такого как sinit, в корне или в одном из стандартных путей.

  3. Правильная компиляция и размещение init-системы:
    Убедитесь, что sinit компилирован под целевую архитектуру и может выполняться в вашем окружении. Переместите его в соответствующую директорию, например, /sbin/init, и проверьте, установлены ли у него правильные права на выполнение.

  4. Отсутствие зависимостей:
    Возможно, в системе отсутствуют зависимости, необходимые для работы sinit. Убедитесь, что все зависимости включены в образ rootfs. Используйте инструмент ldd на хосте, чтобы проверить, какие библиотеки требуются.

  5. Ошибки в конфигурации Firecracker:
    В конфигурационном файле вы указали два устройства. Убедитесь, что они настроены правильно. Удалите или исправьте неверно указанный диск init, если он не используется.

Ресурсы для изучения

Чтобы углубить свои знания, рассмотрите следующие ресурсы:

  • Официальная документация Firecracker на GitHub и AWS. Она содержит множество примеров и пояснений.
  • Сообщество и форумы, такие как Stack Overflow или Reddit, где можно найти аналогичные вопросы и решения.
  • Учебные онлайн-курсы по виртуализации и Linux, которые помогут понять основные концепции работы с VMM.

Заключение

Эта проблема требует внимательного подхода к настройке каждого компонента вашей виртуальной машины. Начните с проверки файлов и конфигурации, убедитесь в правильности путей и прав доступа, и обращайтесь к сообществу за поддержкой по пути. Постепенно вы сможете более уверенно работать с Firecracker и виртуализацией в целом.

Оцените материал
Добавить комментарий

Капча загружается...