사용자 정의 kickstart 파일을 사용하여 Scientific Linux 7.2 iso를 생성하고, 새 VirtualBox VM을 생성하고, iso를 VM에 설치하는 bash 스크립트를 작성하고 싶습니다.
두 개의 스크립트가 있으며 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
명령을 주석 처리하면 VM이 아무런 문제 없이 Live CD로 부팅되므로 ISO를 올바르게 생성하고 있다고 확신합니다(대부분의 경우). createKSISO.cfg
부분).
ks=/ks.cfg를 시작에 추가하면 어떻게 됩니까? 시작 로그에 다음 세 줄이 있습니다.
[ 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 킥스타트 샘플 파일을 시도했지만 운이 없었습니다. 내가 알고 싶은 것은 가상 머신 디버깅의 다음 단계가 시작되지 못한 이유 또는 내 문제가 무엇인지입니다. 일단 작동하는 것이 있으면 킥스타트 파일을 편집하여 실제로 원하는 시스템을 얻을 계획이지만 먼저 뭔가 작동하도록 해야 합니다.
답변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 boot는 Live CD에서 부팅할 운영 체제를 찾을 수 없습니다. 이에 대한 빠른 수정 방법은 스크립트에 이미 존재하는 옵션 isolinux.cfg
의 이름을 지정하는 것입니다. 더 적절한 대답은 사용자 정의 이름을 만든 다음 .-V
createKSISO
sed
isolinux.cfg
이 설정을 변경하면 새로 생성된 ISO 부팅이 파일 시스템에 표시될 뿐만 아니라 스크립트의 다른 곳에서 수정된 사항도 표시됩니다.