我有脚本在远程无头服务器上设置无头机器,通过 ssh 连接。它将创建机器,附加磁盘和archiso,并启动安装。
另外,我有一个脚本来设置已配置的 Arch,我在其提示的 shell 中启动它,之前由 scp 拉取。
但我想消除它们之间的三个中间步骤。在archiso的grub中按Enter
x64 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"
如果还有一些不清楚的地方,您可以在以下位置查看完整的脚本:吉图布