无头服务器上的 VBox:在没有 RDP 的情况下安装 Linux

无头服务器上的 VBox:在没有 RDP 的情况下安装 Linux

我有脚本在远程无头服务器上设置无头机器,通过 ssh 连接。它将创建机器,附加磁盘和archiso,并启动安装。

另外,我有一个脚本来设置已配置的 Arch,我在其提示的 shell 中启动它,之前由 scp 拉取。

但我想消除它们之间的三个中间步骤。在archiso的grub中按Enterx64 install,等待root shell登录,执行scp user@server:~/arch-install . && ./arch-install

我可以通过 RDP 执行所有这些操作。但这很烦人,能够自动化所有安装过程

当然还有话题无头 Linux 安装。但我不想重新打包 archiso,因为我只需要自动化这 3 个步骤。也许 VBox 支持类似的东西expect

答案1

我找到了实现默认archiso映像的自动来宾安装的方法,仅控制主机,但是有点麻烦。您需要将 VBox 本机功能与通过 ssh 公开的串行端口结合起来。

启用 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

向 guest 发送命令以在内核启动时启用串行端口:

# 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"

通过套接字以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"  

如果还有一些不清楚的地方,您可以在以下位置查看完整的脚本:吉图布

相关内容