Linux Remote-Boot mini-HOWTO: 使用 Red-Hat Linux, DOS, Windows 3.1 及 Windows 95/98 及 Windows NT 远 端开机工作站设定 作者: Marc Vuilleumier Stückelberg, David Clerc [1]mvuilleu@rembo.com 译者: 曾元佑 [2]yytseng@ms16.hinet.net v3.26, 二月 2000 翻译日期: 六月 2000 _________________________________________________________________ 这份文件将说明如何设定出一种, 使一群 PC 具有以伺服器为基础的稳定且安全 的架构, 此法可使每台用户端 PC 在开机时选择使用何种作业系统. 而此种架构 的精要是使用以 BootPROM 为基础的程式, 让使用者在开机时, 选择不同的开机 区块. 我们是用 Bootix 的 TCP/IP BootPROM (可附加於大部份的网路卡), 或者 其他与 PXE 相容的 Boot ROM (已在近期出现的内建网路卡的 PC 上使用). 此份 文件的最新版本, 包含超文件连结到可供下载的软体及其他相关的资讯, 都可以 在这个网址找到 [3]http://cuiwww.unige.ch/info/pc/remote-boot/howto.html. [4]Linuxdoc-SGML, [5]DVI, [6]PostScript 及 [7]PDF 等版本都在这个目录 下. 如果您想获得最新的发展资讯, 可以送一封信给 [8]info@bpbatch.org. _________________________________________________________________ 1. 免责声明及版权 2. 有那些变更... * 2.1 ...从 2.x 版後 ? * 2.2 ...从 3.0 版以後 ? 3. 简介 * 3.1 BootPROM 及 硬碟机 * 3.2 网路 * 3.3 它是如何工作 * 3.4 相关的非商业文件 4. 如何设定 * 4.1 伺服器端的设定 * 4.2 用户端的设定 * 4.3 设定开机流程 * 4.4 设定 Linux * 4.5 设定 DOS 6 及 Windows 3.1 * 4.6 设定 Windows 95/98 * 4.7 设定 Windows NT * 4.8 问题集 (FAQ) 5. 远端启动工具程式参考手册 * 5.1 BpBatch, MrBatch 及 MrZip * 5.2 NoBreak.sys 6. 特殊型的 TFTP 伺服器 * 6.1 Bootix 的增强型 TFTP 伺服器 * 6.2 Linux 的增强型 TFTP 伺服器 * 6.3 Solaris 的 TFTP 伺服器 * 6.4 安全闸道器 * 6.5 广播型 TFTP 伺服器 _________________________________________________________________ 1. 免责声明及版权 在使用这些软体前, 请仔细阅读. 本节定义你对本软体所能做与不能做的事, 及我们所担保与补偿的限制. 安装, 复制, 或使用软体都表示你已承认, 并读过这个版权且已接受这些条文. 请注意这份版权只对个人的使用有效, 就如在通用条文的第 1 项所定义的. 通用条文 1. 授权执照 BpBatch, MrBatch, MrZip 及 相关工具程式 (以下指 "软体") 的作者, 允许你 有一份 不可独占, 不可传递, 免权利金的执照, 用以下载并使用这些软体但必须 是在下列条文所约束下. 这份执照只授权个人的软体使用. 是否视为个人的使用, 乃是以软体是放在个 人, 公司或学校所拥有的电脑来认定. 软体的散布, 贩卖或租赁, 不管是 "照原形式" 或当成产品的附件, 或把它安装 到属於第三者的电脑上都是禁止的, 除非得到作者群的商业型态授权或他们所认 定的代理人的授权. 请透过 [9]info@rembo.com 联络以得到更多资讯. 我们提供您付得起的商业型态 授权. 2. 免责担保 这些软体规定 "照原形式", 不具任何直接或间接的担保. 也无法担保或预期是否 有任何错误. 使用这个产品所导致的结果与风险都必须由你承担. 特别是, 作者群所提醒你 的, 这个软体能在没有任何警告下, 把硬碟内容清除掉. 作者群不论在任何情况下, 都不需对你负责. 侵权行为或契约, 在经济上的影响 或任何形式的非直接性损害, 包含未限制到的, 财务或获利上的损失, 或者无法 使用, 消失或损害到资料或导致中断生意, 使用这些或其它软体所导制或与其有 关的问题, 甚至所建议的可能的损害以至预期发生的损害. 3. 版权 这些软体是有版权的并受到国际法的版权法及条约所保护. 你必须同意避免任何 非经授权的软体复制. 你不可以把版权宣告或专利权, 自软体中移去或使其朦胧 不清. 你不可以任何方式对软体做反编译, 反组译, 或逆向工程. 4. 条文可分割 这些通用条文的分割声明. 如果这些条文中任一项目或规定, 因为任何因素而失 效或不具权力, 则其他项目或条文依然有效并具权力. 5. 适用法律 这些与此软体有关的通用条文以及所有的权利或义务, 将一律在瑞士的法律下管 理与释意, 适用於 日内瓦. 6. 独占司法权 任何涉及与这个软体有的争议都必须服从於瑞士日内瓦法庭的独占司法权, 保留 上诉到瑞士的联合最高法庭. 2. 有那些变更... 2.1 ...从 2.x 版後 ? 直接的说, 全部都改了. 只有基本的概念是相同的, 有关软体的部份已全部重新 设计以克服先前版本的一些限制. 新功能的重点有: * 所有的功能 (BpMenu, BpClean, BpUnzip) 已整合在同一个程式. * 此程式不只可以由 BootPROM 里执行, 并可以在 DOS, Windows 95/98 及 Linux 下执行. * 此程式现在已可以回存 FAT16, FAT32 及 EXT2FS 的分割区. 如果有人想写 支援 NTFS 的部份, 请让我知道... 目前, NT 使用者还是得用 FAT16. * 此程式不仅可以回存磁碟映像档, 还可以附加或更新单独的档案用以改变用 户端的功能特性. * 磁碟映像档不再有 87 MB 的限制. 他们现在是与档案系统无关的程式. * 我们打算让它在同一时间内以自动的方式下载磁碟映像档到一堆用户端 (采 网路广播的技术). * 现在你可以自行撰写更可靠的开机程序, 在真正开机前它将决定机器所要的 功能. * 现在你可以用任何一种 Linux Kernel 开机, 不需再加上修正档. 亦能加上 命令列控制及 ramdisk 映像档. * 你可以采用 Unix, NT 或 Radius 伺服器做开机前的使用者身份认证, 并能 拒绝非法使用者使用. * 已包含完整的国际化语系支援. * 还有许多, 许多其他新的功能... 是否有那个程式能把旧的映像档格式转换成新格式 ? 没有, 因为核心的格式根本就不相同. 但你可以轻易地自行转换: 1. 以旧的映像档开机 (把它解到你的硬碟) 2. 移掉叫用旧的 unzipreg 工具程式, 改以适当的 patch 指令 (参照以 下的步骤, 它相当容易使用) 3. 执行新的 MrZip 程式以产生一个新格式的磁碟映像档. 2.2 ...从 3.0 版以後 ? 3.0 版: 原本是一个测试版本. 在经过一个月的时间, 全球各地使用者的实际测 试及寻找程式里的臭□并提供更好的意见. 感谢他们所有人的耐心, 特别是 Maciek Uhlig, Dick Velders 及 Jeff Teeters. 3.01 版: 後开始增加一些细部的功能, 比如无磁碟机的 Linux 开机 (藉由关掉 快取功能). 3.10 版: 开始与 Intel 的 Wired for Management 1.1a NetPC 标准相容. 这些 工具程式已能在现今任何 PXE 相容的 BootPROM (它通常是直接附在主机板上的 BootPROM) 上工作. 感谢 [10]Bootix GmbH 提供我们 PXE BootPROM 以发展这项 功能. 而我们也成功地完成各项工具程式与我的 Dell 电脑上附於主机板的网路 卡 (称为 LanDesk Service Agent) 的 PXE BootPROM 测试. 3.11 版到 3.12 版: 增加 UNIX 伺服器端工具程式 (可在 Solaris 及 Linux 下 跑的 PXE Proxy DHCP 伺服器, 及一个增强型的 TFTP 伺服器给 Linux 执行), 更详细的资讯以说明伺服器端的设定方法及 PXE 开机步骤. 3.13 版: 增加对 Advanced Power Management 的支援 (关电源的指令). 3.14 版: 增加细部功能强化及修正. 我们修正一个 RedHat 5.1 terminal 的问 题, 及另一个关於 "if" 指令的语法问题. 我们增加一些由 Laboratori de C □cul de la Facultat d'Inform□ica de Barcelona (LCFIB) 所建议的新功 能: * 一个新的 APM 变数使你知道系统是否支援 Advanced Power Management (即 支援关闭电源的指令). * "beep" 指令. * DrawWindow 的新参数, 可以在产生视窗同时加入标题. 你可以用 DrawWindow 200 200 400 200 "视窗标题". 3.15 版: 新增 VESA 的完整支援. BpBatch 现在支援多种显示模式, 以让那些不 能显示 800x600 图形的旧电脑也可以使用. InitGraph 加入一个新参数以指明所 使用的显示模式, 并可由新的 VESA-Modes 变数取得所侦测出可用的显示模式. 3.16 版: 修正下列的程式臭□: * 当 Fullunzip 处理混乱复杂的影像档时产生的 "Malloc failed" 讯息. 相 当感谢 Christian Meyer 的协助. * 在 MrBatch 的 Linux 版本有个程式臭□使其无法完整的把映像档解压缩, 这个程式臭□是出现在 MrBatch 的底层函式, 因此会一并修正其他 MrBatch 在 Linux 版本下的问题. 相当感谢 Jeff Teeters 的协助. * 在 codepage 转换表中的错误. 这个程式臭□由 Laboratori de C□cul de la Facultat d'Inform□ica de Barcelona (LCFIB) 发现. 在 BpBatch 讨 论群组中, 你能找到此程式臭□的报告. 3.17 版: 新增的细部功能及修正的程式臭□: * Fullunzip 程式会把延伸记忆体关掉. * 以 RedHat 开机片开机, 已可以正常工作. * 当所解开的映像档含有太多目录时, FAT 档案系统会出现的问题已修正了. * 我们加入以 TFTP 通讯协定传送资料时的重发功能. BpBatch 会在 "Could not transfer the file" 出现前重送资料三次. * Timestamps 可以正确地在 FAT 下更新. (感谢 Francis Chan) 3.18 版: 修正 IncrUnzip 功能上的程式臭□. 感谢 Gary Pike 的协助. 3.19 版: 修正在 Ext2fs 下 delete 指令的错误处理方式, 解决在 Linux 下对 A: 的不合宜处理. 并加入下列功能: * 新的 if valid 硬碟机:分割区 语法用以检查分割区是已否被格式化 * FAT32 磁碟映像档现已功能完整 (已可正常开机). * Linux EXT2 已可支援超过 2 GB. * Linux Swap 分割区以可支援超过 128 MB (此功能需用 2.1.x 以上的 Kernel). * FullUnzip 现在也可以不用快取分割区, 只要设定 CacheNever 为 "ON". 这 对每台用户端的安装都不一至时还满有用的, 但通常不建议使用, 因为这会 使得网路负载加重. 感谢 Ruben Schattevoy 的协助及对此版本的贡献. 3.20 版: 我们加入 Peter Schmitt 所写的文件. 3.21 版: 我们已修订本文的部份章节以吻合 PXE 2.0 的规□. 最主要的改进是 BpBatch 的命令列模式下参数设定改用 DHCP 选项 135 取代原来的 155 (155 仍 然支援以向下相容). 3.22 版:引入新的版权条文. 请在使用 BpBatch 之前,详细 阅读. 3.24 版: 由 Tellurian Pty Ltd, [11]http://www.tellurian.com.au , 加入 Watchdog 介面卡的支援. 我们一并修正载入器对名称的语意法则, 以允许 Intel 及 Bootware TFTP 伺服器的使用. 参考 what's new 档以了解进一步的细 节. 3.25 版: 我们加入一些小技巧 (给 Windows 98 使用的过滤器及如何取消密码传 输前加密功能) 来自 BpBatch 迷. 3.26 版: 修正许多印刷的错误, 感谢 Herman Bruninckx 长期反复的审阅. 我们 也加入一节来说明 Solaris TFTP 伺服器. 3. 简介 这里所描述的架构是从 1996 夏季开始在 日内瓦大学, CUI 所发展的. 这个资讯 系有许多的伺服器, 及一些个人电脑, 可依用途分为两类: * 学生使用 * 研究与辅助教学 以下是我们发展这种架构的目标: * 任何一台电脑都可以执行 Linux, DOS, Windows 3.1, Windows 95/98, 或 Windows NT. 每次开机时可以选择所需要的作业系统. * 所有的软体, 包含作业系统, 可以放在伺服器上, 便於安装与更新. * 用户端电脑, 可以在不对伺服器做写入的状态下正常工作 (为了安全性), 除 了用户自己的 home 目录. * 尽可能减少用户端电脑的设定. 用户端电脑可以自动由伺服器取得 IP 组态 设定, 这些资讯放在一个小档案, 可供各种作业系统使用. * 大部份的电脑都各自拥有硬碟, 用户端电脑可以靠这优点来降低网路负载与 存放使用者的暂存档. * 所有的使用者都 必须 登入才能使用电脑. * 登入的资讯必须所有的作业系统都相同. 而使用者可以存取个人的目录, 并 而在各种作业系统都一至. * 学生 (以及秘书 :-) 所使用的电脑在每次启动时必须清理一次. 也就是像刚 安装完的样子. * 每台电脑可以防毒. 这些限制条件, 使得我们把所有的组态都以 BootPROM 工具程式为基础. 我们先 是针对来自 [12]Bootix GmbH 的 [13]TCP/IP BootPROM 发展. 而现在更加入对 preboot execution environments 标准的支援. 我们让这些工具程式也可以与任 何 PXE 相容的 BootPROM 一起使用. PXE BootPROM, 也称为 LanDesk Service Agent, 已跟随著大部份内建网路卡的主机板一起散布. 其他关於 PXE 及 Intel Wired for Management 的标准, 可透过 [14]http://developer.intel.com/ial/wfm/tools/index.htm 取得. 3.1 BootPROM 及 硬碟机 BootPROM 已出现很长一段时间, 在此之前我们把它单独用於无磁碟机的电脑(采 用网路为基础的磁碟模拟或者下载一份 ramdisk). 从 1996 年起, 这份 How-to 提出使用 BootPROM 在自身具有硬碟机的电脑下使用, 将更有趣. 由於这样将可 得到双重得优点: * BootPROM 使得此架构更加稳定, 用它可以保证每台电脑都会以同样方式开 机. 不管中了任何病毒或在分割区已毁损的状况. 就如我们已完成的, 它可 以做到在载入作业系统前清理硬碟资料. * 自身具有硬碟机, 使得此架构更有效率. 因为这样可以经由快取方式降低网 路负载. 更能获得较有效率的 swap. 至今, 我们相当高兴见到所有的电脑制造商已朝向同样的目标. 并把 BootPROM 列为新电脑标准的一部份. 你仍然可以照 旧 的方式, 使用下列所叙述的工具程式. 这些工具程式对无磁碟 机的电脑而言, 其实就是一个小的 Kernel/ramdisk 载入器. 但我们不鼓励如此 使用. 3.2 网路 日内瓦大学 拥有 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 共用软体及使用者的档案. 因此, 我们对所有的作 业系统都使用单一个 home 目录. 3.3 它是如何工作 1. 用户端个人电脑开机後, 在 TCP/IP BootPROM 或 PXE Boot ROM 获得控制权 之前先做自我测试. 2. BootPROM 发出 BOOTP/DHCP 要求, 以取得 IP 组态参数. 3. 如果伺服器收到个人电脑所送出的要求, 就会送回 BOOTP/DHCP 回应, 内容 包括用户端的 IP 位址, 预设通讯闸道, 及开机映像档. 否则, 伺服器会忽 略这个要求. 4. 而在 PXE Boot ROM 的环境下, 将有更多的讯息在用户端与伺服器之间作应 答, 用以决定安装参数. 5. BootPROM 由 TFTP 通讯协定从伺服器下载开机映像档, 这个映像档其实就是 一个名为 BpBatch 的小程式, 也就是我们的开机时期批次档案的解译器. 6. 启动批次档解译器之後. 几乎是只有它单独存在记忆体中. 除了 preboot execution environment (由 Boot ROM 提供)外, 这时作业系统尚未载入. 7. 这个批次档解译器会检查 BOOTP/DHCP 给命令列的所有选项, 特别是 BpBatch 要处理的. BpBatch 以 DHCP 选项 155 取得命令列参数. 如果选项 155 是空的, 它会改由 DHCP 选项 135 取得参数 (PXE 2.0 BootPROM 只能 收到 128-135 的选项). 8. 透过批次作业档, 我们可以做一些事如: 1. 载入多国语系键盘对应. 2. 透过远端伺服器 (Unix, Radius 或 Windows NT) 做使用者身份认证. 3. 让使用者决定使用, 哪种可用的作业系统. 4. 决定作业系统後, 自动重新分割硬碟并快速格式化部份分割区. 5. 检查其硬碟内的资料是否与其选定的作业系统的最新设定一制, 如果不 是, 它会透过 TFTP 通讯协定下载最新映像档. 6. 解压缩所选定的作业系统的映像档到主分割区. 7. 如果选择 Linux, 载入 Kernel 并启动它. 8. 如果选择 DOS 或 Windows, 就更新硬碟资料并启动电脑. 对 DOS and Windows 3.1, 我们使用免费的 Microsoft LanManager for DOS (搜寻网路上与你最近的映射站台; 应该是有四个名为 disk1 到 disk4 的档案) 为 SMB 用户端. Microsoft LanManager 可以透过 DHCP 动态设定 组态. 在登入後, 使用者面对的是 DOS, 且只要打 win 指令就可启动 Windows 3.1 了. 有一点, 在这要特别注意 DOS 及 Windows 3.1 看起来像 是安装在用户端的自身电脑. 对 Windows 9598 及 Windows NT/, 我们也使 用 Microsoft SMB 用户端 (称为 Client for the Microsoft Network), 它 也支援透过 DHCP 动态设定组态. 为了降低网路负载我们采用了 [15]Shared LAN Cache, 这是一个强而有力的网路到硬碟之间的快取程式. 学生所使用的电脑可以很暴力的直接关掉电源而不会有任何问题, 因为硬碟的资 料在每次开机时都会重新建立. 对於比较 "安全的" 电脑 (如 助教的电脑), 如果电脑已用上述系统开机过一 次, 则开机脚本只会改由本机硬碟开机, 而不再清理硬碟. 这样可以允许使用者 保留资料在硬碟中. 而当整个架构烂掉了, 使用者只需从开机选单挑选所要的系 统, 则又能得到一个全新的安装. 3.4 相关的非商业文件 这种组态已经成功的移殖到世界上的许多地方. 少数人已经开始篆写一些技巧与 提示来完成这份 How-To. 如果您也曾做过, 但在本文中未被引用欢迎送一份 e-mail 给 mvuilleu@bpbatch.org. 如果您在重建这种组态中遇到问题, 请再详 细看一次文件 ! * [16]http://www.ph-ludwigsburg.de/nutzer/schmitt\_peter/, 由在德国, Ludwigsburg 的 Carl-Schaefer-Schule 的 Peter Schmitt 所写. 此文是 BpBatch 的优质参考资料, 适合德语的使用者. * [17]http://www.br.fgov.be/RESEARCH/INFORMATICS/info/bootp.html, 由 在比利时国家植物园的 Alain Empain 所写. 有许多有用的□例脚本程序,以 及一个很棒的 PERL 程式用来自动产生图形化的选单并能透过高阶的叙述转 成 HTML 文件. * [18]http://www.katedral.se/system/elevsyst, 由瑞典 Uppsala 教会学校 的 Johan Carlstedt 所写. 至今, 在这的组态设定还停留在旧版的远端开机 工具程式. 大致上, 只要一点点修正, 所有的东西都还可以适用. * [19]http://vitoria.upf.tche.br/~fred/, 葡萄牙文, 由 Brasil 的 Passo Fundo 大学的 Frederico Goldschmidt. * [20]http://www.etse.urv.es/~larinyo, 西班牙文, 由西班牙, Escola Tecnica Superio d'Enginyeria 的 Lluis Arino 所写. 你也可以寄给我你的 BpBatch 脚本程序档, 如果你想让它放在 [21]□例脚本程 序精选中. 4. 如何设定 首先, 调整机器位置使手边有下列两台机器: * 伺服器, 我们是用一台 Unix 主机或 Windows NT. * 用户端, 一台已经启动 BootPROM 的个人电脑, 硬碟内不要有重要资料. 如果你想要测试您的组态设定而您还没有 BootPROM, 你可以到 [22]http://www.bootix.com 下载测试版磁片. 这个磁片可以使您的电脑就好像 是插上 TCP/IP BootPROM 一般. 如果你已有 Boot ROM, 你要先启动它. 如果您使用 Bootix 的 TCP/IP BootPROM, 你可以用网路卡制造商所提供的特殊程式来启用它. 如果你用 PXE BootPROM, 你只要经由 BIOS 设定, 改变预设的开机装置 (default boot device) 就可以了. 学生所使用的电脑, 我们设定由网路开机, 而不能透过硬碟及软碟开机. 助教的 电脑, 我们设定先由网路开机, 但也允许硬碟与软碟开机. 4.1 伺服器端的设定 在伺服器端, 只需要下列的服务: 1. 一个 BOOTP/DHCP 伺服器. 2. 或许也要一个 Proxy DHCP 伺服器. 3. 一个 TFTP 伺服器. 使用 PXE Boot ROM 必须注意: 你要确定是使用最新版的 PXE. 在写本文的时 候, 最新的版本是 PXE 2.0 但 PXE 0.99x bootrom 也支援, 不过有部份的 DHCP 选项将不会透过 DHCP 伺服器送出. 特别是, 如果 DHCP 选项 135 对 BpBatch 失效 (BpBatch 於启动时, 显示 "Cannot load file"), 你就要升级到 PXE 2.0 . 如果你的网路卡属於 Intel EPRO100 族系, 你可以取得最新的 Intel PXE Product Development Kit (PDK) 评估版, 它还包含一个用来更新 BootPROM 的快闪记忆体工具程式. 这个 PDK 放在 [23]http://developer.intel.com/ial/wfm/tools/pxepdk20/index.htm. 设定 DHCP 伺服器 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 伺服器 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 要求, 它会一直等到收到才停住. 1. 一个 client class (T60) 设定为 PXEClient. 2. vendor encapsulated options (T43). (不可以是空的字串, 但你可以设为 16 进制的 01:04:00:00:00:00, 这可以被 PXE BootPROM 所接受) 3. 一个非空白的可开机档档名. 4. 一个有效的主机名. PXE 规□协调的工作会在所有的资讯都取得後才结束, 如果缺了某一部份的资 讯, 将引发相当复杂的作业程序 (寻找安装伺服器, 等问题.). 设定 TFTP 伺服器 TFTP 伺服器是相当简单的档案伺服器. 最基本的版本中, TFTP 通讯协定乃是采 用每个区块 512 位元组, 这个作法相当没效率. Bootix 的 TCP/IP BootPROM 及 PXE BootPROM 允许使用较大的区块来传送 (1408 位元组), 此法可以大幅加速传 输速度. 但, 这只能在增强型的 TFTP 伺服器上工作. 在 Windows NT 环境下, 我们建议采用 Intel 的 TFTP 伺服器, 可以在 Intel PXE Product Development Kit for Windows 找到. 你可以在这找到这个 PDK [24]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 伺 服器, 可以在我们的目录下找到 ( [25]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 上. 你可以在这找到 [26]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. 4.2 用户端的设定 首先, 我们把所有作业系统相同的部份设定好. 如: 批次档的解译器. 然後, 再 针对各种作业系统来完成, 我们需要下列的步骤: 1. 设定单一的用户端. 2. 储存其设定到伺服器. 3. 测试它是否可以为远端开机的用户端电脑所使用. 4. 调整它的设定以适用於其他硬体配备类似的用户端机器. 如果这些都完成了, 你要加一台用户端, 则只要插上 Boot ROM (或买台具 Wired for Management 的电脑...) 然後再加一行设定到 DHCP 伺服器的设定 档. 译注: Wired for Management 应该是指本身具备 PXE 功能的品牌电脑. 我们的□例是假设你的用户端电脑的硬碟空间至少有 1.4 G 以上. 如果低於这个 值, 那就要缩小分割区, 但请记住你要保留几百 MB 空间不被对应到 (也就是, 不要连最後一个分割区都已画分到最後一个磁柱) 以保留空间给特别的快取分割 区. 然而, 快取区通常接在最後一个对应到的磁柱开始对应, 如果你不想用相同 大小来做测试, 你将下载同样的档案数次 (快取区会被自动清除). 别灰心. 如果你一直无法让它正常工作, 先参考 问题集 那一节, 搞不好你的问 题已被解决过了 (请自网页取得最新版本). 再不行, 查一下 BpBatch 讨论区. 或许有人跟你遇到同样的问题, 而解答可以在讨论区找到. 讨论区的网址是: [27]http://cuiwww.unige.ch/info/pc/remote-boot/forum/. 如果还是无法正常 工作, 考虑看看监控一下网路流量是否是网路本身的问题 (在 Linux 环境下, 可 以用 tcpdump 而 Solaris 环境, 可以用 snoop ). 如果你依然无法让它正常工 作, 送一封 E-mail 到 support@bpbatch.org. 如果你的问题与远端开机的设定 有密切关系, 我们会试著解决你的问题. 4.3 设定开机流程 取得 BpBatch 软体, 不管是 .zip 或 .tar.gz 格式. 可执行档都放在 * [28]http://cuiwww.unige.ch/info/pc/remote-boot/soft/bpb-exe.zip. * [29]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, 线上说明档 然後为你的用户端加一些 DHCP 的设定工作, 其中: 可开机档档名设定为 "bpbatch.P". 定义 vendor 选项标签 155 (十进制) 为 "-i" (在标准型的 DHCP 伺服器, 可以用以下的指令完成: option option-155 "-i";). 它会被 bpbatch 解释为命令列, 而 -i 意谓著 "交谈模式". 启动用户端电脑. 你应该看到 * BootPROM 的版权宣告. * 当用户端在等待 DHCP 回应时, 会出现 DHCP 字串. * 当用户端在等待第一个 TFTP 封包时, 会出现 TFTP 字串. * 当载入器下载解译器时, 会出现 Loading BpBatch 字串. * 最後是我们的旗帜, 随著一个 极大的 提示符. 恭喜 ! 你以经启动了批次档解译器... 如果你很急於知道在这环境下你可以做舍 事, 那就继续阅读下一节. 如果你不急, 跳过它直接安装你所选择的作业系统. 如果你有任何关於解译器指令的疑问, 输入 help. 记住你可以在 DOS 及 Linux 下执行相同的解译器, 只要执行 MrBatch 程式. 只 有一点点的差异 (Linux 版本不支援图形化的功能, 而 DOS 版本如果在 BootPROM 未被作业系统隐藏之前, 只能送出 BOOTP 及 TFTP 的要求讯号). 现在是阅读 BpBatch 语法 的时候了, 尤其是 参考档案 及 快取档案系统 这两 段. 这将帮助你了解□例. 当所有的作业系统都设定好, 你要制作一个选单让使用者去选择它所要的是哪一 种作业系统. 你可自行探究如何去产生那种选单. 而所需的指令都在本文末端. 探讨 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 伺 服器以辨证有效的使用者. 4.4 设定 Linux 为了安装 Linux, 你需要 RedHat Linux 套件所提供的可开机软碟. BpBatch 含 有一个可以指向软碟开机的指令: FloppyBoot. 安装 [30]RedHat Linux 到你的用户端电脑, 必需具备网路支援功能. 以及你所 需要的套件软体. 你或许需要重新编译一个 Kernel 以合於你的硬体配备, 但这 不是必需的. 设定用户端电脑 在 Kernel 中加入对 BOOTP 通讯协定的支援将会是一个好主意, 这样你就不用手 动去设定用户端的 IP 位址. 为了降低网路负载, 你应该安装 file cache 以快取由 NFS 所载入的档案到硬碟 中. 简单的说, file cache 的功能是当有来自 cache 子目录下的符号连结形成 时, 它会被它的目标所取代. 如果目标本身是子目录, 则在子目录下的所有东西 都会变成符号连结, 并指向外在档案系统的原始资料. 这个 file cache 由 Unifix GmbH 所写, 已成为 Unifix Linux 2.0 的一部份. 它可以自由散布, 你 可以在 [31]http://cuiwww.unige.ch/info/pc/remote-boot/soft/filecache.tar.gz 取 得必要的档案. 为了使用这个 file cache, 你必须要 * 对 Kernel 加入一些修正 (档案是 patch-filecache), 透过 make config 或你所喜欢的方式来启用这个功能, 并重新编译 kernel. * 复制 file cache 的可执行档到 /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. 如果你完成上述的步骤, 你应该在下次开机时已具备 file cache 功能, 只要你 没忘记修正你的 Kernel. 测试设定档 复制你的压缩 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" 就可以测试它了. 系统维护与升级 如果你以後要更新软体, 安装程式臭□修正或安全性的修正, 处理程序如下: * 以远端开机方式启动一台用户端电脑以得到一个全新的 Linux. * 完成你需要的改变. * 重制磁碟映像档. * 复制新的磁碟映像档到伺服器以取代旧的. 这就意谓著, 你可以就像在使用一台普通的电脑一样来更新你的伺服器为基础的 组态设定. 4.5 设定 DOS 6 及 Windows 3.1 到用户端电脑上, 用你所喜好的 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 虚拟装置驱动程式 (可在这下载 [32]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, 线上说明档. 您也需要放一些简便的 MrZip 脚本程序档名为 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 重新制作磁碟映像档. 系统维护与升级 如果你以後要更新软体, 安装程式臭□修正或安全性修正的程式, 其处理程序如 下: * 以远端开机方式启动一台用户端电脑以得到一个全新的 Linux. * 完成你需要的改变. * 重制磁碟映像档. * 复制新的磁碟映像档到伺服器以取代旧的. 这就意谓著, 你可以就像在使用一台普通的电脑一样来更新你的伺服器为基础的 组态设定. 4.6 设定 Windows 95/98 在此份文件先前的版本, 我们使用过微软公司的 Windows 95 以伺服器为基础的 安装方式, 但是用这方法太过痛苦, 又不是那麽的有价值: * 它就真的是非常的虚拟. * 大部份的软体套件都不支援它而且如果您试著去安装最後的结果通常是失败 的. 包括, Microsoft Internet Explorer, OnNet 32, Novell's Protected-mode client (这较 Microsoft Client for Netware安全). * 因为微软公司不提供 Windows 95/98 在真实模式下的 TCP/IP 相容的驱动程 式所以您无法使用 Microsoft Network client over TCP/IP, 而这也就意味 著您不能使用 Samba. * 因为当用户端一启动就会锁住一些动态连结档造成许多程式几乎无法更新, 如果您试著去更新它则会出现 违背分享 (sharing violations) 的错误. 因此几个月前, 我们放弃这份本身就有问题的资料 (您仍然可在这找到 [33]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 生产的 (参考 [34]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 侦测到新的硬体设备的讯息: 一片新的音效卡, 一颗新的硬碟机, 一片 新的网路卡, 或者一只新的滑鼠... 会这样的原因有二: * 这些设备可能使用不同的硬体资源 (比如, 滑鼠不是接在相同的连接埠, 音 效卡不是接在同样的扩充槽 -.- 没错, 这会被侦测到). * 这些设备可能通知 Windows 95/98 它们的序号 (比如, 每台跑 Windows 95/98 的网路卡, 从最根本的乙太网路位址 就每台都不一样了). 事实上 , 如果 Windows 95/98 的即插即用功能可以正常工作的话, 自动侦测变 更的硬体设备并不会出问题, 所以如果即插即用功能失效时, 问题就来了. 例 如, Windows 95/98 对上我们的罗技 PS2 滑鼠时就不能即插即用, 更糟的是滑鼠 就消失了. 要解决这类问题方法就是, 尽可能使全部电脑有相同的硬体设备. 您无法避免的问题是每台电脑的网路卡. 很不幸的, 在搭配我们所用的 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 去侦测你的某些硬体配备, 可以试著在那机器上重 建一个磁碟映像档. 这样会把这台机器上的组态设定都含入这个映像档中, 希望 这能解决问题. 系统维护与升级 如果你以後要更新软体, 安装臭□修正或安全性修正的程式, 处理程序如下: * 以远端开机方式启动一台用户端电脑以得到一个全新的安装. * 完成你需要的改变. * 重制磁碟映像档. * 复制新的磁碟映像档到伺服器以取代旧的. 这就意谓著, 你可以就像在使用一台普通的电脑一样来更新你的伺服器为基础的 组态设定. 4.7 设定 Windows NT 我们并没有使用 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 改成可执行. * 重制磁碟映像档. * 复制新的磁碟映像档到伺服器以取代旧的. 就这样, 搞定 4.8 问题集 (FAQ) 本节列出我们所统计最常遇到的问题. 不停地下载映像档 可能是因为你所使用的是标准型 TFTP 伺服器, 而它不能处理超过 65535 个 512 位元组大小的封包 (而 Solaris 伺服器, 在超过 32767 个封包就有这个问题). 因为这样, 你的映像档必须拆成许多个不超过的 档案 30 MB (Solaris 的话, 是 15 MB). 参考 复制档案(CopyArchive) 的机制, 它会教你如何分割已存在的映像档. 如果你目前还在使用标准型 TFTP 伺服器, 你应该慎重考虑改用 Bootix 或 Intel 的 TFTP 伺服器. 参考下一个问题以探讨这些伺服器的功能. BpBatch 显示 "Fragment is not complete" 的错误讯息 这是 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 (参考下一个问题的解说会更清楚). 下载 / 解压缩时(1) 电脑当机 如果你用 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. 下载 / 解压缩时(2) 电脑当机 可能是你的电脑对 VESA 的支援有问题. 试著在命令列参数中加入 -v 或 设定 VESA 变数为 "OFF". VESA 卷页功能故障 我们使用 VESA 1.1 的卷页功能. 如果你的显示卡不支援 VESA 1.1, 就 别用这个功能. 如果只卷一页, 就会发生奇怪的条纹, 别急. 这是一个已 知的程式臭□, 我将在有空时修正 (VESA 卷页功能不是那摸重要 啦...). 快取中有坏掉的档案 如果一个存於快取区中的档案, 被外在的程式弄坏了. 它会自动地从快取 中被移除. 如果一个正在写入快取区的档案没完整写入 (可能是电脑在档 案传输中被关机), 则它也会被自动清除. 但如果伺服器传送一个已损坏 的档案. 或者发自伺服器的资料传送取消. 则这类已毁损的档案仍然会存 在快取区中. 你只要在 BpBatch 第一次存取快取区时, 同时按下两个 shift 键, 就可以把快取区内的资料清空. 还有一个方法, 在交谈模式下 输入 clean -1 . 在批次档中的 EXIT 指令失效 这不是一个程式臭□. Exit 并不是一个指令. 没有 exit 或 quit 指令 是因为如果不开机, 则从开机脚本程序中退出是毫无意义的. 而 MrBatch 完全跟 BpBatch 一样是同一支程式. 你可改以叫用 HdBoot 取 代 exit. 这才有意义, 且在 DOS 版下, 真的会取代重开机而完全退出. 记住你可以在 DOS 版任何情况下按下 Ctrl-Break 然後退出. 这将在离 开前, 回存所有被拦截的中断. Print 指令失效 如果你试著要印一些东西并直接进入交谈模式, 你有可能来不及看到那些 文字. 这是因为你所印的字是显示在 执行时期 显示幕而 Interact 指令 会切换到 记录 显示幕. 因此只要放一个 GetKey 指令在 print 指令之 後你就可以看到你要的文字了. MrZip 显示 Malloc failed MrZip 需要大量的传统记忆体才能执行. 如果你遇到这个问题, 先确定你 已经用 HideBootprom 指令或 Bootix 的 bputil 卸载了 BootPROM 所占 的记忆体. 如果你在单纯的 MS-DOS 下执行 (非 Windows 95/98 DOS 视 窗), 你应该使用 EMM386 把网路卡驱动程式载到高层记忆体以取得更多 的传统记忆体. 在 Windows 的 DOS 视窗下执行, 通常是没舍问题的 (只 要你在安装 Windows 时, 没留下任何 16 位元的东西在你的 autoexec.bat 档中). MrZip 在读取目录时失效 这个程式臭□已修正. 取得最新版 MrZip. 如果还有这个问题, 试著在把 变数 Trace 设为 "ON" (且把 PauseLog 设为 "OFF") 下, 重建你的映像 档; 这可以让你发现导致问题的原因. 请回传详细的程式臭□报告. MrZip 无法存取某些档案 MrZip 会试著去读取已锁住, 已开启或其他特别的档案, 如 Windows swap 档. 这类档案应该不被含在映像档中并应被过滤出来 (使用 filter 指令). 当然也可能是作业系统在耍你. 如果 MrZip 没告诉你哪 个档案导致问题, 试著把变数 Trace 设为 "ON" (且把 PauseLog 设为 "OFF") 下, 重建你的映像档. 你也可以试著用直接磁碟存取 (也就是, 不把来源分割区当成 "C:" 或 "/" 改以 "{:1}" 表示). 使用直接磁碟存 取通常比较慢, 因为我们的缓冲区不若作业系统大, 但它有些时候比较可 靠. 磁碟映像档总是一直由伺服器上重新载入 磁碟映像档被存放在特殊快取区中, 如果伺服器上的没变更, 照理说应该 不需再下载一次. 但是, 由於快取区是在最後一个使用到的分割区之後启 始, 更动分割区的大小将移动快取区的位置并损毁其内容. 另一个使档案 自快取区中消失的可能因素是先前的档案已经变得比原来的大一倍半. 则 这个档案就应该被覆写并重新下载一次. 但这应该不会发生. 第三个可能 因素是快取区过小. 如果分割区以外所剩的可用空间小於所有压缩映像档 的一倍半, 则只有最常使用的映像档会在快取区中, 其他的就必需再重载 一次. Red Hat Linux 5.1 不能正常开机 这个套件假设 Linux 都用 lilo 开机并会检查 BOOT_IMAGE 命令列参数 (在 /etc/rc.d/rc.sysinit). 只要把它加在 linuxboot 呼叫中, 或者变 更你的 rc.sysinit. 广播型 TFTP 的 ramdisk 当掉 (Got in bound state) Linux 的 dhcp 用户程式可以透过 DHCP 回应, 动态地改变用户端的 IP 位址. 如果提供的位址值是永久的 (无限制使用时间), 则 DHCP 用户端 程式只设定位址值後就结束返回 (这就是我们所期望的). 但是, 如果位 址的使用时间有限制, 则用户端程式必须一直存在并每一分钟就寻问新的 位址值. 而如果 DHCP 用户端程式没有结束返回, 则 MrBatch 就永远不 会被载入... 这问题的解法就是设定无限期的位址使用时间 (有时候就当 成是 -1). 在 BpBatch 下会档案存取当机, 但在 MrBatch 不会 这个问题发生在 AMI BIOS 日期为 94/07/25. 我们研究後, 发觉无解. 这个问题好像是因为 BIOS 本身有程式臭□ (部份暂存器或记忆体位置会 被毁坏). 对分割过的档案解压缩失效 (Malloc failed) 这个问题是发生在 PXE 相容性上, 已被修正. 请取得最新版. MrBatch 及 MrZip 不相容於 RedHat 5.x 的 terminal 这个问题已在 MrBatch/MrZip 八月份第 9 个版本修正. 与 RedHat 5.1 一起发行的新版 ncurses 函式库有问题. 在 Linux 下出现 "libncurses.so.3.0: cannot open shared object file" 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 环境下编译. MrBatch 及 MrZip 不能在 Linux 下执行(file not found) 这个问题与前一个问题相反. 现在这个套件是预设在 libc6 环境下, 它 已不能再与 libc5 一并使用. 如果你遇到这个问题, 只需要升级你的 Linux (当然, 如果我们听到太多抱怨, 我们或许会试著保留两种套 件...). 除了预设的 800x600 VESA 模式, 我不能使用其他模式 你应该先检视 VESA-Modes 变数的内容, 看看你的硬体设备是否可以支援 你要使用的模式. 然後, 试著用下列两种方法之一来选用你要的 VESA 模 式 : + InitGraph "mode": 试著用 InitGraph "1024x768", 然後执行你所喜 好的初始划图形 (即用 DrawGif 指令). + VESA-Modes: VESA-Modes 变数的第一栏是预设模式. 如果你改变 VESA-Modes 变数, 所有的初始化图形会依循你所设定的模式. 在回存多个分割映像档时, BpBatch 显示 "Malloc failed" 讯息 我们已修正 BpBatch 一个记忆体对分配的问题. 你应该确定你使用的 BpBatch 版本在 1998 年九月 22 日之後. Linux 版的 MrBatch 使用 Fullunzip 总会失效 我们已於 09/22/1998 的版本中, 修正这个问题. Scandisk 显示我的硬碟机已损毁 10/25/98 的版本已修正一个与大映像档有关的问题. 试著去下载最新版 的 BpBatch. 我的 RedHat 开机磁碟片不能用 FloppyBoot 功能 这个软体臭□已经在 10/25/98 版本中修正. 我的 FAT32 磁碟映像档无法正常开机 这个软体臭□已经在 02/09/99 版本中修正. 当你启动 BpBatch 总是出现 "Cannot load file" 你的 DHCP 伺服器不能送出有效的 option-135 到用户端. BpBatch 使用 option 135 为它自身的命令列参数. 如果你想要进入交谈模式, 你可以 设定为 "-i". 或者你可以把它设定为一个脚本程序档名, 如果你想要 BpBatch 按照你所选的脚本程序执行 (别把 .bpb 的副档名纳入名称 中). 如果你使用 PXE BootPROM, 确定你使用 option-135 为命令列参 数. PXE 2.0 BootPROM 已不再支援 Option-155. 5. 远端启动工具程式参考手册 本节将提供我们於 日内瓦大学, CUI 为远端启动架构, 所发展的工具程式的详细 说明资讯. 5.1 BpBatch, MrBatch 及 MrZip 这三个名称是为了给同一个程式赋予三种变化, 分别有下列的特性: * BpBatch 是一个特别的程式, 可以在作业系统载入之前自 BootPROM 启动. 它是由两个部份来完成: bpbatch.P, 动态的载入器, 及 bpbatch.ovl, 程式 本体. BpBatch 已可以透过我们自行实作的 FAT16, FAT32 及 Ext2fs 档案 系统达成完整的磁碟存取功能, 更可透过 BootPROM TFTP API 达到远端网路 I/O 存取能力. BpBatch 是在 DOS 下以 Borland C 5.0 及 Turbo Assembler 3.2 编译. * MrBatch 是 BpBatch 在 DOS/Linux 下的版本. 所有 BpBatch 可以辨识的指 令都可以在 MrBatch 下使用. 如果你要在 DOS/Linux 下测试你的批次档脚 本程序, 这会相当有用. 在 DOS 下, MrBatch 可以作业系统为基础, 模拟远 端 I/O 功能, 如果 BootPROM 不存在的话. 在 Linux 下, BootPROM 亦无法 被侦测到, 但 MrBatch 可以用 Linux 的 IP 支援功能以模拟它, 或采用作 业系统为基础的档案存取来模拟. MrBatch 在 Linux 下, 用 GCC 2.7.2.1 编译; 而 DOS 下,则用 Borland C 5.0 及 Turbo Assembler 3.2. * MrZip 是一个解译器用来辨识 MrBatch 语言的扩增功能, 并能建立磁碟映像 档. 在 MrZip, 原本有限制的远端档案 I/O 已由完整的作业系统为基础的档 案存取功能取代. MrZip 并不支援 VESA. MrZip 在 Linux 下, 采用 GCC 2.7.2.1 编译; 而 DOS 下, 采用 Borland C 5.0 及 Turbo Assembler 3.2. 命令列参数 所有的程式都可以接受相同的参数用法. MrBatch 及 MrZip 可在命令列下取得参 数, 而 BpBatch 则藉由参考 BOOTP 通讯协定的 option 155 (十进制) 取得. 这 是参数用法 : [-x] [-l] [-b] [-v] [-w] [-i] [script-basename] 说明: * -x 不使用延伸记忆体. * -l 不使用 ISO-latin-8859-1 为预设字元集. * -b 取消对 BootPROM 的侦测 (在 DOS 环境下, 会变成搜寻软碟机). * -v 取消对 VESA 的侦测 (在 Windows 95/98 环境下, 会切换成全萤幕). * -w 启用直接磁碟写入 (在 DOS 及 Linux 下, 预设是不使用). * -i 启用交谈模式, 即使有设定脚本程序档名也一样. script-basename 是附加的选项. 如果有设定, MrBatch 及 BpBatch 会载入以 .bpb 为副档名的档案, 而 MrZip 会载入以 .mrz 为副档名的档案. 如果没设 定, MrBatch 及 MrZip 会执行於交谈模式, 而 BpBatch 会载入与 BOOTP 可开机 档名同主档名, 但以 .bpb 为副档名的档案. 语法 以下的规则用於 BpBatch 分析输入行. * 所有指令都是一行一行解释. 各行间以 CR 及/或 LF 为分隔. * 每行最长为 255 个字元. * 关键字及变数都要区分大小写. * " 用以当作字串识别字元 * 当使用了 ${变数} 或 $变数, 则会以变数的值来取代, 若未定义则会是一个 空字串. 这个方法也可以在字串中使用. 另外, 如果是用在字串值时, 必须 在字串前後加上双引号 (即 这里称作 巨集式运算 会比称作 变数 来得贴 切). * + \a 是代表会发出 哔声 (bell) 字元 (ASCII 7). + \b 是代表 倒退键 (backspace) 字元 (ASCII 8). + \n 是代表 换行 (newline) 字元 (ASCII 10). + \r 是代表 归位 (return) 字元 (ASCII 13). + \t 是代表 跳位 (tabulation) 字元 (ASCII 9). + \v 是代表 横向跳位 (vertical-tab) 字元 (ASCII ...). + \nnn n 是三位数的十进位数值在 000 到 377 代表 ascii 码的设定 值. + \X X 是任何上面没列出的字元就由 X 代表. 特别是: o \" 是代表常见的 双引号 (double-quote) (不是字串识别字 元). o \$ 是代表常见的 钱字号 (dollar sign) (不是变数标示). o \\ 是代表常见的 反斜线符 (backslash) (不是特殊字元). * 字元 "end of string" (ASCII 码 0) 不能在任何地方使用. 因它是程式内 部用来当作字串结束的识别字元. * 字元 "floating diaeresis" (ASCII 码 十进制 249, 十六进制 F9, 八进制 371) 不能被用在任何字串中. 因为它是程式内部用来辨识输入机制的识别字 元. * 字元 "block space" (ASCII 码 十进制 255, 十六进制 FF, 八进制 377) 不能被用在任何变数中. 因为它是程式内部变数的识别字元. 空行会被忽略. 该行由 (#) 启始则会被当成注解, 不做任何解释. 该行由 (:) 启始则会被当成标签, 不做任何解释. 字串表示 字串由双引号括起来的可被识别到: "Hello world" 如要在字串中放入双引号, 则必须用, 反斜线符 (backslash) 括起来: "I said: \"Hello world\"" 字串可以用一些运算子来做预先修正. + 字元取代运算子: "Hello world"/o=u/ == "Hellu wurld" "198.76.54.32"/.= / == "198 76 54 32" + 文字选择运算子 (以零为起始): "Hello world"{0} == "Hello" "198 76 54 32"{1-3} == "76 54 32" + 子字串选择运算子 (以零为起始): "Hello world"[4] == "o" "Hello world"[4-7] == "o wo" 运算子可以一再使用以修正出所需的字串样式. 如果想知道关於字串长度 及文字个数的运算子, 可以参考下面 "数值表示法" 一节. 数值表示法 数值表示是以 32 位元整数来运算 (由 -2,147,483,646 到 2,147,483,647). 十六进制, 八进制, 及二进制 数值则无法辨别. 如果 一遇到数值表示, 则必要经过下面的辨识程序: + 是 正整数 或是 负整数 + (expr1 op expr2) 这种形式的 op 可以是 +, -, * (乘), / (除) 或 % (馀数) 而 expr 是数值表示. 要注意的是每个运算都要用括号包起 来 : ((3 * 5)+2) == 17 + 字串长度运算子 (@), 後面接著一个字串 : @"Hello world" == 11 + 文字计算运算子 (#), 後面接著一个字串 : #"Hello world" == 2 延迟 部份指令须要延迟来当作参数. 延迟时间是以秒为单位, 精度到十分之一 秒: Delay 3 等待 3 秒 Delay 0.3 等待 3/10 秒 颜色 需要设定颜色时, 你可以用数值或颜色名 (区分大小写) 来代表颜色. 可 以使用下列颜色: Black 0 Blue 1 Green 2 Cyan 3 Red 4 Magenta 5 Brown 6 LightGray 7 DarkGray 8 LightBlue 9 LightGreen 10 LightCyan 11 LightRed 12 LightMagenta 13 Yellow 14 White 15 参考档案 档名是一种字串. 他们必需以双引号括起来. 档案名称在大小写有别的档 案系统时, 就有大小写的分别; 反之, 於无大小写之别的档案系统时, 就 有无大小写的分别. 斜线符 与 反斜线符 可以自由的择一使用. 但别忘 记 要用到溢位字元 反斜线符 必需用 双反斜线 来表示. 有两种类型的档案参考: + 直接参考到本机磁碟机上的档案. + 外部的档案. 直接参考到本机磁碟机上的档案用法: "{磁碟机号码:分割区}/绝对路径/档案名称" 可以省略磁碟机号码预设值是零. 比如, "{:1}/usr/bin" 是指在第一个 分割区有 /usr/bin 这目录. 直接参考到本机磁碟上档案的 I/O 功能完 全是我们自行实作出来的 (我们不使用作业系统所提供的功能). 有两种 特别的 分割区. 分割区零 是指磁碟机上的主开机记录 (MBR) 并 提供一个虚拟档案系统装置以让你存取开机识别码. 分割区负一 (-1) 是 指快取档案系统 (参考下面叙述). 在 BpBatch/MrBatch 环境下, 如果有 BootPROM 存在, 则外部的档案是 指到远端 TFTP 伺服器上: "help.bpb" 是指在 /tftpboot 下的 help.bpb 档案 "images/MyImage.pcx" 是一个在 /tftpboot/images 下的档案 如要参考到其他的 TFTP 伺服器可以用: "198.76.54.32:help.bpb" 如果伺服器要绕过闸道器可以用 : "198.70.0.1/198.76.54.31:help.bpb" 亦可以自行决定特殊埠号作 TFTP 连结 : "198.76.54.32@89:getpasswd/smith" 在同一时间只能有一台机器开启远端档案. 如果 BootPROM 不存在, 远端 的档案会透过作业系统的档案 I/O 功能来模拟, 但同样的限制依然存 在. 在 MrZip 环境下, 远端的档案是透过作业系统存取到该档. 这里就没有 任何限制, 远端的档案可被当成直接参考到本机磁碟档案一样来使用. 而 远端的档案通常会比直接参考到本机磁碟档案还快, 因为作业系统本身有 较多的暂存区. 如果作业系统有支援, 则远端档案可被当成网路上的档 案. "C:\\autoexec.bat" "C:/config.sys" "/mnt/net/usr" 快取档案系统 为了降低网路负载并加快 开机速度, 磁碟档案存取速度, Linux Kernel 及其他 档案可以由硬碟□快取得到. 磁碟快取的区域是在硬碟机的末端, 介於分割表中 最後一个对应到的磁柱与磁碟最後一个理论磁柱之间 (於任何对应要使用的分割 区之外). 要使快取档案系统作动, 就必需在最後一个分割区到磁碟机末端之间保 留空间. 而如果你要回存一个磁碟映像档, 则更要让快取档案系统作动才行. 这个磁碟快取是由一个具 CRC 确认检查的变易性档案系统所组成: 每个目录 及 每 32 KB 的资料区块 都以一个 32 位元的 CRC 来检查确认. 每当一个目录或资 料区块无预警的改变後, 则该档案会自动由快取区移除; 并在下次存取要求时, 再次下载新的资料以吻合现况. 你可以透过 BpBatch, MrBatch 及 MrZip 自由存取快取档案系统, 用直接存取本 机磁碟档案功能存取特别分割区 "{:-1}" . 要检视快取区内容, 只需输入 : logdir "{:-1}" 如果快取区资料毁损且不会自动清理时 (这状况应该不会发生), 你只要输入 (在 交谈模式下) : clean -1 或在 BpBatch 第一次存取快取时, 同时按下两个 shift 键. 特殊变数 有些变数在初值设定时具有特别的意义. 一部份是存在於所有的程式, 另一部份 只可以在 MrZip 执行时才存在, 但仍有一部份只能在 BOOTP/DHCP 回应收到的时 候才存在. 通用变数 + $Program 在 BpBatch, 是设成 "BpBatch", 在 MrBatch, 是设成 "MrBatch", 在 MrZip, 是设成 "MrZip". + $Basename 用来设定给批次档解译器使用的脚本程序档的主档名. + $HelpFile 当呼叫到 Help 时, 所要载入的档案名称. 预设: "${Basename}.hlp". + $BOOTP-... 是经由 BOOTP/DHCP 回应所取得的设定. (参考 BOOTP/DHCP 变数那一段, 已取得更细部的资料). + $DHCP-... 是经由 DHCP 回应而取得的设定. (参考 BOOTP/DHCP 变数 那一段, 以取得更细部的资料). + $Disks 是用来设定各磁碟机所划分的大小空间分布. 意谓著, 以 #"$Disks" 象徵硬碟机个数; 而 "$Disks"{0} 则是指第一台硬碟机的 大小. + $Keypressed 是指键盘暂存区中, 下一个准备读取的输入键值 (如果有 输入的话). + $LBA 控制是否使用 LBA 来存取 > 2Gb 的硬碟机. 预设: "ON". + $FDA 控制是否使用 快速磁碟存取 (透过磁柱写入). 预设: "ON". + $VESA 控制是否使用 VESA 图形化模式. 预设: "ON" 如果系统有此功 能. + $VESA-Modes 列出所有可供使用的 VESA 模式. 第一行即为预设模式, 用於不具任何参数的 InitGraph 指令时, 选用. 记住: 如果 VESA="OFF", 此变数会是空的. + $APM 如果你的电脑支援 Avanced Power Management 会设成 "ON". 如 果 $APM 设成 "ON", 你就可以使用 PowerOff 指令来关掉电脑电源. 预设: 与你的硬体设备有关. + $Trace 控制是否在执行前, 显示每个指令. 它也可以控制是否要显示 所建立的新档档名. 预设: "OFF". + $AutoShowLog 控制是否在 ESC 键按下後, 自动切换到文字记录. 预 设: "ON". + $PauseLog 控制是否在显示记录时有跳页暂停功能. 预设: "ON". + $CacheDisk 用来设定磁碟是否有快取远端档案的功能. 预设: empty == 0, 第一台硬碟机. + $CacheAlways 控制是否自动快取远端复制过的档案, 或已修正过的 或 制出来的映像档. 预设: "OFF". + $CacheNever 防止任何档案被快取. 在无磁碟机的 Linux 开机时请把 这个变数启动. 预设: "OFF". + $CacheReserve 防止在快取分割区中, 使档案超过所需空间的百分之 25. 如果你的硬碟空间短少, 关掉这个变数. 预设: "ON". + $ExtMemory 控制是否使用延伸记忆体 (或称为 XMS). 一经选用, 延伸 记忆体就不能被再利用. 预设: "ON" 如果有延伸记忆体的话. + $IsoLatin 控制在含入档与修正档中, 高层 ASCII 码的解释方 式.IsoLatin 的设定是在档案载入後才处理的, 不是在档案处理之後. 预设: "ON". + $ProgressX 及 $ProgressY 控制档案下载与解压缩正在处理中的视 窗, 於 VESA 图形模式下的显示位置. 预设: 200 200. + $EXT2-Backup 控制 Linux Ext2 档案系统的 superblock 备份的更 新. Superblock 备份需花掉几秒钟在现行的 Kernel 中不曾被使用 ( 只靠 e2fsck). + $WatchdogPort 设定 I/O 埠 (十进制值) 用以存取 watchdog 介面 卡. 预设此变数是 0, 也就是关掉 watchdog 的支援. 设定这个变数为 非零值时, 会启用 watchdog 支援. + $Security-Gateway 控制是否使用 安全认证闸道伺服器 作使用者身份 认证. 我们的特殊身份认证闸道器必须在目标电脑上执行才行. 预设: "${BOOTP-伺服器-IP}@89". (即. TFTP 伺服器, 在 89 埠). + $Security-Check 内含来自 安全认证伺服器 最後一次检查的结果, 不 是 PASSED 就是 FAILED. 预设: "FAILED". + $Security-Passwd, $HelpTopic, $OnExit, $OnKey-.... 只在内部使 用. 参考 BOOTP 变数 与 MrZip-规□的变数. MrZip-规□的变数 以下是只能在 MrZip 使用的变数. + $TempPath 控制暂存档所存放的目录位置 预设: == 现行目 录. + $DumpFormat 当有这种必要时, 控制档案顷印到记录档的方式. 它是一 个含下列内容的字串 o "h"/"H" 显示档头. o "b"/"B" 用以 总结(summarize)/顷印(dump) 开机磁区. o "s"/"S" 用以显示一个 短/长 的对应摘要. o "d"/"D" 用以显示一个 短/长 的目录列表. o "f"/"F" 用以 总结(summarize)/顷印(dump) 档案. 预设: "hbD". + $FragmentSize 控制分割档案的大小. 如果你不是使用 Bootix 的 增 强型 TFTP 伺服器, 你应该设定这个为 "30 MB". 预设: "87 MB". + $SourceArchive, $DestArchive, $Filter... 只在内部使用. BOOTP 变数 以下的 BOOTP-... 及 DHCP-... 变数在 BOOTP/DHCP 回应时才具有实际 的意义 (前提是 TCP/IP BootPROM 必需已被侦测到): $BOOTP-Client-ID $BOOTP-Your-IP $BOOTP-Server-IP $BOOTP-Gateway-IP $BOOTP-Bootfile $BOOTP-Server-Name $BOOTP-Subnet-Mask $BOOTP-Time-Offset $BOOTP-Routers $BOOTP-Time-Servers $BOOTP-Name-Servers $BOOTP-Domain-name-Servers $BOOTP-BOOTP-Log-Servers $BOOTP-Cookie-Servers $BOOTP-Lpr-Servers $BOOTP-Impress-Servers $BOOTP-Resource-Location-Servers $BOOTP-Host-Name $BOOTP-Boot-Size $BOOTP-Merit-Dump $BOOTP-Domain-Name $BOOTP-Swap-Servers $BOOTP-Root-Path $BOOTP-Extensions-Path $BOOTP-IP-Forwarding $BOOTP-Interface-MTU $BOOTP-All-Subnets-Are-Local $BOOTP-Broadcast-Address $BOOTP-NIS-Domain $BOOTP-NIS-Servers $BOOTP-NTP-Servers $BOOTP-Font-Servers $BOOTP-X-Display-Manager $DHCP-IP-Address-Lease-Time $DHCP-Message-Type $DHCP-Server-Identifier $DHCP-Message $DHCP-Renewal-Time $DHCP-Rebinding-Time $BOOTP-NIS+-Domain $BOOTP-NIS+-Servers $BOOTP-Server-Name $BOOTP-Bootfile $BOOTP-Mobile-IP-Agent $BOOTP-SMTP-Servers $BOOTP-POP3-Servers $BOOTP-NNTP-Servers $BOOTP-WWW-Servers $BOOTP-Finger-Servers $BOOTP-IRC-Servers $BOOTP-StreetTalk-Servers $BOOTP-STDA-Servers 其他的 BOOTP/DHCP 变数可以用以下的名称储存 $BOOTP-Option-n n 是十进制数值代表 BOOTP 选项号码. 别把 BOOTP-Gateway-IP 搞混了, 它是 TFTP 通讯协定的闸道器, 如果用 户端与 TFTP 伺服器在同一个子网域, 则应设为 0.0.0.0 , 而 BOOTP-Routers, 内含 预设 IP 闸道器. TCP/IP BootPROM 有时会透过 BOOTP-Routers 设定 BOOTP-Gateway-IP 的值, 乃因为每个 TFTP ack 封 包都会先送往 路由器. 为了避免这种行为, 如果你的 TFTP 伺服器与用 户端在同一个子网域, 则强迫把 BOOTP-Gateway-IP 设成 0.0.0.0 (感谢 Maciek Uhlig 指出这个问题). 监控指令 本节列出用来监视系统状态的指令. 额外的参数也将列入 (我比较喜欢使用 方括 来注明, 但 LaTex 不喜欢在这看到他们...) Interact 显示记录资料并进入交谈模式直到 QUIT 或 EXIT 输入. 在离开交谈模式 之前先输入HideLog, 以防止记录的讯息干扰批次档的执行. Help (主题) 载入线上说明档 (bpbatch.hlp) 并显示所给定主题的内容. 如果没设定 主题, 或给定的主题找不到, 显示说明索引. Log "字串" 显示字串到记录档. 不加入 游标 返回/换行 字元. Echo "字串" 显示字串到记录档并跳至下一行. 相同於 Log "text\r\n". LogVars ("pattern") 记录 (即. 显示到记录档中) 所有合於所给定样式的变数. 样式可以使用 万用字元 (? 及 *). □例: LogVars "BOOTP-*" 列出所有 BootP 变数 LogDir "path/pattern" 记录 (即. 显示到记录档中) 所有合於所给定样式的档案. 样式可以使用 万用字元 (? 及 *). □例: LogDir "/usr/g*p" 列出所有档名为 g...p 的档案 LogTree "路径" 记录以给定路径为根目录的树状目录结构. LogFile "档案名" 记录档案的内容. 档案大小必需小於 64 KB. ShowLog 使隐藏的记录档显示. 在 "$AutoShowLog" == "ON" 并按住 ESC 状况, 或交谈模式下, 会自动启动. HideLog 防止记录的讯息出现在萤幕上. 当 BpBatch, MrBatch 及 MrZip 以执行 脚本程序档时为预设状态. CaptureLog 录下所有的记录讯息到 64 KB 的暂存区直到 EndCapture 出现. 记录输 出超过 64KB 会清除暂存区资料. 这个指令用来产生制式内容的文字档. EndCapture 指令必须在同一个脚本档案中出现. EndCapture ("档名") 结束截取记录讯息. 如果有给定档名, 会把截取到的文字存到该档. 否 则, 会忽略掉它. Beep 发出一个声音. 这个指令是同於 Echo "\007". 控制指令 本节列出批次执行的控制指令. 额外的参数也将列入. Include "filename" 载入所给定的档案并对它做语法分析. 在此引入的档案执行结束後返回此 载入点. 在此引入档中, ASCII 127 以上的字元的意义, 由载入此档时 $IsoLatin 的值来决定. OnExit command 设定一个外部处理器. 它会在现行批次档终了时自动执行. Goto label 移到所指的标签 (label) 执行 (即. 以 :label 为起始的行) Eval "指令" 执行 "指令" 所指的替代命令并对其做语法分析. If ... If (not) (==|!=|<|>|>=|<=|=>|=<|<>) If (not) (ci) "str1" (==|!=|<|>|>=|<=|=>|=<|<>) "str2" If (not) (ci) "str1" Match-Expr "样式" If (not) (ci) "str1" Match-Passwd "unix 密码" If (not) (ci) "str1" in "wordlist" If (not) (ci) "str1" in-file "档名" If (not) exist "档名" If (not) valid <硬碟机>:<分割区> 如果条件测试成立; 这些指令用来执行指令 command; . 第一种格式用来 比较两个以数字来表示的运算式. 第二种格式用来比较两个字串, 可选择 不区分大小写. 第三种格式用来测试 "str1" 是否合於样式 (允许使用万 用字元). 第四种格式用来测试明码 "str1" 是否经 Unix 的编码系统後 结果,能吻合. 第五种格式用来测试 "str1" 是否被引入在文字列表中. 第六种格式用来测试 "str1" 是否被引入在文字档案中. 第七种格式用来 测试所给定的档案是否存在. 第八种格式用来测试所给定的分割区是否有 效 (即. 是否已格式化过). 这个格式只在 BpBatch 1999年 二月後的版 本才有. Set ... Set variable = "string-value" Set variable = 设定变数值. 如果给定的是数值运算式, 它将间接转化为字串形式. 所定 义的变数可以在任何地方以 $variable 或 ${variable} 的形式来参考使 用. 如果参考的结果要当成字串, 则必须用双引号把变数括起来: "$variable" 或 "${variable}". Delay 周期时间 等待直到所指定的时间耗尽 (以秒为单位). 参考时间表示格式那一章 节. GetTime 变数, GetDate 变数 取得 CMOS 的时间资讯并把它存到 变数 中, 格式为 HH:MM:SS. 取得 CMOS 的日期资讯并把它存到 变数 中, 格式为 YY/MM/DD. 这样就可以依 时间或日期来调整你的开机程序内容. SetTime "HH:MM:SS", SetDate "YY/MM/DD" 设定用户端电脑的 CMOS 时间或日期为所给定的值. 如果你有一台安全认 证闸道器 (security gateway) (或我们的特殊型 TFTP 伺服器), 你可以 透过下列指令在每次开机时, 自动调整 CMOS 时间与日期资讯: include "$Security-Gateway:gettime" 如果你想知道这个指令会做哪些事, 只需输入: logfile "$Security-Gateway:gettime" Poweroff 关掉电脑电源. 这个指令只能在具 Advanced Power Management (APM) 相容的电脑上使用. 与键盘相关的指令 本节列出一些指令让你可以监控键盘的输入. 额外的参数也将列入. 亦可参考後 面提到的 国际化语系支援 一节. GetKey (变数) 一直等到键盘按下某键并把它存到 变数 中. WaitForKey 周期时间 (指令) 於所指定的 周期时间 内等待键盘按下某键单位为秒. 如果时间内没按下 任何键, 则执行 指令. 否则, 保留键值在键盘暂存区中. 亦可参考时间 格式那一段. Input (变数 (最大字串长度)) 自键盘读取一个以 return 为结尾的字串, 并把它存在 变数 (不会把 return 存进字串). 如果有给定 最大字串长度 , 则不允许使用者输入字 元超过这个长度. 亦可参考 与安全性有关的指令 一节中, 的 GetPasswd 指令. OnKey "c" 指令 设定 当 "c" 某个单一字元被按下时, 会自动去执行所给定的 指令 (例 外情况为 正使用到 GetChar 或 某个 Input 指令, 而系统处於等待输入 的状态). 如果用 "default" 字串来取代单一字元 "c", 则指令会在按下 任意键後就执行. 文字输出指令 本节列出用来输出格式化文字的指令. 所有提到的指令都可以在图形模式下使 用, 可以得到相同的功能 (在文字环境下可以提供 80x25 字元模式, 而图形化环 境则可题供 100x37 字元模式, 因为图形化环境每个字元大小是 8x16). 额外的 参数也将列入. 亦可参考下文的 国际化语系支援. Print "字串"/运算式 在目前游标所指的位置印出字串/运算式, 并采用目前的文字属性并移动 游标. 加入到字串中 "\r\n" 以换行. TextAttr 前景颜色 背景颜色 设定文字属性. 也可以用一个数值来设定颜色方法是 16*背景颜色+前景 颜色. 如果你还想更炫, 可以用 LoadFont 指令. 参考下文的 国际化语系支 援. At line,col (command) 移动游标位置到所指定的位置并执行命令. 如果有设定的话. □例□例: At 10,20 Print "Gnats and rats !" Clear (颜色 (文字样式 (顶部,左限,底部,右限))) 以所给定的 文字样本 填满所定义的文字区域 (可以是字串或十进制的 ascii 码). 预设的文字区域为全萤幕, 而文字样式为 全黑 (ASCII 十进 值 219) 且颜色是黑色 (清除萤幕). 移到游标到所清除区域的左上角. 与旧版的 BpMenu 相容的指令 .ATT (<属性>) .CLS (<属性>) .DEF <键值> (<等待时间>) .KEY <键值> <档名> .POS ((< x 轴位置 >) < y 轴位置 >) .PWD <键值> <编码过的密码> .WLN (<字串>) .WRT <字串> 参考 Bootix 的使用手册可以获得更多讯息. 我们先前写了一个程式 [35]program 用来编辑选单档案. 就是用这个语法, 但使用新的语法来建 立选单是比较好. 需注意 .PWD 指令并没被实作出来. 因为我们根本不知 道 Bootix 的编码法则. 图形输出显示指令 本节将列出在图形模式下, 如何输出图形到萤幕上. 这章节中所列出的功能与所 给定的像素相关. 当然你也可以在图形模式下, 使用所有文字输出的指令 (参考 前文). 额外的参数也将列入. 需注意图形模式会在使用到与图形相关的指令时自动启用, 除非设定 VESA 变数 为 "OFF". InitGraph ("模式") 启用 VESA 图形模式. 原点在萤幕左上角 (0 0). 在 Windows 95/98 下 使用 VESA 模式可能会当机. 在使用 MrBatch 时, 加上 -v 选项以避免 发生这个问题. 你可以要求使用某个特定的显示模式, 如果有给定 "模式" 这项参数. 这 个参数是附加的: 如果你没做任何定义, 则会从选用 VESA-Modes 变数中 第一行的显示模式. 可用的模式有 : + 640x480 => 640 乘 480 相素, 256 色. + 800x600 => 800 乘 600 相素, 256 色 (预设模式). + 1024x768 => 1024 乘 768 相素, 256 色. + 1280x1024 => 1280 乘 1024 相素, 256 色. VESA-Modes 变数列出你的硬体设备能支援的模式. □例: InitGraph "640x480" CloseGraph 关掉 VESA 图形模式返回文字模式. DrawBar x-轴位置 y-轴位置 宽度 高度 颜色 VESA 绘图功能. 以给定的大小与颜色画出一个实心长条图. DrawWindow x-轴位置 y-轴位置 宽度 高度 (背景颜色 (长条图颜色)) ("主题文 字" (主题文字颜色)) VESA 绘图功能. 以给定的大小与颜色画出一个视窗. 预设的背景颜色是 淡灰色 (LightGray) 而 主题部分是蓝色 (Blue). 如果你引入一个主题 字串及颜色, 则文字会显示在 主题那部份. Drawtext x-轴位置 y-轴位置 "字串文字" (前景颜色) VESA 绘图功能. 在给定位置显示字串文字并采用透被明背景. 预设为前 景文字的颜色. DrawPcx "pcx-图档名" ( x-轴位置 y-轴位置 (颜色用法)) VESA 绘图功能. 载入所给定的 256-色 PCX 图档并显示到萤幕上. 预设 的显示位置在萤幕左上角的 (0 0). 颜色用法 定义当使用超过 256 种颜色时, 所对应的调色盘 (比如要同时 显视两个 256 色的图档): + Best-Colors 对最後载入的图档显示最佳颜色 + Spare-Colors 试著避免颜色对应, 只改变现在使用的颜色 + Share-Colors 试著避免颜色对应, 延用现在使用的颜色 + Reuse-Colors 不对应新的颜色, 只使用现在可用的颜色 预设是使用 Best-Colors. DrawGif "gif-图档名" ( x-轴位置 y-轴位置 (颜色用法)) VESA 绘图功能. 载入所给定的 256-色 GIF-87a 图档并显示到萤幕上. 这个档案可以是交错的, 但必需是 GIF-87a 格式 (非 GIF-89a). 图档的 大小会修正到合於目前所使用的显示模式. 但你不能载入一个 1024x768 GIF 图档到 640x480 图形模式下. 预设的显示位置在萤幕左上角的 (0 0). 因为 LZW 专利问题, 这项功能在商业版的 BpBatch/MrBatch 不提供. 请 改用 DRawPcx 指令. 颜色用法 定义当使用超过 256 种颜色时, 所对应的调色盘 (比如要同时 显视两个 256 色的图档): + Best-Colors 对最後载入的图档显示最佳颜色 + Spare-Colors 试著避免颜色对应, 只改变现在使用的颜色 + Share-Colors 试著避免颜色对应, 延用现在使用的颜色 + Reuse-Colors 不对应新的颜色, 只使用现在可用的颜色 预设是使用 Best-Colors. 与安全性有关的指令 本节将列出用来认证使用者身份的指令. 额外的参数将列在段落间. 部份的功能可与 安全性闸道器 (security gateway) 一并使用, 所以你必须先安 装它. 参考 特殊 TFTP 伺服器 一节以获得更多资讯. GetPasswd (变数 (密码最大长度)) 就跟 Input 指令一 样, 但会在输入字元时改显示星号. Crypt "字串" "salt" 变数 以 Unix 编码功能对所给定的 8 个字元加密, 并把加密後结果以字串形 式存到 变数. 而 "salt" 通常是两个可以在加密後字串中找到的前两个 字. 要注意 Unix 编码系统是单向的. 无法对已编码过的字串解码还原. 只能 试著用相同的 salt 比较其编码过的字串是否一致. 这个功能是用 BSD 实作的 DES 编码系统. 这是 BSD 版本的标头: Copyright (c) 1989 The Regents of the University of California. This product includes software developed by the University of California, Berkeley and its contributors. DESCrypt "字串" "键值" 变数 对给定的字串加密用给定的 8 个字元 键植来编码并以十六进制格式的字 串存入 变数. 这个功能是用 BSD 实作的 DES 编码系统. 这是 BSD 版本的标头: Copyright (c) 1989 The Regents of the University of California. This product includes software developed by the University of California, Berkeley and its contributors. DESDecrypt "hexcode" "key" 变数 用给定的 8 个字元来对十六进制字串解密并把结果存到 变数. 这个功能是用 BSD 实作的 DES 编码系统. 这是 BSD 版本的标头: Copyright (c) 1989 The Regents of the University of California. This product includes software developed by the University of California, Berkeley and its contributors. MD5 "字串" 变数 用 MD5 对给定字串编码後的检查值以十六进制的字串格式存到 变数. 对 於密码大於 8 个字元的, 可采用的 Unix 编码功能. 这个功能是 MD5 标准的实作. 这是它的版权页标头: RSA Data Security, Inc. MD5 Message-Digest Algorithm CheckUser "使用者名称" "密码" "领域" 连接到 $Security-Gateway 并检查所给定的使用者是否存在所给定的 radius 领域并检查密码是否吻合. 如果领域是 "Unix", 则使用於 安全 认证闸道器上, Unix 的 使用者/密码. 若在其他领域, 使用安全认证闸 道器领域定义档, 以侦测正确的 Radius 或 NT 领域. 设定 $Security-Check 的值为 "PASSED" 或 "FAILED". 密码不会以明码 在网路传输. 与磁碟相关指令 本节将列出用来调制硬碟资料的指令. 额外的参数也将列入. GetPartitions 变数 (磁碟机名) 读取所给定的磁碟机的分割表并以字串格式存到所给定的 变数. 所存的 字串是硬碟内空间分布的列表 档案形式:空间大小, 其中 + 档案形式 有 FAT16, EXT, BIGDOS, NTFS, FAT32, FAT32-LBA, BIGDOS-LBA, EXT-LBA, LINUX-SWAP, LINUX-EXT2 或其它未知的十进值 档案系统识别码. + 空间大小 分割区空间大小以 megabytes 为单位. 参考 SetPartitions 以获得更多与分割区有关的资讯. SetPartitions "分割区" (硬碟机名) 依字串内容设定分割表. 个式同於 GetPartitions 指令. 这个指令也同 时会重置所有的开机旗标 (提示: 使用 SetBootPart). 在主开机纪录 (MBR) 中的主要分割区只能有四个. 而且, DOS 及 Windows 在主分割表中, 只能允许一个 FAT 分割区 (称为 主要分割区, C:). 其他的 FAT 分割区只能分布在一个延伸分割区里 (而他们称为逻辑 分割区). 如果我们把 MBR 分割表中的分割区编号为 1-4 , 则 5-8 为存 於第一个延伸分割区的逻辑分割区, 定义两个 FAT 分割区可以如此做: 分割区 1 为 FAT, 分割区 2 为 EXT, 分割区 5 为 FAT. 分割区 3,4,6,7 及 8 则为 UNUSED. 同样的划分方法可以采递回的方式设定出两 个以上的 FAT 分割区: 在分割区中设定一个延伸分割区 6 并加入一个 FAT 逻辑分割区 9 . 在大部份较严紧的 DOS 规□中, 分割表第 3 和 第 4 个分割区将不被使 用. 事实上, 部份 DOS 版本及其他作业系统都能允许分割表中超过两个 分割区, 但并没有相当明确的规定. 就这方面的问题而言, BpBatch 对分 割表的意义有较弹性的解释, 它可以了解作业系统无法知道的部份. 一个通用的规则就是不要在分割表中设置超过两个延伸分割区, 否则分割 区编号的划分方式将被破坏. 如果你想测试一些有趣的设定, 以增加经验. 那就不要抱怨作业系统无法 分辨你的分割区. 保证可以正常工作的划分方式是以主要分割区存放作业 系统的开机分割区, 把其他分割区一并摆到延伸分割区. 延伸分割区设定的□例如下: SetPartitions "BIGDOS:100 EXT:400 EMPTY EMPTY BIGDOS:400" GetBootPart 变数 (硬碟机名) 取得具可开机旗标的分割区号码 (DOS 的说法是: 已作用的主分割区) 并 把它存到 变数 中. 第一个分割区编号是 1. 如果没有具可开机旗标的分 割区, 则回应 0. SetBootPart 分割区 (硬碟机名) 设定可开机旗标到所给定的分割区. 可开机旗标可以使主开机记录 (MBR) 决定哪一个分割区可以开机. 第一个分割区编号是 1 . Blank 分割区 (硬碟机名) 在分割区内资料以零填满. 这对大的分割区会花掉不少时间. 别把这个分 割区格式化为任一种作业系统使用. 亦可参考 Clean. Clean 分割区 (硬碟机名) ("标签") 以分割表内所指定的格式快速格式化所给定的分割区. 如果有给定标签且 档案系统有支援, 则会去设定分割区的标签. 如要更彻底的格式化, 那就 叫用 Blank 指令来处理分割区. Clean 现在支援 (FAT16) BIGDOS, FAT32, EXT, LINUX-EXT2 及 LINUX-SWAP 格式的分割区. 如果要清理主开机记录 (MBR), 使用 Clean 0. Clean 可以用在资料分割区及 MBR/EXT 分割区. 而如果你在使用 FullUnzip 指令之前想要先用 clean 指令来清理资料则是无意义的. FullUnzip "完整的磁碟映像档" 分割区 (硬碟机名) 解压缩一个完整的磁碟映像档到所给定的分割区, 覆写任何已存在的档案 (快速清除). FullUnzip 支援 (FAT16) BIGDOS, FAT32 及 LINUX-EXT2. 这个指令会启用 VESA 绘图功能来显示程式正进行中的旗帜, 除非 VESA 被设为 OFF. IncrUnzip "增量型的磁碟映像档" "目的路径" 解压缩一个增量型的磁碟映像档到所给定的目的路径. 这会取代掉目的路 径中与映像档中所含档名相同的档案, 而其他的档案则会不会被删除. IncrUnzip 支援 (FAT16) BIGDOS, FAT32 及 LINUX-EXT2 档案格式. 这 个指令的效率远低於 FullUnzip 指令, 因为它必须能保护原来的档案系 统不受损, 且它可藉由储存多个映像档的差异处, 以免去保存多个磁碟映 像档. FileUnzip "来源档名" "目的档名" 解压缩先前由 MrZip 的 FileZip 指令所压缩的档案. 这个档案会经 32-位元 CRC 检查. Copy "来源档名" "目的档名" 以位元组对位元组的方式, 复制来源档案到目的档案. 可以在 FullUnzip 之後使用以更新在伺服器上的设定档而不需重新建立映像档. FileUnzip 指令, 最好使用在大而易於压缩的档案下. Append "来源档名-1" "来源档名-2" "目的档名" 以位元组对位元组的方式, 复制第一个来源档案, 接著是第二个 到 目的 档案. 可用於任意大小的档案. 目的档名不可含有任一个来源档名. Patch "来源档名" "目的档名" ("先期修正" ("後期修正")) 读取来源档并以在写入目的档前, 针对变数作取代. 对於 ASCII 码大於 127 的解释由 $IsoLatin 变数来决定. 预设, 可以辩识到以 "${" 及 "}" 所括起来的变数. 且可以把他变换成 非空的字串. 记住, 如果你要在修正内容中摆入钱字符则必须用溢位字元 或者让它可以在巨集中被辨识到. 例如, 如果你要明确的使用预设的先期 与後期修正, 使用: Patch "来源档名" "目的档名" "\${" "}" MkDir "路径" 递回地产生由根目录启始到所指路径的目录. 如果路径已存在, 则指令无 效. Delete "档名", Del "档名" 移除所给定的档名. 档案必须存在. DelTree "路径" 递回地移除由根目录到所指路径的所有档案与目录, 并把所给定目录移 除. 开机指令 本节将列出用来延伸开机流程的指令. 额外的参数将也列入. HideBootProm 回存 BootPROM 所对应的记忆体与中断向量. 在叫用这个指令之後所有想 要使用 TFTP 传输的功能会失效. 在 HdBoot 指令叫用之前使用这个功能 是个好主意, 否则你在 DOS/Windows 下会导致记忆体不够用. FloppyBoot 指令会直接叫用这个功能. 记住虽然这个功能会回存所有 BootPROM 会使用到的中断向量 (正式公布 的), 但目前看来似乎并没把所有的都回存. 不过这对 DOS 及 Windows 已经足够了. LoadRamDisk "ramdisk的档名" 载入一个软碟的磁碟映像档到延伸记忆体并重导 BIOS 的磁碟服务, 使得 与软碟有关的呼叫都用这个映像档取代. 这个指令会直接叫用 HideBootProm 指令. 叫用 FloppyBoot 指令以用你刚刚所载入的 ramdisk 开机. 这种形式的 ramdisk 可能不若你用 TFTPBoot 指令来的稳定. 唯一的优 点是可以由 TCP/IP BootPROM 所预留的 > 64KB 中, 多偷出几百位元组 的传统记忆体. 但也要警告你, 在 ramdisk 所存放的延伸记忆体区并不 具任何安全性. 也没有任何方法可以移除这种 ramdisk. LoadZRamDisk "ramdisk 的档名" 跟 LoadRamDisk 作相同的事, 但是是针对已用 MrZip 档案压缩过的映像 档. 被压缩过的 ramdisk 采用 32 位元的 CRC 检查以防止资料错误 (及 不完整下载). TFTPBoot "远端开机档名" 连结到另一个可开机档 (比如 一个由 Bootix 的 BpShell 程式所产生的 软碟映像档). 参考对存取 TFTP 伺服器上档案的参考转换的方式. FloppyBoot 隐藏 Boot ROM, 载入软碟机的开机磁区并用它来开机. HdBoot (磁碟机名)(:分割区) 载入所给定的可开机磁区并用它开机. 预设磁碟机为 零, 第一颗硬碟 机, 而分割区预设为 零, 也就是主开机记录. 你可以从任一个分割区来 开机, 但必须注意 Windows 95/98 不能让你在没设定为可开机分割区的 分割区开机 (题示: 使用 SetBootPart). 这个指令不会直接叫用 HideBootProm, 所以你要先叫用它. LinuxBoot "Kernel档名" ("命令列" ("ramdisk 的档名")) 载入所给定的 Kernel 及 ramdisk 到高层的记忆体, 设定命令列并用这 个 Kernel 开机. 至少放个根档案系统的位置在命令列中会是个好主意 (如 "root=dev/hda1"/). 如果你使用的系统相当依赖 lilo (如 RedHat Linux 5.1), 则在命令列中加入像 BOOT_IMAGE=linux 这样的东西会比较 好. 记住 Kernel 可以透过 TFTP 协定来载入 (自动从硬碟中快取) 或者 直接由目的根分割区取用. 这个指令可以与小型的或大型的 Kernel (zImage 与 bzImage). 国际化语系支援 本节将列出与国际化语系有关的指令. 额外的参数将也列入. RemapKeys "原始键" "重新对应的键" 国际化键盘支援. 重新对应所给定的键为另一个字元. 比如, 把 Y 跟 Z 两键交换, 使用: Remapkeys "yzYZ" "zyZY" 在使用的字元不含在最小 ASCII 字元集中时, 使用八进制的表示法, 以 避免必须依赖著 iso-latin 形式的设定. 对国际化的键盘而言, 在非对应过的模式 (US) 下, 有两种键来产生反斜 线符. 而它们都可以各自地重新对应, 这要感谢 BpBatch 会把他们分别 回应成 ASCII 码 252 (八进制) 或 ASCII 码 335 (八进制) 当 shift 键按下时. 如果你要传给我针对你们国家的键盘对应脚本档, 我会把它摆在 [36]http://cuiwww.unige.ch/info/pc/remote-boot/soft/sample-scri pts 为了帮助你设定你的键盘对应, 我建议你按下所有未对应到的 特殊 功能 键并记下他们所产生的字元. 把它们摆在 原始键 这一栏. 而 重新对应的键 就是你想要它让你看到的 样子. 如果部份按键 (不管是原始的或重新对应的) 产生超过 ASCII 十 进位的 127, 则使用 八进制表示法. 你可以由 HelpPC (HelpPC 是一个 由 David Jurgens 所写的, 超文字线上说明共享程式) 的 ASCII 表中, 取得所给定任意字元的八进位码. RemapAltkeys "原始键" "重新对应的键" 国际化键盘支援. 重新对应所给定的键在 ALT 键按下时, 为另一个字 元. 例如, 对应 Alt-2 为小老鼠符, 使用: RemapAltKeys "2" "@" 记住重新开机的键并不支援. LoadCodePage "cpxxx.bin" 载入并启用所给定的二进制 Codepage 档. Codepage 是用来转换 Unicode 字元 (在 VFAT 的磁碟标签中所实作的) 为 8 位元的字元. 如 果你没有载入正确的 Codepage, 当用到特殊字元来存取档案系统时, 会 出现 FAT 警告. 所有的二进制 codepage 档可以在这找到 [37]http://cuiwww.unige.ch/info/pc/remote-boot/soft/codepage.zi p 预设的 codepage 是 850, 是有记载的字集 ISO-Latin-1. 如果你要载入 一个外国的 codepage, 你就要把变数 $IsoLatin 设为 "off" 否则你会 发生无意义的转换. 此外, 如果你要显示外国的字元, 你必需载入适当的 萤幕字型 (使用 "LoadFont"). LoadFont "字型档名" 载入并启用一种 VGA/VESA 字型, 可以在文字及图形模式下使用. 字型档 必须是二进位档 16 位元组/字元 (8x16 点阵). 这个指令可以在国际化 语系中使用以得到更梦幻的支援. 具有多个梦幻字型的档案的压缩档在这 [38]http://cuiwww.unige.ch/info/pc/remote-boot/soft/fonts.zip. 这个档案还包含用来汇出你所用的 codepage 下的 DOS .CPI 档中的字型 的程式. MrZip 指令的规格 Source... Source (i)archive "档名" Source path "路径" 设定要处理的来源档案 (或增量形式的) 档名与路径. Dest... Dest (i)archive "档名" Dest (i)dump Dest path "路径" 设定要处理的目的档案 (或增量形式的) 档名, 路径, 或 顷印. 如要控 制顷印时所要显示的资料量, 可以用 $DumpFormat 特殊变数来控制. FileZip "来源档名" "目的档名" 压缩一个先前用 FileUnzip 或 ZRamDisk 所解压缩的档案. 这个档案会 以 32 位元的 CRC 方式做检查. Filter... Filter -"样式" Filter +"样式" 避免/允许 合於所给定样式 (允许万用字元) 的档案及目录被包含进映像 档中. 样式吻合於完整的路境名. 预设, 所有的档案都会包含进映像档 中. 你只须要明确表示出哪些档案必须由过滤器过滤. 每个负的过滤器都 有相对应的正过滤器 (被允许的). 在 DOS/Windows 的映像档, 你只要用 Filter -"*.swp" Filter -"temp/*" 而对 Unix 的映像档, 你则需要 Filter -"var/log/*" Filter -"tmp/*" CopyArchive 根据所提供的来源, 目的档案, 及过滤器等设定开始处理映像档. 只有在 极少数的情况, 不然你通常都可以直接使用以下所列出的快捷用法以取代 叫用 CopyArchive 指令. 其中一种情况你会用到 CopyArchive 就是当你 要变更分割的映像档大小时, 如下: set FragmentSize="30 MB" Source archive "original.imz" Dest archive "refragmented.imz" CopyArchive FullZip "路径" "完整的映像档名" 是下述的快捷用法 Source path "路径" Dest archive "完整的映像档名" CopyArchive 你通常都要先设定过滤器. IncrZip "路径" "增量型映像档名" 是下述的快捷用法 Source path "路径" Dest iarchive "增量型映像档名" CopyArchive FullDump "完整的映像档名" 是下述的快捷用法 Source archive "完整的映像档名" Dest dump CopyArchive IncrDump "增量型映像档名" 是下述的快捷用法 Source iarchive "增量型映像档名" Dest dump CopyArchive Xcopy "来源路径" "目的路径" 是下述的快捷用法 Source path "来源路径" Dest path "目的路径" CopyArchive 5.2 NoBreak.sys Nobreak.sys 相当小 (大概只有 350 位元组) 的驱动程式, 它将加在您 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/98 则有它自己的低阶键盘处理机制. Assembler 语法的原始程式码在 [39]这. 6. 特殊型的 TFTP 伺服器 由於 TCP/IP BootPROM 只能支援 TFTP 通讯协定, 而这与增强型的 TFTP 伺服器 新功能息息相关. 6.1 Bootix 的增强型 TFTP 伺服器 Bootix 随著 TCP/IP BootPROM 一起发行的增强型 TFTP 伺服器, 可以传送每个 封包达 1408 位元组的资料以取代原标准的 512 位元组. 这个是个很棒的功能你 应该多加利用. 这个伺服器程式可以在 TCP/IP BootPROM 工具程式磁片中找到, 有 Solaris, Windows 及 Netware NLM 版本. 6.2 Linux 的增强型 TFTP 伺服器 在 Linux 下, 可以用 Bootix/Incom 所写的 TFTP 伺服器. 供 Linux 使用的版 本已编译好,. 放在这 [40]http://cuiwww.unige.ch/info/pc/remote-boot/soft/incomtftpdlx.tar.g z 6.3 Solaris 的 TFTP 伺服器 原始的 Solaris TFTP 伺服器程式有严格的档案大小限制, 因为它是使用 16-位 元的有号整数来计算封包大小. Bootix 所提供的给 Solaris 的增强型 TFTP 伺 服器, 就可以解决这个问题, 以提供更快的传输速度. 不过, 不份使用者回应 (特别是搭配 SMC9432 卡使用时) 会在启动它时产生 lock-ups 的问题. 所以, John Martin (j.martin@abdn.ac.uk) 已把 Linux 的 tftpd 移殖到 Solaris. 你可以在这找到 [41]http://www.csd.abdn.ac.uk/~jmartin/tftpd.tar.gz. 6.4 安全闸道器 我们写了一个特殊的 TFTP 伺服器用来当成认证使用者的安全闸道器. 这个伺服 器可以在 Linux 或 Solaris 下执行, 并可以透过 Unix 的 通行密码资料库 (NIS 及 shadow 通行密码都已能支援) 或 Windows NT (或 Samba) 伺服器 或 Radius 伺服器. 它放在这 [42]http://cuiwww.unige.ch/info/pc/remote-boot/soft/stdtpd.tar.gz, 有原 始程式及预先编译好的可执行档. 预先编译好的可执行档不包含 NT 通行密码的 加密功能因为我们不能散布 libdes 即使有满多人抱怨也一样. 为了要使用安全闸道器, 你只要对 security domains 设定档作一些设定, 内容 是指每个逻辑安全性领域是对应到哪一台认证伺服器 ( Unix 领域直接对应到 Unix 通行密码资料库伺服器). 以下是一个设定□例档: ______________________________________________________________ # # STFTPD 设定档 # # 这个档案用来叙述伺服器的 "security domains". # 已支援两种认证伺服器 : Radius 或 winnt (winnt 包含 NT 伺服器 和 Samba) # # Radius 伺服器的设定格式 # radius <领域名> <伺服器网路位址> # # secret 是指在你的 /etc/raddb/clients 档里头的密字组 # # SMB 伺服器的设定格式 # winnt <领域名> <伺服器网路位址> # # netbiosname 是指伺服器的 NETBIOS 识别名称 # # □例 radius sec-dom-rad radiusserver testing123 winnt sec-dom-nt1 192.168.1.1 NTserver1 winnt sec-dom-smb samba SAMBA1 ______________________________________________________________ 记住 如果你使用了 Samba, 你必须设定 security = user. 你也可以提供一个哪些使用者禁止登入 (会使他们的无法通过检查) 的列表给安 全认证伺服器. 6.5 广播型 TFTP 伺服器 我们撰写了一个特殊型 TFTP 伺服器以实现自订的 TFTP 广播功能. 用这种伺服 器, 我们可以在高负载的 10 Mb 乙太网路环境下, 以 6 Mb/s 的传输率下载映像 档到 25 台用户端电脑 (这比传统的 TFTP 传输协定来得有效率多了, 因为它完 全不须要对每个封包都做一次已收到的回应). 这种伺服器程式可以在 Linux 或 Solaris 环境下执行. 可以在这取用 [43]http://cuiwww.unige.ch/info/pc/remote-boot/soft/btdtpd.tar.gz, 含原 始程式码及以编译好的可执行档. 因为 TCP/IP BootPROM 本身不支援这种通讯协定, 我们的解决方法是以一个极小 的 ramdisk 为基础的 Linux 系统开机, 然後再搭配本文所谈到的工具程式: Linux 版本的 MrBatch, 它本身就内建支援广播型 TFTP 通讯协定了. 一个简易 的批次档可以同时使所有的用户端电脑在几分钟内下载完所有的档案. 要使用这 个功能你并不需要自行安装 Linux, 除非你有相当奇特的硬体配备, 以致无法直 接使用这个套件所提供的 Kernel. 程序如下. 首先你要手动启动广播型伺服器, 并给定参数以设定预期要开机的用 户端电脑数量 (记住, 这个程序不需要天天做. 只有在你变更了映像档内容後, 想确定它可以直接载入到你所有的用户端电脑时才要用到). 接著, 你把所有的用 户端电脑都打开, 他们就会执行下列的 BpBatch 脚本程序: ______________________________________________________________ # # 这个批次档是由 BpBatch 所执行, 用以启动一个 内建 ramdisk 的 mini-linux, # 然後在此 Linux 环境下执行 MrBatch. # # 广播型 TFTP 通讯协定只能在 Linux 版本的 MrBatch 作动, 因为 BootPROM 本身不支援 . # # 1. 设定一个极小的分割区, 用来当快取. setpartitions "BIGDOS:50" # 2. 清理 MBR. clean 0 # 3. 执行一个具 initrd (Initial Ramdisk) 支援的 Linux Kernel, 并用 # bcastrd.gz 为 初始 ramdisk (将会被挂在 root 并透过 /linuxrc 执行). # 参考 initrd.txt 以获得更多关於 初始 ramdisk 的详细资料. # 你不需要去设定 root 装置 (第二个参数是无用的) 到 Kernel, # 它会自行使用 初始 ramdisk. linuxboot "linux.krn" "" "bcastrd.gz" # 4. 初始 ramdisk 会执行 dhcpd 以透过 DHCP 通讯协定来设定网路. # 接著它会执行 mrbatch -w bcastlx ______________________________________________________________ 初始 ramdisk 内含: * dhcpcd, 一个 DHCP 用户端程式用来设定网路. * mrbatch * linuxrc, 一个会被 initrd 启动的档案, 用来延续启动 dhcpd 及之後要用 的 MrBatch. * usr/lib/terminfo/l/linux, 由 MrBatch 所使用. * dev/*, 执行 Linux 及 MrBatch 所需的装置. 所有的程式都去芜存菁并编译成静态连结, 以避免使用到 libc.so 因为它真的很 大. 最後以 Gzip 压缩的 ramdisk 大小低於 300 KB. 而 Kernel 本身用掉 450KB (并支援多数的网路卡及 initrd ). 当 Linux 一启动执行, MrBatch 会被 叫用并依下列的脚本程序来工作 (你也可以根据你所需来修改): ______________________________________________________________ # 这个档案是在 MrBatch 於 初始 ramdisk bcastrd.gz 启动後执行 # 他主要的功用是 "采广播的方式复制" 档案到快取里头 # # 1. 看看详细资讯. showlog # 2. 不需要 "press a key". set pauselog="OFF" # 3. 设定分割区为他们最终值. # 重点: 当你要复制档案到快取区以供以後的开机使用时, # 你需要在以後所用到开机设定都采用一样的分割区. setpartitions "BIGDOS:1024" # 4. 清理 快取分割区. clean -1 # 5. 透过 广播型 TFTP 通讯协定 (埠号 99) , 复制档案到快取区. # # 你可以照我们所写的脚本程序来用, 但你百分之百确定需要修改下面这一行 ! # 在我们的□例下, 我们下载的档案是 mblinux.imz, 它是我们安装的 Linux 的映像档. copy "$BOOTP-Server-IP@99:mblinux.imz" "{:-1}mblinux.imz" ______________________________________________________________ 如果传输完成, 你只须要关掉所有用户端电脑并把它们的初始开机程序脚本设定 成你所喜号的选单. References 1. mailto:mvuilleu@rembo.com 2. mailto:yytseng@ms16.hinet.net 3. http://cuiwww.unige.ch/info/pc/remote-boot/howto.html 4. file://localhost/tmp/zh-sgmltools.10772/howto.sgml 5. file://localhost/tmp/zh-sgmltools.10772/howto.dvi 6. file://localhost/tmp/zh-sgmltools.10772/howto.ps 7. file://localhost/tmp/zh-sgmltools.10772/howto.pdf 8. mailto:info@bpbatch.org 9. mailto:info@rembo.com 10. http://www.bootix.com/ 11. http://www.tellurian.com.au/ 12. http://www.bootix.com/ 13. http://www.incom.de/products_en.shtml 14. http://developer.intel.com/ial/wfm/tools/index.htm 15. http://www.lancache.com/ 16. http://www.ph-ludwigsburg.de/nutzer/schmitt\_peter/ 17. http://www.br.fgov.be/RESEARCH/INFORMATICS/info/bootp.html 18. http://www.katedral.se/system/elevsyst 19. http://vitoria.upf.tche.br/~fred/ 20. http://www.etse.urv.es/~larinyo 21. file://localhost/tmp/zh-sgmltools.10772/soft/sample-scripts 22. http://www.bootix.com/ 23. http://developer.intel.com/ial/wfm/tools/pxepdk20/index.htm 24. http://developer.intel.com/ial/wfm/tools/pxepdk20/index.htm 25. http://cuiwww.unige.ch/info/pc/remote-boot/soft/ 26. http://www.csd.abdn.ac.uk/~jmartin/tftpd.tar.gz 27. file://localhost/tmp/zh-sgmltools.10772/forum/ 28. file://localhost/tmp/zh-sgmltools.10772/soft/bpb-exe.zip 29. file://localhost/tmp/zh-sgmltools.10772/soft/bpb-exe.tar.gz 30. http://www.redhat.com/ 31. file://localhost/tmp/zh-sgmltools.10772/soft/filecache.tar.gz 32. file://localhost/tmp/zh-sgmltools.10772/soft/nobreak.zip 33. file://localhost/tmp/zh-sgmltools.10772/win95old/win95old.html 34. http://www.lancache.com/ 35. file://localhost/tmp/zh-sgmltools.10772/soft/menuedit.zip 36. file://localhost/tmp/zh-sgmltools.10772/soft/sample-scripts 37. file://localhost/tmp/zh-sgmltools.10772/soft/codepage.zip 38. file://localhost/tmp/zh-sgmltools.10772/soft/fonts.zip 39. file://localhost/tmp/zh-sgmltools.10772/soft/dos/src/nobreak.zip 40. file://localhost/tmp/zh-sgmltools.10772/soft/incomtftpdlx.tar.gz 41. http://www.csd.abdn.ac.uk/~jmartin/tftpd.tar.gz 42. file://localhost/tmp/zh-sgmltools.10772/soft/stftpd.tar.gz 43. file://localhost/tmp/zh-sgmltools.10772/soft/btftpd.tar.gz