Eu encontrei o caminho para implementar a instalação automática de convidado da imagem archiso padrão, controlando apenas a máquina host, no entanto, é um pouco complicado. Você precisa combinar a funcionalidade nativa do VBox com a porta serial exposta sobre o ssh.
Ativar suporte a porta serial virtual para VBox:
VBoxManage modifyvm "$VNM" --uart1 0x3F8 4 --uartmode1 server "$SERIAL"
Iniciar o vbox:
VBoxManage startvm "$VNM"
# Wait for boot menu. WARNING: May be affected by problem with timing!
sleep 8
Envie comandos para o convidado para ativar a porta serial na inicialização do kernel:
# Press <Tab> to edit boot string, add 'console=ttyS0', then <Enter>
VBoxManage controlvm "$VNM" keyboardputscancode 0f 8f 39 b9 # <Tab><Space>
VBoxManage controlvm "$VNM" keyboardputscancode 2e ae 18 98 31 b1 1f 9f 18 98 26 a6 12 92 # 'console'
VBoxManage controlvm "$VNM" keyboardputscancode 0d 8d 14 94 14 94 15 95 36 1f 9f b6 0b 8b # '=ttyS0'
VBoxManage controlvm "$VNM" keyboardputscancode 1c 9c # Enter
Faça login no shell por meio do pipe serial. Eu usei netcat
, mas ou vai funcionar. Os próximos comandos mostram como trabalhar com o socket localmente (mas você pode redirecionar para o ssh):
sleep 25
printf "root\n" | nc -q 2 -U "$SERIAL"
Envie o script de instalação como heredoc over socket. Foi mais simples que minha abordagem principal com scp
. Hovewer você pode executar scp
over serial também.
printf "\n"'cat - <<-'"'EOFARCHSETUP' > ~/arch-setup\n" | nc -U "$SERIAL"
cat "$SCRIPT_DIR/arch-setup" | nc -U "$SERIAL" # Send text content of setup file
printf "\nEOFARCHSETUP\n" | nc -U "$SERIAL" # End of heredoc file
Iniciar a instalação:
printf "\nchmod u+x ~/arch-setup\n" | nc -U "$SERIAL" # Make executable
printf "\ncd ~ && ./arch-setup --new\n" | nc -U "$SERIAL" # Start install
Monitoramento não interativo da instalação (seguro com Ctrl-C para interromper o monitoramento, sem afetar a instalação):
nc -d -U "$SERIAL"
Se houver momentos obscuros, você poderá ver os scripts completos em Github