Expect

使用 expect 在 Bhyve 的 FreeBSD 中自動安裝 Alpine Linux

  • January 8, 2022

我正在嘗試在 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 創建它們。

引用自:https://serverfault.com/questions/1089259