Mac-Osx

如何從 OS X 10.9+ 上的腳本中選擇 BSDP NetBoot 映像?

  • January 8, 2015

背景: BSDP 是 Apple 的協議,用於在網路上的 NetBoot 伺服器上發現和選擇(不要與 PC 風格的 PXE 引導混淆)。規格(Word 文件)。長話短說 - 它是位於 DHCP 之上的協議,使用 INFORM 消息在客戶端和伺服器之間傳遞資訊。

我需要自動化一個測試機器將在網路上引導不同引導映像的環境。最簡單的方法(對我來說)是從客戶端上執行的腳本執行啟動映像選擇。從伺服器和網路的角度來看,這相當於在系統首選項 -> 啟動盤中選擇啟動映像

我找到了對 bsdpc 的引用,這是 Apple 的一個舊實用程序,它不再是任何標準 OS X 安裝的一部分,或者我可以得到的伺服器版本/包。它的原始碼可從 Apple here獲得,但程式碼不是使用標準 SDK 建構的,而且我找不到任何關於成功建構它所需的庫/版本的資訊。

任何人都可以提出一個簡單的解決方案嗎?在這一點上,我不確定嘗試編譯 Apple 原始碼實際上是否比從頭開始編寫客戶端更容易。

免責聲明:我沒有對此進行過測試,它主要來自這個 JAMF Nation 討論,以及來自舊 AFP548 文章的一些附加說明。

您需要使用該bless命令(這是標準 OS X 安裝的一部分)。配置 NetBoot 的簡單格式是:

sudo bless --netboot --server bsdp://${ipAddress}

…但不幸的是,這只配置了將 BSDP 查詢發送到的地址;如果您從同一台伺服器上提供了多個 NetBoot 映像,則它不會讓您指定使用哪一個。(我認為它將使用伺服器設置中定義為預設值的那個)。指定特定圖像的明顯方法是通過其圖像 ID 號……但我找不到在客戶端上設置它的方法。

您可以做的是完全繞過 BSDP,並告訴客戶端從哪裡獲取實際的啟動資源(即,給它通常在 BSDP 響應中獲得的資訊):

bless --verbose --netboot \
   --booter "tftp://${ipAddress}/NetBoot/NetBootSP0/${nbiName}/i386/booter" \
   --kernelcache "tftp://${ipAddress}/NetBoot/NetBootSP0/${nbiName}/i386/x86_64/kernelcache" \
   --options "rp=nfs:${ipAddress}:/private/tftpboot/NetBoot/NetBootSP0:${nbiName}/${dmgName}"

請注意,最後一個命令假定您正在引導 64 位核心(所有 10.9 都附帶),它是一個真正的 NetBoot(即不是 NetInstall 或 NetRestore)映像,並且您通過 nfs 而不是 HTTP 來提供它(我的建議; 我一直遇到 HTTP 服務圖像的問題,即使 Apple 在幾個版本前將其設為預設值)。如果您需要其他變體,請查看 JAMF Nation 連結以獲取更多選項和/或嘗試手動配置一個客戶端,然後使用nvram -p查看生成的原始韌體設置是什麼(請參閱 AFP548 連結)。

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