GB | BIG5
|
| 首頁 > 系統管理 > Linux > 正文 |
 |
| Linux Remote-Boot mini-HOWTO |
| 不詳 (2001-04-27 16:35:54) |
作者: Marc Vuilleumier Stckelberg, Sandro Viale and David Clerc
譯者: 曾元佑 yytseng@ms16.hinet.net
v2.5.2, 九月 1997
--------------------------------------------------------------------------------
這份文件將說明如何使一群PC擁有相當穩定的 Server-based 架構 , 此法可使每台PC在開機時選擇使用何種作業系統. 此種架構的精要就是 TCP/IP bootprom ,它可以讓使用者在開機時選擇不同的開機區塊. 此份文件的最新版本,包含超文件連結到可供下載的軟體及其它相關的資訊,都可以在這個網址找到 http://cuiwww.unige.ch/info/pc/remote-boot/howto.html. Linuxdoc-SGML,DVI 及 postscript各種版本都在這個目錄下.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
1. 有那些變更...
1.1 ...從 1.x 版後 ?
一大堆變動:
Linux server-based 的架構與文件已全部重新設計. 目前是以 RedHat Linux 4.1為主 , kernel 更新成2.0.30 . 更簡化了 Linux 系統的設定與維護.
DOS 和 Windows 的設定也重新設計過, 幾乎換成 "hard-disk based" . 如此使得架構更加簡化, 開機速度變快, 降低網路的負載,甚至允許Windows NT workstation 採用 server-based setup (雖然還未在本文中談到).
目前我們用一台 DHCP server, 遵尋 DHCP/BOOTP extensions (RFC 2132).
在這個架構也用了 Samba 免費的 SMB server , 來取代 Novell server. 事實上, 我們正要丟掉我們的 Novell server...
1.2 ...從 2.4 版後?
新的 開機旗幟 功能已加在 bpunzip 這個工具程式. 它現在可以在 VESA-相容型的顯視卡下工作. 開機旗幟可以用 ESC鍵; 從螢幕中移掉; 其他的按鍵已不會幹擾到 TFTP 的傳輸. MRZIP,有一只臭□, 在解壓縮 磁碟壓縮影像 時會導至 "Bad compressed data" 錯誤, 我們已發現並修正了. 另外在 BPUNZIP 中發現的兩只會導至電腦當機的臭□也被修正了.
更加完整的 . 加入連結到相關軟體 ( Shared LAN Cache) 及文件 (from J. Carlstedt, of The Cathedral School of Uppsala, Sweden).
加入 UNZIPREG 原始程式碼的連結位址. 這些資訊是用來跟Windows 95 OSR2搭配使用的.
bootptag Linux版的工具程式改採 DHCP 取代 BOOTP. 現在可以跟 Solaris 2.6 DHCP server 一起搭配使用.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
2. 簡介
這裡所描述的架構是從1996 夏季開始在 CUI, University of Geneva所發展的. 這個資訊系有許多的伺服器(大多是 Unix 與 Novell), 和一些個人電腦, 可依用途分為兩類:
學生使用
研究與輔助教學
以下是我們發展這種架構的目標:
任何一台電腦都可以執行 Linux, DOS, Windows 3.1 or Windows 95. 每次開機時可以選擇所需要的作業系統.
所有的軟體, 包含作業系統, 可以放在伺服器上, 便於安裝與更新.
客戶端電腦可以不對伺服器作寫入的狀態下正常工作(為了安全性),home 目錄除外.
盡可能減少客戶端的設定. 客戶端可以自動由伺服器取得 IP 組態設定, 這些資訊放在一個小檔案, 可供各種作業系統使用.
大部份的電腦都各自擁有硬碟, 客戶端可以靠這優點來降低網路負載與存放使用者的暫存檔.
所有的使用者都 必須注冊才能使用電腦.
注冊資訊必須所有的作業系統都相同且使用者可以存取個人的目錄,而每種作業系統都一致.
學生所使用的電腦在每次啟動時必須清理一次. 也就是像剛安裝完的樣子.
每台電腦可以防毒.
這些限制使我們選用來自 Köppen EDV GmbH 的 TCP/IP Bootprom 因為這種 Bootprom 跟作業系統無關而令我們相當感興趣; 它只是模擬出一台軟碟機, 而且當以 Linux 開機時就跟 DOS 或 Windows 95 一樣簡單. 另外,開機磁碟的影像檔,可由自制的程式來取代, 這個功能使我們能在作業系統啟動前,先做許多初始設定.
2.1 網路
Geneva 大學擁有 B 級網域, 分割成許多子網路. CUI 共使用了四個子網路, 其中之一供學生使用.
原本,我們的個人電腦使用兩種網路的通訊協定: IPX 與 IP. IPX 這一類,我們由一台 Novell Netware 3 的伺服器共用 DOS 與 Windows的軟體. IP 這一類, 我們由一台 SUN 伺服器靠 NFS 共用 Linux 軟體及個人的分割區.
在我們最新的架構中, 已不再使用 IPX 通訊協定. 改由一台 Unix 伺服器 (可以是 Linux 或 SUN)擔任, Linux 客戶端可透過 NFS 而 DOS與Windows則由 SMB (NetBIOS) over TCP/IP 共用軟體及使用者的檔案.
2.2 它是如何工作
客戶端個人電腦開機後, 在 TCP/IP Bootprom 獲得控制權之前先做自我測試.
Bootprom 送出 BOOTP/DHCP 要求而取得 IP 組態參數.
如果伺服器收到個人電腦所送出的要求, 就會送回 BOOTP/DHCP 回應,內容包括客戶端的 IP 位址, 預設通訊閘道, 及開機影像檔. 否則, 伺服器會忽略這個要求.
Bootprom 由 TFTP 通訊協定從伺服器下載開機影像檔, 並同時用這個開機影像檔虛擬出一台 BIOS 層級的軟碟機.
個人電腦透過這個開機影像檔 開機, 這個開機檔只是單純的開機程式(並不包括作業系統).
如果這台電腦是學生的個人電腦, 開機程式開始就由 TFTP 通訊協定下載一個小 的文字檔其內容是敘述這台電腦的硬碟規劃狀態. 透過這個小檔案, 硬碟的分割區將 重新規劃且 DOS 所使用的分割區也被快速格式化. 當所有的工作完成, 這些工作將在開機後三秒內完成.
開機程式接讓使用者選擇所需的作業系統.
依照使用者的選擇, 新的開機影像檔將從伺服器透過 TFTP 通訊協定下載.
如果選擇使用 Linux, 開機影像檔將包含 kernel loader 及壓縮過的 kernel, 此 kernel 將支援 NFS root 及caching 檔案系統:
第一點, IP 組態是透過 BOOTP/DHCP 通訊協定由 Novell 伺服器所接收.
這個 kernel 可以透過 NFS 掛上一個只能讀的 root filesystem.
掛上一塊有寫入功能的小型 ramdisk .
如果在硬碟內發現 swap 分割區, 則為它做好準備並啟動它.
如果在硬碟內發現 linux 分割區, 掛上它並為它做好 caching NFS 分割區.
IP 組態一完成, 啟動所有的服務, 也啟動 xdm.
要求使用者登入. 這台工作站就續.
如果選擇使用 DOS 或 Windows, 開機影像檔將是一個可以處理 FAT16 分割區壓縮影像的程式. 透過 TFTP 下載開機影像檔, 並且儲存在硬碟中以供未來使用, 包含任何使用過的分割區. 更嚴緊的說法是, 這個程式可以在以下的狀況中執行:
這個程式下載一個檢查檔 (512 bytes)以確認所選作業系統的開機影像檔
如果所需的影像檔並不存在磁碟中, 或者與檢查檔不吻合 (可能是由於開機影像檔已被變更或者一個新 的版本被安裝到伺服器上), 整個影相像檔將透過 TFTP 通訊協定來傳輸.
作業系統的影像檔解壓縮到第一個 FAT16的分割區, 傳輸速度大約是以每秒一 mega bytes.
程式接跳到所選的作業系統的開機磁區, 而它現在已存在本機的硬碟中.
對 DOS 與 Windows 3.1 而言, 我們使用免費的 Microsoft LanManager for DOS (請透過網路找到較接近您的 mirror 站; 它是由三個檔案所組成 disk1 to disk4) 當成 SMB 客戶端. Microsoft LanManager 可藉 DHCP 而支援動態設定. 在登入後, 使用者會看到 DOS, 並且可以打 win 啟動 Windows 3.1 . 請注意這點, DOS 與 Windows 3.1 就如同安裝在客戶端一般. 對 Windows 95 而言, 我們也使用 Microsoft SMB 客戶端 (叫 Client for the Microsoft Network), 它也可藉 DHCP 而支援動態設定. 我們為降低網路負載使用了 Shared LAN Cache, 一個強而有力的 network-to-disk cache 程式.
學生所使用的電腦可以很暴力的直接關掉電源而不會有任何問題, 因為硬碟的資料在每次開機都會重新建立.
對於比較 "安全的" 電腦 (如輔助教學的電腦), 或許有時會使用上述的方法來開機, 有時則直接載入硬碟內的開機影像檔而不再清理硬碟. 這樣可以允許使用者保留資料在硬碟中. 而當組態修正後又可以完整的更新開機影像檔就如同重新安裝一般.
2.3 相關非商業
這種組態已經成功的移殖到世界上的許多地方. 少數人已經開始篆寫一些技巧跟提示來完成這份 How-To. 如果您也曾做過但在本文件中未備引用歡迎送一份 e-mail 給 Marc.VuilleumierStuckelberg@cui.unige.ch. 如果您在重建這種組態中遇到問題, 請在詳細看一次文件 !
http://www.katedral.se/system/elevsyst, by Johan Carlstedt of The Cathedral School of Uppsala, Sweden.
http://vitoria.upf.tche.br/~fred/, in portuguese, by Frederico Goldschmidt of the Passo Fundo University, Brasil.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
3. 如何設定
首先, 調整機器位置使手邊有下列兩台機器:
伺服器, 我們是用一台 Unix 主機.
客戶端, 一台已經啟動 TCP/IP Bootprom 的個人電腦, 硬碟內不要有重要資料.
如果你想要測試您的組態設定而您還沒拿到 TCP/IP Bootprom, 您可以到 http://www.incom.de 下載測試版的磁片. 這個磁片可以使您的電腦就好像是插上 TCP/IP Bootprom 一般.If you want to test the configuration but you do not yet have a
學生所使用的電腦, 我們設定 Bootprom 由網路開機, 不能使用硬碟開機及軟碟開機. 教學用電腦, 我們設定 Bootprom 可以由往路開機, 也允許硬碟與軟碟開機; 在你的客戶端設定 Bootprom.
伺服器端, 設定 DHCP daemon (我們使用 Internet Software Consortium 所提供的正式版, 970329 發行). 你也必需啟動 TFTP daemon. 這份文件將假設您使用 TCP/IP Bootprom 工具磁片內的加強型 TFTP daemon . 如果您較喜歡使用標準的 TFTP daemon, 移掉所有開機影像檔的副檔名 P, 用來支會 Bootprom 使用標準的 TFTP port (請看 TCP/IP Bootprom 文件).
別忘了 BOOTP/DHCP 通訊協定被限制在子網域中使用. 如果客戶端與伺服端不在同一網域, 您必須在這兩網域間架設閘道器. 現在, 先假設兩台機器在相同的網域中.
首先, 我們先做所有作業系統都要得做的事,如:
設定初始化硬碟的組態及清理
設定作業系統選單
測試開機流程
然後, 對每一種作業系統, 我們將完成下列步驟:
建立單獨的客戶端
把它的組態放到伺服器上
測試遠端開機客戶端
由本尊產生分身
完成這些事, 以後你所追加的客戶端只要插上 Bootprom 再加幾行到 DHCP 設定檔.
3.1 設定開機流程
在伺服器端的 /tftpboot 目錄下, 放下列的開機影像檔 (這些是二進位格式)
bpclean, 硬碟清理工具
bpmenu, TCP/IP Bootprom 選單程式 (包含在您的 Bootprom 工具磁片)
bpunzip, 我們的硬碟還原工具
bphdboot, 傳送開機程序到硬碟的影像檔
硬碟的初始化與清理
在相同的目錄下, 我們建立符號連結到 (或者直接用拷背指令)) bpclean 命名為 XXXclean (或者您認為可以幫助您記住這是用來清理您的客戶端機器的名稱) 並且產生一個名為 XXXclean.tab 檔敘述您客戶端所需的硬碟分割區, 及您要聯接的開機影像檔. 例如: 我們對 2 Gb 硬碟使用下面的方法
--------------------------------------------------------------------------------
# 允許不超過 512 bytes 的說明敘述
# 十六進制請在字首加一個 $ 錢字符
# Part | | Part
# type | Boot? | Size
6 Y +500 Mb
$82 N +31 Mb
$83 N -50 Mb
0
# 聯接的影像檔
/tftpboot/XXXmenu
--------------------------------------------------------------------------------
完整的檔案格式在後面會敘述. 現在您只要知道這些
分割區型態 6 是指 BIGDOS, ie. 如. DOS Fat-16 由 32Mb 到 500Mb
分割區型態 hex 82 是 Linux Swap
分割區型態 hex 83 是 Linux Ext2fs
大小如為負值,則表示我們的第三個分割區至少要佔據 50 Mb
分割區型態 0 表示是 空的 (未使用的) 分割區.
現在, bpclean 在不清除分割區資料內容下,將重新寫入主要開機計錄(master boot record), 當然也包括分割表.
作業系統選單
同樣的, 建立符號連結 (或者直接拷貝) bpmenu 命名為 XXXmenu (或者你認為可以幫助您記住這是客戶端機器開機選單的名稱) 並且產生一個名為 XXXmenu.m 檔敘述您客戶端所需的開機選單. 您比可以手動產生這個檔案或透過我們寫的開機選單全營幕編輯器 menuedit.exe. 例如, 假設您用下列這個檔案:
--------------------------------------------------------------------------------
.CLS 23
.ATT 23
.POS 23 4
.WRT Simple Boot Menu \
.POS 23 5
.WRT ---------------- \
.POS 23 8
.WRT 1. Boot from local hard disk \
.POS 23 10
.WRT 2. Boot DOS and Windows 3 \
.POS 23 12
.WRT 3. Boot Windows 95 \
.POS 23 14
.WRT 4. Boot RedHat Linux \
.POS 23 17
.WRT Your choice : \
.POS 37 17
.KEY 1 :bphdboot
.KEY 2 :linux.PX
.KEY 3 :win31.P
.KEY 4 :win95.P
--------------------------------------------------------------------------------
測試開機程序
在您的 DHCP 設定檔中加入您的客戶端. 並設定開機影像檔為 /tftpboot/XXXclean. 您可能需要重新啟動您的 DHCP 伺服器使您的變更生效.
現在我們起動您的客戶端. 您可以訊速的看到由 bpclean, 所送出來的訊息, 告訴您它所建立的分割區的大小, 然後您會看到開機選單出現在您的營幕上. 您可以用鍵盤上的 pause 鍵來暫停以便讀取剛剛的訊息, 但是這可能會導致 TFTP 的連接逾時.
如果您按下按鍵 1, 您將收到一個這樣的訊息"開機分割區存在一個無效的開機磁區" (the boot partition contains not valid boot sector). 對未被格式化過的開機分割區而言這是正常的. 因為我們現在還未建立任何開機影像檔所以其他的按鍵將會失效...
現在我們要開始安裝各種作業系統. 您可依您的需要來決定先做那一種. 對任何一種作業系統, 您都需要先從軟碟來做初始化的動作. 所以我們在看到 TCP/IP Bootprom 的標志後立刻按 space 鍵換成軟碟開機.
有些作業系統會更動主要開機計錄 (master boot record). 特別是 Linux kernel loader (lilo) 會這樣做.而這種變動會因 bpclean這個程式而無法完成, 因此您最好改變客戶端的 DHCP 設定內容使開機影像檔直接跳到 /tftpboot/XXXmenu (不做清理的動作). 別忘了要使您的改變生效,您必需重新啟動 DHCP 伺服器.
3.2 設定 Linux
在您的客戶端架設 RedHat Linux 4.1 支援網路功能, kernel 原始程式碼及您所需要的軟體套件. 準備未來要掛入的點 (放在 /mnt/tmp 比較有用), 設定您的 X server, 等等. 在 /usr/src/linux-2.0.27 目錄中, 您必須有 kernel 2.0.27 的原始程式碼.
現在我們要加入一些修正檔, 使它升級到 2.0.30, 並且支援 TCP/IP Bootprom 及檔案快取的功能. 檔案快取是一個 把 "未確定的" NFS 檔案儲存在您硬碟中的結構, 它您可以降低網路負載. TCP/IP Bootprom 的支援已經由□Marc Vuilleumier Stuckelberg 完成, 並且由 David Clerc 轉移到 kernel 2.0 . 檔案快取已經由 Unifix GmbH 完成, 並且已 是 Unifix Linux 2.0 的一部份. TCP/IP Bootprom 及檔案快取的支援都已經由它們的作者免費的散布.
值得注意的是 Linux 對 NFS-Root 的支援只能架構在 BOOTP 通訊協定, 不是 DHCP 通訊協定. 僅管 DHCP 只是 BOOTP 的延伸, Linux 也可以在 DHCP 伺服器下工作 (如果您沒有設定 DHCP 伺服器拒絕 BOOTP要求).
產生 Kernel
首先, 到您的 /usr/src 目錄並加入下列修正檔, 使用這個指令
patch -p0 < 修正檔的名稱:
patch-2.0.28: 這是一個正式的 kernel 更新, 您一定要加入這個修正檔
patch-config-sound: 一個美化音效設定的修正檔, 來自 Unifix Linux 2.0
patch-PCSP: 一個較大的修正檔用來使 PC 的揚聲器模擬音效卡, 來自 Unifix Linux 2.0
patch-bootprom: 一個小的修正檔用來產生特別的 kernel image, 使它可由 TCP/IP Bootprom 開機
patch-filecache: 一個小的修正檔使 kernel 加入一些特別功能, 如 Unifix filecache. 來自 Unifix Linux 2.0
patch-penguinlogo: 一個小的修正檔幫助您的使用者等到 Linux 系統完全載入
patch-2.0.29: 另一個小的正式的 kernel 更新檔, 如果您不需要最新版的 kernel 則不用加入它
patch-2.0.30: 又是一個正式的 kernel 更新檔, 滿大的. 一樣, 您不需要加入這項修正 (但它會改善 TCP/IP 通訊 協定). 如果在您的機器上您沒有 alpha 的原始程式碼 (這很有可能發生), 這個修正檔將出現兩次抱怨含入檔不存在的訊息. 不要緊張, 只要回答您要跳過這些缺少的檔案,不會發生任何問題
接執行 make mrproper 及 make xconfig, 產生 kernel. 記住這將是客戶端電腦以 Linux 啟動時, 唯一接收到的軟體, 所以 它必須要包含啟動整個作業系統所需的東西. 可以使用模組方式, 但是不包括網路模組. 因為網路功能一定要放在 kernel 中. 簡而言之, 您的 kernel 至少需要以下這些
支援網路
在有 BOOTP 通訊協定下,支援 NFS-Root
支援 filecache
支援客戶端電腦的硬體所需的模組
您可以使用我們的 .config 當做起點. 如果您想要在沒有 Bootprom 的狀況下測試, 請確定您已經在 kernel 內包含硬碟機的支援.
當您的選擇完成後, 照常地輸入 make clean; make dep 接 make zImage, make modules 與 make modules_install. 這會花一點時間... 現在您準備去測試您的新 kernel, 先用先用 lilo. 安裝您的 kernel (參考 lilo 文件),並重新啟動您的電腦 (由硬碟啟動). 如有任何錯誤, 修正它們並再試一次. 執行 depmod -a 計算 modules dependencies. 當完全無誤時, 執行 make bpImage 產生一個 bootimage 給 TCP/IP Bootprom 使用.
把 Root 檔案系統移到 NFS
您的伺服器要有足夠的空間來保存您的整個 Linux 檔案系統 (幾百 Megabytes). 建立一個新的目錄給 NFS 輸出, 就叫 rootfs, 並在其中建立另一個新目錄就叫 runtime. 我們使用 /export/linux/rootfs/runtime. 把它輸出成只有您的 Linux 客戶端可讀可寫, 並具有 root 的存取權 ( annon=0). 例如, 我們的 NFS 是在 Solaris 下執行, 我們用以下這個指令:
share -F nfs -o rw=pc7971,anon=0 /export/linux/rootfs/runtime.
在您的 Linux 客戶端掛上這個分割區並用GNU tar 把整個 Linux 檔案系統復制過去 (預設是 RedHat Linux). 很重要的是當您使用 GNU tar 指令,因為所有的 tar 指令可能無法正確地處理 block device 的 special nodes . 然後編輯檔案 /export/linux/rootfs/runtime/etc/fstab 並變更根目錄的設定,使根目錄符合以 nfs mount 取代自己的硬碟機. 你還要移去 (或者 至少要變更名稱) /export/linux/rootfs/runtime/etc/sysconfig/network-scripts/ifcfg-eth0 因為網路裝置將由 NFS-root 初始化但不能被初始化兩次.
現在在您的 /etc/lilo.conf 復制一行 linux, 例如:以 linux-nfs 為名, 並加入以下的參數:
append="root=/dev/nfs nfsroot=/export/linux/rootfs/runtime nfsaddrs=您的-ip:伺服器的-ip:閘道器的-ip:網路遮罩:機器名稱"
(您的-ip 是您的 Linux 客戶端的 IP 位址,是以十進位有點的方法表示, 伺服器的-ip 是 NFS 伺服器的 IP 位址, 閘道器的-ip 是 Linux 客戶端的預設閘道器, 網路遮罩 是 Linux 客戶端的網路遮罩 而 機器名稱 是Linux 客戶端的主機名稱). 再執行一遍 lilo , 重新啟動您的電腦 (仍然是由硬碟機), 並選擇 linux-nfs 開機設定. 您的電腦將如先前一般啟動, 即使有一點慢. 如果在這裡有某些東西不能正常工作, 您只要重新開機用您原來 local的 linux 開機設定並試修正它. 大部份的狀況是, 您的 NFS root 設定錯誤. 如果有任何東西您不了解, 看一下 /usr/src/linux/Documentation 這些檔案... 您或許可以看看 NFS-Root-Mini-Howto.
您可以再試一次,這次只用 append="root=/dev/nfs" 以確定 Linux kernel 可以透過 DHCP/BOOTP要求而獲得您所設定的 IP 參數. 如果要這樣做, 您必須在您的 DHCP 設定檔中加入以下這些選項 (當然是要設定您自己的網路組態), 加上您的機器的硬體及 IP 位址:
--------------------------------------------------------------------------------
option subnet-mask 255.255.252.0;
option routers 129.194.68.1;
option root-path "/export/linux/rootfs";
--------------------------------------------------------------------------------
如果您的 Linux kernel 須要再加入其它指令參數, 您可以用 option option-177 來加入.
下一步要使我們的系統在 唯讀的 NFS 檔案系統下可以工作.
產生唯讀的 NFS Root 檔案系統
既然我們要我們的 root 檔案系統在大部份的 Linux 客戶端以唯讀的方式掛上, 那就要使檔案系統有些微的不同, 因此我們將需要寫入權限的地方以 ramdisk 或 filecache 取代. 我們把這個檔案系統建立在 /export/linux/rootfs 目錄下, 而標準的版本則直接放到 /runtime/ 下. 登入您的 NFS 伺服器並在 /export/linux/rootfs目錄下,建立以下的目錄跟連結:
bin -> cache/bin
dev -> ramdisk/dev
etc -> ramdisk/etc
lib -> cache/lib
root -> ramdisk/root
sbin -> cache/sbin
tmp -> ramdisk/tmp
usr -> cache/usr
var -> ramdisk/var
cache/
bin -> /runtime/bin
lib -> /runtime/lib
sbin -> /runtime/sbin
usr -> /runtime/usr
mnt/
cdrom/
floppy/
tmp/
proc/
ramdisk/
dev -> /runtime/dev
etc -> /runtime/etc
root -> /runtime/root
tmp -> /runtime/tmp
var -> /runtime/var
就如您所見的, 它看起來像正常的 root filesystem, 除了少部份幾個是重新指到 /ramdisk, 有些則重新指到 cache 目錄. 當用唯讀的 NFS filesystem 開機, 我們將掛上一個已初始化過的 ramdisk 放在 /ramdisk 下. 同樣□ 自己硬碟的分割區將被掛在 /cache 給 NFS 快取使用. 粗略的說,這個檔案快取的原理是當the principle of the filecache is that whenever a symbolic link from the cache subdirectory is followed, it is replaced by its target. 如果目標自己是一個子目錄, 則每一個子目錄會轉換成一個符號連結並連結到外部檔案系統的原始位置. 注意檔案快取使用絕對符號連結是必須的, 即使它們在 NFS 伺服器上是無意義的. 如果您不喜歡這樣, 可以在您的 NFS 伺服器上,建立一個符號連結由 /runtime 到 /export/linux/rootfs/runtime .
在唯讀的客戶端加入一些設定的東西是必須的, 如此才可以掛上 ramdisk, 及設定檔案快取和偵測硬體以變更設定檔. 這些都由三個程序檔和一個組態檔來完成, 您可以把它復制到您的NFS 伺服器:
runtime/etc/rc.d/rc.ramdisk, 可以快速設定並掛上 ramdisk:
--------------------------------------------------------------------------------
#!/bin/sh
#
# 設定一個 ramdisk 因為 root 透過 NFS 以唯讀方式掛上
#
modprobe rd
gzip -c -d /runtime/lib/ramdisk.gz | dd of=/dev/ram bs=1k > /dev/null 2>&1
mount -n -t ext2 /dev/ram /ramdisk
--------------------------------------------------------------------------------
runtime/etc/rc.d/rc.sysdetect, 這是所有的機器各自獨立的設定檔, 包括偵測及分配 區域硬碟機的分割區給檔案快取使用. 為了空間的理由我們不在此份文件可列印的版本中包含此檔, 但您可以在超文件的版本找到它;
runtime/etc/rc.d/init.d/filecache.init 這是用來啟動檔案系統的:
--------------------------------------------------------------------------------
#!/bin/sh
#
# filecache: 檔案快取: 啟動檔案快取 (給 NFS root 用)
#
# 來源功能函數庫.
. /etc/rc.d/init.d/functions
# 看看我們如何呼叫功能函數.
case "$1" in
start)
if [ -e /cache -a -r /etc/filecache.conf ]; then
echo -n "Starting NFS filecache: "
# 把 var 與 tmp 移到區域性的硬碟機
rm -rf /cache/var /cache/tmp
(cd /ramdisk; tar cf - var tmp) | (cd /cache; tar xf -)
(cd /ramdisk; rm -rf var tmp;ln -s /cache/var;ln -s /cache/tmp
)
chmod 777 /cache/tmp
# 啟動檔案快取
daemon filecache -d on
echo ""
touch /var/lock/subsys/filecache
fi
;;
stop)
filecache off
rm -f /var/lock/subsys/filecache
;;
*)
echo "*** Usage: filecache.init {start|stop}"
exit 1
esac
exit 0
--------------------------------------------------------------------------------
runtime/etc/filecache.conf, 檔案快取的設定檔
--------------------------------------------------------------------------------
Max 100 MB 50 % #
Cache /runtime /cache
--------------------------------------------------------------------------------
前兩個檔案應該放在前兩個檔案應該放在 runtime/etc/rc.d/rc.sysinit, 檔案內最前面的位置, 如下所示:
--------------------------------------------------------------------------------
# 設定所需的 ramdisk (給 root NFS 唯讀的機器)
if [ -e /ramdisk -a -r /etc/rc.d/rc.ramdisk ]; then
/etc/rc.d/rc.ramdisk
fi
# 設定硬體各自獨立的參數 (給每個 root NFS使用)
if [ -r /etc/rc.d/rc.sysdetect ]; then
/etc/rc.d/rc.sysdetect
fi
--------------------------------------------------------------------------------
而第三個應該 be bound as usual to the System V init directories: we use links named S35filecache in the rc3.d and rc5.d directories, and K80filecache in the rc0.d, rc1.d, rc2.d and rc6.d directories.
檢查一下 rc.sysdetect 這個檔案, 並使它與您的硬體設備配合. 特別要注意的是, 如果您跟我們一樣沒有使用相同的顯示卡及螢幕 (這很可能發生的 :-), 看看它們在 /proc/pci 的回應並依此修改敘述檔. 在每台機器所使用的存放位置下, 其 rc.sysdetect 之中有一段內容為, 可自訂的設定檔 (例如 printcap), a為了能每台獨立工作, 您需要於伺服器的 dhcpd.conf 檔案中, 用特別的標記 option-132 設定每台機器所使用的位置. 在您繼續安裝之前, 您至少要先建立基本的幾個檔案 runtime/etc/fstab.ref 和 runtime/etc/hosts.ref , 這些將由 rc.sysdetect 敘述檔在啟動時透過偵測設定來完成, 為了動態的設定 X servver, 使用 RedHat 軟體套件, 有一件事您必須先變更的: 在 /usr/X11R6/bin 及 /usr/X11R6/lib/X11 目錄下, 有一些相關的連結設定檔及目錄應該改成絕對連結. 別忘了以後的 X server 更新安裝也要如法泡制.
把 filecache 安裝在 runtime/bin 目錄下, 並把它的使用說明 man page 安裝在 runtime/usr/man/man8 目錄下. 把 bootptag 或 dhcptag 安裝在 runtime/usr/local/bin 目錄下, 並且 bootptag.c (或 dhcptag.c) 必須放在 runtime/usr/local/src 目錄下: 它是一個發送 BOOTP/DHCP 要求, 並以相容於 shell 的標準輸出格式回應 BOOTP/DHCP 內容的小程式, 就如下的□例所示:
--------------------------------------------------------------------------------
bootp_your_ip='129.194.71.32'
bootp_server_ip='129.194.77.31'
bootp_filename='XXXclean'
bootp_subnet_mask='255.255.252.0'
bootp_routers='129.194.68.1'
bootp_domain_name_servers='129.194.69.200 129.194.8.7 129.194.4.32'
bootp_host_name='pc7132'
bootp_domain_name='unige.ch'
bootp_root_path='/export/linux/rootfs'
bootp_broadcast_address='129.194.71.255'
bootp_nis_domain='cuisunnet.unige.ch'
bootp_nis_servers='129.194.69.200'
bootp_option_132='dufour'
--------------------------------------------------------------------------------
標記的名稱與 RFC 2132 很相似. 如果您使用 dhcptag, 您將得到一些以 dhcp_ 開頭的標記, 這些是 DHCP-規格的選項內容; 為了顧及相容性, 其它的資訊仍然以 bootp_ 為字首. 我們使用這個程式自動設定 rc.sysdetect. 最後, 在 runtime/lib 安裝 makeramdisk script . 我們將用它自動產生 ramdisk 影像檔. 這些軟體都在超文件的版本中.
現在試由客戶端以 read-write NFS 開機 (仍然用硬碟開機). 它將偵測您客戶端的個別組態, 並產生適當的檔□ 檢查 /etc/fstab, /etc/hosts, /etc/sysconfig/network 是否設定正確. 如果您看到的不是這樣, 請在單人工作模式下重試一遍, 並找出您在 rc.sysdetect 敘述檔中所犯的錯誤.
等到它可以正常工作, 到 /lib 目錄下執行 ./makeramdisk. 將會花幾秒鐘, 來產生一個 ramdisk 影像檔給唯讀的 NFS 客戶端. 把產生出來得 ramdisk image 放在這 /lib/ramdisk.gz, 就這樣您的組態就緒了!
由 Bootprom 開機
如果您還未完成它, 請安裝您的 TCP/IP Bootprom-相容的 kernel 影像檔 (可在這找到 /usr/src/linux/arch/i386/boot/bpImage) 即您伺服器上的 /tftpboot/linux.PX . rc.sysdetect 這個敘述檔用來初始化您的 Linux swap 及 Linux 資料分割區. 因為要啟動它, 故編輯伺服器上 XXXclean.tab 這個檔案並改變分割區的型態由 hex 82 改為 hex 28, 及 hex 83 改為 hex 38. 這是一種未知的分割區型態, 但是安裝程序檔能把它當成預備分割區來辨識. 在 DHCP 的設定檔中, 把開機檔設定為 XXXclean , 使它能重新建立分割表. 別忘了在修改完設定檔後要重新啟動 DHCP daemon.
最後, unexport 可讀寫的 runtime 目錄, 並 export 唯讀的 /export/linux/rootfs 目錄. 重新啟動客戶端, 這一次使用開機使用 Linux 選單的選項. 您的系統現在已是 remote-boot Linux.
系統維護與更新
如果您以後想更新軟體,安裝一些錯誤修正檔或安全性修正檔, 請按照下列步驟:
Unexport rootfs 目錄
Export runtime 目錄為可讀可寫給您得客戶端
設定您客戶端的 nfsroot 目錄為 runtime (在 /etc/bootptab 中設定)
啟動您得 Linux 客戶端, 並安裝您想安裝的東東. 不要怕使用 rpm, 它可以做得很好 (只要小心當您安裝任何軟體套件時,要注意一些您做過的修正可能有些要作修改).
當您完成後重新換成正常的 export
這是指, 您必須在 local 安裝的狀態下, 才能更新您的 server-based 設定的軟體.
3.3 設定 DOS 6 及 Windows 3.1
在您的客戶端電腦, 使用您喜歡的 dos 軟碟開機 (記得開機時, 按空白鍵取消 BootPROM 開機). 格式化您硬碟中的 dos 分割區並加上 /S 參數, 使它放入作業系統. 建立一個名為 DOS 的子目錄, 把 DOS 拷貝進去. 安裝你所喜歡的網路客戶端程式 (例如 Microsoft LanManager), Windows 3.1, 等等. 使用 DHCP 通訊協定設定 IP 組態.
您必須恢復原本被 BootPROM 所使用掉的記憶體空間 (當 DOS 啟動後這些記憶體不再需要用到啦) 加入下面這一行到您 config.sys 內的第一行:
--------------------------------------------------------------------------------
device=\util\bputil.sys -r
--------------------------------------------------------------------------------
(bputil 是一個 TCP/IP BootPROM 工具磁片中的程式). 不用怕使用 EMM386 最佳化您所使用的記憶體, 您可以把網路卡 ROM 所佔的區域納入管理, 因為它在這時已經用不到了. 但要記得把網路卡所使用的 RAM 區塊不納入管理, 否則您將無法連接到您的伺服器.
如果您不讓您的客戶端機器使用無效的登入名稱, 把我們的 nobreak.sys pseudo-device 驅動程式放在您 config.sys 的開頭處並把以下這些東西放到您的 autoexec.bat:
--------------------------------------------------------------------------------
rem -- 我們使用 c:\logged 為一個旗號
del c:\logged >nul
:loginneeded
cls
echo Please type in your login name and password
echo.
net logon *
rem -- the login script 已經建立好 c:\logged
if not exist c:\logged goto loginneeded
del c:\logged
rem -- 使 break 功能生效
echo Yes >NOBRK
--------------------------------------------------------------------------------
重新開機並在開機選單中選擇 Boot from local hard-disk 選項, 確定可以開機.
把組態設定移到伺服器
回到伺服器上, 建立一個分享名稱為 admin , 用來放一些系統管理者用的東東. 如果伺服器是跑 Unix, 建議您把 /tftpboot 子目錄用 softlink 放一份到 admin , 這樣您可以直接由客戶端傳回開機影像檔. 在 admin 目錄內, 建一個 /utils 子目錄並放入如下的工具:
mrzip.exe, 一個用來壓縮您客戶端硬碟影像檔的程式.
mrunzip.exe, 一個用來回存您硬碟影像檔到伺服器的程式.
您也需要把一些用來清理硬碟及產生壓縮影像的批次檔放到相同的目錄下,這些批次檔如下:
--------------------------------------------------------------------------------
@echo off
if "%1"=="" goto error
echo >c:\lanman.dos\lmuser.ini
l:\utils\mrzip l:\tftpboot\%1
goto end
:error
echo Usage: MAKEIMG {image-name-without-extension}
:end
--------------------------------------------------------------------------------
現在回到您的客戶端, 以下將以 admin mount 為磁碟機 L: 為□例作說明接執行您建立的批次檔, 如果您還沒做那可以按下列的指令執行 (不一定要用絕對路徑 )
--------------------------------------------------------------------------------
L:\util\mrzip L:\tftpboot\win31
--------------------------------------------------------------------------------
一分鐘過後, 您伺服器上的 /tftpboot 子目錄下將有兩個新檔案, 名稱為 win31.imz, 是您硬碟內容的壓縮影響檔win31.chk, 這是相關的檢查檔 (是 partition boot record 細部修改後的拷貝). 在這真正的目錄內, 只要建立一個 bpunzip 的 symbolic link (或這用拷貝的) 且命名為 win31.P.
您的硬碟為主的遠端開機設定現在一切就緒啦.
測試遠端開機客戶端
現在重新啟動您的客戶端並在開機選單中選 DOS and Windows 3.1 的選項. bpunzip 這程式將傳給您一些它產生影像的表格訊息, 並自網路下載整個開機影像檔 (因這是第一次它看到這個開機影像檔). 這將會花掉一分鐘左右. 接它會解壓縮這個影像到 DOS 分割區, 並由他開機. 這就是你要的, 您的遠端開機客戶端完成啦 !
下一次您重新開機, 它只會解壓所這個影像檔, 大概在 30 秒內完成.
轉換設定檔給其他機器
如果您要為每台機器修正一些設定 (例如預設印表機), 或者如果您需要變更一些不能透過 DHCP 通訊協定修改的網路設定, 您可以使用 unzipreg.exe 程式來處理, 它必須放到客戶端的 autoexec.bat (原始程式碼在 這). 這程式將讀取一個由 bpunzip 產生的特殊隱藏檔案, 名稱為 BOOTP.ANS, 它的內容是由伺服器透過 BOOTP/DHCP 通訊協定回傳的. 接, 它將讀取第一個參數所指的檔案名稱, 藉由 BOOTP/DHCP 的回應內容, 以 UNZIPREG: 標簽名 : 這種格式取代所有的字串, 並把結果寫入第二個參數所指的檔案名稱. 例如, 如過您有個檔案名為 input.bat 內容為:
--------------------------------------------------------------------------------
set hostname=UNZIPREG:HOSTNAME:
set domainname=UNZIPREG:DOMAINNAME:
set gateway=UNZIPREG:ROUTER:
set subnetmask=UNZIPREG:SUBNET:
set printer=UNZIPREG:T180:
--------------------------------------------------------------------------------
而您執行了這個指令
--------------------------------------------------------------------------------
unzipreg input.bat output.bat
--------------------------------------------------------------------------------
您將得到一個檔案名為 output.bat 包含內容:
--------------------------------------------------------------------------------
set hostname=pc7179
set domainname=unige.ch
set gateway=129.194.76.1
set subnetmask=255.255.252.0
set printer=laserwriter1
--------------------------------------------------------------------------------
假設您的 DHCP 設定檔定義這台機器名為 pc7179, 領域名稱為 unige.ch, 等等, 而 option-180 標記是 laserwriter1.
也可以透過這種登入修改 Windows 桌面. 我們寫了一個小程式 simple program 用來增加 PROGMAN.INI 檔案, 允許為一群使用者設定同樣的桌面.
在為任何一台客戶端機器設定後, 別忘了使用 mrzip 重新建立磁碟影像檔以維持您的所有變更.
3.4 設定 Windows 95
在此份文件先前的版本, 我們使用過微軟公司的 Windows 95 server-based installation, 但是用這方法太過痛苦又不是那麼的有價值:
它就真的是非常的虛擬
大部份的軟體套件都不支援它而且如果您試去安裝結果通常是失敗的. 包括, Microsoft Internet Explorer, OnNet 32, Novell's Protected-mode client (這較 Microsoft Client for Netware安全).
因為微軟公司不提供 Windows 95 在真實模式下的 TCP/IP 相容的驅動程式所以您無法使用 Microsoft Network client over TCP/IP 這也就意味您不能使用 Samba
因為當客戶端一啟動就會鎖住一些動態連結檔造成許多程式幾乎無法更新, 如果您試去更新它則會出現違背分享(sharing violations)的錯誤.
因此幾個月前我們放棄這份錯誤百出的資料 (您仍然可在這找到 http://cuiwww.unige.ch/info/pc/remote-boot/win95old/win95old.html) 然後換到我們這個新的 disk-based 遠端啟動的概念. 基本上, 這種 Windows 95 安裝方法就跟安裝 DOS一樣容易.
建立一台獨立的客戶端
在客戶端用 DOS 開機, 如果您已經設定好 DOS/Windows 3.1 那就隨便由開機選項中選一個, 或者用一個軟碟開機 (按 space 鍵可以跳過 BootPROM). 使用第一種方法的優點是你已經有一台可使用網路的客戶端, 並且只需要把 Windows 95 的安裝磁片放到您的伺服器上的某個地方.
如果您由軟碟開機, 您的第一步是安裝作業系統, 方法是格式化您硬碟機的 DOS 分割區並用 /S 的選項. 如果您使用 DOS/Windows 3.1 的組態, 那麼首先您要清除一些您安裝 Windows 95 時不需要的檔案以及一些在您最後的開機影像中不需要的檔案 (例如, WINDOWS 這個目錄).
開始安裝 Windows 95, 照步驟把它裝在 local . 安裝最後, 程式會重新啟動您的客戶端電腦, 做一些設定並再重新啟動一次. 這幾次的重新開機, 您必須再您的開機選單選擇 Boot from local hard-disk 選項. 等到您設定好您所需要的驅動程式後, 您可以執行 defrag 做完整的硬碟重組 (包含重組未使用得磁碟空間).
您或許也想要使用 BootPROM 所佔掉的記憶體, 只要在 config.sys 第一行加上 :
--------------------------------------------------------------------------------
device=\util\bputil.sys -r
--------------------------------------------------------------------------------
(bputil 是放在 TCP/IP Bootprom 工具磁片中). 不同於 DOS, 您避需避免在 Windows 95 中使用 EMM386 .
如果您要使用 Windows 95 OSR2 (或叫 MSWIN 4.1, 或者 Windows 95 service pack 1, 或者 Windows 95 with Internet Explorer), 您要在 MSDOS.SYS 中的 [Options] 段加一行 (沒錯它是文字檔):
--------------------------------------------------------------------------------
AUTOSCAN=0
--------------------------------------------------------------------------------
這樣可以使 Windows 知道您開機時不自動啟動 ScanDisk .
當所有的軟體都放在伺服器時, 如果您要減輕網路及伺服器的負擔 (這將增進您的系統效率) , 您可以考慮安裝這套相當不錯的 Shared LAN Cache,由 Measurement Techniques, Inc 生產的 (參考 http://www.lancache.com). 這套軟體在每台客戶端電腦執行, 它會對所有從網路上取得的資料放在區域性的硬碟中快取. 即使像 MS-Office 在您第二次執行時也會更快... 您的每台客戶端電腦都要有一份版權, 不是它還不是很貴, 這家公司對於大專院校有特惠價格. 更好的是您可以到他們的網頁下載免費的評估版.
把設定檔移到伺服器
伺服器端, 如果您目前還沒有建一個名為 admin 的目錄, 那就建一個. 這將放一些系統管理要用的東西. 如果伺服器是 Unix 的機器, 現在把 admin 目錄用 softlink 到 /tftpboot 子目錄下, 這樣您可以由客戶端直接把影像檔放到這. 在 admin 目錄內, 建立一個 /utils 子目錄並把下列工具放進去:
mrzip.exe, 一個用來產生您客戶端硬碟機壓縮影像的程式.
mrunzip.exe, 一個用來把壓縮影像檔從伺服器回存到您客戶端硬碟的程式.
在您的客戶端開個 MS-DOS 視窗, 可以把您的 admin 用網路磁碟機掛在 L: 並執行下列的指令 (不一定要使用絕對路徑, 多打幾個字無害啦 :-)
--------------------------------------------------------------------------------
L:\util\mrzip L:\tftpboot\win95
--------------------------------------------------------------------------------
這將在伺服器的 /tftpboot 子目錄下, 產生兩個新檔案, 名為 win95.imz, 一個您客戶端硬碟機的壓縮影像及 win95.chk, 檢查用的檔案 (其實內容是把開機分割區做些許的變動). 真正的目錄, 只要建個名為 win95.P 的符號連結到 bpunzip (或者拷背一份) .
現在您的 Windows 95 遠端開機組態就完成啦.
測試遠端開機客戶端
現在重新啟動您的客戶端電腦並從開機選單中選擇 Windows 95 . bpunzip 程式將給您一些關於它更新影像表的訊息, 並且從網路下載整個開機影像 (如果它是第一次看到這個開機影像). 這大約會花掉兩分鐘. 接它將解壓縮這個影像檔到 DOS 分割區, 並啟動它. 就這樣, 您的遠端開機客戶端就序啦! 下一次您重新開機, 它只會解開這個影像檔, 大概會花 40 秒.
轉換為其它分身的設定
Windows 95 與 Windows 3.1 最大的不同是加入了即插即用的程式碼, 即自動偵測您的硬體設備. 它本身無舍壞處, 但問題是出在它太過靈敏, 而且有時後會出□.
如果您試用同樣的開機影像去啟動另一台客戶端機器, 您將在收到一堆 Windows 偵測到新的硬體設備的訊息: 一片新的音效卡, 一棵新的硬碟機, 一片新的網路卡, 或者一只新的滑鼠... 會這樣的原因有二:
這些設備可能使用不同的硬體資源 (比如, 滑鼠不是接在相同的連接埠, 音效卡不是接在同樣的擴充槽 - 沒錯, 這會被偵測到)
這些設備可能通知 Windows 95 它們的序號 (比如, 每台跑 Windows 95 的網路卡, 從最基礎的乙太網路位址就每台都不一樣了)
事實上 , 如果 Windows 95 的即插即用功能可以正常工作的話, 自動偵測變更的硬體設備並不會出問題, 所以如果即插即用功能失效時, 問題就來了. 例如, Windows 95 對上我們的羅技 PS2 滑鼠時就不能即插即用, 更糟的是滑鼠就消失了. 要解決這類問題方法就是, 盡可能使全部電腦有相同的設備.
您無法避免的問題是每台電腦的網路卡. 很不幸的, 給我們的 SMC EtherEX 使用的即插即用的程式碼會使電腦當機. 唯一的解法是使 Windows 95 相信它已經知道有這片網路卡, 且不需觸動即插即用機制. 這個技巧就是透過開機自動執行檔 autoexec.bat , 自動的把關於這片網路卡的設定值加入 Windows 95 的系統注冊資訊. 要注意的是使用 PCI 的網路卡並不需要這個技巧.
到您的客戶端電腦, 編輯開機自動執行檔 autoexec.bat 並加入下列幾行:
--------------------------------------------------------------------------------
rem --- 修正 Windows 系統注冊資訊以避免即插即用功能偵測
cls
unzipreg c:\lib\smc.reg c:\temp\smc.reg
regedit /L:c:\win95\system.dat /R:c:\win95\user.dat c:\temp\smc.reg
echo.
del c:\temp\smc.reg
--------------------------------------------------------------------------------
regedit 是標準 Windows 95 的程式. 如果您在 Windows 95下執行它,它可以幫您流覽您的系統登錄資訊, 或者如果您在 DOS 下執行它, 它可以對您的系統登錄資訊做一些簡單的修正. unzipreg.exe 是一個自制的小程式, 您可以放在您的路徑下的任何地方 (原始程式至在 這). 它將讀取一個由 bpunzip 所產生的特別隱藏檔案, 名稱是 BOOTP.ANS, 它包含來自伺服器的原始 BOOTP/DHCP 回應資訊. 然後, 它將讀取第一個參數的檔案(c:\lib\smc.reg), 然後以 BOOTP/DHCP 回應的資料取代檔案內所有以 UNZIPREG:tagname: 為格式的內容, 接寫入第二個參數的檔案(c:\temp\smc.reg).
在 lib 子目錄下, 我們有個名為 smc.reg 的檔案其內容如下:
--------------------------------------------------------------------------------
REGEDIT4
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0]
"HardwareID"="*SMC8416,ISAPNP\SMC8416"
"HWRevision"="1.0.10"
"DeviceDesc"="SMC EtherEZ (8416)"
"Class"="Net"
"Driver"="Net\\0001"
"CompatibleIDs"="*SMC8416"
"Mfg"="SMC"
"ConfigFlags"=hex:10,00,00,00
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0\Bindings]
"MSTCP\\0001"=""
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C0\LogConfig]
"0000"=hex:00,04,00,00,00,20,00,00,10,00,00,00,04,00,00,00,00,00,00,00,a8,0e,\
00,00,20,00,00,00,02,00,00,00,01,00,0c,00,00,00,00,00,00,00,00,00,e0,ff,20,\
00,40,02,ff,03,00,00,04,03,2c,00,00,00,01,00,00,00,01,00,14,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,e0,ff,ff,00,20,00,00,00,00,0c,00,ff,ff,0f,00,00,\
00,00,00,2c,00,00,00,01,80,00,00,01,00,14,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,e0,ff,ff,00,80,00,00,00,00,0c,00,ff,5f,10,00,00,00,00,00,00,00,00,\
00
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1]
"HardwareID"="*SMC8416,ISAPNP\SMC8416"
"HWRevision"="1.0.10"
"DeviceDesc"="SMC EtherEZ (8416)"
"Class"="Net"
"Driver"="Net\\0001"
"CompatibleIDs"="*SMC8416"
"Mfg"="SMC"
"ConfigFlags"=hex:10,00,00,00
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1\Bindings]
"MSTCP\\0001"=""
[HKEY_LOCAL_MACHINE\Enum\ISAPNP\SMC8416\UNZIPREG:MACID:C1\LogConfig]
"0000"=hex:00,04,00,00,00,20,00,00,10,00,00,00,04,00,00,00,00,00,00,00,a8,0e,\
00,00,20,00,00,00,02,00,00,00,01,00,0c,00,00,00,00,00,00,00,00,00,e0,ff,20,\
00,40,02,ff,03,00,00,04,03,2c,00,00,00,01,00,00,00,01,00,14,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,e0,ff,ff,00,20,00,00,00,00,0c,00,ff,ff,0f,00,00,\
00,00,00,2c,00,00,00,01,80,00,00,01,00,14,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,e0,ff,ff,00,80,00,00,00,00,0c,00,ff,5f,10,00,00,00,00,00,00,00,00,\
00
--------------------------------------------------------------------------------
這個檔案一開始由 Windows 95 的 regedit 產生. 我們把關於網路卡的設定部份輸出成一個檔案 ( HKEY_LOCAL_MACHINE/Enum/ISAPNP/SMC8416) 然後用 UNZIPREG:MACID: 記號取代網路卡的硬體位址. 當我們在這檔案中執行 unzipreg , 它會自動的以網路卡真實的硬體位址值取代我們所設定的記號. 注意這裡有個數字在 MACID 之後的有時是 C0 有時是 C1. 即使放一個不存在的網路卡在這個登錄檔中不會出□, 我們還是把兩項都放進去.
還要一次ㄡ, 這整個技巧對 PCI 網路卡而言並不需要. 順便一提的是, 我們可以用同樣的方法自動的配置主電腦名稱, 當 Windows 95 不能透過 DHCP 取的設定時. 我們只須加入下列幾行到我們的 smc.reg 檔案中:
--------------------------------------------------------------------------------
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"ComputerName"="UNZIPREG:HOSTNAME:"
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP]
"HostName"="UNZIPREG:HOSTNAME:"
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName]
"ComputerName"="UNZIPREG:HOSTNAME:"
--------------------------------------------------------------------------------
您也可以使用同樣的機器按照機器的型態跟位置來設定其他的環境. 這個□例, 您一樣可以參考 DOS/Windows 3.1 那一段的敘述.
在變更任何客戶端機器的設定後, 千萬別忘了用 mrzip 重新建立磁碟影像, 否則您所有的設定都會不見.
使用這個系統登錄資訊的小技巧, 您的設定資訊將可以正常的轉移到所有的機器. 如果您無法避免 Windows 去偵測一些機器上的新硬體, 試由這台機器重新建立磁碟影像檔. 包含針對這台機器所設定的登錄資訊也要放入磁碟影像中, 如果順利的話可以解決這個問題.
當磁碟影像檔解壓縮時會花一些時間 (通常是 20-30 秒.), 您可以給使用者一些訊息或者就放張漂漂的圖給他們看. 這個工作可以很簡單的完成 (看看下一篇文件的 BPUNZIP ).
如果您想得到更多設定 Samba 的資訊與工具給遠端開機的電腦使用, 我們還寫了另一份文件. 可以看看 http://cuiwww.unige.ch/info/pc.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
4. TCP/IP Bootprom 相關工具程式
這一段將把我們為 TCP/IP BootPROM 所寫的程式作一些說明.
4.1 MENUEDIT
這是在 DOS 下執行的程式, 用來編輯給 TCP/IP Bootprom 的開機選單敘述檔. 它很簡單, 不過比原廠所提供的開機選單敘述檔來的方便. 您可以按 F1 看到一些線上說明. 如果您想要加強他的功能 ( 比如加入剪貼功能), 我會很樂意發表您的新版本.
原始程式為 Pascal 語法可在 這取得.
4.2 BPHDBOOT
此 boot image 將載入硬碟的 master boot record 並執行它.
這個 boot image 對於那些需要重新開機才能完成所有設定的作業系統是相當方便的. 它也可以用在當您要強迫清理硬碟的時候.
原始程式為 Assembler 語法可在 這取得.
4.3 BPCLEAN
此 boot image 將重新寫入硬碟的 master boot record, 包含硬碟的分割表. 此外, 它可以快速格式化 DOS (FAT16) 資料分割區 (但無法使它可開機). 因為版權的關系, 我們必須重新規劃我們的 master boot record 與 FAT16 開機磁區, 除了一些遠端開機的訊息外, 它們與標準的分割區大致上是一樣的. 為了使這個程式能工作, 您或許需要關掉 BIOS 對 master boot record 的保護 (因為每次開機都更新一遍).
這個程式下載與這個程式同樣主檔名的分割表敘述檔其副檔名為 .tab. 這個檔案可以包含空行, 注解由記號開始但不得超過 512 個字元.
前四個不含空白及注解的幾行應該包含四個硬碟分割區的敘述. 第五個不含空白及注解的那一行應包含下一個要載入的開機影像檔名稱.
分割區的敘述行由由空格或 tab 鍵來分割, 必須如下這三種格式:
--------------------------------------------------------------------------------
type boot? 1st-cyl 1st-head 1st-sect last-cyl last-head last-sect
type boot? 1st-cyl 1st-head 1st-sect relative-size
type boot? relative-size
--------------------------------------------------------------------------------
第一種格式, 給予精確的分割區敘述.
第二種格式, 第一個 sector 位置有定義但分割區的結束位置是依要求的分割區大小自動計算.
第三種格式, 第一個 sector 依照前一個分割區的結束位置自動推算且分割區的結束位置是靠所要求的分割區大小自動計算. 這種格式是完全決定於硬碟的大小.
所有的數字都假設十進制, 除非字首有出現錢字號, 這樣才會被設定為十六進制.
分割區的 type DOS 分割區小於 32 Mb 為 4, DOS 分割區在 32Mb 到 500Mb 之間為 6 . 其他的值可以在使用 Linux fdisk help 找到例子.
如果可開機分割區 boot? 這一段應該設定成 Y 而其它分割區設定成 N . 這個旗標是給主要開機紀錄 (master boot record) 所使用.
1st-cyl, 1st-head 及 1st-sect 是關系這個分割區的第一個磁區. 千萬別忘記,磁柱及磁頭是從 0 開始, 而磁區是從 1 開始.
last-cyl, last-head 及 last-sect 是關系 這個分割區的最後一個磁區. 分割區通常結束在磁柱的邊界.
分割區所佔的 大小比例 可以下列的方法表示:
+ 10 Mb 是指分割區至少要有 10 Mb (即 2048 磁區);
- 100 Mb 是指分割區必須預留至少 100 Mb (即 20480 磁區) 可用的空間給下一個分割區;
+ 30 % 是指分割區必須在目前的位置, 佔住至少 30 perceny 的空間;
- 70 % 是指分割區應留下至少 70 percent 的空間在目前的位置給下一個分割區.
以大小比例定義分割區時通常會在磁柱的邊界結束, 並且除非第一個分磁區的位置是正確的, 才會從磁頭的邊界處開始. 以我們所知, 這是為了符合標準的使用.
當一個標簽附加在一個分割區敘述句之後, 相對應的分割區會被格式化成 DOS FAT16 的分割區,無論原本是哪種格式. 分割區形式 4 跟 6 是相容的, 而且它在清理學生所使用的電腦時相當有用的. 這種快速格式化只要花幾十秒.
預設值, bpclean 是編譯成支援 LBA (不超過 1024 個磁柱, 但可達 256 個磁頭). 某些奇怪的 BIOS 及某些奇怪的作業系統較喜歡另一種 NORMAL 模式 (可達 4096 個磁柱, 但不能超過 64 個磁頭); 如果您需要這種模式, 那麼把 LBA 的定義從原始程式裡改成注解然後重新編譯一遍.
Assembler 語法的原始程式碼在 這.
4.4 MRZIP, MRUNZIP and BPUNZIP
MrZip 是一個在 DOS 下執行的程式, 用來建立壓縮的 DOS FAT 16分割區. 第一步, 先分析磁碟機的使用狀況, 它然後只對有使用到的資料做壓縮, 接用相當快的 (並不是最有效率的) 統計的壓縮演算法則來壓縮資料. 已經支援 Windows 95 的長檔名, 但是副檔名為 .SWP 的檔案並不會儲存. 在各式不同的檔案類型中,已經包含許多 magic numbers, 且已跟原始資料做過檢查的 處理. 當檔案容量的高位序號數字增大時, 這個檢查碼儲存在檔案的容量的低位序號數字中 . 如果您在建立壓縮影像檔前把您硬碟的序號歸零, 則您可以使用這個數字來 追蹤您影像檔的更新次數.
因為 MrZip 會使用直接磁碟存取, 建議您在執行前先把磁碟機快取區的資料回存. Windows 95 似乎是對做一制性的管理直接磁碟存取□
MrUnzip 是一個在 DOS 下執行的程式,用來解壓縮磁碟影像檔到硬碟機中, 使用直接磁碟存取. 不要跟任何具有快取功能的程式一起使用, 因為光是這個程式就已經快把 DOS 給折磨死了... 不管怎樣, 如果您要恢復一個無法開機的機器那麼它會是將很有用的.
BpUnzip 是一個開機影像用來管理壓縮硬碟的影像檔. 粗略的來說, 它將由硬碟機的影像來開機並用同樣的名稱, 副檔名為 .imz.
首先, 它會先讀取分割區表並檢查
第一個 DOS 分割區, 磁碟影像檔回存的地方
分割區中最後一個磁柱, 以後將儲存壓縮硬碟影像.
接它會讀取第一個未用到的磁柱的第一個磁區並檢查是否已經有一個影像表. 如果不是這樣, 或者影像表內容有點矛盾, 或者兩個 shift 鍵都被按下時 (一種特別的 general-cleaning 信號), 這個影像表將會被清除.
如果影像表還沒有包含所需的影像, 它會透過 TFTP 通訊協定載入並加在影像表內. 如果在前面所載入的影像之後, 沒有足夠的空間來存放舊的影像資料時, 則舊的影像檔會被砍掉. 如果影像檔已經存在影像表中, 最新的開機影像磁區 (包含檢查碼) 將會透過 TFTP 通訊協定載入並且與目前得影像檔做比較. 如果它們不完全一致, 則壓縮影像會再重新載入一次.
這個影像接會被解壓縮, 所有的 magic numbers 都再確認, 並檢查解壓縮後的資料. 如果解壓縮失敗, 或者檢查結果與最新的開機磁區不吻合, 則影像檔將會重新載入並修正一次. 否則, 程式會把控制權交給開機磁區, 作業系統就會啟動.
如果 bpunzip 透過副檔名 .P 載入 (如 win95.P), 則它會假設 TFTP 伺服器在 port 59 有加強型的介面 (在正規的 port 69 之外所附加的). BpUnzip 將透過它以較大的封包格式載入影像檔, 通常是以 1408 bytes 來取代每個封包 512 bytes (這種轉換使用大封包的技巧有點像TCP/IP Bootprom所使用的).
同理, 如果 bpunzip 是透過副檔名 .G 載入 (如 win95.GP), 則它將會先下載一個以同樣主檔名的 GIF 圖檔 (如 win95.gif) 並在開機時把它秀在營幕上. 這個程式只能在 800x600, 256 色的模式下工作 (即使 GIF 圖檔可以更小或者使用更少的顏色). 如果您想要看看開機的流程記錄, 則這個標題可以按 ESC 鍵移除. 如果您的顯示卡不是 VESA 相容型, 則這個功能您不能使用. 另外,還要注意的是這個標記的執行完成棒是使用調色盤的 最後十六色來顯示. 如果不想使用這個功能, 或者希望修正它. 順便一提, 如果您不喜歡我們標記的執行完成棒, 您可以自由的改變它 (在 GIFDATA.ASM), 但請保留我們的名字在可以看得到的地方.
目地分割區不需要完全跟原始的大小相同 ; 它只要有足夠的空間來存放分割區中,所有使用到的磁柱. 如果目地分割區小於原始的分割區, 則 檔案對硬表 FAT 將會因此而萎縮 (但磁柱大小則不變). 如果目地分割區大小大於原始分割區, 則 檔案對應表 FAT 將會盡可能的擴大. 然而, 如果目地分割區比原始分割區大更多, 可能 65518 個磁柱就不夠覆蓋所有的空間 (因為磁柱大小是無法改變的). 像這種狀況, bpunzip 將會產生警告,告訴使用者有一些空間流失掉了.
預設值, bpunzip 是編譯成支援 LBA (不超過 1024 個磁柱, 但可達 256 個磁頭). 某些奇怪的 BIOS 及某些奇怪的作業系統較喜歡另一種 NORMAL 模式 (可達 4096 個磁柱, 但不能超過 64 個磁頭); 如果您需要這種模式, 那麼把 LBA 的定義從原始程式裡改成注解然後重新編譯一遍.
Assembler 語法的原始程式碼在 這.
如果使用 Solaris 2.5 當 TFTP server. 在處理超過 16 Megabytes 時, 會有問題. 這是因為它無法處理超過 32768 packets per file 這是一個已知的臭□, 但直到目前 SUN 仍未提供修正. 我們建議您使用更有效率的加強型 extended TFTP server (它也支援其他作業系統, 就在 TCP/IP Bootprom 工具磁片中).
4.5 NOBREAK
Nobreak.sys 相當小 (大概只有 350 bytes ) 的驅動程式, 它將加在您 config.sys 中的開始處. 它的目的是保護開機程序, 直到使用者登入. DOS 為這提供一種設定 (名為 BREAK=OFF), 但它不夠暴力, 並且在 autoexec.bat 沒舍用. 我們的驅動程式工作原理是當中斷要求產生時修改鍵盤的掃描碼, 直接在 BIOS 層工作. 以這方法, 所有的程式在中斷未致能前都收不道中斷訊息.
這個驅動程式必須放在 config.sys 檔中(或者使用 Undocumented DOS 的 devlod 程式). 接, 可以透過傳送 Yes 到 NOBRK 這個虛擬裝置, 並且傳送 No 而禁能 (事實上, 只需要第一個字元, Y 或 N 才是最重要的).
因為這個驅動程式依靠 BIOS, 所以它只能在 DOS 跟 Windows 3.1.下工作 Windows 95 則有它自己的低階鍵盤處理機制.
Assembler 語法的原始程式碼在 這.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
5. 討論
我們在這將討論關於這個架構的相關理論性議題.
5.1 Bootproms 與 硬碟機
Bootproms 已經出現相當久了, 而通常我們只會把它們使用在無磁碟機的電腦. 但我們主張, Bootproms 用在具有硬碟機的電腦將更有趣, 因為我們得到了雙面的利益:
一個 Bootprom 可以使得您的架構更加穩定, 因為它可以確定電腦必定會以同一個開機步驟開機, 即使是中了病毒或分割表損毀. 還可以這樣作, 也就是我們做過的, 在載入作業系統之前先清理您的硬碟
有硬碟機使得這個組態更加有效率, 因為它可以透過快取而降低網路負載, 並允許更有效率的 swap.
5.2 使用那一種 Bootprom ?
個人電腦可用的 Bootproms 相當多. 我們有許多理由選擇 Köppen EDV GmbH 的 TCP/IP Bootprom :
它是以 BOOTP/DHCP 通訊協定為基礎, 這些通訊協定已由 RFCs 公開的定義. 它的定義是當 BOOTP/DHCP 伺服器收到未知的客戶端的要求訊號, 將不會有任何回應. 這是用來防止有多台伺服器時而互相幹擾, 當您苦於 MSD 開機伺服器的體驗. 而且, 而且 IP 只能在子網路內廣播, 這樣比起 IPX 會產生較低的雜訊.
它可使用多種作業系統.
技術資料與 API 資料可索取.
可以自己寫開機載入程式 (我們試過)
開機的程序可以有更多的變化. 特別是, 它可以允許我們在舊式的 AST 電腦關掉軟碟的開機, 這在原機器的 BIOS 不包括這項功能.
提供建立與維護開機選單的工具.
--------------------------------------------------------------------------------
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |