如何从OS X 10.9 +上的脚本制作BSDP NetBoot图像select?

背景信息: BSDP是Apple的协议,用于在networking上的NetBoot服务器上发现和select(不要与PC风格的PXE启动相混淆)。 规格 (Word文档)。 长话短说 – 这是一个高于DHCP的协议,使用INFORM消息在客户端和服务器之间传递信息。

我需要自动化testing机器在networking上启动不同引导映像的环境。 对我来说,最简单的方法是从客户端上运行的脚本中select启动映像。 这是从服务器和networking的angular度来看,相当于在系统首选项 – >启动盘中select启动映像

我发现引用了bsdpc,一个来自Apple的旧实用程序,它不再是任何标准OS X安装的一部分,或者是我可以获得的服务器版本/包。 它的源代码可以从苹果公司得到,但是代码并不是使用标准的SDK构build的,我无法find任何有关构build它的库/版本的信息。

谁能提出一个简单的解决scheme? 在这一点上,我不确定试图让Apple源码编译实际上比从零开始编写客户端更容易。

免责声明:我没有testing过这个,大部分都是JAMF Nation的讨论 ,还有一些旧的AFP548文章的补充说明。

你需要使用bless命令(这是标准的OS X安装的一部分)。 configurationNetBoot的简单格式是:

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

…但不幸的是,只configuration地址发送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服务它(我的build议;我仍然遇到HTTP服务的图像的问题,即使苹果公司在几个版本之前做了这个默认设置)。 如果您需要其他一些版本,请查看JAMF Nation链接以获取更多选项,或者尝试手动configuration一个客户端,然后使用nvram -p查看生成的原始固件设置(请参阅AFP548链接)。