如何實現子網間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
|
或者更加細致的調節(--options選項只適用于基于EFI的Mac機器,而對于基于OpenFirmware的機器請繼續使用nvram)
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"
|
參考bless的man頁以得到更多詳細信息. 你也可以是用ARD的發送UNIX命令的方式發布這個命令給所有目標機器。
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-device"的三個參數,如果在Startup Disk Preference設置了NetBoot啟動, 那么nvram設置就變成:
[macosx:~] nvram -p | grep boot-[adf]
|
所
以,boot-device被設置為通過以太網尋找bootp服務器,這完全以來于BSDP服務器的響應.
為了避免它, 可是設置參數如下:
[macosx:~] nvram -p | grep boot-[adf]
|
其中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]
|
先面把它分解開。首先看看那兩個定義客戶端如何從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
|
這對于共享點不是存放在根/里面而是/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共享點的捷徑。
其它參考:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
