Преобразование файла Kickstart с CD в USB

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

У меня есть пользовательский ISO-образ установки RHEL7, который был создан путем копирования файлов из загруженного ISO-образа RHEL7 и добавления множества настраиваемых файлов kickstart и других файлов. Целью является создание одного диска для установки нескольких различных конфигураций RHEL (каждая из отдельного файла kickstart). Когда этот ISO-образ записан на DVD, все работает хорошо. Теперь, однако, я хотел бы иметь возможность производить ту же установку с USB-накопителя.

Итак, сначала что имеется.

Установка с DVD
Во-первых, чтобы позволить выбрать различные файлы kickstart, в isolinux/isolinux.cfg есть настраиваемый параметр загрузки для каждого файла kickstart:
label linux
menu label Option 1
menu default
kernel vmlinuz
append xdriver=vesa nomodeset initrd=initrd.img ks=cdrom:/config/opt1/anaconda-ks-option1.cfg

Одна запись для каждого из предоставленных файлов kickstart. Это позволяет запускать отдельные файлы kickstart, каждый из которых имеет следующую настройку:
firewall –disabled
install
user –name=username –password=password
cdrom
rootpw ==iscrypted password
# дополнительные параметры

%pre –log=/root/ks-pre.log
# Выполняет скрипты на DVD для определения целевого HDD и других вещей
sh /mnt/install/repo/config/common/do_stuff.sh
%end

%post –log=/root/ks-post.log
mkdir -p /media/dvd
mount -t iso9660 -o ro /dev/cdrom /media/dvd
# Копирует файлы с DVD и выполняет различные скрипты
umount /media/dvd
rmdir /media/dvd
eject /dev/sr0
%end

%packages
# список всех необходимых пакетов
%end

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

Установка с USB
Это в основном то же самое, что и выше, только настроенное для отражения источника USB (HDD), а не DVD. isolinux/isolinux.cfg обновлен, чтобы отразить источник HD.
label linux
menu label Option 1
menu default
kernel vmlinuz
append xdriver=vesa nomodeset initrd=initrd.img ks=hd:LABEL=MY_USB_LABEL:/config/opt1/anaconda-ks-option1.cfg

где ISO, который я создаю, имеет метку MY_USB_LABEL. Файлы kickstart остаются без изменений, за исключением снова изменения ссылки с DVD на HDD:
firewall –disabled
install
user –name=username –password=password
harddrive –partition=LABEL=MY_USB_LABEL –dir=/ # заменяет опцию cdrom
rootpw ==iscrypted password
# дополнительные параметры

%pre –log=/root/ks-pre.log
# Выполняет скрипты на DVD для определения целевого HDD и других вещей
# БЕЗ ИЗМЕНЕНИЙ ЗДЕСЬ!
sh /mnt/install/repo/config/common/do_stuff.sh
%end

%post –nochroot –log=/mnt/sysimage/root/ks-post.log # Изменить на nochroot
cd /mnt/install/repo # Похоже, это место, где находятся содержимое USB
# Копирует файлы из каталога и выполняет различные скрипты

chroot /mnt/sysimage
# НОВОЕ – Выполняет шаги, которые зависят от нахождения в установленной среде
%end

%packages
# список всех необходимых пакетов
# БЕЗ ИЗМЕНЕНИЙ ЗДЕСЬ!
%end

Итак, подводя итоги, единственные изменения, которые я внес, это:

isolinux/isolinux.cfg – изменил ks=cdrom:/ на ks=hd:LABEL=:/
kickstart – изменил источник установки cdrom на harddrive –partition=LABEL= –dir=/
kickstart – секция post изменена, чтобы не быть chroot и загружать файлы из /mnt/install/repo, а не /media/dvd
kickstart – добавлен ручной chroot /mnt/sysimage для %post для выполнения скриптов, которые зависят от нахождения в установленной среде (чтобы минимизировать изменения)

Таким образом, при всем этом я вижу, что kickstart срабатывает, однако он не удается определить источник установки. Если я выбираю его в установщике, он даже не показывает USB как подходящий источник, предоставляя только вариант использования чего-то удаленного. Локальные носители или эквиваленты недоступны. В моей ситуации я хочу полагаться на локальные носители, так как наши целевые системы оффлайн и мы не можем рассчитывать на доступность какой-либо формы удаленного репозитория.
Если это интересно, я генерирую ISO/USB, выполняя следующие команды:
mkisofs -quiet -o test.iso -V MY_USB_LABEL \
-R -J -joliet-long -l -T \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-eltorito-alt-boot \
-e images/efiboot.img \
-no-emul-boot \
-graft-points iso_dir/
isohybrid -u test.iso
dd if=test.iso of=/dev/sda && sync

Примечание: Сначала я сосредоточусь на том, чтобы заставить работать легаси-загрузку, прежде чем переключать внимание на EFI. Я предполагаю, что единственное изменение будет обновление записи inst.ks=cdrom в EFI/BOOT/grub.cfg аналогичным образом (inst.ks=hd:LABEL=MY_USB_LABEL).

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

Конвертация файла Kickstart с CD в USB

Если вы хотите создать установочный USB-накопитель на базе вашей кастомной ISO-образа RHEL7, основываясь на уже существующей конфигурации, вам необходимо выполнить несколько шагов для корректной настройки файлов и конфигураций. Это позволит вам установить множество различных конфигураций RHEL с использованием файлов Kickstart, которые уже успешно работают с DVD.

Шаг 1: Подготовка конфигурационного файла isolinux.cfg

Первым делом, обновите файл конфигурации загрузчика isolinux/isolinux.cfg. Ваша задача здесь – изменить ссылку с CD-ROM на USB-накопитель. Для этого замените:

ks=cdrom:/config/opt1/anaconda-ks-option1.cfg

на

ks=hd:LABEL=MY_USB_LABEL:/config/opt1/anaconda-ks-option1.cfg

Это изменение даст системе знать о том, что она должна искать файлы Kickstart на USB-накопителе, у которого задана метка MY_USB_LABEL.

Шаг 2: Изменение файла Kickstart

В файле Kickstart следует также произвести изменения, чтобы указать на использование USB-накопителя как источника установки. Замените строку:

cdrom

на:

harddrive --partition=LABEL=MY_USB_LABEL --dir=/

Это обеспечит правильное указание на источник установки из USB-накопителя.

Шаг 3: Изменение области %post

Область %post также требует модификации. Вместо использования hchroot для доступа к системе назначения, используйте следующую строчку для выполнения команд в рабочем окружении:

%post --nochroot --log=/mnt/sysimage/root/ks-post.log

Затем скопируйте файлы с USB следующим образом:

cd /mnt/install/repo

Для выполнения команд, которые требуют окружение установленной системы, добавьте:

chroot /mnt/sysimage

Это сделает ваш скрипт более эффективным и совместимым с установкой из USB.

Шаг 4: Создание ISO-образа

При создании ISO-образа с помощью команды mkisofs, вы уже правильно использовали нужные параметры. Кроме того, убедитесь, что вы добавляете isohybrid, чтобы ваш ISO-образ можно было использовать и для создания USB.

Используйте следующую команду:

mkisofs -quiet -o test.iso -V MY_USB_LABEL \
        -R -J -joliet-long -l -T \
        -b isolinux/isolinux.bin -c isolinux/boot.cat \
        -no-emul-boot \
        -boot-load-size 4 \
        -boot-info-table \
        -eltorito-alt-boot \
        -e images/efiboot.img \
        -no-emul-boot \
        -graft-points iso_dir/

isohybrid -u test.iso 
dd if=test.iso of=/dev/sda && sync

Шаг 5: Проверка установки

После создания USB-накопителя и изменений в конфигурациях, проверьте, доступен ли ваш USB-накопитель как источник установки. Если он не отображается, убедитесь, что ваш BIOS настроен на загрузку с USB и что сам накопитель корректно отформатирован.

Заключение

Следуя инструкциям выше, вы сможете адаптировать вашу установочную ISO для загрузки и установки с USB-накопителя. Это позволит значительно упростить процесс установки RHEL, особенно в ситуациях, когда ваши системы находятся в оффлайн-режиме, и доступ к удаленным репозиториям отсутствует. Если вы столкнетесь с дополнительными проблемами, рекомендуется проверить лог-файлы, созданные во время установки, чтобы понять, где могут быть ошибки.

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

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