首先, 调整机器位置使手边有下列两台机器:
如果你想要测试您的组态设定而您还没拿到 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
.