カスタム キックスタート ファイルを使用して Scientific Linux 7.2 iso を作成し、新しい VirtualBox VM を作成し、その VM に iso をインストールする bash スクリプトを作成したいと考えています。
スクリプトが 2 つあります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
、VM は問題なくライブ 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 分後にタイムアウト警告が表示されます。
私の問題は、キックスタート ファイルが不正であるか、ファイルが正しく見つからないことのどちらかが原因であると思います。これが最初の問題であるかどうかを調べるために、Web からいくつかの RHEL 7 キックスタート ファイルの例を試しましたが、うまくいきませんでした。知りたいのは、VM のキックスタートが失敗する理由をデバッグするための次のステップ、または私の問題が何であるかです。何かが機能するようになったら、キックスタート ファイルを編集して、実際に必要なシステムにするつもりですが、まず何かを機能させる必要があります。
答え1
それは、かなり単純な(愚かな)間違いであることが判明しました。 ファイル内の、コマンドisolinux.cfg
によって変更された同じ行に、キー/値のペアがあります。 キックスタート ISO の作成に関するオンラインで見つけたチュートリアルの約半数では、 コマンドにオプションまたは同様のものが含まれていましたが、このオプションの重要性についての説明はありませんでした。 CD は一時的なものだったので、名前が何であっても気にしませんでした。そのため、これを無視しました。sed
createKSISO.sh
root=live:CDLABEL=SL-72-x86_64-LiveCD
mkisofs
-V "Your CD Name Here"
ただし、作成された ISO を起動可能にするには、root
ラベルと CD 名が一致している必要があります。一致していないと、isolinux ブートはライブ CD から起動する OS を見つけることができません。この問題の簡単な解決策は、スクリプトのオプションisolinux.cfg
に、すでに にある名前を指定することでした。より適切な解決策は、カスタム名を作成し、 を使用してでそれを置き換えることです。-V
createKSISO
sed
isolinux.cfg
これを変更すると、新しく作成された ISO が起動し、スクリプトの他の場所で行われた変更がファイル システムに表示されます。