Scripting

無頭伺服器上的 VBox:在沒有 RDP 的情況下安裝 linux

  • May 22, 2015

我有腳本在遠端無頭伺服器上設置無頭機器,通過 ssh 連接。它將創建機器,附加磁碟和archiso,並啟動安裝。

另外,我有腳本來設置已配置的 Arch,我在其提示的 shell 中啟動它,之前由 scp 拉取。

但是我想消除它們之間的三個中間步驟。在archiso的grub中按下Enterx64安裝,等待登錄root shell,執行scp user@server:~/arch-install . && ./arch-install

我可以通過 RDP 執行的所有這些操作。但令人惱火的是,能夠自動化除此之外的所有安裝過程。

當然,還有話題Headless linux install。但我不希望重新打包 archiso,因為我只需要自動化這 3 個步驟。也許 VBox 支持類似的東西expect

我已經找到了實現預設archiso映像的自動來賓安裝的方法,只控制主機,但是它有點麻煩。您需要通過 ssh 將 VBox 原生功能與暴露的串列埠結合起來。

為 VBox 啟用虛擬串口支持:

VBoxManage modifyvm "$VNM" --uart1 0x3F8 4 --uartmode1 server "$SERIAL"

啟動 vbox:

VBoxManage startvm "$VNM"
# Wait for boot menu. WARNING: May be affected by problem with timing!
sleep 8

向客戶機發送命令以在核心啟動時啟用串列埠:

# 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

通過串列管道登錄到 shell。我用過netcat,但任何一個都可以。接下來的命令顯示瞭如何在本地使用套接字(但您可以重定向到 ssh):

sleep 25
printf "root\n" | nc -q 2 -U "$SERIAL"

通過 socket 將安裝腳本作為 heredoc 發送。它比我使用scp. 但是,您也可以scp通過串列執行。

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

開始安裝:

printf "\nchmod u+x ~/arch-setup\n" | nc -U "$SERIAL"      # Make executable
printf "\ncd ~ && ./arch-setup --new\n" | nc -U "$SERIAL"  # Start install

安裝的非互動式監控(使用 Ctrl-C 可以安全地中斷監控而不會影響安裝):

nc -d -U "$SERIAL"  

如果還有不清楚的地方,可以在Github看到完整的腳本

引用自:https://unix.stackexchange.com/questions/194386