我正在尝试在 FreeBSD 下的 vm-bhyve 中自动安装 Alpine Linux,并且预计在启动菜单超时并启动 Alpine Linux 安装后不久就会死机。
#!/usr/bin/env expect
spawn vm install -f alpine alpine.iso # shortened for brevity
expect "localhost login:"
send "root\r"
...
这会导致以下错误:
"while executing
"send "root\r"
我怀疑每当屏幕清除并开始启动时,会让人误以为程序已经完成?结果,脚本就死了。
我以前从未以这种方式编写期望,是否可以用期望来做到这一点?
我还尝试在生成启动并立即进入来宾控制台的 vm install cmd 之前设置全局超时,但这并没有改变任何内容,因此我将其从上面的脚本中排除。在同一个地方睡觉并没有帮助,它只是延迟了启动(以及随后的失败,我为睡眠设置的数量)。
编辑:我正在尝试在后台启动安装程序,休眠 30 秒,然后附加控制台。此时,Expect应该可以工作了。
我在这两种情况下都可以正常工作(vm install -f 并使用 vm 控制台连接到正在运行的 VM)。
就我而言,问题是我从新配置开始,而新配置的设置无效(PCI 直通)。我以为我是在没有预料到的情况下启动的,并且可以正常工作;但是,我已经重新映像了机器并且我的配置被覆盖了。
使用 autoexpect 可以让我捕捉到更多我本来可以拥有的细节,并且是准备期望脚本的好方法。
现在,我的过程是执行 freebsd 安装,然后引导进入系统,并在启动时检查 VM 是否存在,如果不存在,则使用 expect 创建它们。