Ich möchte ein Bash-Skript schreiben, das ein Scientific Linux 7.2-ISO mit einer benutzerdefinierten Kickstart-Datei erstellt, eine neue VirtualBox-VM erstellt und das ISO auf dieser VM installiert.
Ich habe zwei Skripte, installBaseOS.sh
und createKSISO.sh
. Hier sind beide:
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
Und 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
Und schließlich meine Kickstart-Datei 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
Wenn ich den Befehl auskommentiere createKSISO.cfg
, sodass der Startvorgang nicht nach einer Kickstart-Datei sucht, startet die VM ohne Probleme in die Live-CD. Daher bin ich ziemlich sicher, dass ich das ISO (größtenteils) richtig erstelle.
Wenn ich ks=/ks.cfg zum Booten hinzufüge, erscheinen im Boot-Protokoll drei Zeilen:
[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Reached target Paths.
[ OK ] Reached target Basic System.
Dann hängt es ein paar Minuten, bevor ich Timeout-Warnungen bekomme dracut-initqueue
. Danach gelange ich zu einer dracut
Konsole und sie sagt mir, ich solle mir Folgendes ansehen . Ich habe keine Möglichkeit, diese Datei von der VM zu holen, und sie ist mehrere hundert Zeilen lang, aber ich habe die paar Zeilen direkt vor dem Auftreten der Warnungen /run/initramfs/rdsosreport.txt
kopiert :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)
Dieses letzte SIGRTMIN wird viermal im Verlauf von etwa 3 Sekunden angezeigt, dann erscheinen die Timeout-Warnungen etwa 1,5 Minuten später.
Ich denke, mein Problem wird entweder durch eine fehlerhafte Kickstart-Datei verursacht oder die Datei wird nicht richtig gefunden. Ich habe eine Reihe von Beispiel-RHEL-7-Kickstart-Dateien aus dem Internet ausprobiert, um herauszufinden, ob es das erste Problem ist, aber ich hatte kein Glück. Was ich wissen möchte, ist entweder der nächste Schritt zum Debuggen, warum der Kickstart der VM fehlschlägt, oder was mein Problem ist. Sobald ich etwas zum Laufen gebracht habe, habe ich vor, die Kickstart-Datei zu bearbeiten, um das System zu erhalten, das ich eigentlich haben möchte, aber zuerst muss ich etwas zum Laufen bringen.
Antwort1
Es stellte sich heraus, dass es sich um einen ziemlich einfachen (dummer) Fehler handelte. In der Datei gibt es isolinux.cfg
in derselben Zeile, die durch den sed
Befehl in geändert wurde, ein Schlüssel/Wert-Paar . In etwa der Hälfte der Tutorials, die ich online zum Erstellen eines Kickstart-ISO gefunden habe, enthielt der Befehl die Optionen oder etwas Ähnliches, ohne dass die Bedeutung dieser Option erklärt wurde. Da es sich um eine temporäre CD handelte, war mir der Name egal, also habe ich dies ignoriert.createKSISO.sh
root=live:CDLABEL=SL-72-x86_64-LiveCD
mkisofs
-V "Your CD Name Here"
Damit das erstellte ISO jedoch bootfähig ist, root
müssen Label und CD-Name übereinstimmen. Andernfalls kann der Isolinux-Boot das Betriebssystem nicht finden, um von der Live-CD zu booten. Die schnelle Lösung hierfür war, dass ich einfach den Namen, der bereits in der isolinux.cfg
Option -V
in meinem createKSISO
Skript enthalten war, angegeben habe. Eine passendere Lösung wäre, einen benutzerdefinierten Namen zu erstellen und sed
ihn dann in der zu ersetzen isolinux.cfg
.
Wenn Sie dies ändern, wird das neu erstellte ISO gebootet und die an anderer Stelle in den Skripten vorgenommenen Änderungen werden im Dateisystem angezeigt.