Arquivo Kickstart na caixa virtual falhando ao inicializar

Arquivo Kickstart na caixa virtual falhando ao inicializar

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.she 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 sedcomando createKSISO.cfgpara 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-initqueueavisos de tempo limite. Depois disso, chego a um dracutconsole 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-initqueueavisos 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.cfgarquivo, na mesma linha modificada pelo sedcomando 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 mkisofscomando 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 rootró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.cfgna -Vopção em meu createKSISOscript. Uma resposta mais apropriada seria criar um nome personalizado e usá-lo sedpara 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.

informação relacionada