Вопрос или проблема
Я пытаюсь создать настраиваемый образ сервера 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
Когда я пытаюсь запустить установку, я застреваю здесь:
Файл 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
-
Загрузка базового образа:
Сначала загрузите образ 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
-
Редактирование файлов 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
. -
Проверка структуры файловой системы:
Используйте командуtree
для проверки структуры файлов перед созданием образа:tree ~/ubuntu-vortex
Убедитесь, что ваша структура каталогов соответствует ожидаемому формату:
~/ubuntu-vortex ├── boot ├── casper ├── nocloud │ ├── meta-data │ └── user-data └── ...
-
Создание образа с помощью 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
-
Проверка 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). -
Настройка пользовательских данных:
Убедитесь, что ваш файлuser-data
оформлен правильно. Проверьте все команды в секцииlate-commands
, так как они будут выполнены после установки. Если вы не имеете сервисаinitialize-device.service
, вы можете удалить или изменить эту строку.
Заключение
После выполнения всех вышеперечисленных шагов вы сможете создать свой кастомный образ Ubuntu 24.04.1. Если по-прежнему возникают ошибки при запуске, стоит перепроверить логи установки и убедиться в корректности структуры файлов и параметров GRUB.
Помните, что создание кастомного образа требует внимания к деталям и тщательного тестирования, чтобы убедиться, что все параметры настроены правильно.