Arquivo Kickstart no VirtualBox não inicializando

1

Eu quero escrever um script bash que crie uma iso do Scientific Linux 7.2 com um arquivo de 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 as duas coisas:

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 comando sed em createKSISO.cfg para que o processo de inicialização não esteja procurando por um arquivo de kickstart, a VM será inicializada no CD ao vivo sem problema, por isso estou bastante certo de que estou criando o ISO corretamente (principalmente).

O que acontece se eu adicionar o ks = / ks.cfg ao boot é que eu 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 é interrompido por alguns minutos antes de eu começar a receber dracut-initqueue timeout warnings. Depois disso eu chego em um console dracut e ele me diz para olhar para /run/initramfs/rdsosreport.txt . Eu não tenho nenhuma maneira de obter esse arquivo da VM, e é várias centenas de linhas de comprimento, mas eu copiei as poucas linhas diretamente antes do início do dracut-initqueue avisos aparecem:

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)

Esse último SIGRTMIN aparece 4 vezes em cerca de 3 segundos e, em seguida, os avisos de tempo limite aparecem cerca de 1,5 minutos depois.

Eu acho que o meu problema é causado por um arquivo kickstart ruim, ou o arquivo não está sendo encontrado corretamente. Eu tentei vários exemplos de arquivos de kickstart do RHEL 7 da web para tentar descobrir se é o primeiro problema, mas não tive sorte. O que eu gostaria de saber é o próximo passo para depurar porque o kickstart da VM falha ou qual é o meu problema. Uma vez que eu tenha algo funcionando, planejo editar o arquivo de kickstart para terminar com o sistema que eu realmente quero, mas tenho que fazer algo funcionar primeiro.

    
por Godric Seer 29.10.2016 / 22:52

1 resposta

0

Isso se tornou um erro bastante simples (estúpido). Dentro do arquivo isolinux.cfg , na mesma linha modificada pelo comando sed em createKSISO.sh , há um par chave / valor root=live:CDLABEL=SL-72-x86_64-LiveCD . Em cerca de metade dos tutoriais encontrados on-line na criação de um ISO iniciado pelo kickstart, o comando mkisofs incluiu as opções -V "Your CD Name Here" ou algo semelhante, sem nenhuma explicação sobre a importância dessa opção. Eu não ligo para o que meu CD foi chamado desde que foi temporário, então eu ignorei isso.

No entanto, para que o ISO criado seja inicializável, o rótulo root e o nome do CD devem corresponder. Se não a inicialização do isolinux não pode encontrar o sistema operacional para inicializar a partir do live CD. A solução rápida para isso é que eu simplesmente forneci o nome que já estava na opção isolinux.cfg para o -V no meu script createKSISO . Uma resposta mais apropriada seria criar um nome personalizado e usar sed para substituí-lo no isolinux.cfg .

Ao mudar isso, o recém-criado ISO é inicializado, e as modificações feitas em outros locais nos scripts são vistas no sistema de arquivos.

    
por 17.11.2016 / 14:53