Mac OS X: 如何实现子网间NetBoot
2009-03-14 12:43
393 查看
如何实现子网间NetBoot
注:
虽然这篇文章是针对Mac OS X 10.4 Tiger系统的,针对10.5
Leopard的还没有更新,但是这并不影响我们细致了解NetBoot的详细过程,NetBoot和NetInstall的启动区别,以及绕过子网屏蔽
直接从一个指定的启动镜象启动的思考方向.
简介:
基于多数路由器的配置, NetBoot数据通常被限制在子网内,也就是说,如果希望在企业内部实现全局NetBoot,你可能只有下面的两个选择:让网络管理员配置路由器允许BSDP数据通过到你的NetBoot服务器.
在每个子网内建立一个NetBoot服务器.
当然,第一个选择是实现多子网间NetBoot的最好办法,但是这种方法很少有正式的文档而且有可能面临企业内部规定的限制,所以人们可能不愿意去试图改变它. 而第二种方法有点浪费特别是对于很少机会NetBoot电脑的情况.
那么对于有时需要透过子网限制而实现NetBoot, 我们如何做呢?在开始解释之前,让我们来看看NetBoot的详细操作过程和在这个过程中到底发生了什么。
10.4.5的更新:
Mac OS X 10.4.5的更新使得下面的操作更加简便。简单地使用bless命令来设置固件:sudo bless --netboot --server bsdp://server.apple.edu |
sudo bless --netboot --booter tftp://server.apple.edu/NetBoot/NetBootSP0/NetInstall.nbi/i386/booter --kernel tftp://server.apple.edu/NetBoot/NetBootSP0/NetInstall.nbi/i386/mach.macosx --options "rp=nfs:server.apple.edu:/private/tftpboot/NetBoot/NetBootSP0:NetInstall.nbi/NetInstall-Restore.dmg" |
NetBoot的过程
BSDP和DHCP
一个网络启动就是客户端发起的对网络内任何一个响应BSDP(启动服务发现协议, Boot Service Discovery
Protocol)电脑的广播. BSDP是一个和DHCP相类似的, 并被包括Mac OS 9, Mac OS X, FreeBSD和Sun
Solaris等操作系统支持的开放标准协议. 一般地,路由器被配置为阻止所有的广播协议的, 但是对于DHCP(有可能)特殊处理,
这样可以允许客户端透过路由器而和另一个子网的DHCP服务器通讯.
所以,如果路由器没有为BSDP特殊设置为允许通过,那么客户端只能看到本子网内的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的苹果机)或者扩展固件界面(Extensible
Firmware 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 |
[macosx:~]nvram -p | grep boot-[adf] boot-file boot-args boot-device enet:bootp |
为了避免它, 可是设置参数如下:
[macosx:~]nvram -p | grep boot-[adf] boot-file boot-args boot-device enet:10.0.1.2 |
注:
我的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 |
不仅从默认镜象组启动
假设你有一个定制的用来全自动启动的NetInstall-恢复镜象组, 从而客户机从那个镜象启动并立刻格式化内置硬盘并放置镜象, 然而这不是你想要的镜象. 如何改变呢? 看看下面的nvram设置:[macosx:~]nvram -p | grep boot-[adf] |
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 |
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-argsrp=[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 SubnetsApple Kbase: Mac OS X Server: NetBoot Clients Cannot Start Up From Server (NetBoot Troubleshooting)
Configuring routers to prevent Initial Connectivity Delay (which kills NetBoot)
相关文章推荐
- Mac OS X: 如何实现子网间NetBoot
- Mac OS X上如何实现到Linux主机的ssh免登陆
- Mac OS X上如何实现到Linux主机的ssh免登陆[forward]
- Mac OS X上如何实现到Linux主机的ssh免登陆
- 如何配置Mac OS X实现LAN唤醒?
- 如何在PC机上安装MacOSX
- 在 MacOSX 上实现多用户远程桌面
- Mac os x 如何录制屏幕
- VMware7下安装的Mac OS X如何修改显示分辨率
- Apple Mac OS X每日一技巧002:如何修改打开文档的默认程序
- 如何在Mac os X上搭建本地服务器环境
- 如何高效实现扫描局域网IP、主机名、MAC和端口
- mac os x10.8下如何使用git与github
- 如何在Mac OS X上安装 Ruby运行环境
- 如何在Mac OS X上安装 Ruby运行环境
- 单片机(不基于os)下如何实现简单的内存管理(malloc,realloc和free函数的重新实现)
- 如何在Mac OS X中开启或关闭显示隐藏文件命令
- 如何在Mac OS X上安装 Ruby运行环境
- 如何在Mac OS X上安装 Ruby运行环境
- Mac OS X 10.4.7 DMG 文件如何转化成ISO文件