首先, 調整機器位置使手邊有下列兩台機器:
如果你想要測試您的組態設定而您還沒拿到 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 通訊協定被限制在子網域中使用. 如果客戶端與伺服端不在同一網域, 您必須在這兩網域間 架設閘道器. 現在, 先假設兩台機器在相同的網域中.
首先, 我們先做所有作業系統都要得做的事,如:
在伺服器端的 /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
完整的檔案格式在後面會敘述. 現在您只要知道這些
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 伺服器.
在您的客戶端架設
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要求).
首先, 到您的 /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 至少需要
以下這些
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 使用.
您的伺服器要有足夠的空間來保存您的整個 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 檔案系統下可以工作.
既然我們要我們的 root 檔案系統在大部份的 Linux 客戶端以唯讀的方式掛上, 那就要使檔
案系統有些微的不同, 因此我們將需要寫入權限的地方以 ramdisk 或 filecache 取代. 我們把
這個檔案系統建立在 /export/linux/rootfs
目錄下, 而標準的版本則直接放到 /runtime/
下. 登入您
的 NFS 伺服器並在 /export/linux/rootfs
目錄下,建立以下的目錄跟連結:
/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
, 就這樣您的組態就緒了!
如果您還未完成它, 請安裝您的 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.
如果您以後想更新軟體,安裝一些錯誤修正檔或安全性修正檔, 請按照下列步驟:
rootfs
目錄runtime
目錄為可讀可寫給您得客戶端nfsroot
目錄為 runtime (在 /etc/bootptab
中設定)rpm
, 它可以做得很好 (只要小心當
您安裝任何軟體套件時,要注意一些您做過的修正可能有些要作修改).
在您的客戶端電腦, 使用您喜歡的 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
重新建立磁碟影像檔以維持您的所有變更.
在此份文件先前的版本, 我們使用過微軟公司的 Windows 95 server-based installation, 但是用這方法太 過痛苦又不是那麼的有價值:
在客戶端用 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 偵測 到新的硬體 設備的訊息: 一片新的音效卡, 一棵新的硬碟機, 一片新的網路卡, 或者一隻新的滑鼠... 會這樣的原 因有二:
您無法避免的問題是每台電腦的網路卡. 很不幸的, 給我們的 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
.