virtualbox 中的 Kickstart 文件无法启动

virtualbox 中的 Kickstart 文件无法启动

我想编写一个 bash 脚本,该脚本使用自定义的 kickstart 文件创建 Scientific Linux 7.2 iso,创建一个新的 VirtualBox VM,并将该 iso 安装到该 VM 上。

我有两个脚本,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以便引导过程不会查找 kickstart 文件,则 VM 会毫无问题地引导到 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 在大约 3 秒内出现 4 次,然后大约 1.5 分钟后出现超时警告。

我认为我的问题是由错误的启动文件或未正确找到该文件引起的。我尝试了一些来自网络的 RHEL 7 kickstart 示例文件,试图确定这是否是第一个问题,但没有任何运气。我想知道的是下一步调试虚拟机启动失败的原因,或者我的问题是什么。一旦我有一些东西可以工作,我计划编辑 kickstart 文件以最终得到我真正想要的系统,但我必须先让一些东西工作。

答案1

事实证明这是一个相当简单(愚蠢)的错误。在文件内部,在中的命令isolinux.cfg修改的同一行上,有一个键/值对。在我在网上找到的有关创建启动 ISO 的教程中,大约有一半的命令包含选项或类似的内容,但没有解释此选项的重要性。我不在乎我的 CD 叫什么,因为它是临时的,所以我忽略了它。sedcreateKSISO.shroot=live:CDLABEL=SL-72-x86_64-LiveCDmkisofs-V "Your CD Name Here"

但是,要使创建的 ISO 可引导,root标签和 CD 名称必须匹配。如果不是,isolinux 启动将无法找到要从 Live CD 启动的操作系统。对此的快速解决方法是我只需将已存在于脚本中的选项isolinux.cfg的名称提供给我即可。更合适的答案是创建一个自定义名称,然后在.-VcreateKSISOsedisolinux.cfg

更改此设置后,新创建的 ISO 启动以及脚本中其他位置所做的修改都可以在文件系统中看到。

相关内容