Вопрос или проблема
Я следовал [по этой ссылке][1], чтобы создать офлайн-установку для Ubuntu 22.04.
Я успешно создал ISO с использованием xorriso и установил его на виртуальную машину в VirtualBox. Однако после перезагрузки машина не может загрузиться в обычном режиме. Вместо этого мне представлен минимальный шелл для редактирования строк, похожий на BASH, как показано ниже
[![grub shell][2]][2]
ISO было создано с помощью следующей команды:
xorriso -as mkisofs -r -V 'Ubuntu-22.04-LTS-AUTO' -o ../ubuntu-nov12-test1-autoinstall.iso --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16 --mbr-force-bootable -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img -appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 -c 'boot.catalog' -b 'boot/grub/i386-pc/eltorito.img' -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e '--interval:appended_partition_2:::' -no-emul-boot .
Файл grub.cfg
выглядит следующим образом,
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---
initrd /casper/initrd
}
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+.bin
}
fi
Файл install-sources.yaml
выглядит следующим образом
- description:
en: This version installs a Desktop environment where humans are not expected to log in.
id: desktop
locale_support: none
name:
en: Ubuntu Desktop
path: filesystem.squashfs
size: 2712014848
type: fsimage
variant: server
default: true
- description:
en: This version has been customized to have a small runtime footprint in environments
where humans are not expected to log in.
id: ubuntu-server-minimal
locale_support: none
name:
en: Ubuntu Server (minimized)
path: ubuntu-server-minimal.squashfs
size: 611012608
type: fsimage
variant: server
- description:
en: The default install contains a curated set of packages that provide a comfortable
experience for operating your server.
id: ubuntu-server
locale_support: locale-only
name:
en: Ubuntu Server
path: ubuntu-server-minimal.ubuntu-server.squashfs
size: 1259954176
type: fsimage-layered
variant: server
@mpboden Я следовал вашим инструкциям и выполнил следующие шаги
apt update
sudo apt install xorriso squashfs-tools gzip wget p7zip-full -y
# Распаковал ISO
mkdir server-iso-extracted desktop-iso-extracted
7z -y x ~/server-iso-extracted/ubuntu-22.04.5-live-server-amd64.iso -oserver-iso/
cd server-iso/
mv '[BOOT]' ../BOOT
7z -y x ~/desktop-iso-extracted/ubuntu-22.04.5-desktop-amd64.iso -odesktop-iso/
# Распаковать файловую систему рабочего стола
sudo unsquashfs -d desktop-squashfs desktop-iso-extracted/desktop-iso/casper/filesystem.squashfs
# Перейти в несжатую файловую систему
sudo mount --bind /dev desktop-squashfs/dev
sudo mount --bind /proc desktop-squashfs/proc
sudo mount --bind /run desktop-squashfs/run
sudo mount --bind /sys desktop-squashfs/sys
sudo chroot desktop-squashfs
# Внутри chroot запустите пользовательские скрипты для установки дополнительных пакетов (Apache, PHP, PostgreSQL):
# Пример команд для установки пакетов
apt update
apt install -y apache2 php postgresql
# Установите cloud-init для конфигурации пользователя во время автоматической установки
apt install -y cloud-init
# Выйдите из chroot и очистите
exit
sudo umount desktop-squashfs/dev
sudo umount desktop-squashfs/proc
sudo umount desktop-squashfs/run
sudo umount desktop-squashfs/sys
# Пересжать измененную файловую систему
sudo mksquashfs desktop-squashfs server-iso-extracted/server-iso/casper/filesystem.squashfs -comp xz -e boot
# Добавьте файлы автоматической установки в каталог ISO сервера
mkdir -p server-iso-extracted/server-iso/nocloud
touch user-data meta-data
vi user-data
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu-desktop
password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
realname: Ubuntu user
username: ubuntu
timezone: Asia/Kolkata
network:
version: 2
renderer: NetworkManager
refresh-installer:
update: no
keyboard:
layout: us
locale: en_US.UTF-8
late-commands:
- curtin in-target --target=/target -- apt-get install -y cloud-init
Файл grub.cfg приведен выше
Файл install-sources.yaml приведен выше
# Обновите контрольные суммы:
cd ~/server-iso-extracted/server-iso
sudo chmod +w md5sum.txt
sudo find . -type f -print0 | sudo xargs -0 md5sum | grep -v "./md5sum.txt" | sudo tee md5sum.txt
md5sum -c md5sum.txt
ISO был сгенерирован с использованием команды xorriso, приведенной выше.
[1]: https://askubuntu.com/questions/1490821/how-to-optimize-installation-process-during-offline-autoinstall-ubuntu-22-04
[2]: https://i.sstatic.net/rXNhuMkZ.png
Точные шаги, которые вы предприняли, несколько сложно проследить. Поэтому я изложил ниже шаги, которые я использую для создания нового ISO, сконфигурированного с автоматической установкой.
Сначала несколько наблюдений:
- Ваш файл
grub.cfg
не совпадает с моим, но я был успешен с вашим - Ваш файл
install-sources.yaml
не совпадает. Но я не вижу здесь проблемы. Я просто оставил свой простым. - Ваш файл
user-data
немного отличается от моего. У меняtimezone: Asia/Kolkata
отступает внутри другой директивыuser-data
. Но тестирование показывает, что это работает в обоих случаях. Кроме того, вы запускаетеlate-command
для установкиcloud-init
, но если вы распаковываете файловую систему рабочего стола и устанавливаетеcloud-init
внутри chroot, тогда вам не нужно запускать эту позднюю команду во время автоматической установки; это избыточно.
Некоторые заметки:
- Мы загружаем как серверные, так и настольные ISO для Ubuntu 22.04.5
- Полный серверный ISO распакован
- Только каталог
/casper/
извлечен из настольного ISO - Файловая система рабочего стола
filesystem.squashfs
распакована, переходит в chroot, изменяется, пересжимается и копируется в извлеченный серверный ISO - Необходимые файлы создаются для автоматической установки в извлеченном серверном каталоге
grub.cfg
иinstall-sources.yaml
изменяются в извлеченном серверном каталоге- Извлеченный серверный каталог переупаковывается в новое ISO
- Этот процесс добавляет файловую систему squashfs из настольного ISO Ubuntu в серверный ISO вместо установки пакета
ubuntu-desktop
в установку сервера. С этой техникой для установки используется Subiquity из серверного ISO.
В рабочем каталоге создайте следующие каталоги:
$ mkdir server-iso-extracted desktop-iso-extracted tmp
Скачайте файлы ISO:
wget https://nl3.releases.ubuntu.com/releases/releases/releases/releases/22.04/ubuntu-22.04.5-live-server-amd64.iso
wget https://nl3.releases.ubuntu.com/releases/releases/releases/releases/22.04/ubuntu-22.04.5-desktop-amd64.iso
Структура текущего рабочего каталога:
$ tree -L 1
.
├── desktop-iso-extracted
├── server-iso-extracted
├── tmp
├── ubuntu-22.04.5-desktop-amd64.iso
└── ubuntu-22.04.5-live-server-amd64.iso
Распакуйте ISO. Для настольного ISO вам нужен только каталог /casper/
.
xorriso -osirrox on -indev ubuntu-22.04.5-live-server-amd64.iso -extract / ./server-iso-extracted/
xorriso -osirrox on -indev ubuntu-22.04.5-desktop-amd64.iso -extract /casper/ ./desktop-iso-extracted/
Скопируйте файловую систему рабочего стола filesystem.squashfs
в каталог tmp
:
cp desktop-iso-extracted/filesystem.squashfs ./tmp/
Извлеките desktop-iso-extracted/casper/filesystem.squashfs
из настольного ISO:
sudo unsquashfs -n -d tmp/squashfs-root tmp/filesystem.squashfs
Создайте chroot:
sudo mount --bind /etc/resolv.conf tmp/squashfs-root/etc/resolv.conf
sudo mount -t proc none tmp/squashfs-root/proc
sudo mount -t sysfs none tmp/squashfs-root/sys
sudo mount -t devpts none tmp/squashfs-root/dev/pts
sudo chroot tmp/squashfs-root/
Измените файловую систему рабочего стола. Обновите и установите cloud-init
:
apt update
apt install cloud-init
# установите любые другие приложения
Выйдите из chroot:
exit
sudo umount tmp/squashfs-root/proc
sudo umount tmp/squashfs-root/sys
sudo umount tmp/squashfs-root/dev/pts
sudo umount tmp/squashfs-root/etc/resolv.conf
Создайте новый измененный squashfs:
sudo mksquashfs tmp/squashfs-root/ tmp/modified_filesystem.squashfs -comp xz
Скопируйте измененный squashfs в server-iso-extracted/casper/filesystem.squashfs
:
sudo cp tmp/modified_filesystem.squashfs server-iso-extracted/casper/filesystem.squashfs
Создайте каталог server-iso-extracted/nocloud
:
mkdir server-iso-extracted/nocloud
Создайте файл meta-data
:
touch server-iso-extracted/nocloud/meta-data
Создайте файл server-iso-extracted/nocloud/user-data
со следующим содержимым:
#cloud-config
autoinstall:
version: 1
# Следующие учетные данные создадут пользователя по умолчанию. имя пользователя: ubuntu - пароль: ubuntu
identity:
hostname: ubuntu-desktop
password: $6$5lpwCLsKLEzMkSJc$keOAhA6aO/5RocGThmhVA7LSNuW911Rx5HHXFEa75oGK20cEdAAgn14H5f5nGeq6QgcSyLPrWcg1.JvjXbhrN/
realname: Ubuntu user
username: ubuntu
user-data:
timezone: America/Los_Angeles
# Позвольте NetworkManager управлять всеми устройствами в этой системе
network:
version: 2
renderer: NetworkManager
refresh-installer:
update: no
keyboard:
layout: us
toggle: null
variant: ''
locale: en_US.UTF-8
# cloud-init не установлен по умолчанию в настольном ISO. Поэтому его необходимо либо установить внутри ISO, либо установить с помощью следующих строк:
# late-commands:
# - curtin in-target --target=/target -- apt install -y cloud-init
Предоставьте права на запись к server-iso-extracted/boot/grub/grub.cfg
:
chmod +w server-iso-extracted/boot/grub/grub.cfg
Измените server-iso-extracted/boot/grub/grub.cfg
следующим образом:
set timeout=30
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---
initrd /casper/initrd
}
menuentry "Ubuntu Server with the HWE kernel" {
set gfxpayload=keep
linux /casper/hwe-vmlinuz ---
initrd /casper/hwe-initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+.bin
}
fi
Предоставьте права на запись к server-iso-extracted/casper/install-sources.yaml
:
chmod +w server-iso-extracted/casper/install-sources.yaml
Обновите server-iso-extracted/casper/install-sources.yaml
следующим образом:
- description:
en: This version installs a Desktop environment
where humans are not expected to log in.
id: desktop
locale_support: none
name:
en: Ubuntu Desktop
path: filesystem.squashfs
size: 568651776
type: fsimage
variant: server
default: true
Восстановите контрольные суммы:
cd server-iso-extracted
chmod +w md5sum.txt
find ./dists ./.disk ./pool ./casper ./boot -type f -print0 | xargs -0 md5sum > md5sum.txt
cd ..
Создайте новый файл ISO:
xorriso -as mkisofs -r -V "Ubuntu 22.04.5 autoinstall" -o ./ubuntu-22.04.5-autoinstall-amd64.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 server-iso-extracted/
Когда я все закончу, структура рабочего каталога выглядит так:
$ tree -L 3
.
├── desktop-iso-extracted
│ ├── filesystem.manifest
│ ├── filesystem.manifest-minimal-remove
│ ├── filesystem.manifest-remove
│ ├── filesystem.size
│ ├── filesystem.squashfs
│ ├── filesystem.squashfs.gpg
│ ├── initrd
│ └── vmlinuz
├── server-iso-extracted
│ ├── boot
│ │ ├── grub
│ │ └── memtest86+.bin
│ ├── boot.catalog
│ ├── casper
│ │ ├── filesystem.manifest
│ │ ├── filesystem.size
│ │ ├── filesystem.squashfs
│ │ ├── hwe-initrd
│ │ ├── hwe-vmlinuz
│ │ ├── 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-hwe.manifest
│ │ ├── ubuntu-server-minimal.ubuntu-server.installer.generic-hwe.size
│ │ ├── ubuntu-server-minimal.ubuntu-server.installer.generic-hwe.squashfs
│ │ ├── ubuntu-server-minimal.ubuntu-server.installer.generic-hwe.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
│ │ ├── jammy
│ │ ├── stable -> jammy
│ │ └── unstable -> jammy
│ ├── EFI
│ │ └── boot
│ ├── install
│ ├── md5sum.txt
│ ├── nocloud
│ │ ├── meta-data
│ │ └── user-data
│ ├── pool
│ │ ├── main
│ │ └── restricted
│ └── ubuntu -> .
├── tmp
│ ├── filesystem.squashfs
│ ├── modified_filesystem.squashfs
│ └── squashfs-root
│ ├── bin -> usr/bin
│ ├── boot
│ ├── dev
│ ├── etc
│ ├── home
│ ├── lib -> usr/lib
│ ├── lib32 -> usr/lib32
│ ├── lib64 -> usr/lib64
│ ├── libx32 -> usr/libx32
│ ├── media
│ ├── mnt
│ ├── opt
│ ├── proc
│ ├── root
│ ├── run
│ ├── sbin -> usr/sbin
│ ├── snap
│ ├── srv
│ ├── sys
│ ├── tmp
│ ├── usr
│ └── var
├── ubuntu-22.04.5-autoinstall-amd64.iso
├── ubuntu-22.04.5-desktop-amd64.iso
└── ubuntu-22.04.5-live-server-amd64.iso
Отсюда ISO может быть использован для установки. С настроенной автоматической установкой, вам не придется давать команды во время процесса установки.
Ответ или решение
Минимальная оболочка BASH после перезагрузки Ubuntu 22.04 Autoinstall ISO в VirtualBox: Решение проблемы
Если вы столкнулись с ситуацией, когда после создания и загрузки ISO-образа Ubuntu 22.04 с автоподстановкой в VirtualBox, система не загружается корректно и вместо этого отображается минимальная оболочка BASH, вот несколько шагов и рекомендаций для устранения этой проблемы.
Проблема
После перезагрузки виртуальной машины, вы видите minimal BASH-like line editing shell
, что указывает на возможные проблемы с загрузкой GRUB или конфигурированием системы.
Возможные причины
-
Неправильная конфигурация GRUB: Одной из основных причин этой проблемы является некорректная настройка файла
grub.cfg
. Необходимо убедиться, что параметры загрузки указывают на существующие файлы ядра и инициализации. -
Ошибки в файле конфигурации: Убедитесь в наличии всех необходимых файлов в образе и их правильном указании в конфигурации.
-
Проблемы с ISO-образом: Иногда проблемы могут возникать из-за неправильного создания ISO-образа, что приводит к отсутствию необходимых компонентов.
-
Проблемы с исполняемыми файлами: Убедитесь, что файлы
vmlinuz
иinitrd
действительно существуют в ожидаемых директориях.
Шаги для устранения проблем
-
Проверка файла
grub.cfg
:Проверьте следующий пример конфигурации:
set timeout=30 loadfont unicode set menu_color_normal=white/black set menu_color_highlight=black/light-gray menuentry "Try or Install Ubuntu Server" { set gfxpayload=keep linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ --- initrd /casper/initrd }
Убедитесь, что все пути указаны правильно и соответствуют структуре вашего ISO.
-
Проверка наличия и целостности файлов:
Убедитесь, что файлы
vmlinuz
иinitrd
находятся в папке/casper/
вашего образа:ls /casper/
Если файлы отсутствуют, вам нужно снова создать ISO.
-
Создание нового ISO-образа:
Если изменения в конфигурации не помогли, создайте образ заново, следуя более надежной процедуре:
- Используйте команду
xorriso
для создания ISO, как указано в ваших источниках. - Убедитесь, что вы правильно указали все параметры и файлы.
- Используйте команду
-
Проверка результатов установки:
Если после всех вышеперечисленных шагов проблема не была решена, проверьте, какие сообщения появляются в минимальной оболочке. Сообщения могут дать подсказки о том, что именно пошло не так.
-
Проверка логов:
Попробуйте обратиться к логам установщика, если они доступны. Логи могут предложить дополнительную информацию о возможных сбоях в процессе загрузки.
Заключение
Получение минимальной оболочки BASH после перезагрузки Ubuntu 22.04 в VirtualBox чаще всего связано с проблемами в конфигурации GRUB или отсутствующими файлами. Следуя предложенным рекомендациям и проверкам, вы сможете диагностировать и исправить ошибку, обеспечив успешный запуск вашей системы.
Помните, что для успешного завершения установки важно внимательно следить за создаваемыми файлами, их расположением и правильной конфигурацией. Надеюсь, это руководство окажется полезным длявы решения вашей проблемы.