首先,安排将以下两台机器放在触手可及的地方
http://www.incom.de
。此软盘将使您的计算机表现得像插入了 TCP/IP Bootprom 一样。如果您已经拥有启动 ROM,则需要启用它。如果您使用的是 Incom TCP/IP Bootprom,您可以使用网络卡制造商提供的特殊程序来完成。如果您拥有 PXE Bootprom,您只需从 BIOS 设置中更改默认启动设备即可完成。
对于学生计算机,我们配置为首先从网络启动,并禁用硬盘和软盘启动。对于助理计算机,我们也配置为首先从网络启动,但我们允许硬盘和软盘启动。
在服务器上,您将需要以下服务
ndd /dev/ip ip_path_mtu_discovery
查看是否已启用,使用 ndd -set /dev/ip ip_path_mtu_discovery 0
禁用它。但是,此修复程序仅适用于非广播数据包(询问 SUN 原因...)。这意味着,它适用于 TFTP,但不适用于 DHCP :-(。英特尔最近修复了这个错误,如果您在 1998 年 6 月之后购买了计算机,您肯定拥有已更正的 PXE 实现。
DHCP 服务器的作用是为客户端提供 IP 地址,并使其从 TFTP 服务器加载名为 bpbatch.P
的文件。DHCP 是 BOOTP 的超协议。如果您使用的是 InCom TCP/IP Bootprom,即使不使用 DHCP(使用旧的 BOOTP 服务器)也可以。
在 Windows NT 上,您可能会使用原生 DHCP 服务器。如果您使用的是 InCom TCP/IP Bootprom,您将必须使用特殊技巧来指定启动文件名(从 InCom WWW 站点获取更多信息)。如果您使用的是 PXE Bootrom,您将需要代理 DHCP 服务器,但不需要其他技巧,因为启动文件名将由代理 DHCP 服务器提供。
在 Linux 上,最好的选择是来自 Internet 软件联盟的标准 DHCP 服务器。如果您使用的是 PXE Bootrom,除了常用选项外,您还需要添加以下选项
option dhcp-class-identifier "PXEClient"
option vendor-encapsulated-options ff;
在 Solaris 上,您可以选择使用 Internet 软件联盟 DHCP 服务器(可在 Web 上找到),或使用 Solaris DHCP 服务器(自 Solaris 2.5 起可用)。但是,由于 Solaris DHCP 服务器似乎无法在其 DHCP Offer 中插入客户端类标识符,因此您必须安装代理 DHCP 服务器。此外,此代理 DHCP 服务器必须位于另一台计算机上,因为 Solaris DHCP 服务器锁定了 DHCP 端口。
我们建议为远程启动客户端提供无限租用时间。不要忘记 BOOTP/DHCP 请求受子网限制。如果客户端和服务器不在同一子网中,您应该在两者之间的任何计算机上安装 BOOTP/DHCP 中继代理。现在,只需假设两台机器都在同一子网中。
代理 DHCP 服务器的作用是克服某些 DHCP 服务器的限制,并提供 PXE 特定的扩展。代理 DHCP 服务器仅对 PXE 启动 rom 有意义。
由于 BpBatch 本身功能非常强大,您无需使用任何 PXE 特定的 DHCP 扩展(菜单等)。但是,如果您的 DHCP 服务器无法显示最低限度的 PXE 合规性,您将需要代理 DHCP 服务器,否则您的 PXE 启动 ROM 将不会继续进行。
在 Windows NT 上,您可以尝试使用 Intel WfM PDK(可从其网站获得),但它不太容易使用。我们更建议在子网上使用 Linux 机器并使用我们的小型代理 DHCP。我们的 BpBatch 代理 DHCP 服务器的主要优点是,我们的服务器将允许您指定选项 155 vendor 标签,BpBatch 会将其解释为命令行。
在 Linux 和 Solaris 上,您可以运行我们的代理 DHCP 程序,该程序只需将 TFTP 服务器 IP 地址、启动文件名和可选参数作为参数,即可为您完成所有操作。如果服务器上的 DHCP 端口已被另一个守护程序请求,则代理 DHCP 服务器将在端口 4011 上运行。在这种情况下,另一个 DHCP 端口上的守护程序必须使用客户端类 PXEClient
回答 DHCP Offer,以便 PXE 客户端知道它必须在端口 4011 上尝试。
如果您想更好地理解 PXE 对 DHCP 的扩展,英特尔 WWW 站点上有广泛的描述。但是,请注意,这些文档非常令人困惑,因为该协议已扩展到许多可选阶段,以便实现最大的灵活性。理解它的关键是 PXE 客户端所需的一切都是一个完整的增强型 DHCP 答复。如果它只收到标准的 DHCP Offer,它将继续查找,直到获得
PXEClient
ff
)
TFTP 服务器是一个非常简单的文件服务器。在其基本版本中,TFTP 使用 512 字节的数据块,效率非常低下。InCom TCP/IP Bootprom 和 PXE 启动 ROM 允许使用更大的块(1408 字节),这大大加快了传输速度。但是,这只能与增强型 TFTP 服务器一起使用。
在 Windows NT 上,我们建议使用 InCom 增强型 TFTP 服务器,可在其网站上找到。
在 Linux 上,您可以使用我们的增强型 TFTP 服务器,可在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/etftpd.tar.gz
找到。
在 Solaris 上,您应该使用 InCom 增强型 TFTP 服务器,可在 TCP/IP Bootprom 随附的实用程序磁盘上找到。
如果您更喜欢使用标准 TFTP 守护程序,请删除所有启动映像名称扩展名中的 P
,以便告知 Bootprom 仅使用标准 TFTP 端口(此技巧由 InCom GmbH 为 TCP/IP Bootprom 引入。我们仍然使用它作为使用 PXE 启动 rom 选择默认 TFTP 端口的简便方法)。
首先,我们将设置所有操作系统通用的部分,即批处理文件解释器。然后,对于每个操作系统,我们将执行以下步骤
我们的示例假设您拥有 1.4 Gb 或更大的硬盘。如果您的硬盘较小,请减小分区的大小,但请记住您需要保留几百兆字节的未分配空间(即,最后一个分区不能占用最后一个柱面),以便为特殊缓存分区留出可用空间。此外,由于缓存始终从最后一个已分配柱面之后的柱面开始,如果您对所有测试未使用相同的总大小,您将不得不多次下载相同的文件(缓存将自动清除)。
永不绝望。如果您无法使其工作,首先请查看故障排除部分,看看您的问题是否已经解决(从 Web 获取最新版本)。然后,查看 BpBatch 论坛。也许其他人也遇到过与您相同的麻烦,并且可以在论坛中找到答案。论坛 URL: http://cuiwww.unige.ch/info/pc/remote-boot/forum/
。如果仍然无法工作,请考虑监视网络流量以查找与网络相关的问题(在 Linux 上使用 tcpdump
,在 Solaris 上使用 snoop
)。如果您真的无法使其工作,您可以发送电子邮件至 David.Clerc@cui.unige.ch
或 Marc.VuilleumierStuckelberg@cui.unige.ch
。如果您的的问题严格与远程启动配置相关,并且如果我们没有超负荷,我们将尝试解决您的问题。
获取 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
,动态加载器(注意大写!)bpbatch.ovl
,重定位的解释器bpbatch.hlp
,在线帮助文件"bpbatch.P"
。定义供应商选项标签 155(十进制),值为 "-i"
(在标准 DHCP 服务器上,这通过以下命令完成:option option-155 "-i";
)。它被 bpbatch
解释为命令行,-i
代表“交互式”。启动客户端计算机。您可能会短暂地看到
DHCP
,当客户端等待 DHCP 回复时TFTP
,当客户端等待第一个 TFTP 数据包时Loading BpBatch
,当加载器下载解释器时help
。请注意,您可以通过运行 MrBatch
程序在 DOS 和 Linux 中运行相同的解释器。只有极少数差异(Linux 版本没有图形支持,如果 BootProm 没有被操作系统隐藏,DOS 版本只能发送 BOOTP 和 TFTP 请求)。
现在阅读关于 BpBatch
的语法规则部分,特别是关于文件引用和缓存文件系统的段落,可能是一个好主意。这将帮助您理解示例。
设置完所有操作系统后,您将需要创建一个菜单,让用户选择他们想要的操作系统。您应该能够自己发现如何制作这样的菜单。所有必要的命令都在本文档末尾记录。
尝试键入 LogVars
。您应该会得到大约三十个变量的列表。粗略地说,第一个是 BpBatch 设置,然后是所有从 BOOTP/DHCP 回复中提取的参数,最后一个变量是磁盘大小列表,以兆字节为单位。
键入 GetPartitions part
,然后再次键入 LogVars
。应该有一个额外的变量包含您的第一个硬盘驱动器上定义的分区列表。假设第一个分区是 BIGDOS、FAT32 或 LINUX-EXT2,尝试 LogDir "{:1}"
以获取根目录的内容,然后如果存在 usr
目录,则尝试 LogDir "{:1}/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 配置中,将 option-155 从 "-i"
更改为 "test"
,然后重新启动客户端计算机。小脚本应该会自动运行,并要求您输入用户名和密码。如果您不输入 smith
和 justdoit
,您将无法启动计算机。稍后您将学习如何使用 Unix、NT 或 Radius 服务器来检查有效的用户名。
为了设置 Linux,您需要使用 RedHat Linux 发行版提供的软盘启动。BpBatch 包含一个可以将启动重定向到软盘的命令:FloppyBoot
。
在您的客户端上设置 RedHat Linux,包括网络支持和您可能需要的任何软件包。您可能需要重新编译内核以更好地适应您的硬件,但这并非必要。
将 BOOTP 支持包含到内核中可能是一个好主意,这样您就不必手动自定义客户端 IP 地址。
为了减少网络负载,您可能还需要为通过 NFS 加载的文件设置 filecache
以在硬盘上缓存。粗略地说,filecache 的原理是,每当跟随来自 cache
子目录的符号链接时,它都会被其目标替换。如果目标本身是一个子目录,则子目录的每个条目都将成为指向外部文件系统原始条目的符号链接。filecache 由 Unifix GmbH 编写,是 Unifix Linux 2.0 的一部分。它是可以自由分发的,您可以从 http://cuiwww.unige.ch/info/pc/remote-boot/soft/filecache.tar.gz
获取必要的文件。为了使用 filecache,您必须
patch-filecache
),通过 make config
或您喜欢的任何方式启用 filecache 支持,并重新编译内核/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
将您的压缩内核映像(zImage
、bzImage
、vmlinuz
或您称之为的任何名称)复制到服务器 /tftpboot
目录,命名为 linux.krn
。如果您必须从 PC 拔下 bootprom,您现在可以重新插入它。当 BpBatch
启动时,键入 LinuxBoot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"
(假设根 ext2 文件系统位于第一个分区上)。或者,如果您在没有 bootprom 的计算机上设置了配置,只需让它使用您安装的加载程序(lilo,...)启动即可。但在后一种情况下,如果您希望 filecache 工作,您应该已将支持 filecache 的内核显式安装在正确的位置。
等待系统启动。如果您安装了 filecache,您可以检查 /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
在服务器上,创建一个名为 admin
的共享,例如,您将在其中放置一些供系统管理员使用的内容。如果服务器是 Unix 机器,这是一个将 admin
中的软链接指向 /tftpboot
子目录的好机会,这样您就可以直接从客户端将映像放入其中。在 admin
中,创建一个 /utils
子目录,并将以下文件放入其中
mrbatch.exe
,DOS 版本的 BpBatch
mrzip.exe
,DOS 版本的用于构建磁盘映像的程序bpbatch.hlp
,在线帮助文件zipdos.mrz
的简单 MrZip 脚本文件,其中包含构建 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
重建磁盘映像。
如果您以后想要添加新软件或更改任何其他内容,请按以下步骤操作
在本文档的早期版本中,我们使用了 Microsoft 基于服务器的 Windows 95 安装,但这真的太痛苦了,不值得
设置常规的 Windows 95 客户端,要么从头开始,如 DOS 客户端的配置中所述,要么从 DOS 客户端开始并在网络上安装(这就是我们所做的)。您也可以从预配置的 Windows 机器开始,但您可能对硬盘上的内容了解较少。
按照上面针对 DOS 客户端的描述进行操作。通常不需要将 EMM386 与 Windows 95 一起使用。如果您使用的是 Windows 95 OSR2(别名 MSWIN 4.1,别名 Windows 95 service pack 1,别名带有 Internet Explorer 的 Windows 95),您应该在 MSDOS.SYS
的 [Options]
部分中添加以下行(是的,它是一个文本文件)
AUTOSCAN=0
这将让 Windows 知道您不希望在启动时自动运行 ScanDisk。如果您想减少网络和服务器负载(这将提高您的系统性能),同时将所有软件保留在服务器上,您应该考虑安装 Measurement Techniques, Inc 的优秀共享 LAN 缓存(请参阅 http://www.lancache.com)。此软件在每台客户端计算机上运行,并将从网络获得的每个数据缓存到本地硬盘。即使 MS-Office 在您第二次运行时也会启动得更快...您需要每个客户端计算机一个许可证,但它不是很贵,而且该公司为大学和学院提供特别价格。最好的做法是访问他们的网站并下载免费评估副本。
您的 MrZip 脚本将命名为 zipwin95.mrz
,并包含
showlog
filter -"temp/*"
filter -"*.swp"
fullzip "c:/" "L:/tftpboot/win95.imz"
要构建映像,请将 admin
卷挂载到驱动器 L:
,转到您的 utils
目录并键入以下命令
mrzip -b zipwin95
几分钟后,您将在服务器 /tftpboot
子目录中获得一个名为 win95.imz
的新文件,它是您的硬盘的压缩映像。如果您的压缩映像大于 87 MB,它可能已被拆分为两个或多个片段。这些片段将在需要时自动依次加载。请注意,大于 87 MB 的映像通常需要超过一分钟才能解压缩,并且可能会惹恼您的用户。我们的 Windows 95 映像只有 70 MB 大小,因为大多数软件(Office 和 Explorer 除外)完全驻留在服务器上。解压缩映像并恢复完整磁盘只需要 45 秒。
将以下批处理文件复制到 /tftpboot/win95.bpb
hidelog
setpartitions "bigdos:1024"
setbootpart 1
fullunzip "win95.imz" 1
hidebootprom
hdboot :1
您的远程启动 Windows 95 配置已准备就绪!您现在可以设置 BOOTP-option-155 为 "win95"
,或者从 BpBatch 中键入 include "win95.bpb"
来测试它。
Windows 3.1 和 Windows 95 之间最大的区别在于后者包含了即插即用代码,即硬件的自动检测。这本身并不是一件坏事,但问题在于它通常过于敏感,并且有时会失败。
如果您尝试使用完全相同的启动镜像启动另一个客户端,您可能会在启动期间收到多条消息,告知 Windows 检测到新硬件:新的声卡、新的硬盘、新的网卡,甚至是一个新的鼠标... 这可能有以下两个原因:
您无法避免在计算机之间区分的是网卡。 PCI 卡通常没有问题,但 ISA 即插即用卡则不然。对我们来说不幸的是,我们的 SMC EtherEZ 网卡的即插即用代码会使计算机挂起。唯一的解决方案是让 Windows 95 相信它已经知道网卡,并且没有必要触发即插即用。实现此目的的技巧是在启动 Windows 95 之前,自动在 Windows 95 注册表中插入网卡的条目。请注意,对于大多数 PCI 卡,不再需要此技巧。
将 autoexec.bat
移动到服务器,如上面 DOS 部分所述。编辑它(在服务器上)并添加以下行
rem --- Patch Windows registery 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 程序,如果您从 Windows 95 内部启动它,可以让您浏览注册表,或者如果您从 DOS 调用它,可以对注册表执行简单的操作。在 Windows 95 下运行 regedit
,搜索您的网卡,通常在HKEY_LOCAL_MACHINE\Enum\ISAPNP并使用文件菜单导出分支。这将创建一个文本文件,您应该将其保存为服务器
/tftpboot
目录中的 patch.ref
。编辑此文件,并找出卡以太网地址的存储位置(如果您自己找不到,请在两台不同的机器上执行此操作并比较文件)。将其替换为 ${MACID}
形式的模式。然后将如下行添加到 win95.bpb
脚本中set macid = "$BOOTP-Client-ID" patch "patch.ref" "{:1}temp/patch.reg"(如果需要对
MACID
进行任何必要的字符串操作,如果它与客户端以太网地址不完全相同)。就这样,您的客户端应该不再尝试自动检测网卡。再次强调,当使用 PCI 网卡适配器时,整个技巧是不必要的。顺便说一句,我们可以使用相同的机制来自动配置主机名,Windows 95 在通过 DHCP 进行配置时似乎没有考虑到这一点。我们只需将以下行添加到我们的 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(我们既没有文档,也没有时间去做这件事,但我很乐意帮助任何有兴趣这样做的人),您将不得不在 FAT16 上安装 NT(只需在安装过程中不要将您的分区转换为 NTFS)。
将您的 win95.bpb
启动脚本复制到 winnt.bpb
。将 winnt.bpb
中的 setpartitions
行更改为以下内容
setpartitions "BIGDOS:512 BIGDOS:512"然后使用此脚本启动 Windows 95,并将您的 NT 客户端安装在 C 盘上。暂时不用担心第二个分区。不要安装太多东西,否则您将得到一个非常大且解压缩速度很慢的镜像。从 C 盘中删除 Windows 95,您在 Windows NT 镜像中不需要它(启动菜单由启动引导程序处理,而不是由 NT 启动加载程序处理)。
在不覆盖硬盘的情况下重新启动您的计算机,即不执行 winnt
脚本,而只是
hidebootprom hdboot您的 NT 工作站应该可以正确启动。进行任何必要的自定义。
Windows NT 的问题在于内核禁止直接磁盘访问。这意味着,MrZip
甚至无法读取启动扇区。因此,创建镜像的最佳方法是启动 Windows 95,并从 DOS 窗口运行 MrZip
。为此,请更改 winnt.bpb
脚本,以便 Windows 95 镜像不会恢复到第一个分区,而是恢复到第二个分区
hidelog
setpartitions "BIGDOS:512 BIGDOS:512"
setbootpart 2
fullunzip "win95.imz" 2
hidebootprom
hdboot :2
(如果您有任何补充补丁,请将 "{:1}"
更改为 "{:2}"
)。使用此脚本启动;您应该运行 Windows 95,但应该有一个新的驱动器 D:
可用,其中包含 Windows NT。像往常一样创建您的磁盘镜像(当然是在 D:
上),并将其另存为服务器 /tftpboot
目录中的 winnt.imz
。最后一次编辑 winnt.bpb
脚本,如下所示
hidelog
setpartitions "BIGDOS:512 BIGDOS:512"
setbootpart 1
fullunzip "winnt.imz" 1
clean 2
#fullunzip "win95.imz" 2
hidebootprom
hdboot :1
您的 Windows NT 远程启动配置已准备就绪。当然,如果您不喜欢有两个分区,您可以设置一个单分区。但是,当您必须重建镜像时,您将必须再次设置第二个分区才能启动 Windows 95。
如果您以后想要升级软件、安装错误修复程序和安全补丁,请按以下步骤操作
winnt.bpb
:注释掉 clean
和 winnt fullunzip
,取消注释 win95 fullunzip
本节列出了最常遇到的问题。
您可能正在使用标准的 TFTP 服务器,它无法处理超过 65535 个 512 字节的数据包(或者对于 Solaris 服务器,甚至无法处理超过 32767 个数据包)。也就是说,您的镜像必须被分成不超过 30 MB 的片段(对于 Solaris 服务器,则为 15 MB)。请参阅 CopyArchive 下的说明,了解如何对现有镜像进行分片。但是,您应该认真考虑使用 InCom 的扩展 TFTP 服务器,因为它效率更高(它使用 1408 字节的数据包而不是 512 字节的数据包)。
有三种可能性。要么镜像在服务器上确实已损坏(尝试使用 MrZip 查看是否是这种情况),要么文件传输因 TFTP 超时或协议不兼容而失败。
当网络负载过重时(例如,如果您尝试同时为四个以上的客户端下载一个巨大的镜像),就会发生 TFTP 超时。在这种情况下,BpBatch
不会无限期地重试,因为这没有帮助。关闭几台计算机,然后重试,计算机数量不超过四台(甚至可能是三台)。如果您经常需要为大量计算机下载镜像,您可以尝试我们特殊的广播 TFTP 服务器(请参阅专门介绍它的部分)。
协议不兼容是由于在使用标准 TFTP 服务器(通常是 UNIX 服务器中内置的服务器)的同时,要求 BpBatch 使用增强型 TFTP 引起的。如果您使用标准 TFTP 服务器,您应该删除 .P 扩展名(请参阅下一个问题中的解释)。
如果您正在使用 Incom 的 TFTP 服务器,请尝试在命令行中添加 -s 1408 59。如果您没有使用增强型 TFTP 服务器,请从服务器上的 BpBatch 文件名和 bootptab
中删除 .P
扩展名。
详细解释:如果您没有设置扩展 TFTP 服务器,但您使用了 bpbatch.P
作为 bootfilename DHCP/BOOTP 标签,则会发生此问题。当 bootfilename 以 .P
扩展名结尾时,BpBatch 实际上会尝试连接到扩展 TFTP 服务器。要解决此问题,您可以删除 bootfilename 末尾的 .P
扩展名(这将告诉 BpBatch 使用标准 TFTP)或安装扩展 TFTP 服务器。目前唯一支持的扩展 TFTP 服务器是 Incom 提供的服务器。您可以在他们的网站或我们的分发目录中找到编译后的二进制文件。为了使 Incom 的 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。这很有意义,DOS 版本将干净地退出而不是重新启动。请注意,您可以随时按 Ctrl-Break 从 DOS 版本退出。这将在离开之前恢复所有挂钩的中断。
如果您尝试打印某些内容并立即进入交互模式,您可能看不到您的文本。这是因为您的文本被写入了运行时屏幕,而 Interact
命令已将显示切换到日志屏幕。只需在打印命令后放置一个 GetKey
,您就会看到文本输出。
Malloc failed
MrZip 需要大量常规内存才能运行。如果您遇到此问题,首先请确保您已卸载启动引导程序,可以使用 HideBootprom
或使用 InCom 的 bputil
。如果您从裸 MS-DOS(而不是在 Windows 95 DOS 框中)运行 MrZip,您应该使用 EMM386 将网络驱动程序加载到高端内存中,以便获得尽可能多的常规内存。从 Windows 95 DOS 框中,通常没有问题(只要您在安装 Windows 95 时没有将旧的 16 位内容留在 autoexec.bat
中)。
此错误已修复过一次。获取最新版本的 MrZip
。如果问题仍然存在,请尝试将 Trace
设置为 "ON"
(通常将 PauseLog
设置为 "OFF"
)来构建您的镜像;这将使您发现哪个文件导致了问题。发送详细的错误报告。
MrZip 可能正在尝试读取锁定、打开或特殊文件,例如 Windows 交换文件。此类文件通常不应包含在镜像中,应使用(filter
命令)过滤掉。操作系统也可能在和您开玩笑。如果 MrZip 没有告诉您哪个文件导致了问题,请尝试将 Trace
设置为 "ON"
(通常将 PauseLog
设置为 "OFF"
)来构建您的镜像。您也可以尝试使用直接磁盘访问(即,不要将源分区称为 "C:"
或 "/"
,而是称为 "{:1}"
或任何分区)。使用直接磁盘访问通常较慢,因为我们的缓冲区比操作系统少,但有时可能更可靠。
磁盘镜像存储在特殊的缓存区域中,如果服务器上的镜像没有更改,则不应重新加载。但是,由于缓存区域始终在最后一个使用的分区之后开始,因此更改分区的总大小将移动缓存的位置,从而破坏其内容。文件从缓存中消失的另一个可能原因是上一个文件增长到其初始大小的 1.5 倍以上。然后该文件将被覆盖,需要再次下载。这种情况几乎永远不会发生。第三个可能原因是缓存区域太小。如果分区外部剩余的可用空间小于所有压缩镜像大小之和的 1.5 倍,则只有最近使用的镜像才会存在于缓存中,而其他镜像将需要在需要时重新加载。
此发行版假设 Linux 是使用 lilo
启动的,并检查 BOOT_IMAGE
命令行参数(在 /etc/rc.d/rc.sysinit
中)。只需将其添加到 linuxboot
调用中,或更改您的 rc.sysinit
。
Linux dhcp 客户端是一个程序,它根据 DHCP 提供的地址动态更改客户端的 IP 地址。如果地址是永久提供的(无限租约时间),DHCP 客户端只需设置地址并返回(这就是我们期望的)。但是,如果租约时间有限,DHCP 客户端必须保持加载状态,并且每隔几分钟请求新地址。如果 DHCP 客户端不返回,MrBatch 将永远不会被加载... 解决方案是给出无限租约时间(有时编码为 -1)。
此问题发生在日期为 94/07/25 的 AMI BIOS 上。我们进行了一些调查,但没有找到解决方案。似乎这个问题是由于此 BIOS 中的一个错误造成的(某些寄存器或内存位置必须被破坏)。
此问题是在引入 PXE 兼容性时引入的,但现在已修复。请获取最新版本。
此问题已在 8 月 9 日版本的 MrBatch/MrZip 中修复。RedHat 5.1 发布的新版本的 ncurses 存在问题。
MrZip 已链接到 libncurses 的 3.0 版本。只有当 libncurses 的其他版本比 3.0 版本更新时,您才能使用它们。要使用更新版本的 libncurses,您所要做的就是从 libncurses.so.3.0 到您的 libncurses.so.xx 文件创建一个软链接。对于 RedHat 5.1,您可以使用以下命令:cd /usr/lib ; ln -s libncurses.4.2 libncurses.3.0
您也可以下载最新版本的 mrzip/mrbatch。从 98 年 10 月 25 日开始,mrbatch 现在在 RedHat 5.1 下编译。
此问题与上一个问题相反。现在发行版已准备好 libc6,它不能再与 libc5 一起使用。如果您遇到此问题,只需升级您的 Linux 机器(好吧,如果我们听到太多抱怨,我们可能会尝试保留两个发行版...)。
您应该首先显示 VESA-Modes
变量的内容,以查看您的硬件是否支持您想要使用的模式。然后,尝试以下两种方法之一来选择特殊的 VESA 模式
InitGraph "mode"
:尝试 InitGraph "1024x768",然后运行您感兴趣的图形原语(例如 DrawGif
)。VESA-Modes
:VESA-Modes
变量的第一个字段是默认模式的名称。如果您更改 VESA-Modes 变量,所有图形原语都将使用您指定的模式。我们纠正了 BpBatch 内存分配函数中的一个错误。您应该确保您拥有 1998 年 9 月 22 日之后发布的 BpBatch 版本。
我们在 1998 年 09 月 22 日的发行版中纠正了此问题。
10/25/98 版本确实纠正了大型镜像的问题。尝试下载最新版本的 BpBatch。
此错误已在 10/25/98 版本中纠正。
此错误已在 02/09/99 版本中纠正。