VBox no servidor headless: instale o linux sem o RDP

1

Eu tenho script para configurar a máquina sem cabeça no servidor headless remoto, conectado por ssh. Ele criará uma máquina, anexará disco e archiso e iniciará a instalação.

Além disso, tenho um script para configurar o Arch configurado, que eu inicio em seu shell solicitado, previamente puxado por scp.

Mas há três etapas intermediárias entre elas que gostaria de eliminar. Pressionando Enter no x64 instala no grub do archiso, esperando pelo login no shell do root, executando scp user@server:~/arch-install . && ./arch-install

Todas essas ações que posso fazer por meio do RDP. Mas é irritante poder automatizar todo o processo de instalação ao lado desse .

Naturalmente, há o tópico Headless linux install . Mas eu preferiria não reembalar archiso, como eu preciso automatizar apenas esses 3 passos. Talvez o VBox suporte algo como expect ?

    
por amerlyq 04.04.2015 / 13:49

1 resposta

0

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

    
por 22.05.2015 / 21:04