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
最後是我的 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
更合適的答案是創建一個自定義名稱,然後sed
在isolinux.cfg
.改變這一點,新創建的 ISO 引導,以及在腳本其他地方所做的修改都可以在文件系統中看到。