设为首页 收藏本站
查看: 602|回复: 0

[经验分享] Mac OS X: 如何实现子网间NetBoot

[复制链接]

尚未签到

发表于 2016-5-16 08:44:05 | 显示全部楼层 |阅读模式
如何实现子网间NetBoot
  
:虽然这篇文章是针对Mac OS X 10.4 Tiger系统的,针对10.5Leopard的还没有更新,但是这并不影响我们细致了解NetBoot的详细过程,NetBoot和NetInstall的启动区别,以及绕过子网屏蔽直接从一个指定的启动镜象启动的思考方向.
简介:
  基于多数路由器的配置, NetBoot数据通常被限制在子网内,也就是说,如果希望在企业内部实现全局NetBoot,你可能只有下面的两个选择:

  • 让网络管理员配置路由器允许BSDP数据通过到你的NetBoot服务器.
  • 在每个子网内建立一个NetBoot服务器.
  
当然,第一个选择是实现多子网间NetBoot的最好办法,但是这种方法很少有正式的文档而且有可能面临企业内部规定的限制,所以人们可能不愿意去试图改变它. 而第二种方法有点浪费特别是对于很少机会NetBoot电脑的情况.

那么对于有时需要透过子网限制而实现NetBoot, 我们如何做呢?在开始解释之前,让我们来看看NetBoot的详细操作过程和在这个过程中到底发生了什么。
  
  



当客户机第一次开机并且配置为NetBoot模式,你看到的是一个在方框中闪动的全球图标(右图).在这个阶段,客户机首先从DHCP服务器获得IP地址, 然后探测BSDP信息.当客户端得到从NetBoot服务器的BSDP响应,闪动的全球图标就变成了苹果图标了(左图).


TFTP: 启动一个微型系统
  在客户端发现了NetBoot之后,立刻利用TFTP服务协议下载三个文件: 启动文件(booter), 内核(kernel),和内核扩展缓存(kernel externsion cache). 启动文件首先被装载, 然后是内核, 内核初始化mach_init过程,并由它装载内核扩展缓存, 并启动/etc/rc.boot和/etc/rc脚本. 这些都是标准的Unix启动脚本用来启动系统.
三岔路口: NetBoot:NetInstall
  从现在开始, NetBoot和NetInstall的启动过程就完全不一样了. 对于NetInstall,在NetInstall系统镜象中的/System/Installation目录使得客户端认为自己是从一个CDROM启动的,这时它就运行/etc/rc.cdrom脚本, 而如果/System/Installation目录不存在,系统就继续运行并执行/etc/rc.netboot启动脚本. 这里不会深入到每个脚本内部如何运行,大体上是生成影子文件和虚拟内存空间,并把控制交给普通启动脚本/etc/rc, 并结束系统启动屏幕.

上面基本上就是需要了解的启动过程.
子网间的操作: BSDP替代版本
  每个苹果电脑都由一个底层环境,叫做开放固件(Open Firmware, OF, 基于PPC的苹果机)或者扩展固件界面(ExtensibleFirmware Interface, EFI, 基于Intel的苹果机).这个固件环境存储在主版的BootROM里面,由它负责计算机的初始启动过程,它的设置参数储存在内存的特殊区域,并由主版电池保持供电,它叫做nvram(非易失随机存取存储器non-volatile RAM), 我们可以使用终端命令来操作这些参数.长话短说,我们可以改变nvram设置来让启动过程忽略寻找BSDP服务器的过程,而是直接找到一个存放在固定IP的NetBoot服务器的启动镜象,从而避免被路由器阻止广播造成找不到NetBoot服务器.

在我们进行下一步之前,你需要检查当前的nvran配置. Mac OS X提供了非常简单的方法, 运行终端, 然后输入: nvram -p | grep boot-[adf], 见下:
[macosx:~] nvram -p | grep boot-[adf]
boot-file
boot-args
boot-device mac-io/ata-4@1f000/@0:2,//:tbxi

  正如看到的, 作为典型的情况, 只定义了"boot-device"的三个参数,如果在Startup Disk Preference设置了NetBoot启动, 那么nvram设置就变成:
[macosx:~] nvram -p | grep boot-[adf]
boot-file
boot-args
boot-device enet:bootp

  
以,boot-device被设置为通过以太网寻找bootp服务器,这完全以来于BSDP服务器的响应.
为了避免它, 可是设置参数如下:
[macosx:~] nvram -p | grep boot-[adf]
boot-file
boot-args
boot-device enet:10.0.1.2

  
其中10.0.1.2假设为你的NetBoot服务器的地址,更确切地说是, 配置NetBoot使用的你的服务器上的那个网卡的地址. 使用上面的配置, 你的客户机就会越过BSDP寻找过程,而立刻直接寻找被定义地址上的服务器的NetBoot镜象。

注:
我的Intel的MacBook Pro笔记本和Leopard 10.5.5系统显示参数如下:

[macosx:~] nvram -p | grep boot-[adf]
efi-boot-device-data%02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%02%1f%03%12%0a%00%00%00%00%00%00%00%04%01*%00%02%00%00%00(@%06%00%00%00%00%00%00%00|%07%00%00%00%008;%00%00wg%00%00g%0d%00%00%c5%07%00%00%02%02%7f%ff%04%00
boot-args
efi-boot-device<array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>00003B38-6777-0000-670D-0000C5070000</string></dict></dict><key>BLLastBSDName</key><string>disk0s2</string></dict></array>%00

  每个参数都有%00作为结束字符.

不仅从默认镜象组启动
  假设你有一个定制的用来全自动启动的NetInstall-恢复镜象组, 从而客户机从那个镜象启动并立刻格式化内置硬盘并放置镜象, 然而这不是你想要的镜象. 如何改变呢? 看看下面的nvram设置:
[macosx:~] nvram -p | grep boot-[adf]
boot-file       enet:10.0.1.4,NetBoot/NetBootSP0/imagename.nbi/mach.macosx
boot-args       rp=nfs:10.0.1.4:/private/tftpboot/NetBoot/NetBootSP0:imagename.nbi/imagename.dmg
boot-device     enet:10.0.1.4,NetBoot/NetBootSP0/imagename.nbi/booter

  先面把它分解开。首先看看那两个定义客户端如何从tftp下载文件的参数:
boot-file
  boot-file       enet:10.0.1.4,NetBoot/NetBootSP0/imagename.nbi/mach.macosx
语义:
boot-file [interface]:[server-ip-address], [path to mach.macosx relate to tftp root]

最后的说明可能有点领人疑惑. 你的Mac OS X服务器配置为提供tftp服务. 安全起见, tftp服务的根被设置成/private/tftproot. 如果看看这个目录,会发现里面有几个指向你的NetBoot共享点的连接:
[xserve:/private/tftpboot/NetBoot] admin% ls -l
lrwxr-xr-x root  wheel Mar  6 20:44 NetBootSP0 -> /Library/NetBoot/NetBootSP0
lrwxr-xr-x root  wheel Mar  6 20:44 NetBootSP1 -> /Volumes/Bay2/Library/NetBoot/NetBootSP1
lrwxr-xr-x root  wheel Mar  6 20:44 NetBootSP2 -> /Volumes/Bay3/Library/NetBoot/NetBootSP2
lrwxr-xr-x root  wheel Mar  6 20:44 NetBootSP3 -> /Volumes/Bay4/Library/NetBoot/NetBootSP3

  
这对于共享点不是存放在根/里面而是/Volumes里面的时候,方便操作. 注意boot-file参数里的是反斜杠符, 这一点很重要.
boot-device
  boot-device     enet:10.0.1.4,NetBoot/NetBootSP0/imagename.nbi/booter
语义:
boot-device [interface]:[server-ip-address], [path to booter relate to tftp root]
它和上面的基本一样,只不过是指向的文件是booter文件.
boot-args
  boot-args       rp=nfs:10.0.1.4:/private/tftpboot/NetBoot/NetBootSP0:imagename.nbi/imagename.dmg
语义:
boot-args       rp=[nfs|http]:[server-ip]:[absolute path to netboot sharepoint]:[path to netboot image from netboot sharepoint]

这里, 协议可以是nfs或者http, 这里的路径指向NetBoot共享点(检查工作组管理者设置)和这个共享点的镜象文件. 这个参数不使用tftp,我们只使用tftproot目录作为一个取得NetBoot共享点的捷径。
其它参考:

  • Apple Kbase: Mac OS X Server: How to Use NetBoot Across Subnets
  • Apple Kbase: Mac OS X Server: NetBoot Clients Cannot Start Up From Server (NetBoot Troubleshooting)
  • Configuring routers to prevent Initial Connectivity Delay (which kills NetBoot)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-217494-1-1.html 上篇帖子: MAC PC 下篇帖子: mac os 下搭建android eclipse 开发环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表