如何通过 OS X 10.9+ 上的脚本选择 BSDP NetBoot 映像?

如何通过 OS X 10.9+ 上的脚本选择 BSDP NetBoot 映像?

背景: BSDP 是 Apple 的协议,用于在网络上发现和选择 NetBoot 服务器(不要与 PC 风格的 PXE 启动混淆)。眼镜(Word 文档)。长话短说 - 它是一个位于 DHCP 之上的协议,使用 INFORM 消息在客户端和服务器之间传递信息。

我需要自动化一个环境,测试机器将在网络上启动不同的启动映像。对我来说,最简单的方法是从客户端上运行的脚本执行启动映像选择。从服务器和网络的角度来看,这相当于在系统偏好设置->启动磁盘

我找到了 bsdpc 的参考资料,这是 Apple 的一款旧实用程序,它不再是任何标准 OS X 安装的一部分,也不是我能找到的服务器版本/软件包。它的源代码可从 Apple 获取这里但是代码不是使用标准 SDK 构建的,而且我找不到任何关于成功构建它所需的库/版本的信息。

有人能建议一个简单的解决方案吗?目前,我不确定尝试编译 Apple 源代码是否实际上比从头开始编写客户端更容易。

答案1

免责声明:我没有测试过这个,而且它主要是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 链接)。

相关内容