Как создать пользовательский образ Ubuntu 24.04.1 с помощью xorriso?

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

Я пытаюсь создать настраиваемый образ сервера Ubuntu, используя xorriso. Я скачал базовый образ, извлек из него файлы, отредактировал файл grub, чтобы стартовать из nocloud, и добавил свои собственные файлы user-data и meta-data.

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

xorriso -as mkisofs \
   -r -V "Ubuntu 24.04.01" \
   -o ~/ubuntu-vortex-24.04.iso \
   -J -l \
   -c boot.catalog \
   -b boot/grub/i386-pc/eltorito.img \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
   -eltorito-alt-boot -e EFI/boot/grubx64.efi \
   -no-emul-boot -isohybrid-gpt-basdat \
   ~/ubuntu-vortex

Когда я пытаюсь запустить установку, я застреваю здесь:

ntu

Файл user-data:

#cloud-config
autoinstall:
  version: 1
  locale: it_IT.UTF-8
  keyboard:
    layout: us
  network:
    version: 2
    ethernets:
      eth0:
        dhcp4: false
        addresses:
          - 192.168.1.137/24
        gateway4: 192.168.1.1
        nameservers:
          addresses:
            - 8.8.8.8
  ssh:
    install-server: true
    allow-pw: true
  storage:
    layout:
      name: direct
  timezone: Europe/Rome
  packages:
    - openssh-server
    - docker.io
    - docker-compose-v2
  package_update: true
  package_upgrade: true
  user-data:
    users:
      - name: administrator
        passwd: "$6$gRuzUReTpyqPxFly$7eAKV/NHQ3TpUAi44YJ8A4IEriUgN2e7tgFWvJFrtEJgiRR.Ydb0OZBSEhcqh/lk2/3NQ913mUxB3ewQxcpIa/"
        groups: [ adm, sudo, docker ]
        lock_passwd: false
        shell: /bin/bash
        sudo: ALL=(ALL) NOPASSWD:ALL
    # Добавьте runcmd для выполнения Docker логина и Docker Compose во время первой загрузки
    runcmd:
      # Docker логин с использованием имени пользователя и токена доступа
      - echo "password" | docker login -u "user" --password-stdin

      # Перейдите в каталог приложения и запустите Docker Compose
      - cd /opt/app && docker compose up -d
  late-commands:
    # Включите initialize_device.service, чтобы он запускался при первой загрузке
    - "systemctl enable initialize-device.service"  

Файл grub был настроен следующим образом:

linux /casper/vmlinuz autoinstall ds=nocloud; ---
initrd /casper/initrd

Я думаю, что сообщение об ошибке, которое вы получаете, “Невозможно найти носитель, содержащий файловую систему live”, связано с неправильно настроенным файлом grub.cfg и, возможно, с неисправным загрузочным USB-накопителем.

Когда я пытаюсь установить пользовательский ISO на виртуальную машину VirtualBox, используя ваши файлы user-data и grub.cfg, я вижу совершенно другое сообщение об ошибке прямо в начале загрузочного процесса. Итак, давайте исправим ваш файл grub.cfg.

Я использую следующий ISO для тестирования: ubuntu-24.04.1-live-server-amd64.iso

Тестовые установки с VirtualBox Версия 7.0.20 r163906.


В настоящее время у вас есть следующее для вашего menuentry:

linux /casper/vmlinuz autoinstall ds=nocloud; ---
initrd /casper/initrd

На самом деле есть две проблемы, но первая заключается в том, что вы не экранируете точку с запятой. В результате остальная часть строки трактуется как комментарий, и сообщение об ошибке, которое я вижу, следующее:

error: can't find command '---'.

Но поскольку вы этого не видите, это заставляет меня думать, что у вас либо неисправный загрузочный USB-накопитель, либо процесс загрузки отличается на физическом сервере.

Поэтому первое исправление — экранировать точку с запятой обратным слэшем следующим образом:

linux /casper/vmlinuz autoinstall ds=nocloud\; ---
initrd /casper/initrd

Теперь, если это было единственное исправление, которое вы внесли в grub.cfg, и вы смогли успешно загрузиться, вы быстро обнаружите, что ваши autoinstall директивы будут проигнорированы. Это связано со второй проблемой в вашем файле grub.cfg.

Вы указали ds=nocloud в качестве вашего источника данных, но вы не указали autoinstall где искать необходимые файлы. (Кроме того, вы не сказали нам, куда вы их положили.) Но обычно они будут находиться в каталоге верхнего уровня вашего извлеченного ISO, что-то вроде nocloud. Поэтому вам также нужно добавить что-то вроде s=/cdrom/nocloud в вашу команду ядра menuentry:

linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud ---
initrd /casper/initrd

Это говорит autoinstall искать в каталоге с именем nocloud в верхнем уровне “CDROM”, который является вашим USB-накопителем. Конечно, оба файла, user-data и meta-data, должны находиться в этом каталоге. Смотрите ниже:

$ tree -L 2
.
├── boot
│   ├── grub
│   └── memtest86+x64.bin
├── boot.catalog
├── casper
│   ├── filesystem.manifest
│   ├── filesystem.size
│   ├── initrd
│   ├── install-sources.yaml
│   ├── ubuntu-server-minimal.manifest
│   ├── ubuntu-server-minimal.size
│   ├── ubuntu-server-minimal.squashfs
│   ├── ubuntu-server-minimal.squashfs.gpg
│   ├── ubuntu-server-minimal.ubuntu-server.installer.generic.manifest
│   ├── ubuntu-server-minimal.ubuntu-server.installer.generic.size
│   ├── ubuntu-server-minimal.ubuntu-server.installer.generic.squashfs
│   ├── ubuntu-server-minimal.ubuntu-server.installer.generic.squashfs.gpg
│   ├── ubuntu-server-minimal.ubuntu-server.installer.manifest
│   ├── ubuntu-server-minimal.ubuntu-server.installer.size
│   ├── ubuntu-server-minimal.ubuntu-server.installer.squashfs
│   ├── ubuntu-server-minimal.ubuntu-server.installer.squashfs.gpg
│   ├── ubuntu-server-minimal.ubuntu-server.manifest
│   ├── ubuntu-server-minimal.ubuntu-server.size
│   ├── ubuntu-server-minimal.ubuntu-server.squashfs
│   ├── ubuntu-server-minimal.ubuntu-server.squashfs.gpg
│   └── vmlinuz
├── dists
│   ├── noble
│   ├── stable -> noble
│   └── unstable -> noble
├── EFI
│   └── boot
├── install
├── md5sum.txt
├── nocloud
│   ├── meta-data
│   └── user-data
├── pool
│   ├── main
│   └── restricted
└── ubuntu -> .

Помимо этого, ваш файл user-data правильный, за исключением того, что ваша поздняя команда не позволяет включить службу systemd с именем initialize-device.service. Я не уверен, настроена ли она каким-либо другим образом, но по умолчанию службы с таким именем нет.

Наконец, ваша команда xorriso для создания ISO работает успешно и не является источником вашей проблемы.


Таким образом, в заключение, я бы сначала внес эти исправления в grub.cfg, чтобы посмотреть, исправляет ли это вашу проблему. Если нет, тогда я бы пересмотрел вашу процедуру создания USB-накопителя.

Ответ или решение

Создание кастомного образа Ubuntu 24.04.1 с использованием xorriso может быть не такой простой задачей, если не учитывать некоторые ключевые моменты. Ниже приведены пошаговые рекомендации по созданию образа, а также возможные проблемы и способы их устранения.

Шаги по созданию кастомного образа Ubuntu

  1. Загрузка базового образа:
    Сначала загрузите образ Ubuntu 24.04.1 с официального сайта Ubuntu и извлеките его содержимое в отдельную директорию (например, ~/ubuntu-vortex).

    mkdir ~/ubuntu-vortex
    sudo mount -o loop ubuntu-24.04.1-live-server-amd64.iso /mnt
    cp -r /mnt/* ~/ubuntu-vortex/
    sudo umount /mnt
  2. Редактирование файлов GRUB:
    Отредактируйте grub.cfg, чтобы добавить параметры для автоматической установки. Ваш текущий menuentry выглядит так:

    linux /casper/vmlinuz autoinstall ds=nocloud; ---
    initrd /casper/initrd

    Исправление синтаксиса: нужно экранировать точку с запятой, иначе оставшаяся часть строки будет расцениваться как комментарий. Попробуйте следующий вариант:

    linux /casper/vmlinuz autoinstall ds=nocloud\; s=/cdrom/nocloud ---
    initrd /casper/initrd

    Убедитесь, что вы создали директорию nocloud в корне вашего образа, и скопировали туда ваши файлы user-data и meta-data.

  3. Проверка структуры файловой системы:
    Используйте команду tree для проверки структуры файлов перед созданием образа:

    tree ~/ubuntu-vortex

    Убедитесь, что ваша структура каталогов соответствует ожидаемому формату:

    ~/ubuntu-vortex
    ├── boot
    ├── casper
    ├── nocloud
    │   ├── meta-data
    │   └── user-data
    └── ...
  4. Создание образа с помощью xorriso:
    Когда всё настроено, создайте ISO-образ с помощью команды xorriso:

    xorriso -as mkisofs \
      -r -V "Ubuntu 24.04.01" \
      -o ~/ubuntu-vortex-24.04.iso \
      -J -l \
      -c boot.catalog \
      -b boot/grub/i386-pc/eltorito.img \
      -no-emul-boot -boot-load-size 4 -boot-info-table \
      -eltorito-alt-boot -e EFI/boot/grubx64.efi \
      -no-emul-boot -isohybrid-gpt-basdat \
      ~/ubuntu-vortex
  5. Проверка USB-накопителя:
    Если при старте установки вы видите сообщение "Unable to find a medium containing a live file system", это может быть связано с неправильной записью ISO на USB. Используйте утилиты, такие как dd, или Rufus (для Windows), чтобы сделать загрузочный USB-накопитель:

    sudo dd if=~/ubuntu-vortex-24.04.iso of=/dev/sdX bs=4M status=progress && sync

    Замените /dev/sdX характерным для вашей системы файлом устройства (например, /dev/sdb).

  6. Настройка пользовательских данных:
    Убедитесь, что ваш файл user-data оформлен правильно. Проверьте все команды в секции late-commands, так как они будут выполнены после установки. Если вы не имеете сервиса initialize-device.service, вы можете удалить или изменить эту строку.

Заключение

После выполнения всех вышеперечисленных шагов вы сможете создать свой кастомный образ Ubuntu 24.04.1. Если по-прежнему возникают ошибки при запуске, стоит перепроверить логи установки и убедиться в корректности структуры файлов и параметров GRUB.

Помните, что создание кастомного образа требует внимания к деталям и тщательного тестирования, чтобы убедиться, что все параметры настроены правильно.

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

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