Quero escrever um script bash que crie uma iso do Scientific Linux 7.2 com um arquivo kickstart personalizado, crie uma nova VM do VirtualBox e instale a iso nessa VM.
Eu tenho dois scripts installBaseOS.sh
e createKSISO.sh
. Aqui estão ambos:
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
e 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
E finalmente meu arquivo de 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
Se eu comentar o sed
comando createKSISO.cfg
para que o processo de inicialização não procure um arquivo de kickstart, a VM inicializa no CD ao vivo sem problemas, então tenho quase certeza de que estou criando o ISO corretamente (principalmente).
O que acontece se eu adicionar ks=/ks.cfg à inicialização é que recebo 3 linhas no log de inicialização:
[ OK ] Started Show Plymouth Boot Screen.
[ OK ] Reached target Paths.
[ OK ] Reached target Basic System.
Em seguida, ele fica suspenso por alguns minutos antes de começar a receber dracut-initqueue
avisos de tempo limite. Depois disso, chego a um dracut
console e ele me diz para olhar /run/initramfs/rdsosreport.txt
. Não tenho como retirar esse arquivo da VM e ele tem várias centenas de linhas, mas copiei algumas linhas diretamente antes do início dos dracut-initqueue
avisos aparecerem:
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)
O último SIGRTMIN aparece 4 vezes durante cerca de 3 segundos e, em seguida, os avisos de tempo limite aparecem cerca de 1,5 minutos depois.
Acho que meu problema é causado por um arquivo de kickstart incorreto ou por o arquivo não estar sendo encontrado corretamente. Eu tentei vários exemplos de arquivos de kickstart do RHEL 7 na web para tentar descobrir se esse é o primeiro problema, mas não tive sorte. O que eu gostaria de saber é a próxima etapa para depurar por que o kickstart da VM falha ou qual é o meu problema. Assim que tiver algo funcionando, pretendo editar o arquivo kickstart para obter o sistema que realmente quero, mas preciso fazer algo funcionar primeiro.
Responder1
Acabou sendo um erro bastante simples (estúpido). Dentro do isolinux.cfg
arquivo, na mesma linha modificada pelo sed
comando in createKSISO.sh
, existe um par chave/valor root=live:CDLABEL=SL-72-x86_64-LiveCD
. Em cerca de metade dos tutoriais que encontrei online sobre como criar uma ISO com kickstart, o mkisofs
comando incluía as opções -V "Your CD Name Here"
ou algo semelhante, sem nenhuma explicação sobre a importância desta opção. Eu não me importei com o nome do meu CD, já que era temporário, então ignorei isso.
No entanto, para que o ISO criado seja inicializável, o root
rótulo e o nome do CD devem corresponder. Caso contrário, a inicialização do isolinux não poderá encontrar o sistema operacional para inicializar a partir do live CD. A solução rápida para isso foi simplesmente fornecer o nome já presente isolinux.cfg
na -V
opção em meu createKSISO
script. Uma resposta mais apropriada seria criar um nome personalizado e usá-lo sed
para substituí-lo no arquivo isolinux.cfg
.
Alterando isso, o ISO recém-criado é inicializado e as modificações feitas em outras partes dos scripts são vistas no sistema de arquivos.