Минимальная оболочка BASH отображается после перезагрузки Ubuntu 22.04 Autoinstall ISO в VirtualBox

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

Я следовал [по этой ссылке][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 или конфигурированием системы.

Возможные причины

  1. Неправильная конфигурация GRUB: Одной из основных причин этой проблемы является некорректная настройка файла grub.cfg. Необходимо убедиться, что параметры загрузки указывают на существующие файлы ядра и инициализации.

  2. Ошибки в файле конфигурации: Убедитесь в наличии всех необходимых файлов в образе и их правильном указании в конфигурации.

  3. Проблемы с ISO-образом: Иногда проблемы могут возникать из-за неправильного создания ISO-образа, что приводит к отсутствию необходимых компонентов.

  4. Проблемы с исполняемыми файлами: Убедитесь, что файлы vmlinuz и initrd действительно существуют в ожидаемых директориях.

Шаги для устранения проблем

  1. Проверка файла 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.

  2. Проверка наличия и целостности файлов:

    Убедитесь, что файлы vmlinuz и initrd находятся в папке /casper/ вашего образа:

    ls /casper/

    Если файлы отсутствуют, вам нужно снова создать ISO.

  3. Создание нового ISO-образа:

    Если изменения в конфигурации не помогли, создайте образ заново, следуя более надежной процедуре:

    • Используйте команду xorriso для создания ISO, как указано в ваших источниках.
    • Убедитесь, что вы правильно указали все параметры и файлы.
  4. Проверка результатов установки:

    Если после всех вышеперечисленных шагов проблема не была решена, проверьте, какие сообщения появляются в минимальной оболочке. Сообщения могут дать подсказки о том, что именно пошло не так.

  5. Проверка логов:

    Попробуйте обратиться к логам установщика, если они доступны. Логи могут предложить дополнительную информацию о возможных сбоях в процессе загрузки.

Заключение

Получение минимальной оболочки BASH после перезагрузки Ubuntu 22.04 в VirtualBox чаще всего связано с проблемами в конфигурации GRUB или отсутствующими файлами. Следуя предложенным рекомендациям и проверкам, вы сможете диагностировать и исправить ошибку, обеспечив успешный запуск вашей системы.

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

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

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