首先, 调整机器位置使手边有下列两台机器:
http://www.bootix.com
下载测试版磁片. 这个磁片可以使您的电脑就好像是插上 TCP/IP BootPROM 一般.
如果你已有 Boot ROM, 你要先启动它. 如果您使用 Bootix 的 TCP/IP BootPROM, 你可以用网路卡制造商所提供的特殊程序来启用它. 如果你用 PXE BootPROM, 你只要经由 BIOS 设定, 改变预设的开机装置 (default boot device) 就可以了.
学生所使用的电脑, 我们设定由网路开机, 而不能透过硬盘及软盘开机. 助教的电脑, 我们设定先由网路开机, 但也允许硬盘与软盘开机.
在伺服器端, 只需要下列的服务:
http://developer.intel.com/ial/wfm/tools/pxepdk20/index.htm
.
DHCP 伺服器所伴演的角色是传送 IP 位址给用户端并让它自 TFTP 伺服器下载,
名为 bpbatch.P
的文档. DHCP 是重叠于 BOOTP 的通讯协定.
如果你用 Bootix 的 TCP/IP BootPROM, 你可以不用 DHCP 伺服器 (用旧的 BOOTP 伺服器).
在 Windows NT, 你也需要类似的原生 DHCP 伺服器.
如果你用 Bootix 的 TCP/IP BootPROM, 你则要用一个小技巧来定义可开机档的档名
(可由 Bootix 的 WWW 网页获得更多信息). 如果你用 PXE BootPROM,
你还需要一个用 DHCP 选项 67 定义可开机档的档名.
还要设定 VendorClass (DHCP 选项 60) 为 "PXEClient" 及
VendorOptions (DHCP 选项 43) 为 01,04,00,00,00,00,ff
(参考下文).
在 Linux, 最佳的选择是来自 网际网路软件协会 (Internet Software Consortium) 的标准 DHCP 伺服器. 如果你用 PXE BootPROM, 则在常见的设定外, 你还要多加下面两个设定:
option dhcp-class-identifier "PXEClient"
.option vendor-encapsulated-options 01:04:00:00:00:00:ff;
.如果你使用 ISC DHCP 3.0, 则语法上有些微出入. 以下是 DHCP 3.0 兼容的设定档:
# DHCP ISC 3.0 & BpBatch 用的 DHCP 设定档 # # 全域选项 option subnet-mask 255.255.255.0; default-lease-time -1; # 定义 PXE 规范的选项 # Code 1: 指到开机档所在位置机器的 IP 位址 # Code 2: 用户端电脑监控 MTFTP 回应的 UDP 埠号 # Code 3: MTFTP 伺服器用来监听 MTFTP 回应的 UDP 埠号 # Code 4: 用户端电脑在试著启动一个新的 MTFTP 传输之前的等待秒数 # Code 5: 用户端电脑在试著重新启动一个新的 MTFTP 传输之前的等待秒数 option space PXE; option PXE.mtftp-ip code 1 = ip-address; option PXE.mtftp-cport code 2 = unsigned integer 16; option PXE.mtftp-sport code 3 = unsigned integer 16; option PXE.mtftp-tmout code 4 = unsigned integer 8; option PXE.mtftp-delay code 5 = unsigned integer 8; # 规范子网域的选项 subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; # 规范主机的选项 host pctest { hardware ethernet 00:01:02:03:04:05; filename "bpbatch.P"; next-server 192.168.1.2; fixed-address 192.168.1.100; # BpBatch 命令列参数: -i == 交谈式 # 你也可以定义一脚本程序档名 (不要把副档名 .bpb 写进去) option option-135 "-i"; # PXE 规范的选项 class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; option vendor-class-identifier "PXEClient"; # 至少设定一个 vendor-specific 选项. # 我们设定 MCAST IP 位址为 0.0.0.0 也就告诉 BootPROM 继续使用 # TFTP 通讯协定 (位址 0.0.0.0 意谓著 "没有位址") option PXE.mtftp-ip 0.0.0.0; vendor-option-space PXE; } } }
在 Solaris 上, 你依然可以使用 网际网路软件协会 的 DHCP 伺服器 (可以在 Web 上找到), 或使用 Solaris 的 DHCP 伺服器 (Solaris 2.5 版以后都有附). 然而, 用 Solaris DHCP 伺服器似乎无法在 DHCP 设定中提供, 用户类别的辨识码. 你必须安装一个 Proxy DHCP 伺服器. 不过, 这个 Proxy DHCP 伺服器必须安装在另一台电脑上, 因为 Solaris DHCP 伺服器会锁住 DHCP 埠.
我们建议您设定用户端电脑的 DHCP 参数为无限制的使用周期. 别忘了 BOOTP/DHCP 的要求信号受限于子网域内传送. 如果用户端与伺服器不在同一个子网域你就必须安装一个 BOOTP/DHCP Relay 代理程序在两个子网域之间. 但现在, 先假设两台机器都在同一个子网域.
如果您使用 PXE 2.0 BootPROM, 您只能使用 site-specific 选项第 128 至 135 以传递信息给 BpBatch. 大于 135 的选项会被 PXE 2.0 BootPROM 忽略掉. 选项 135 用来传递 BpBatch 的命令列参数. 所以你还有 6 个选项可以用来自订.
Proxy DHCP 伺服器所伴演的角色是用来克服 DHCP 伺服器的限制并提供 PXE 规范的延伸信息. Proxy DHCP 伺服器只为了与 PXE BootPROM 搭配使用. 因此, Proxy DHCP 伺服器不是必要的. 如果你的 DHCP 伺服器能回应所有 PXE BootPROM 要求的选项, 则 PXE BootPROM 就不会去寻找 Proxy DHCP 伺服器 (aka BINL). 而我们所说的 "所有 PXE BootPROM 要求的选项", 是指 IP 选项 (IP 位址, 闸道器, 子网域, 主机名,...) 以及 PXE vendor-specific 选项 (vendor-class -- 选项 60 -- 用以设定 "PXEClient" 而 vendor-encapsulated-options 设定一些有意义的信息给 PXE BootPROM. 你可以用 01:04:00:00:00:00:ff 如果你不知道对 PXE BootPROM 而言那一个信息是有意义的). 更完整的叙述请看下面的说明.
BpBatch 本身功能就很完整, 你不须使用任何 PXE 规范的 DHCP 延伸参数 (选单, 等.). 然而, 如果您的 DHCP 伺服器不能提供最低限度的 PXE 兼容, 则您就需要一台 Proxy DHCP 伺服器, 否则您的 PXE BootPROM 无法继续使用. 最低限度的兼容, 是指允许设定 VendorClass 及 VendorOptions (选项 60 及 43 ).
在 Windows NT 下, 您可以试著用 Intel WfM PDK (可在他们的网页找到), 但它并不容易操作. 我们建议您找一台在子网域中, 跑 Linux 的机器安装我们的小型 Proxy DHCP 伺服器. 我们的 Proxy DHCP 伺服器对 BpBatch 的最大优点是, 让你可以自订选项 155 vendor 标签让 BpBatch 解释为命令.
在 Linux 及 Solaris 下, 您可以使用我们的 Proxy DHCP 伺服器程序,
你只需设定好 TFTP 伺服器的 IP 位址, 可开机档档名及其它附加参数,
就可以完成所有的工作. 如果在伺服器上的 DHCP 通讯埠已被其它伺服程序使用,
则 Proxy DHCP 伺服器会改在 4011 埠上执行.
在这种状况下, 使用 DHCP 通讯埠的程序必须回应
PXEClinet
给 client class.
这样 PXE 用户端才会知道要去试著在 4011 埠上通连.
如果你想更了解 PXE 对 DHCP 的延伸功能, 可以在 Intel 的网页上找到更多说明. 但是这些文章有点怪怪的, 这个通讯协定竟然设定在额外的位置号码上, 用以得到更大的弹性. 对这个问题唯一的解释是 PXE 用户端需要完整的 增强型的 DHCP 回应. 如果它只收到标准的 DHCP 要求, 它会一直等到收到才停住.
PXEClient
.01:04:00:00:00:00
,
这可以被 PXE BootPROM 所接受)
TFTP 伺服器是相当简单的文档伺服器. 最基本的版本中, TFTP 通讯协定乃是采用每个区块 512 位元组, 这个作法相当没效率. Bootix 的 TCP/IP BootPROM 及 PXE BootPROM 允许使用较大的区块来传送 (1408 位元组), 此法可以大幅加速传输速度. 但, 这只能在增强型的 TFTP 伺服器上工作.
在 Windows NT 环境下, 我们建议采用 Intel 的 TFTP 伺服器,
可以在 Intel PXE Product Development Kit for Windows 找到.
你可以在这找到这个 PDK
http://developer.intel.com/ial/wfm/tools/pxepdk20/index.htm
.
极重要的问题: 如果你计划在 Windows NT 上使用 Intel 的 TFTP 伺服器,
别忘记必须重新命名你的 BpBatch 载入器名称, 由 bpbatch.P 改为 bpbatch.B.
这将告知 BpBatch 采用与 Intel 兼容的 TFTP 选项.
Intel 的 PXE PDK 还包还含了评估版的 PXE BootPROM 程序码, 给 Intel 的 EPRO100 族系网路卡使用, 亦包含了用来更新快闪内存的工具程序以升级为 BootPROM 内容为最新版的 PXE.
在 Linux 环境下, 你可以使用大部份套件中所含的 tftp daemon,
但不具备增强的 TFTP 模式 (1408 位元组的封包).
我们建议使用 Bootix 的增强型 TFTP 伺服器, 可以在我们的目录下找到
(
http://cuiwww.unige.ch/info/pc/remote-boot/soft/
),
档名为 incomtftpdlx.tar.gz
.
在 Solaris 环境下, 你可以使用 Bootix 增强型 TFTP 伺服器,
也可以在我们的目录下找到 (档名为 incomtftpdsun.tar.gz
).
另一种可用的选择:
John Martin (j.martin@abdn.ac.uk
) 已把 Linux 上的
tftpd
移殖到 Solaris 上. 你可以在这找到
http://www.csd.abdn.ac.uk/~jmartin/tftpd.tar.gz
.
如果你较喜欢使用标准的 TFTP 伺服器, 把所有可开机映像档档名的副档名 P
拿掉, 这样可以告知 BootPROM 采用标准的 TFTP 通讯埠通讯.
(这个小技巧是 Bootix 给 TCP/IP BootPROM 使用. 我们也可以用这个简单的方法来选择
预设的 TFTP 通讯埠给 PXE BootPROM 使用).
摘要来说, 如果你计划使用标准的 TFTP 伺服器,
则把 BpBatch 载入器档名的副档名 移去 (也就是改为 bpbatch).
如果你计划使用 Bootix 支持在 59 埠, 以 1408 位元组封包的 TFTP 伺服器,
则你的载入器档名必须有副档名 .P
. 最后,
如果你计划使用 Intel 的 TFTP 伺服器 (或 Bootware 的那个伺服器),
则把载入器命名为 bpbatch.B
.
首先, 我们把所有作业系统相同的部份设定好. 如: 批次档的解译器. 然后, 再针对各种作业系统来完成, 我们需要下列的步骤:
我们的范例是假设你的用户端电脑的硬盘空间至少有 1.4 G 以上. 如果低于这个值, 那就要缩小分割区, 但请记住你要保留几百 MB 空间不被对应到 (也就是, 不要连最后一个分割区都已画分到最后一个磁柱) 以保留空间给特别的快取分割区. 然而, 快取区通常接在最后一个对应到的磁柱开始对应, 如果你不想用相同大小来做测试, 你将下载同样的文档数次 (快取区会被自动清除).
别灰心. 如果你一直无法让它正常工作, 先参考 问题集 那一节,
搞不好你的问题已被解决过了 (请自网页取得最新版本).
再不行, 查一下 BpBatch 讨论区. 或许有人跟你遇到同样的问题,
而解答可以在讨论区找到. 讨论区的网址是:
http://cuiwww.unige.ch/info/pc/remote-boot/forum/
.
如果还是无法正常工作, 考虑看看监控一下网路流量是否是网路本身的问题
(在 Linux 环境下, 可以用 tcpdump
而 Solaris 环境, 可以用 snoop
).
如果你依然无法让它正常工作, 送一封 E-mail 到 support@bpbatch.org
.
如果你的问题与硬件开机的设定有密切关系, 我们会试著解决你的问题.
取得 BpBatch
软件, 不管是 .zip
或 .tar.gz
格式.
可执行档都放在
http://cuiwww.unige.ch/info/pc/remote-boot/soft/bpb-exe.zip
.
http://cuiwww.unige.ch/info/pc/remote-boot/soft/bpb-exe.tar.gz
.在伺服器上的 /tftpboot
目录下, 放入下面三个特别的可开机映像档.
他们是用来完成开机前的批次文档解译功能 (下面我们用 bpbatch.P
为载入器的档名. 如果你不是用 Bootix 的 TFTP 伺服器,
则变更载入器档名为 bpbatch
(标准型 TFTP 伺服器)
或 bpbatch.B
(Intel/Bootware 的 TFTP 伺服器):
bpbatch.P
, 动态载入器 (注意大小写并参考 设定 TFTP 伺服器那节,
以选择适当的附档名).bpbatch.ovl
, 中断重导档bpbatch.hlp
, 线上说明档"bpbatch.P"
. 定义 vendor 选项标签 155 (十进制) 为
"-i"
(在标准型的 DHCP 伺服器, 可以用以下的指令完成:
option option-155 "-i";
). 它会被 bpbatch
解释为命令列,
而 -i
意谓著 "交谈模式".
启动用户端电脑. 你应该看到
DHCP
字串.TFTP
字串.Loading BpBatch
字串.help
.
记住你可以在 DOS 及 Linux 下执行相同的解译器, 只要执行 MrBatch
程序.
只有一点点的差异 (Linux 版本不支持图形化的功能,
而 DOS 版本如果在 BootPROM 未被作业系统隐藏之前,
只能送出 BOOTP 及 TFTP 的要求信号).
现在是阅读 BpBatch
语法 的时候了,
尤其是 参考文档 及 快取文档系统 这两段. 这将帮助你了解范例.
当所有的作业系统都设定好, 你要制作一个选单让使用者去选择它所要的是哪一种作业系统. 你可自行探究如何去产生那种选单. 而所需的指令都在本文末端.
试著输入 LogVars
. 你应该可以看到大约三十几个变数被列出来.
概括来说, 先出现 BpBatch 的变数设定, 然后是自 BOOTP/DHCP 通讯协定取得的回应,
最后是硬盘大小的变数, 以百万位元组为单位.
输入 GetPartitions part
, 再输入 LogVars
一次.
就应该看到在你第一个硬盘机内的分割区定义信息.
假设第一个分割区有 BIGDOS, FAT32 或 LINUX-EXT2,
试著打 LogDir "{:1}"
以取得根目录的内容,
然后输入 LogDir "{:1}/usr"
如果有
usr
目录的话. 你也可以试著打
LogTree "{:1}/etc"
以取得树状目录.
放一个 GIF 档 (格式是 GIF-87a, 交错或非交错的都行, 但不可是 GIF-89a)
到你的 TFTP 伺服器. 我们假设档名是 image.gif
.
你可以用下列的指令把它复制到任何地方:
copy "image.gif" "{:1}/temp/image.gif"
.
或者, 你可以自伺服器上直接使用. 现在输入 Logvars "V*"
并检视 VESA
变数值. 如果它显示 On
, 那就相当可能意谓著,
你的显示卡有 VESA兼容的功能.
你可以用 Echo "$VESA-Modes"
列出有效的显示模式.
要秀出你的图档只要试著输入以下的指令: DrawGif "image.gif"
.
这个图档应该显示在萤幕左上角. 你可以在档名后标定 X 及 Y 轴,
把它摆在其他地方.
你也可以用 DrawText 200 200 "Hello world" yellow
画出文字.
或用 DrawWindow 200 200 300 150
画出一个空的视窗.
而要在产生新视窗时插入主题, 可以试著用
DrawWindow 200 200 300 150 "My Window"
.
如果你对图形化模式感到厌烦只要打 CloseGraph
.
在图形化模式下要注意: 预设情况下, 所有的图形功能在 800x600 VESA 模式下工作
(有 256 色阶), 这是在 VESA-Modes
变数下的第一个栏位.
如果你要使用不同的显示模式, 则变更第一个栏位为你所要的显示模式.
现在用文字编辑器, 在 tftpboot
目录下, 建一个名为 test.bpb
的文档内容是:
:again
DrawWindow 150 200 400 160 "Identity check"
TextAttr Black LightGray
At 15,20 Print "Username : "
Input username 8
At 17,20 Print "Password : "
Getpasswd userpass 8
if "$username" != "smith" goto again
if not "$userpass" match-passwd "BpR8oiIlRR9bo" goto again
#
clear
DrawWindow 200 200 150 100 green blue "Congratulations"
DrawText 220 250 "You got it !" yellow
WaitForKey 3
CloseGraph
interact
在你的 BOOTP/DHCP 伺服器的设定档中, 变更 选项-155 由
"-i"
为 "test"
, 并把用户端电脑重新开机.
这个小型的脚本程序可以自动执行, 并会寻问你的使用者名称 (username) 及
判行密码 (password). 如果你不输入 smith
及 justdoit
,
你就不能使电脑开机. 接著你将学得如何用 Unix, NT 或 Radius
伺服器以辨证有效的使用者.
为了安装 Linux, 你需要 RedHat Linux 套件所提供的可开机软盘.
BpBatch 含有一个可以指向软盘开机的指令: FloppyBoot
.
安装 RedHat Linux 到你的用户端电脑, 必须具备网路支持功能. 以及你所需要的套件软件. 你或许需要重新编译一个 Kernel 以合于你的硬件配备, 但这不是必须的.
在 Kernel 中加入对 BOOTP 通讯协定的支持将会是一个好主意, 这样你就不用手动去设定用户端的 IP 位址.
为了降低网路负载, 你应该安装 file cache
以快取由 NFS 所载入的文档到硬盘中.
简单的说, file cache 的功能是当有来自 cache
子目录下的符号连结形成时,
它会被它的目标所取代. 如果目标本身是子目录,
则在子目录下的所有东西都会变成符号连结, 并指向外在文档系统的原始资料.
这个 file cache 由 Unifix GmbH 所写, 已成为 Unifix Linux 2.0 的一部份.
它可以自由散布, 你可以在
http://cuiwww.unige.ch/info/pc/remote-boot/soft/filecache.tar.gz
取得必要的文档.
为了使用这个 file cache, 你必须要
patch-filecache
),
透过 make config
或你所喜欢的方式来启用这个功能, 并重新编译 kernel./sbin
./mnt/nfs
(使用 mkdir
指令).filecache.conf
到 /etc
. 此档的内容包含以下几行:
Max 100 MB 50 % # Cache /mnt/nfs/usr /usr Cache /mnt/nfs/opt /opt
/usr
及 /opt
内的资料到伺服器,
以 anon=0
(允许root 存取) 设定为唯读属性的分享并把它挂在 /mnt/nfs
下 (加入一行到 /etc/fstab
)/usr
为 /usr.orig
./usr
指到 /mnt/nfs/usr
./opt
为 /opt.orig
./opt
指到 /mnt/nfs/opt
./usr
及 /opt
目录不是空的并应该包含正确的目录资料./usr.orig
及 /opt.orig
.filecache.init
到 /etc/rc.d/init.d
./etc/rc.d/rc3.d/S35filecache
指到 /etc/rc.d/init.d/filecache.init
.
复制你的压缩 Kernel 映像档 (zImage
, bzImage
,
vmlinuz
或其它的命名) 到伺服器的 /tftpboot
目录下,
更名为 linux.krn
. 如果你已经把 BootPROM 从你的 PC 拔起来了,
那现在必须重插回去. 当 BpBatch
启动, 输入
LinuxBoot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"
(假设 根的 ext2 文档系统在第一个分割区). 另一种状况,
如果你要在无 BootPROM 的电脑上设定你的组态,
只要用你所安装的载入器 (lilo, ...) 来开机就可以.
但在后面的情况下, 如果你要使 file cache 正常工作,
你就必须把 file cache 的支持功能正确的安装到你的 Kernel.
等到系统开机完成. 如果你已安装 file cache, 你可以检查 /usr
目录下,
已经直接变成一些目录型式的符号连结到已划分好的目录. 现在启动使用者常用的程序,
帮他们把所需的资料载到硬盘中.
你还可以调整你的设定, 让它更像其他独立运作的 Linux 工作站.
当你觉得你的设定用起来很棒了, 就可以用 root
登入,
并到 /tmp
目录下, 执行我们的 mrzip
程序.
MrZip
是一个像 BpBatch
的命令解译器,
但它可以了解比 BpBatch
更多的命令. 特别是, 它可以了解下列的命令:
showlog
filter -"tmp/*"
filter -"var/log/*"
fullzip "/" "/tmp/linux.imz"
这将产生一个磁盘映像档到 /tmp/linux.imz
.
把它移到伺服器的 /tftpboot
目录下. 然后复制下列的批次执行档到
/tftpboot/linux.bpb
:
hidelog
setpartitions "linux-ext2:992 linux-swap:32"
fullunzip "linux.imz" 1
clean 2
linuxboot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"
这个 BOOT_IMAGE
参数是用来表示兼容于 RedHat 5.1 的
lilo
及之后的 rc.sysinit
.
你的 Linux 硬件开机设定组态已经就续! 你现在只要设定 BOOTP-option-155 为
"linux"
, 或在 BpBatch 下输入 include "linux.bpb"
就可以测试它了.
如果你以后要更新软件, 安装程序臭虫修正或安全性的修正, 处理程序如下:
到用户端电脑上, 用你所喜好的 DOS 磁片开机
(可以移去 BootPROM 或在 BpBatch 环境下, 输入 FloppyBoot
).
用 /S
选项, 格式化磁盘中的 DOS 分割区, 以安装作业系统.
分割区的大小并不重要. 因为以 MrZip
产生磁盘映像文档时, 是以文档来认定的.
而与分割区大小无关.
建一个 DOS
子目录, 把 DOS 复制进去. 安装你所喜好的网路用户端软件
(比如 Microsoft LanManager), Windows 3.1, 及其他你要的程序.
如果你要用 Microsoft LanManager, 千万别使用它的 DHCP 通讯协定来组态 IP 设定,
因为它的实作方法相当烂, 在正常的网路负载下, 也绝对有可能失效. 但要得到相同效果,
可以加入以下几行到 protocol.ref
档, 在载入 tcptsr
的同时
(它会把 xxx
以你给定的真确 IP 参数值取代):
IPADDRESS0 = xxx xxx xxx xxx SUBNETMASK0 = 255 255 xxx xxx DEFAULTGATEWAY0 = xxx xxx xxx xxx DISABLEDHCP = 1
不用怕使用 EMM386 最佳化您所使用的内存,
您可以把网路卡 ROM 所占的区域纳入管理, 因为它在这时已经用不到了.
但要记得把网路卡所使用的 RAM 区块不纳入管理, 否则您将无法连接到您的伺服器.
用 NOEMS
参数.
如果你要确认用户端电脑只允许已认可的使用者所使用,
可以把我们的 nobreak
虚拟装置驱动程序
(可在这下载
http://cuiwww.unige.ch/info/pc/remote-boot/soft/nobreak.zip
)
放在您 config.sys
档的开头处, 并把以下这些东西放到您的
autoexec.bat
:
rem -- we use the dummy file c:\logged as a flag
del c:\logged >nul
:loginneeded
cls
echo Please type in your login name and password
echo.
net logon *
rem -- the login script should have created c:\logged
if not exist c:\logged goto loginneeded
del c:\logged
rem -- now enable break again
echo Yes >NOBRK
重开机, 确认你的用户端电脑一切正常, 并试著在 BpBatch
的交谈模式下输入以下指令:
HideBootprom HdBoot如果你没看到 BpBatch 则 PC 会采用硬盘来开机.
回到伺服器上, 建立一个分享名称为 admin
的目录,
用来放一些系统管理者用的东东. 如果伺服器是跑 Unix,
建议您把 /tftpboot
子目录用软式连结方式放一份到 admin
目录,
这样您可以直接由用户端传回开机映像档. 在 admin
目录内,
建一个 /utils
子目录并放入如下的工具:
mrbatch.exe
, DOS 版的 BpBatch
.mrzip.exe
, DOS 版的工具程序用来建立磁盘映像档.bpbatch.hlp
, 线上说明档.zipdos.mrz
的文档,
内含用来建立 DOS 磁盘映像档的指令, 就像下面这样:
showlog
filter -"lanman.dos/lmuser.ini"
filter -"temp/*"
filter -"*.swp"
fullzip "c:/" "L:/tftpboot/dos.imz"
现在回到你的用户端电脑, 把 admin
挂到 L:
,
到你的 utils
子目录下, 输入以下指令:
mrzip -b zipdos
一分钟之后, 你会在伺服器的 /tftpboot
子目录下看到一个名为
dos.imz
的文档, 它就是你用户端电脑硬盘的压缩磁盘映像档.
把以下的批次档内容复制到 /tftpboot/dos.bpb
:
hidelog
setpartitions "bigdos:1024"
setbootpart 1
fullunzip "dos.imz" 1
hideBootprom
hdboot :1
你的 DOS 硬件开机设定组态已经就续 ! 你现在只要设定 BOOTP-option-155 为
"dos"
, 或在 BpBatch 下输入 include "dos.bpb"
就可以测试它了.
如果你要针对某一些机器做一些特定的设定,
最典型的是 IP 位址值的设定不过因为 Micro$oft 的 DHCP 做的很烂,
你可以用 BpBatch
在开机时做一些修正. 首先到 lanman.dos
目录下并执行
copy *.ini *.ref接著编辑副档名为
.ref
文档, 把所有固定的参数用 BOOTP 的变数取代, 下面是范例:
computername = ${BOOTP-Host-Name} ipaddress0 = ${MS-IPAddress} subnetmask0 = ${MS-IPSubnet} defaultgateway = ${MS-IPRouter}接著用先前的方式重建磁盘映像档. 注意一下 IP 参数, 我们不能直接使用 BOOTP 变数给 LanManager 使用, 因为它需要以空格分隔而不是以点来分隔数字. 把
dos.bpb
改成如下的样子:
hidelog
setpartitions "bigdos:1024"
setbootpart 1
fullunzip "dos.imz" 1
set MS-IPAddress="$BOOTP-Your-IP"/.= /
set MS-IPSubnet="$BOOTP-Subnet-Mask"/.= /
set MS-IPRouter="$BOOTP-Routers"/.= /
patch "{:1}lanman.dos/protocol.ref" "{:1}lanman.dos/protocol.ini"
patch "{:1}lanman.dos/tcpputils.ref" "{:1}lanman.dos/tcputils.ini"
patch "{:1}lanman.dos/lanman.ref" "{:1}lanman.dos/lanman.ini"
hideBootprom
hdboot :1
如果你喜欢, 你也可以把 .ref
的文档放在伺服器上的 /tftpboot
目录下, 而不放在磁盘映像档里.
我们可以在不重建映像档的状态下, 轻松的变更电脑的设定.
作法是, 复制你的 autoexec.bat
及 config.sys
为
autoexec.ref
及 config.ref
到伺服器的 /tftpboot
目录,
把下面两行加到批次档中:
patch "autoexec.ref" "{:1}autoexec.bat" patch "config.ref" "{:1}config.sys"你可以透过 BOOTP 通讯协定, 自由的变更文档内容. 即使是做一些根据机器而来的特殊化设定.
在对用户端电脑的设定档做任何修改后, 如果你要预先做好修正.
别忘了以 MrZip
重新制作磁盘映像档.
如果你以后要更新软件, 安装程序臭虫修正或安全性修正的程序, 其处理程序如下:
在此份文件先前的版本, 我们使用过微软公司的 Windows 95 以伺服器为基础的安装方式, 但是用这方法太过痛苦, 又不是那么的有价值:
http://cuiwww.unige.ch/info/pc/remote-boot/win95old/win95old.html
)
然后换到我们这个新的以硬盘机为基础的硬件启动概念.
基本上, 在这种环境下 Windows 95/98 安装方法就跟安装 DOS 一样容易.
安装一台寻常的 Windows 95/98 用户端, 可以用我们先前所提的 DOS 网路开机组态模式启动电脑, 再透过网路安装 (我们都这样做). 你也可以用已经安装 Windows 的机器来做, 但若这样你对硬盘里有舍东西就比较不了解了.
把它视为先前所提的 DOS 用户端来处理. 但在 Windows 95/98 是不需使用 EMM386.
如果你使用 Windows 98 或 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 这种怪物, 在您第二次执行时也会更快... 您的每台客户端电脑都要有一份版权, 不过它还不算太贵, 这家公司对于大专院校有特惠价格. 更棒的是, 您可以到他们的网页下载免费的评估版.
在这个地方, 如果你是使用 Samba 文档伺服器,
你应该需要先关掉 Windows 98 的密码传输前加密功能.
这样才能把 admin
挂上去当网路磁盘机.
你只要把下面的登录组态 EnablePlainTextPassword
节的 DWORD 值设为 1
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
你的 MrZip 脚本程序档可以命名为 zipwin.mrz
并包含以下内容:
showlog
filter -"windows/schedlog.txt"
filter -"windows/msimgsiz.dat"
filter -"*/index.dat"
filter -"*.swp"
filter -"*.tmp"
filter -"temp/*"
fullzip "c:/" "L:/tftpboot/win.imz"
为了建立映像档, 把 admin
挂到磁盘机 L:
,
并到你的 utils
目录下并输入以下指令:
mrzip -b zipwin
几分钟过后, 你可以在伺服器的 /tftpboot
子目录下,
找到名为 win.imz
的文档, 它就是你硬盘的压缩磁盘映像档.
如果你的映像档超过 87 MB, 最好把它分割成两个或更多的文档.
这些文档会在我们需要它时自动地一个接著一个载入. 记住,
如果你的映像档超过 87 MB
则系统花在解压缩的时间会超过一分钟而这会激怒你的使用者.
我们的 Windows 95/98 映像档止有 70 MB 大,
因为大部份的软件都摆在伺服器, 且只有在要求时才会载入.
只有极少部份的软件需要安装到你的硬盘中. 如果你跟我们一样在乎这问题,
你应该让解压缩这个映像档及完整回存到硬盘的时间低于一分钟.
把以下的批次档内容复制到文档 /tftpboot/win.bpb
:
hidelog
setpartitions "bigdos:1024"
setbootpart 1
fullunzip "win.imz" 1
hide`
hdboot :1
你的 Windows 95/98 硬件开机设定组态已经就续 !
你现在只要设定 BOOTP-option-155 为 "win"
,
或在 BpBatch 下输入 include "win.bpb"
就可以测试它了.
Windows 95/98 与 Windows 3.1 最大的不同是加入了即插即用的程序码, 即自动侦测您的硬件设备. 它本身无舍坏处, 但问题是出在它太过灵敏, 而且有时后会出锤.
如果您试著用同样的开机映像档去启动另一台用户端机器, 您将在收到一堆 Windows 侦测到新的硬件设备的信息: 一片新的声卡, 一颗新的硬盘机, 一片新的网路卡, 或者一只新的鼠标... 会这样的原因有二:
您无法避免的问题是每台电脑的网路卡. 很不幸的,
在搭配我们所用的 SMC EtherEX 网路卡时, 即插即用的程序码会使电脑当机.
唯一的解法是使 Windows 95/98 相信它已经知道有这片网路卡,
且不需触动即插即用机制. 这个技巧就是透过开机自动执行档 autoexec.bat
,
自动的把关于这片网路卡的设定值加入 Windows 95/98 的系统登录信息.
要注意的是大部份 PCI 的网路卡并不需要这个技巧.
到您的用户端电脑, 编辑开机自动执行档 autoexec.bat
并加入下列几行:
rem --- Patch Windows registry in order to avoid plug-and-play detection regedit /L:c:\windows\system.dat /R:c:\windows\user.dat c:\temp\patch.reg
regedit
是标准 Windows 95/98 的程序. 如果您在 Windows 环境下执行它,
它可以帮您流览您的系统登录信息, 或者如果您在 DOS 下执行它,
它可以对您的系统登录信息做一些简单的修正.
在视窗环境下执行 regedit
, 寻找你的网路卡, 通常在
HKEY_LOCAL_MACHINE\Enum\ISAPNP用 登录 功能选单的 汇出登录档 功能. 这个动作将建立一个文字档, 你可以把它命名为
patch.ref
放在伺服器的 /tftpboot
目录下.
编辑这个文档并找到这个网路卡的乙太网路位址放置的位置
(如果你找不到它, 可以在不同机器上产生这两个文档, 比较他们就可以找到).
用 ${MACID}
的样式来取代它.
接著在 win.bpb
脚本程序档中加入以下几行:
set macid = "$BOOTP-Client-ID" patch "patch.ref" "{:1}temp/patch.reg"(如果它不是用户的正确乙太网路位址, 就必须对
MACID
字串设定值做必要的修正).
就这样, 你的用户端电脑就不会再试著去自动侦测网路卡了.
再提一次, 这整个技巧在使用 PCI 网路卡时, 是不需要的.
另外, 当 Windows 不能在登入时透过 DHCP 通讯协定设定主机名 (hostname), 我们也可以用相同的手法来达到. 只要把下列几行加到我们的 patch.ref
档:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"ComputerName"="${BOOTP-Host-Name}"
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP]
"HostName"="${BOOTP-Host-Name}"
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName]
"ComputerName"="${BOOTP-Host-Name}"
使用登录编辑程序的小技巧, 你的组态设定可以顺利的转移到有类似配备的机器上. 如果你无法避免 Windows 去侦测你的某些硬件配备, 可以试著在那机器上重建一个磁盘映像档. 这样会把这台机器上的组态设定都含入这个映像档中, 希望这能解决问题.
如果你以后要更新软件, 安装臭虫修正或安全性修正的程序, 处理程序如下:
我们并没有使用 Windows NT 来当硬件开机用户端电脑的作业系统, 但我们已经测试过, 它确定可以正常工作. 并且没问题.
由于我们的工具程序还没支持到 NTFS 文档系统 (我们既没有相关文件也没有时间去做这件事, 但我很乐意去帮助任何对这工作有兴趣的人) 所以你必须把 NT 安装到 FAT16 文档系统上 (只要在安装时, 不把你的分割区转换为 NTFS 文档系统就可以).
把 win.bpb
开机脚本程序复制到 winnt.bpb
.
改变 winnt.bpb
中 setpartitions
那一行为如下:
setpartitions "BIGDOS:512 BIGDOS:512"接著用这个脚本程序档使 Windows 95/98 开机, 把 NT 用户端安装到 C 槽. 先别管第二个分割区的问题. 别安装太多东西进去, 不然会产生一个又大解压缩又很慢的映像档. 把 Windows 95/98 从 C 槽移除, Windows NT 的映像档不需要它 (开机选单是由 BootPROM 所控制, 不再是 NT 的开机载入器).
在不覆写硬盘资料状况下, 重新启动你的电脑,
就是千万别去执行 winnt
脚本程序档. 只要做:
hideBootprom hdboot你的 NT 工作站就可以正确的启动. 然后就可以做其他的特殊修正了.
Windows NT 麻烦的地方是出在: 磁盘直接存取的功能会被 Kernel 所禁止.
意谓著, MrZip
无法读取开机磁区.
制作映像档的最佳方式是以 Windows 95/98 开机, 在 DOS 视窗下,
执行 MrZip
. 要这么做就要变更 winnt.bpb
脚本程序档内容.
使得 Windows 95/98 映像档不回存到第一个分割区, 而是第二个:
hidelog
setpartitions "BIGDOS:512 BIGDOS:512"
setbootpart 2
fullunzip "win.imz" 2
hidebootprom
hdboot :2
(如果你有其他补充的修正, 在把 "{:1}"
变为 "{:2}"
). 用这个脚本程序开机; 应该会让 Windows 95/98 执行, 而新磁盘机 D:
槽会出现,
里头放的就是 Windows NT.
就如以往的方式建立你的磁盘映像档 (只是改对 D:
做, 当然了),
把它存为 winnt.imz
并放在伺服器上的 /tftpboot
目录下.
最后编辑 winnt.bpb
脚本程序档改成如下:
hidelog
setpartitions "BIGDOS:512 BIGDOS:512"
setbootpart 1
fullunzip "winnt.imz" 1
clean 2
#fullunzip "win.imz" 2
hidebootprom
hdboot :1
你的 Windows NT 硬件开机设定组态已经就续. 当然, 如果你不想有两个分割区,
你可以设定成单一个分割区. 但当你要重建映像档时,
你还是需要再设定第二个分割区以 Windows 95/98 开机.
如果你以后要更新软件, 安装程序臭虫修正或安全性的修正, 处理程序如下:
winnt.bpb
: 把 clean
及 winnt fullunzip
改成注解,
把 win95 fullunzip
改成可执行.
本节列出我们所统计最常遇到的问题.
可能是因为你所使用的是标准型 TFTP 伺服器, 而它不能处理超过 65535 个 512 位元组大小的封包 (而 Solaris 伺服器, 在超过 32767 个封包就有这个问题). 因为这样, 你的映像档必须拆成许多个不超过的文档 30 MB (Solaris 的话, 是 15 MB). 参考 复制文档(CopyArchive) 的机制, 它会教你如何分割已存在的映像档. 如果你目前还在使用标准型 TFTP 伺服器, 你应该慎重考虑改用 Bootix 或 Intel 的 TFTP 伺服器. 参考下一个问题以探讨这些伺服器的功能.
这是 TFTP 通讯协定的问题. 你的载入器档名的副档名一定要设对
(参考 TFTP 伺服器那节).
如果你用 Bootix 的 TFTP 伺服器并用了 -s 1408 59
的选项,
则你的载入器档名应该是 bpbatch.P
.
如果你是用 Intel 或 Bootware 的 TFTP 伺服器有支持 blksize 的 TFTP 选项功能,
则重命名你的载入器档名为 bpbatch.B
.
最后, 如果你用标准型 TFTP 伺服器,
则重新命名你的载入器档名为 bpbatch
(没有副档名).
这个状况下 BpBatch 会用 512 位元组大小的封包取代 1408 位元组大小.
而这时分割档的大小限制在 32MB (TFTP 内部限制) 不是 87MB.
参考上一个问题, 探讨 512 位元组大小的封包.
有三种可能原因. 在伺服器上的映像档葛屁了 (可以试著用 MrZip 检查是不是这个问题), 或是 TFTP 传输延误以致文档文档传送失败, 或是通讯协定不兼容.
当网路负载太重, 就会发生 TFTP 传输延误的状况
(比如, 你想一次把一个极大的映像档下载到超过四台的用户端电脑).
在这种情况下, BpBatch
不会一直重复传输. 因为那样作毫无用处.
关掉几台电脑并试著在不超过四台用户端电脑同时启动的环境下测试
(或者不超过三台). 如果你常常需要下载映像档到许多台电脑,
你可以试用我们所使用的特殊广播型 TFTP 伺服器 (参考讨论它的那一节内容).
因标准型 TFTP 伺服器 (通常内建于你的 UNIX 伺服器) 所导致的通讯协定不兼容.
因为当 BpBatch
要以增强型的 TFTP 协定工作时,
伺服器以标准型 TFTP 协定来对应. 如果你要用标准型 TFTP 伺服器,
你应该移去副档名 .P (参考下一个问题的解说会更清楚).
如果你用 Bootix 的 TFTP 伺服器, 试著在启动电脑时于命令列上加入
-s 1408 59
. 如果你不是采用增强型 TFTP 伺服器,
则移去在伺服器上 BpBatch 档名及 bootptab
中的副档名 .P
.
细部解说:
这个问题发生在你没有架设增强型 TFTP 伺服器但却又使用了
bpbatch.P
为你 DHCP/BOOTP 的可开机档档名的标签.
当可开机档档名以 .P
为副档名时,
BpBatch 将试著去连接到一台 Bootix 的 TFTP 伺服器. 要解决这个问题,
你可以移去可开机档档名中的副档名 .P
(这就等于告诉 BpBatch 改用标准型 TFTP 协定) 或者安装一台增强型 TFTP 伺服器.
还有其他选择, 你可以安装 Intel 的 TFTP 伺服器并变更载入器档名为
bpbatch.B
.
记住: 要使 Bootix 的 TFTP 伺服器正确的在增强型 TFTP 特性下工作,
你必须在命令列中加上 -s 1408 59
.
可能是你的电脑对 VESA 的支持有问题. 试著在命令列参数中加入 -v
或设定 VESA 变数为 "OFF"
.
我们使用 VESA 1.1 的卷页功能. 如果你的显示卡不支持 VESA 1.1, 就别用这个功能. 如果只卷一页, 就会发生奇怪的条纹, 别急. 这是一个已知的程序臭虫, 我将在有空时修正 (VESA 卷页功能不是那摸重要啦...).
如果一个存于快取区中的文档, 被外在的程序弄坏了. 它会自动地从快取中被移除.
如果一个正在写入快取区的文档没完整写入 (可能是电脑在文档传输中被关机),
则它也会被自动清除. 但如果伺服器传送一个已损坏的文档.
或者发自伺服器的资料传送取消. 则这类已毁损的文档仍然会存在快取区中.
你只要在 BpBatch
第一次存取快取区时, 同时按下两个 shift 键,
就可以把快取区内的资料清空. 还有一个方法, 在交谈模式下输入 clean -1
.
这不是一个程序臭虫. Exit 并不是一个指令. 没有 exit 或 quit 指令是因为如果不开机, 则从开机脚本程序中退出是毫无意义的. 而 MrBatch 完全跟 BpBatch 一样是同一支程序. 你可改以叫用 HdBoot 取代 exit. 这才有意义, 且在 DOS 版下, 真的会取代重开机而完全退出. 记住你可以在 DOS 版任何情况下按下 Ctrl-Break 然后退出. 这将在离开前, 回存所有被拦截的中断.
如果你试著要印一些东西并直接进入交谈模式, 你有可能来不及看到哪些文字.
这是因为你所印的字是显示在 执行时期 显示幕而 Interact
指令会切换到
记录 显示幕. 因此只要放一个 GetKey
指令在 print 指令之后你就可以看到你要的文字了.
Malloc failed
MrZip 需要大量的传统内存才能执行. 如果你遇到这个问题,
先确定你已经用 HideBootprom
指令或 Bootix 的 bputil
卸载了
BootPROM 所占的内存.
如果你在单纯的 MS-DOS 下执行 (非 Windows 95/98 DOS 视窗),
你应该使用 EMM386 把网路卡驱动程序载到高层内存以取得更多的传统内存.
在 Windows 的 DOS 视窗下执行, 通常是没舍问题的
(只要你在安装 Windows 时, 没留下任何 16 位元的东西在你的 autoexec.bat
档中).
这个程序臭虫已修正. 取得最新版 MrZip
. 如果还有这个问题,
试著在把变数 Trace
设为 "ON"
(且把 PauseLog
设为 "OFF"
) 下,
重建你的映像档; 这可以让你发现导致问题的原因. 请回传详细的程序臭虫报告.
MrZip 会试著去读取已锁住, 已开启或其他特别的文档, 如 Windows swap 档.
这类文档应该不被含在映像档中并应被过滤出来 (使用 filter
指令).
当然也可能是作业系统在耍你. 如果 MrZip 没告诉你哪个文档导致问题,
试著把变数 Trace
设为 "ON"
(且把 PauseLog
设为 "OFF"
) 下,
重建你的映像档. 你也可以试著用直接磁盘存取 (也就是, 不把来源分割区当成
"C:"
或 "/"
改以 "{:1}"
表示).
使用直接磁盘存取通常比较慢, 因为我们的缓冲区不若作业系统大, 但它有些时候比较可靠.
磁盘映像档被存放在特殊快取区中, 如果伺服器上的没变更, 照理说应该不需再下载一次. 但是, 由于快取区是在最后一个使用到的分割区之后启始, 更动分割区的大小将移动快取区的位置并损毁其内容. 另一个使文档自快取区中消失的可能因素是先前的文档已经变得比原来的大一倍半. 则这个文档就应该被覆写并重新下载一次. 但这应该不会发生. 第三个可能因素是快取区过小. 如果分割区以外所剩的可用空间小于所有压缩映像档的一倍半, 则只有最常使用的映像档会在快取区中, 其他的就必须再重载一次.
这个套件假设 Linux 都用 lilo
开机并会检查 BOOT_IMAGE
命令列参数
(在 /etc/rc.d/rc.sysinit
).
只要把它加在 linuxboot
呼叫中, 或者变更你的 rc.sysinit
.
Linux 的 dhcp 用户程序可以透过 DHCP 回应, 动态地改变用户端的 IP 位址. 如果提供的位址值是永久的 (无限制使用时间), 则 DHCP 用户端程序只设定位址值后就结束返回 (这就是我们所期望的). 但是, 如果位址的使用时间有限制, 则用户端程序必须一直存在并每一分钟就寻问新的位址值. 而如果 DHCP 用户端程序没有结束返回, 则 MrBatch 就永远不会被载入... 这问题的解法就是设定无限期的位址使用时间 (有时候就当成是 -1).
这个问题发生在 AMI BIOS 日期为 94/07/25. 我们研究后, 发觉无解. 这个问题好像是因为 BIOS 本身有程序臭虫 (部份暂存器或内存位置会被毁坏).
这个问题是发生在 PXE 兼容性上, 已被修正. 请取得最新版.
这个问题已在 MrBatch/MrZip 八月份第 9 个版本修正. 与 RedHat 5.1 一起发行的新版 ncurses 函式库有问题.
MrZip 已改在 libncurses 3.0 版下连结.
你只能使用其它比 3.0 版更新的 libncurses 才行.
要用较新版的 libncurses, 而你所需要去做的只是建立一些软性连结由
libncurses.so.3.0 到你新的 libncurses.so.xx 文档.
在 RedHat 5.1, 你可以使用下列的指令 :
cd /usr/lib ; ln -s libncurses.4.2 libncurses.3.0
你也可以下载 mrzip/mrbatch 最新的版本. 自 10/25/98,
MrBatch 已在 RedHat 5.1 环境下编译.
这个问题与前一个问题相反. 现在这个套件是预设在 libc6 环境下, 它已不能再与 libc5 一并使用. 如果你遇到这个问题, 只需要升级你的 Linux (当然, 如果我们听到太多抱怨, 我们或许会试著保留两种套件...).
你应该先检视 VESA-Modes
变数的内容,
看看你的硬件设备是否可以支持你要使用的模式. 然后,
试著用下列两种方法之一来选用你要的 VESA 模式 :
InitGraph "mode"
: 试著用 InitGraph "1024x768",
然后执行你所喜好的初始划图形 (即用 DrawGif
指令).VESA-Modes
: VESA-Modes
变数的第一栏是预设模式.
如果你改变 VESA-Modes 变数, 所有的初始化图形会依循你所设定的模式.我们已修正 BpBatch 一个内存对分配的问题. 你应该确定你使用的 BpBatch 版本在 1998 年九月 22 日之后.
我们已于 09/22/1998 的版本中, 修正这个问题.
10/25/98 的版本已修正一个与大映像档有关的问题. 试著去下载最新版的 BpBatch.
这个软件臭虫已经在 10/25/98 版本中修正.
这个软件臭虫已经在 02/09/99 版本中修正.
你的 DHCP 伺服器不能送出有效的 option-135 到用户端. BpBatch 使用 option 135 为它自身的命令列参数. 如果你想要进入交谈模式, 你可以设定为 "-i". 或者你可以把它设定为一个脚本程序档名, 如果你想要 BpBatch 按照你所选的脚本程序执行 (别把 .bpb 的副档名纳入名称中). 如果你使用 PXE BootPROM, 确定你使用 option-135 为命令列参数. PXE 2.0 BootPROM 已不再支持 Option-155.