Файл Kickstart в VirtualBox не загружается

Файл Kickstart в VirtualBox не загружается

Я хочу написать bash-скрипт, который создаст iso-образ Scientific Linux 7.2 с пользовательским файлом kickstart, создаст новую виртуальную машину VirtualBox и установит iso-образ на эту виртуальную машину.

У меня есть два скрипта, installBaseOS.shи createKSISO.sh. Вот оба:

installBaseOS.sh:

#!/bin/sh
set -e

../src/sh/createKSISO.sh
VM='testVM'
ISO=test/boot.iso

VBoxManage createhd --filename=test/$VM.vdi --size=16000 >> test/install.log 2>&1
VBoxManage createvm --name=$VM --ostype="Linux_64" --register >> test/install.log 2>&1

VBoxManage storagectl $VM --name "SATA Controller" --add sata --controller IntelAHCI
VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium test/$VM.vdi

VBoxManage storagectl $VM --name "IDE Controller" --add ide
VBoxManage storageattach $VM --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium $ISO

VBoxManage modifyvm $VM --ioapic on
VBoxManage modifyvm $VM --boot1 dvd --boot2 disk --boot3 none --boot4 none
VBoxManage modifyvm $VM --memory 1024 --vram 128
VBoxManage modifyvm $VM --nic1 bridged --bridgeadapter1 wlo1

VBoxHeadless -s $VM >> test/install.log 2>&1 

и createKSISO.sh:

#!/bin/sh
mkdir test/bootiso
sudo mount -o loop ../bin/SL-72.iso test/bootiso

mkdir test/bootisoks
cp -r test/bootiso/* test/bootisoks/

sudo umount test/bootiso && rmdir test/bootiso

chmod -R u+w test/bootisoks
cp ../src/cfg/ks.cfg test/bootisoks/isolinux

sed -i 's/append\ initrd\=initrd0.img/append initrd=initrd0.img\ ks\=cdrom:\/ks.cfg/' test/bootisoks/isolinux/isolinux.cfg

cd test/bootisoks && mkisofs -o ../boot.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -J -v -T isolinux/. .
cd ../..
rm -r test/bootisoks

И наконец мой файл кикстарта ks.cfg:

auth --enableshadow --enablemd5
install
reboot --eject
eula --agreed
cmdline
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8

logging --level=debug
rootpw testpass
timezone US/New_York
bootloader --location=mbr --boot-drive=sda
clearpart --all --initlabel
part pv.0 --size=1 --grow
volgroup rootvg01 pv.0
logvol / --fstype=ext4 --name=lv01 --vgname=rootvg01 --size=1 --grow

services --enable=NetworkManager,sshd

%packages
@base
@core
%end

Если я закомментирую sedкоманду, createKSISO.cfgчтобы процесс загрузки не искал файл кикстарта, виртуальная машина загрузится с live CD без проблем, поэтому я почти уверен, что создаю ISO правильно (в основном).

Что произойдет, если я добавлю ks=/ks.cfg в загрузку? Я получу 3 строки в журнале загрузки:

[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Reached target Paths.
[ OK ] Reached target Basic System.

Затем он зависает на пару минут, прежде чем я начинаю получать dracut-initqueueпредупреждения о тайм-ауте. После этого я попадаю в dracutконсоль, и она говорит мне посмотреть /run/initramfs/rdsosreport.txt. У меня нет возможности вытащить этот файл из виртуальной машины, и он состоит из нескольких сотен строк, но я скопировал несколько строк непосредственно перед началом появления предупреждений dracut-initqueue:

localhost kernel: sda: unknown partition table
localhost kernel: sd 0:0:0:0: [sda] Attached SCSI disk
localhost systemd[1]: Received SIGRTMIN+20 from PID 357 (plymouthd)

Последний сигнал SIGRTMIN появляется 4 раза в течение примерно 3 секунд, а затем примерно через 1,5 минуты появляются предупреждения о тайм-ауте.

Я думаю, что моя проблема вызвана либо плохим файлом кикстарта, либо файл не найден должным образом. Я перепробовал несколько примеров файлов кикстарта RHEL 7 из сети, чтобы попытаться выяснить, является ли это первой проблемой, но безуспешно. Я хотел бы узнать, что делать дальше, чтобы отладить, почему кикстарт виртуальной машины не удается, или в чем моя проблема. Как только у меня что-то заработает, я планирую отредактировать файл кикстарта, чтобы получить систему, которую я действительно хочу, но сначала мне нужно, чтобы что-то работало.

решение1

Оказалось, что это была довольно простая (глупая) ошибка. Внутри файла isolinux.cfg, на той же строке, которая была изменена командой sedв createKSISO.sh, есть пара ключ/значение root=live:CDLABEL=SL-72-x86_64-LiveCD. Примерно в половине руководств по созданию ISO на кикстартере, которые я нашел в сети, mkisofsкоманда включала опции -V "Your CD Name Here"или что-то подобное, без объяснения важности этой опции. Мне было все равно, как назывался мой CD, поскольку он был временным, поэтому я проигнорировал это.

Однако для того, чтобы созданный ISO был загрузочным, rootметка и имя CD должны совпадать. В противном случае загрузчик isolinux не сможет найти ОС для загрузки с live CD. Быстрое решение этой проблемы — я просто указал имя, уже указанное в isolinux.cfgопции -Vв моем createKSISOскрипте. Более подходящим ответом было бы создать собственное имя, а затем использовать sedего для замены в isolinux.cfg.

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

Связанный контент