Scripting
無頭伺服器上的 VBox:在沒有 RDP 的情況下安裝 linux
我有腳本在遠端無頭伺服器上設置無頭機器,通過 ssh 連接。它將創建機器,附加磁碟和archiso,並啟動安裝。
另外,我有腳本來設置已配置的 Arch,我在其提示的 shell 中啟動它,之前由 scp 拉取。
但是我想消除它們之間的三個中間步驟。在archiso的grub中按下
Enter
x64安裝,等待登錄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看到完整的腳本