Scientific-Linux

virtualbox 中的 Kickstart 文件無法啟動

  • November 17, 2016

我想編寫一個 bash 腳本,它使用自定義的 kickstart 文件創建一個 Scientific Linux 7.2 iso,創建一個新的 VirtualBox VM,並將 iso 安裝到該 VM 上。

我有兩個腳本,installBaseOS.shcreateKSISO.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

最後是我的 kickstart 文件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. 我沒有辦法從 VM 中獲取該文件,它有幾百行長,但我在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 分鐘後出現超時警告。

我認為我的問題是由錯誤的 kickstart 文件引起的,或者沒有正確找到該文件。我已經嘗試了一些來自網路的範例 RHEL 7 kickstart 文件,試圖確定它是否是第一個問題,但沒有任何運氣。我想知道的是下一步調試 VM 啟動失敗的原因,或者我的問題是什麼。一旦我有一些工作,我計劃編輯 kickstart 文件以最終得到我真正想要的系統,但我必須先讓一些工作正常。

結果證明這是一個相當簡單(愚蠢)的錯誤。在文件內部,在由in 命令isolinux.cfg修改的同一行上,有一個鍵/值對。在我在網上找到的關於創建 kickstarted ISO 的教程中,大約有一半,該命令包含選項或類似內容,但沒有解釋此選項的重要性。我不在乎我的 CD 叫什麼,因為它是臨時的,所以我忽略了這一點。sed``createKSISO.sh``root=live:CDLABEL=SL-72-x86_64-LiveCD``mkisofs``-V "Your CD Name Here"

但是,要使創建的 ISO 可引導,root標籤和 CD 名稱必須匹配。如果不是,isolinux 引導無法找到要從 live CD 引導的作業系統。對此的快速解決方法是我只是在腳本isolinux.cfg中的-V選項中提供了名稱。createKSISO更合適的答案是創建一個自定義名稱,然後sedisolinux.cfg.

改變這一點,新創建的 ISO 引導,以及在腳本其他地方所做的修改都可以在文件系統中看到。

引用自:https://unix.stackexchange.com/questions/319793