Penguin
Diff: HowToRemoteBoot
EditPageHistoryDiffInfoLikePages

Differences between version 4 and predecessor to the previous major change of HowToRemoteBoot.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 4 Last edited on Sunday, November 28, 2004 1:05:57 am by AristotlePagaltzis Revert
Older page: version 3 Last edited on Thursday, May 1, 2003 11:29:45 am by JohnMcPherson Revert
@@ -1,4151 +1 @@
-(see also LinuxInstallationNotes)  
-----  
-  
-Linux Remote-Boot mini-HOWTO:  
-  
-  
-----  
-  
-!!!Linux Remote-Boot mini-HOWTO: Configuring Remote-Boot Workstations with Linux, DOS, Windows 95/98 and Windows NT  
-  
-!!Marc Vuilleumier Stuumlckelberg, David Clercv3.19, February 1999  
-  
-  
-----  
-''This document describes how to set up a very robust and secure server-based  
-configuration for a cluster of PCs, allowing each client to choose  
-at boot-time which operating system to run. The key of this configuration  
-is a bootprom based program, which let the user choose at boot time one of several boot images. This configuration is applicable using  
-!InCom TCP/IP Bootprom (add-on for most network cards) or any PXE-compliant Boot ROM (ready-to-use in most recent PC with built-in  
-network cards).  
-The most up-to-date version of this document, with hypertext links to  
-downloadable software and other related materials, can be found at the  
-address  
-http://cuiwww.unige.ch/info/pc/remote-boot/howto.html.  
-Linuxdoc-SGML,  
-DVI and  
-!PostScript  
-versions are available in the same directory.  
-If you are interested in getting info on further developpments, send  
-an E-mail to  
-David.Clerc@cui.unige.ch.''  
-----  
-  
-  
-  
-  
-!!1. Disclaimer and Copyrights  
-  
-  
-  
-  
-!!2. What has changed...  
-  
-  
-*2.1 ...since version 2.x ?  
-  
-*2.2 ...since version 3.0 ?  
-  
-  
-  
-  
-  
-!!3. Introduction  
-  
-  
-*3.1 Boot ROM and Hard-disk  
-  
-*3.2 The Network  
-  
-*3.3 How it Works  
-  
-*3.4 Related non-commercial documentations  
-  
-  
-  
-  
-  
-!!4. The Configuration How-To  
-  
-  
-*4.1 Server-side configuration  
-  
-*4.2 Client-side configuration  
-  
-*4.3 Setting Up the Boot Process  
-  
-*4.4 Setting Up Linux  
-  
-*4.5 Setting up DOS 6 and Windows 3.1  
-  
-*4.6 Setting up Windows 95  
-  
-*4.7 Setting up Windows NT  
-  
-*4.8 Troubleshooting (FAQ)  
-  
-  
-  
-  
-  
-!!5. Remote-Boot Tools Reference Manual  
-  
-  
-*5.1 !BpBatch, !MrBatch and !MrZip  
-  
-*5.2 !NoBreak.sys  
-  
-  
-  
-  
-  
-!!6. Special TFTP Servers  
-  
-  
-*6.1 Incom Enhanced TFTP Server  
-  
-*6.2 Linux Enhanced TFTP Server  
-  
-*6.3 The Security Gateway  
-  
-*6.4 The Broadcast TFTP Server  
-  
-----  
-  
-!!1. Disclaimer and Copyrights  
-  
-  
-This document and the related software are provided as is to the  
-Linux and Internet community, with no form of warranty. Please  
-note that __some operations related in this document may  
-destroy the content of your hard-disk__. We assume no liability  
-for any use, correct or not, of this document and of the related  
-software.  
-  
-  
-You are free to do anything you want with the remote-boot tools as long as  
-you do not make money by selling them or by distributing them  
-with a commercial product. If you want to commercialize  
-a product derived from these tools, please contact the authors  
-first to make a commercial agreement. These remote-boot tools  
-will remain available for free forever, but we may authorize  
-derived commercial tools.  
-  
-  
-These provisions shall be interpreted under and in accordance  
-with the laws of Switzerland, canton of Geneva. All disputes, defenses,  
-controversies or claims arrising in conncetion with this document and  
-the related software, shall be subject to the exclusive  
-juridiction of the courts of the canton of Geneva, Switzerland.  
-  
-  
-If you like this program, you can send us a Postcard and/or make  
-a gift to the  
-International Committee of the Red Cross (ICRC) or to the  
-UNICEF.  
-  
-  
-  
-----  
-  
-!!2. What has changed...  
-  
-  
-  
-  
-!!2.1 ...since version 2.x ?  
-  
-  
-  
-To say it frankly, almost everything. The underlying concepts are the same, but  
-the software part has been completly redesigned to overcome the limitations  
-of previous versions and to make it easier to use. An highlight of the new  
-features :  
-  
-  
-*All functions (bpmenu, bpclean, bpunzip) are encompassed in a single  
-program.  
-*  
-  
-*The program can run not only from the boot rom, but also under DOS,  
-Windows 95 and Linux.  
-*  
-  
-*The program can now restore images of FAT16, FAT32 and EXT2FS  
-partitions. If someone want to write NTFS support, let me know...  
-For now, NT users still have to stick to FAT16.  
-*  
-  
-*The program can not only restore disk images but also add and patch  
-individual files in order to customize the client behaviour.  
-*  
-  
-*Disk images are not any more bound to 87 MB. They are now  
-file-system independant archives.  
-*  
-  
-*We provide a mean for automatically downloading a disk image to  
-an arbitrary big number of clients at the same time (broadcast).  
-*  
-  
-*You can now write your own secure boot script, that will determine  
-the behaviour of the machine before the real boot.  
-*  
-  
-*You can now boot any Linux kernel, without  
-applying any patch. Its is also possible to provide a  
-command line and a ramdisk image.  
-*  
-  
-*You can authenticate users at boot time using a Unix, NT or Radius  
-server and deny them any access to the machine.  
-*  
-  
-*Full national language support is included.  
-*  
-  
-*And many, many other new features...  
-*  
-  
-  
-; __Is there a program for converting old archives to the new format ?__:  
-  
-No, because the internal format is radically different. But you can easily  
-do the conversion by yourself:  
-  
-  
-#Boot an old image (unzip it to your disk)  
-#  
-  
-#Remove calls to the old unzipreg utility and replace them  
-by the adequate patch commands (it is very easy, see  
-the detailed instructions below)  
-#  
-  
-#Run the new mrzip program to create a new-style disk image  
-#  
-  
-  
-  
-!!2.2 ...since version 3.0 ?  
-  
-  
-  
-Version 3.0 was the beta-release. A dozen of sites around the world have  
-tested it during a month and given much of their time to help us finding  
-bugs and to suggest enhancements. Thanks to all of them for their patience,  
-and in particular to Maciek Uhlig, Dick Velders and Jeff Teeters.  
-  
-  
-A few minor features have been added since 3.01, such as support for diskless  
-Linux boot (by disabling the cache).  
-  
-  
-Version 3.10 introduced compatibility with Intel's ''Wired for Management  
-1.1a'' NetPC standard. The tools now work with any PXE-compliant boot ROM  
-(as are most on-board boot ROMs) available today. Thanks to  
-!InCom GmbH for giving us the PXE  
-bootprom that permitted this developpment. We also succesfully tested  
-the tools with the PXE Boot ROM that I found incidentally in my Dell  
-computer with onboard network card (called !LanDesk Service Agent).  
-  
-  
-Version 3.11 to 3.12 added UNIX server-side tools (a PXE Proxy DHCP server  
-for Solaris and Linux, and an enhanced TFTP server for Linux), as well as  
-detailled informations on server-side setup and the PXE booting process.  
-  
-  
-Version 3.13 added Advanced Power Management support (!PowerOff command).  
-  
-  
-Version 3.14 added minor enhancements and some corrections. We fixed a problem  
-with the terminal under !RedHat 5.1, and another problem in the syntax of  
-the "if" command. We added some features suggested by the Laboratori de  
-Cagravelcul de la Facultat d'Informagravetica de Barcelona (LCFIB) :  
-  
-  
-*A new APM variable let you know if your system support the Advanced  
-Power Management (i.e it supports the poweroff command).  
-*  
-  
-*A "beep" command.  
-*  
-  
-*A new parameter to !DrawWindow, to include a title at the window  
-creation. You can now do !DrawWindow 200 200 400 200 "Title".  
-*  
-  
-  
-  
-Version 3.15 added full VESA support. !BpBatch now support several video modes,  
-to accomodate old computers not being able to display 800x600 graphics. A new  
-parameter has been added to !InitGraph to specify the video mode, and a list  
-of detected video mode can be retrieved from the new VESA-Modes variable.  
-  
-  
-Version 3.16 fixes the following bugs:  
-  
-  
-*"Malloc failed" during the Fullunzip process of a multiple fragments  
-image.  
-Many thanks to Christian Meyer for his collaboration.  
-*  
-  
-*A bug which prevented the linux version of !MrBatch to properly  
-fullunzip images. This bug was located in the low-level functions of  
-!MrBatch, so it may fix other problems encountered in the ''linux'' version  
-of !MrBatch.  
-Many thanks to Jeff Teeters for his collaboration.  
-*  
-  
-*An error in the codepage translation tables. This bug was found by  
-the Laboratori de Cagravelcul de la Facultat d'Informagravetica de Barcelona (LCFIB).  
-You can find the bug report in the !BpBatch forum.  
-*  
-  
-  
-  
-Version 3.17 adds some minor features and fixes bugs:  
-  
-  
-*Fullunzip was turning Extended Memory off  
-*  
-  
-*Booting on the !RedHat boot disk now works  
-*  
-  
-*When extracting images with a large number of directories, the  
-resulting FAT file system was corrupted.  
-*  
-  
-*We added retries to text TFTP transfers. !BpBatch will now retry  
-three times before saying "Could not transfer the file".  
-*  
-  
-*Timestamps are now correctly updated in FAT. (thank to Francis Chan)  
-*  
-  
-  
-  
-Version 3.18 fixes a bug with the !IncrUnzip function. Thanks to  
-Gary Pike for its collaboration.  
-  
-  
-Version 3.19 fixed a bug in the error handling of the delete command  
-on ext2fs, as well as the inappropriate handling of names starting with  
-A: under Linux. The following new features were also added:  
-  
-  
-*A new if valid disk:partition syntax can be used to check  
-if a partition has been formatted  
-*  
-  
-*FAT32 disk images are now fully functional (they now boot properly)  
-*  
-  
-*Linux EXT2 partitions bigger than 2 GB are now supported  
-*  
-  
-*Linux Swap partitions bigger than 128 MB are now supported (this  
-feature needs a recent kernel, at least 2.1.x)  
-*  
-  
-*!FullUnzip is now also possible without a cache partition, by  
-setting !CacheNever to "ON". This might be  
-usefull for a unique installation, but is not recommended in  
-general is it results in a high network load.  
-*  
-  
-Thanks to Ruben Schattevoy for its help and contributions to this release.  
-  
-  
-  
-----  
-  
-!!3. Introduction  
-  
-  
-The configuration described here was developped since Summer 1996 at the  
-CUI, University of Geneva. The Computer Science Department uses several  
-servers and a number of PCs, which fall into two classes:  
-  
-  
-*computers devoted to students  
-*  
-  
-*computers devoted to research and teaching assistants  
-*  
-  
-We developped the current configuration with the following aims:  
-  
-  
-*Every computer should be able to run under Linux, DOS, Windows 3.1,  
-Windows 95 or Windows NT. One should be able to choose the desired  
-operating system for each session.  
-*  
-  
-*All softwares, including operating systems, should be take from the  
-server, in order to facilitate the installations and upgrades.  
-*  
-  
-*Clients computers should be able to run without any write-access on  
-the server (for security reasons), except for their home directory.  
-*  
-  
-*Client-side configuration should be reduced to its very minimum.  
-Clients should automatically get their IP configuration parameters  
-from the server, and this information should be located in  
-a single file, used for all operating systems.  
-*  
-  
-*Since almost every computer now has a hard-disk,  
-clients should be able to take profit of it for reducing network  
-load and as temporary storage space for the user.  
-*  
-  
-*Users ''must'' have a login to be able to use  
-any of the computers.  
-*  
-  
-*The login should be the same  
-for all operating system and should let the user access its  
-unique home directory, common to all operating systems.  
-*  
-  
-*Student (and secretary :-) computers should be fully cleaned up  
-at each start. That is,  
-the PC should always look like if it were just installed.  
-*  
-  
-*Every computer has to be protected from virus attacks.  
-*  
-  
-These constraints lead us to base our configuration on bootprom  
-tools. We first developped new tools for the excellent  
-TCP/IP Bootprom  
-from  
-!InCom GmbH.  
-Now that a standard for preboot execution environments as finally emerged,  
-we ported the tools so that it now also works for any PXE-compliant  
-bootprom. PXE boot roms, also called !LanDesk Service Agent, are now  
-distributed with almost all on-board network adapter.  
-For more info on PXE and Intel ''Wired for Management'' standard  
-in general, read from  
-http://www.intel.com/managedpc.  
-  
-  
-  
-  
-!!3.1 Boot ROM and Hard-disk  
-  
-  
-  
-Bootproms exist for quite a long time, but until recently, they were  
-solely used with diskless computers. Since 1996, this How-to has been  
-claiming that bootproms are even more interesting  
-for computers which have a local harddisk, since they allow to take profit  
-of both sides:  
-  
-  
-*A boot rom make the configurations more robust, since it ensure  
-that the computer will always boot the same way, no matter  
-any virus or partition table crash. It can be used, as  
-we did, to cleanup the harddisk even before the operating system  
-is loaded.  
-*  
-  
-*A local harddisk make the configuration more efficient, since  
-it can reduce the network trafic through caching, and allows  
-for efficient swap.  
-*  
-  
-Today, we have the pleasure to see that all computer manufacturers have  
-come to the same point and provide boot roms as part of new computer  
-standards.  
-  
-  
-Note that you can still use the tools described below in an ''old  
-fashioned'' way, that is as a simple kernel/ramdisk loader, even for  
-diskless computers. However, we do not encourage this use.  
-  
-  
-  
-  
-!!3.2 The Network  
-  
-  
-  
-The University of Geneva owns a class B domain, subdivided into several  
-subnets. The CUI uses four subnets, among them one is dedicated to students.  
-  
-  
-Originally, our PCs were concerned about two network protocols: IPX and IP.  
-On the IPX side, we used a single Novell Netware 3 server for sharing software  
-and users files for DOS and Windows. On the IP side, we used a SUN server  
-for sharing software and users partitions for Linux, with NFS.  
-  
-  
-In our latest configuration, we do not any more use IPX. There is a single  
-Unix server (which could be Linux as well as a SUN), sharing software  
-and user files using NFS for Linux clients and using SMB (NetBIOS) over  
-TCP/IP for Dos and Windows clients. In this way, we have a single  
-home directory used by all operating systems.  
-  
-  
-  
-  
-!!3.3 How it Works  
-  
-  
-  
-  
-  
-  
-#When a client PC is turned on, it first performs the traditional system  
-checks before the TCP/IP Bootprom or PXE Boot ROM takes the control.  
-#  
-  
-#The bootprom issues a BOOTP/DHCP request in order to get its IP  
-configuration parameters.  
-#  
-  
-#If the server knows the PC issuing the request, it will send  
-back a BOOTP/DHCP reply with informations such as the client's IP  
-address, the default gateway, and which bootdisk image to use.  
-#  
-  
-#In case of a PXE boot ROM, there might be some more exchanges between  
-the client and the server to determine installation parameters.  
-#  
-  
-#The bootprom then downloads the boot image from the  
-server using the TFTP protocol. The boot image happens to be  
-a small program called bpbatch, our boot-time batch  
-file interpreter.  
-#  
-  
-#The batch interpreter is started. At this time, it is almost  
-alone in the computer memory. There is no operating system loaded,  
-except the preboot execution environment (offered by the Boot ROM).  
-#  
-  
-#The batch interpreter look in the BOOTP/DHCP reply for command-line  
-options, and in particular for the name of the batch to execute.  
-#  
-  
-#According to the instructions in the batch file, it will for  
-instance:  
-  
-  
-##Load a national keyboard mapping  
-##  
-  
-##Authenticate the user according to a remote server  
-(Unix, Radius or Windows NT)  
-##  
-  
-##Let the user choose between the available operating systems  
-##  
-  
-##According to the operating system choosen, repartition  
-the hard-disk and quick-format some partitions  
-##  
-  
-##Check if an up-to-date compressed image of the selected OS  
-is present at the end of the disk. If not, it download  
-it using TFTP  
-##  
-  
-##Uncompress the selected OS to the main partition  
-##  
-  
-##If the selected OS is Linux, load a kernel and start it  
-##  
-  
-##If the selected OS is DOS or Windows, simply let the computer  
-boot on its fresh new hard-disk  
-##  
-  
-For __DOS and Windows 3.1__, we use the  
-freely available Microsoft !LanManager for DOS (search the  
-network for the mirror nearest to you; the distribution  
-consists of three files named disk1 to disk4)  
-as SMB client. Microsoft !LanManager supports dynamic  
-configuration using DHCP. After logging in, the user  
-is faced to DOS, and can start Windows 3.1 by typing  
-the traditional win command. Note that at this point,  
-DOS and Windows 3.1 appear to be installed locally.  
-For __Windows 95 and Windows NT__, we also use Microsoft SMB client  
-(called ''Client for the Microsoft Network''), that supports  
-dynamic configuration using DHCP. We reduce network load using  
-Shared LAN Cache,  
-a nice and powerful network-to-disk cache program.  
-#  
-  
-Students computers can be turned off ''the hard way'' at any time  
-without risks, since the hard disk is reinitialized at each start.  
-  
-  
-For "safe" computers (ie. for assistants computers),  
-once the computer has been booted once using the above described system,  
-the boot script simply redirect the boot to the local hard-disk,  
-without cleaning it again. This allow users to leave  
-data on their local hard disk. But whenever the configuration gets corrupted,  
-the user can simply choose from the boot menu in order to have  
-a fresh installation.  
-  
-  
-  
-  
-!!3.4 Related non-commercial documentations  
-  
-  
-  
-This configuration has been successfully reproduced at several places  
-around the world. A few people have written some hints and tricks that  
-complement this How-To. If you did so and that your page is not  
-already referenced in this documentation, please send  
-an e-mail to Marc.!VuilleumierStuckelberg@cui.unige.ch.  
-And if you experience problems while reproducing this configuration,  
-have a look at these pages !  
-  
-  
-*  
-http://www.br.fgov.be/RESEARCH/INFORMATICS/info/bootp.html,  
-by Alain Empain of the Belgium National Botanic Garden.  
-Many useful sample scripts, and a nice PERL program to  
-automatically generate graphic menus and corresponding HTML  
-documentation from a higher level description.  
-*  
-  
-*  
-http://www.katedral.se/system/elevsyst,  
-by Johan Carlstedt of The Cathedral School of Uppsala, Sweden.  
-''At this day, the configuration described at this place  
-is still based on the previous version of the remote-boot  
-tools. However, almost everything remains applicable, given  
-a few changes''.  
-*  
-  
-*  
-http://vitoria.upf.tche.br/~fred/,  
-in portuguese, by Frederico Goldschmidt of the Passo Fundo  
-University, Brasil.  
-*  
-  
-*  
-http://www.etse.urv.es/~larinyo, in spanish,  
-by Lluis Arino, of the Escola Tecnica Superio d'Enginyeria,  
-Spain.  
-*  
-  
-  
-  
-You can also send me your !BpBatch script if you want me to include it  
-in the  
-sample scripts collection.  
-  
-  
-  
-----  
-  
-!!4. The Configuration How-To  
-  
-  
-First, arrange to have the following two machines within arm's reach:  
-  
-  
-*the __server__, usually a Unix or Windows NT machine  
-*  
-  
-*the __client__, a PC with a bootprom enabled, and nothing  
-valuable on the hard disk.  
-*  
-  
-If you want to test the configuration but you do not yet have a  
-bootprom, you can download the TCP/IP !BootProm demo diskette  
-from !InCom GmbH at  
-  
-http://www.incom.de.  
-This diskette will make your computer behave like if it had a TCP/IP  
-Bootprom plugged in.  
-  
-  
-If you already have a Boot ROM, you need to enable it. If you are using Incom  
-TCP/IP Bootprom, you can do that using a special program from your  
-network card manufacturer. If you have a PXE Bootprom, you can do it  
-simply from BIOS setup, by changing the default boot device.  
-  
-  
-For student computers, we configured the boot on network  
-first, and disabled hard-disk and floppy-disk boot. For assistant  
-computers, we also configured network-boot first,  
-but we allow hard-disk and floppy-disk boot.  
-  
-  
-  
-  
-!!4.1 Server-side configuration  
-  
-  
-  
-On the server, you will need the following services:  
-  
-  
-#A BOOTP/DHCP server  
-#  
-  
-#May be a Proxy DHCP server  
-#  
-  
-#A TFTP server  
-#  
-  
-__Note for PXE Boot ROM users:__ We found after severals hours of tedious  
-search that PXE Boot ROMs with version before .99  
-do not follow the IP protocol and  
-discard all packets that have the ''Don't Fragment'' (DF) flag set.  
-That means, you will have to disable ''Path MTU Discovery'' on the server,  
-or the Boot ROM will not see any of its packets. On Solaris, use  
-ndd /dev/ip ip_path_mtu_discovery to see if you have it enabled  
-and ndd -set /dev/ip ip_path_mtu_discovery 0 to disable it.  
-However, this fix only works for non-broadcast packets (ask SUN why...).  
-That means, it will work for TFTP but not for DHCP :-(. Intel has recently  
-fixed this bug, and if you bought your computer after June 1998, you surely  
-have a corrected PXE implementation.  
-  
-  
-  
-  
-!Setting up DHCP  
-  
-  
-The role of the DHCP server is to give to the client an IP  
-address and to make it load the  
-file named bpbatch.P from the TFTP server.  
-DHCP is a superprotocol over BOOTP. If you are using !InCom  
-TCP/IP Bootprom, you may live without DHCP (using an old BOOTP server).  
-  
-  
-On Windows NT, you will probably use the native DHCP server.  
-If you are using !InCom TCP/IP Bootprom, you will have to use  
-a special trick to specify the boot file name (get more info  
-from !InCom WWW site). If you are using a PXE Bootrom, you will  
-need a Proxy DHCP server, but no other trick is needed as  
-the boot file name will be provided by the Proxy DHCP server.  
-  
-  
-On Linux, the best choice is the standard DHCP server from the  
-Internet Software Consortium. If you are  
-using a PXE Bootrom, in addition to the usual options, you will need  
-to add the following ones:  
-  
-  
-*option dhcp-class-identifier "PXEClient"  
-*  
-  
-*option vendor-encapsulated-options ff;  
-*  
-  
-  
-  
-On Solaris, you can either use the Internet Software Consortium  
-DHCP server  
-(available on the Web), or use Solaris DHCP server (available  
-since Solaris 2.5). However, as Solaris DHCP server does not seems  
-to be able to insert a client class identifier in its DHCP offer,  
-you must install a Proxy DHCP server. Morever, this Proxy DHCP server  
-must reside on another computer since Solaris DHCP server locks  
-the DHCP port.  
-  
-  
-We suggest giving infinite lease time for remote-boot clients.  
-Don't forget that BOOTP/DHCP requests are bounded by subnets. If the client  
-and the server do not reside on the same subnet, you should install  
-a BOOTP/DHCP Relay agent on any computer between the two.  
-For now, just assume that both machines are on the same subnet.  
-  
-  
-  
-  
-!Setting up a Proxy DHCP  
-  
-  
-The role of the Proxy DHCP server is to overcome limitions of some DHCP  
-servers and to provide PXE specific extensions. A proxy DHCP server  
-only makes sense for a PXE Boot rom.  
-  
-  
-As !BpBatch itself is quite powerfull,  
-you wont need to use any PXE specific DHCP extension (menus, etc.).  
-However, if your DHCP server is not able to show minimal PXE compliance,  
-you will need a Proxy DHCP server or your PXE Boot ROM will not accept  
-to go further.  
-  
-  
-On Windows NT, you can try to use Intel WfM PDK (available from their  
-web site), but it is not very easy to use. We rather suggest having  
-a Linux machine on the subnet and using our small Proxy DHCP.  
-The major advantage of our Proxy DHCP Server for !BpBatch is that  
-our server will let you specify an option 155 vendor tag that will  
-be interpreted by !BpBatch as a command line.  
-  
-  
-On Linux and Solaris, you can run our Proxy DHCP program, that simply  
-takes as argument the TFTP server IP address, boot file name and  
-optional arguments, and does everything for you.  
-If the DHCP port on the server is already requested by another daemon,  
-the proxy DHCP server will run on port 4011. In this case, it is  
-necessary that the other daemon on DHCP port answer a DHCP offer with  
-client class PXEClient so that the PXE client knows that it must  
-try on port 4011.  
-  
-  
-If you want to understand better PXE extensions to DHCP, there is  
-an extensive description available on Intel WWW site. However, be warned  
-that the documents are quite confusing, as the protocol has been  
-extended to a number of optional stages, in order to allow for a  
-maximal flexibility. The key to understand it is that all what a PXE  
-client needs is a complete ''enhanced DHCP answer''. If it receives  
-only a standard DHCP offer, it will look further until it gets  
-  
-  
-#a client class (T60) set to PXEClient  
-#  
-  
-#vendor encapsulated options (T43) (possibly empty, ie. hex ff)  
-#  
-  
-#a non-empty boot filename  
-#  
-  
-The PXE specific negociation ends as soon as all these infos are received,  
-but can lead to a very complex process (install server discovery, etc.)  
-if some are missing.  
-  
-  
-  
-  
-!Setting up TFTP  
-  
-  
-The TFTP server is a very simple file server. In its basic version,  
-TFTP use 512 bytes data blocks, which are quite inefficients.  
-!InCom TCP/IP Bootprom and PXE Boot ROMs allow to use larger  
-blocks (1408 bytes), which speeds up transfers a lot. However,  
-this can only work with an enhanced TFTP server.  
-  
-  
-On Windows NT, we suggest using !InCom enhanced TFTP server, available  
-on their web site.  
-  
-  
-On Linux, you can use our enhanced TFTP server, available at  
-  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/etftpd.tar.gz.  
-  
-  
-On Solaris, you should use !InCom enhanced TFTP serer, available  
-on the utility disk provided with the TCP/IP Bootprom.  
-  
-  
-__If you prefer using a standard TFTP daemon, remove  
-the P in all boot image name extensions, in order to tell the  
-Bootprom to use only the standard TFTP port (This trick was introduced  
-by !InCom GmbH for the TCP/IP Bootprom. We still use it as an easy way  
-to select the default TFTP port with PXE bootproms).__  
-  
-  
-  
-  
-!!4.2 Client-side configuration  
-  
-  
-  
-First, we will do set up the part common to all operating systems, ie.  
-the batch-file interpreter.  
-Then, for each operating system, we will go through the following steps:  
-  
-  
-#Setup a stand-alone client  
-#  
-  
-#Save its configuration on the server  
-#  
-  
-#Test it as a remote-boot client  
-#  
-  
-#Adapt it so that it works for any similar client machine  
-#  
-  
-Once this is done, you will be able to setup any supplemental  
-client just by plugging a Boot ROM in it (or buying a Wired for Management  
-ready computer...) and adding one line  
-in the DHCP configuration file.  
-  
-  
-Our examples assume that you have a hard disk of 1.4 Gb or more.  
-If you have less, reduce the sizes of the partitions, but remember  
-the you need to leave a few hundreds megabytes unallocated (that is,  
-the last partition must not take up to the last cylinder) to leave  
-free room for the special cache partition. Moreover, as the cache always  
-starts at the cylinder following the last allocated cylinder, if you  
-do not use the same total size for all your tests, you will have to  
-download several times the same files (the cache will be automatically  
-cleared).  
-  
-  
-Never despair. If you can't get it to work, first look in the  
-''Troubleshooting'' section if your problem is not already solved  
-(get the latest version from the Web).  
-Then, take a look in the !BpBatch forum. Perhaps someone else had the  
-same troubles as you have, and the answer can be found in the forum.  
-Forum's URL :  
-  
-http://cuiwww.unige.ch/info/pc/remote-boot/forum/.  
-If it still does not work, think about monitoring network traffic  
-for network related problems (use tcpdump on Linux or  
-snoop on Solaris). If you really cannot get it to work,  
-you can send an E-mail to David.Clerc@cui.unige.ch or  
-Marc.!VuilleumierStuckelberg@cui.unige.ch.  
-If your problem is strictly related with the remote-boot configuration  
-and if we are not overflowed, we will try to solve your problem.  
-  
-  
-  
-  
-!!4.3 Setting Up the Boot Process  
-  
-  
-  
-Get the !BpBatch software, either as .zip or as .tar.gz.  
-The executables are available at  
-  
-  
-*  
-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  
-*  
-  
-The source code (Assembler and C) is also available on request.  
-  
-  
-In the server /tftpboot directory, put the following three special  
-boot images, which together make our pre-boot batch file interpreter:  
-  
-  
-*bpbatch.P, the dynamic loader (respect the uppercase !)  
-*  
-  
-*bpbatch.ovl, the relocated interpreter  
-*  
-  
-*bpbatch.hlp, the on-line help file  
-*  
-  
-Then add an entry in the DHCP configuration file for your client, with  
-the boot file set to "bpbatch.P". Define a vendor option tag 155  
-(decimal) with the value "-i"  
-(on the standard DHCP server, this is done by the following  
-command: option option-155 "-i";). It is interpreted by bpbatch  
-as the command line, and -i stands for "interactive".  
-  
-  
-Boot the client computer. You might shortly see  
-  
-  
-*The Boot ROM copyright  
-*  
-  
-*The string DHCP while the client waits for a DHCP reply  
-*  
-  
-*The string TFTP while the client waits for the first TFTP packet  
-*  
-  
-*The string Loading !BpBatch while the loader download the  
-interpreter  
-*  
-  
-*And finaly our banner, followed by a nice ''greather-than'' prompt  
-*  
-  
-Congratulations ! You have started the batch interpreter...  
-If you are curious about what you can do with it, continue reading  
-the next section. If you are on a hurry, skip it and go directly  
-install the operating system of your choice. If you have any doubt  
-about a command within the interpreter, type help.  
-  
-  
-Note that you can run the same interpreter within DOS and Linux by  
-running the !MrBatch program. There are a only very few differences  
-(the Linux version do not have graphics support and the DOS version  
-can only send BOOTP and TFTP requests if the !BootProm is not hidden  
-by the operating system).  
-  
-  
-It may be a good idea to read now the section about the  
-''Syntax Rules'' of !BpBatch, and in particular the paragraphs  
-on ''File References'' and on ''The Cache Filesystem''.  
-This will help you understand the examples.  
-  
-  
-Once all operating systems will be set up, you will have to make a  
-menu to let the user choose the one he wants. You should be able  
-to discover by yourself how to make such a menu. All  
-necessary commands are documented at the end of this document.  
-  
-  
-  
-  
-!Discovering !BpBatch  
-  
-  
-Try to type !LogVars. You should get about thirty variables  
-listed. Roughly, the first are !BpBatch settings, then come  
-all parameters extracted from the BOOTP/DHCP reply, and the last  
-variable is a list of disks sizes, in Megabytes.  
-  
-  
-Type !GetPartitions part, then !LogVars again. There should be  
-one more variable containing the list of defined partitions on your  
-first hard-drive. Assuming that the first partition is either  
-BIGDOS, FAT32 or LINUX-EXT2, try !LogDir "{:1}" to get the  
-content of the root directory, then !LogDir "{:1}/usr" if  
-there is an usr directory. You can even try  
-!LogTree "{:1}/etc" to get a directory tree.  
-  
-  
-Put a GIF file (format GIF-87a, interlaced or not, but NOT GIF-89a)  
-on your TFTP server. We will suppose that the file is named image.gif.  
-You can copy it wherever you want with the following command:  
-Copy "image.gif" "{:1}/temp/image.gif". Or you can use it  
-directly from the server. Now type Logvars "V*" and look at  
-the value of the VESA variable. If it is On, which is most  
-probable, that means you have a VESA-compliant video adapter. You can list  
-the available video modes using Echo "$VESA-Modes". To display your  
-image try the following command: !DrawGif "image.gif".  
-The image should be on the upper  
-left corner of the screen. You can draw it on another place by specifying  
-X and Y coordinates after the image name. You can also draw text  
-with !DrawText 200 200 "Hello world" yellow. Or draw an empty  
-window with !DrawWindow 200 200 300 150. To insert a title when you  
-create a new window, try !DrawWindow 200 200 300 150 "My Window".  
-When you are tired of graphic mode, simply type !CloseGraph.  
-  
-  
-Note on graphics : by default, all graphical routines work in the 800x600  
-VESA mode (with 256 colors), which is the first field of the VESA-Modes  
-variable. If you want to use a different video mode, change the variable in  
-order to have the requested video mode as the first field of the list.  
-  
-  
-Now take a text editor, and create a file named test.bpb  
-in the tftpboot directory with the following content:  
-  
-----  
-  
-: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  
-  
-----  
-  
-In your BOOTP/DHCP configuration, change the option-155 from "-i"  
-to "test", and reboot the client computer. The small script  
-should run automatically, and ask you for a username and password.  
-If you do not type smith and justdoit, you wont be able to  
-boot the computer. Later you will learn how to use a Unix, NT or Radius  
-server to check valid user names.  
-  
-  
-  
-  
-!!4.4 Setting Up Linux  
-  
-  
-  
-In order to set up Linux, you will need to boot the floppy disk  
-provided with the !RedHat Linux distribution. !BpBatch includes a  
-command that can redirect the boot to the floppy: !FloppyBoot.  
-  
-  
-Set up  
-!RedHat Linux on your client, with network support,  
-and any packages you may want. You may want to recompile the  
-kernel to better fit your hardware, but it is not necessary.  
-  
-  
-  
-  
-!Configuring the Client  
-  
-  
-It is probably a good idea to include BOOTP support to the kernel, so  
-that you do not have to customize the client IP address manually.  
-  
-  
-In order to reduce network load, you might also want to setup the  
-filecache for caching on the hard disk files that are  
-loaded by NFS.  
-Roughly, the principle of the filecache  
-is that whenever a symbolic link from the cache subdirectory  
-is followed, it is replaced by its target. If the target is itself a  
-subdirectory, each entry of the subdirectory becomes a symbolic link  
-to the original entry of the foreign filesystem.  
-The filecache has been written by Unifix GmbH, and is part of  
-Unifix Linux 2.. It is freely distributable, and you can get the  
-necessary files from  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/filecache.tar.gz.  
-In order to use the filecache, you have to  
-  
-  
-*apply a patch to the kernel (file patch-filecache),  
-enable filecache support through make config or whatever  
-you prefer, and recompile the kernel  
-*  
-  
-*copy the filecache binary file to /sbin  
-*  
-  
-*create a mount point called /mnt/nfs (using mkdir)  
-*  
-  
-*copy filecache.conf to /etc. This file contains  
-the following lines:  
-  
-Max 100 MB 50 % #  
-Cache /mnt/nfs/usr /usr  
-Cache /mnt/nfs/opt /opt  
-  
-  
-*  
-  
-*copy the content of /usr and /opt to the server,  
-export them read-only  
-with anon=0 (for allowing root access) and mount them under  
-/mnt/nfs (add a line for that in /etc/fstab)  
-*  
-  
-*rename /usr as /usr.orig  
-*  
-  
-*link /usr to /mnt/nfs/usr  
-*  
-  
-*rename /opt as /opt.orig  
-*  
-  
-*link /opt to /mnt/nfs/opt  
-*  
-  
-*ensure that /usr and /opt are not empty and contains  
-the correct directories  
-*  
-  
-*recursively remove /usr.orig and /opt.orig  
-*  
-  
-*copy filecache.init to /etc/rc.d/init.d  
-*  
-  
-*And finally link /etc/rc.d/rc3.d/S35filecache to /etc/rc.d/init.d/filecache.init  
-*  
-  
-If you successfully followed each of these steps, you should have the  
-filecache working next time you boot, as long as you do not forget to  
-use your patched kernel.  
-  
-  
-  
-  
-!Testing the Configuration  
-  
-  
-Copy your compressed kernel image (zImage, bzImage, vmlinuz  
-or whatever you call it) to the  
-server /tftpboot directory as linux.krn. If you had to unplug  
-the bootprom from the PC, you can now plug it again. When !BpBatch  
-starts, type !LinuxBoot "linux.krn" "root=/dev/hda1 BOOT_IMAGE=linux"  
-(assuming  
-that the root ext2 filesystem is on the first partition). Alternatively,  
-if you did setup your configuration on a computer without bootprom,  
-just boot let it boot using the loader you installed (lilo, ...). But  
-in the later case, if you want the filecache to work, you should have  
-explicitely installed your kernel with filecache support at the right place.  
-  
-  
-Wait until the system comes up.  
-If you installed the filecache, you can check that /usr has  
-exploded into a directory with some symlinks and some already-exploded  
-directories. Now start the programs that the end-users will use most of  
-the time, in order to load them once for all to the hard disk.  
-  
-  
-You can still make adjustements to your configuration, like on  
-any stand-alone linux station.  
-  
-  
-  
-  
-!Building the Disk Image  
-  
-  
-When you are happy with your configuration, login as root,  
-go to the /tmp directory and  
-run our mrzip program.  
-!MrZip is a command interpreter like !BpBatch, but it can  
-understand more commands than !BpBatch does. In particular, it  
-can understand the following commands:  
-  
-----  
-  
-showlog  
-filter -"tmp/*"  
-filter -"var/log/*"  
-fullzip "/" "/tmp/linux.imz"  
-  
-----  
-  
-This will create a disk image in /tmp/linux.imz. Move it to  
-the server /tftpboot directory. Then copy the following  
-batch file to /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"  
-  
-----  
-  
-  
-  
-The BOOT_IMAGE argument is to stay compatible with lilo for  
-!RedHat 5.1 and later rc.sysinit.  
-  
-  
-Your remote-boot linux configuration is ready ! You can now either  
-set the BOOTP-option-155 to "linux", or type include "linux.bpb"  
-from within !BpBatch to test it.  
-  
-  
-  
-  
-!System Maintenance and Upgrades  
-  
-  
-If you want later to upgrade software, install bug fixes and  
-security fixes, proceed as follow:  
-  
-  
-*Remote-boot a client computer to get a fresh linux install  
-*  
-  
-*Make your changes  
-*  
-  
-*Redo the disk image  
-*  
-  
-*Copy the new image in place of the old one on the server  
-*  
-  
-That means, you can upgrade software on your server-based configuration  
-as if it were a purely local install.  
-  
-  
-  
-  
-!!4.5 Setting up DOS 6 and Windows 3.1  
-  
-  
-  
-On the client computer, boot on your favorite dos floppy disk (either  
-remove the bootprom or type !FloppyBoot within !BpBatch).  
-Format the dos partition of your hard-drive with the /S  
-option, in order to put the operating system on it.  
-The size of the partition is not important, as disk archives created  
-with !MrZip  
-Create a DOS subdirectory, copy DOS in it. Install your  
-favorite network client (for instance Microsoft !LanManager),  
-Windows 3.1, and so on. If you use Microsoft !LanManager,  
-do not use DHCP for the IP configuration as it is a very poor  
-implementation that will almost surely fail with reasonable  
-network load. To do that, add the following lines in your protocol.ref  
-file, in the section that loads tcptsr (of course, replaces the xxx  
-by your true IP parameters):  
-  
-IPADDRESS0 = xxx xxx xxx xxx  
-SUBNETMASK0 = 255 255 xxx xxx  
-DEFAULTGATEWAY0 = xxx xxx xxx xxx  
-DISABLEDHCP = 1  
-  
-  
-  
-Do not be afraid to use EMM386 to optimize the memory usage, and  
-even to include the area where you put your network adapter ROM,  
-since it is not used anymore at this time. But carefully exclude  
-the network adapter RAM, or you will not be able to connect to your  
-server. Use the NOEMS parameter.  
-  
-  
-If you want to ensure that the client machine cannot be used without  
-a valid login name, download our nobreak  
-pseudo-device driver (available at  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/nobreak.zip)  
-and run it at the beginning of your  
-config.sys. Then add something like this to your 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  
-  
-----  
-  
-  
-  
-Ensure that your client boot well  
-by rebooting the client and evaluating the following commands  
-within !BpBatch interactive mode:  
-  
-!HideBootprom  
-!HdBoot  
-  
-  
-  
-  
-  
-!Building the Disk Image  
-  
-  
-On the server, make a share called admin for instance, on  
-which you will put some stuff for the system administrator.  
-If the server is a Unix machine, it is a good opportunity to put  
-in admin a softlink to the /tftpboot subdirectory,  
-so that you can put images in it directly from the client.  
-Within admin, create a /utils subdirectory  
-and put the following files in it:  
-  
-  
-*mrbatch.exe,  
-the DOS version of !BpBatch  
-*  
-  
-*mrzip.exe,  
-the DOS version of the program for building disk images  
-*  
-  
-*bpbatch.hlp,  
-the on-line help file  
-*  
-  
-You might also like to put in the same directory a simple !MrZip script  
-named zipdos.mrz  
-file that contains the commands needed for building a DOS image, like this  
-one:  
-  
-----  
-  
-showlog  
-filter -"lanman.dos/lmuser.ini"  
-filter -"temp/*"  
-filter -"*.swp"  
-fullzip "c:/" "L:/tftpboot/dos.imz"  
-  
-----  
-  
-  
-  
-Now go back to your client, mount the admin volume on drive  
-L:, go to your utils directory and type the following command:  
-  
-mrzip -b zipdos  
-  
-  
-  
-One minute later, you will have a new file in the server  
-/tftpboot subdirectory called dos.imz, which is a  
-compressed image of your hard disk. Copy the following  
-batch file to /tftpboot/dos.bpb:  
-  
-----  
-  
-hidelog  
-setpartitions "bigdos:1024"  
-setbootpart 1  
-fullunzip "dos.imz" 1  
-hidebootprom  
-hdboot :1  
-  
-----  
-  
-  
-  
-Your remote-boot DOS configuration is ready ! You can now either  
-set the BOOTP-option-155 to "dos", or type include "dos.bpb"  
-from within !BpBatch to test it.  
-  
-  
-  
-  
-!Adapting the configuration for other machines  
-  
-  
-If you want to customize some settings according to the machine,  
-typically the IP settings since Micro$oft DHCP is buggy,  
-you can setup !BpBatch to change some files before booting.  
-Firsti go to the lanman.dos directory and do  
-  
-copy *.ini *.ref  
-  
-Then edit the .ref files and replace all fixed parameters with  
-BOOTP variable names as in the following examples:  
-  
-computername = ${BOOTP-Host-Name}  
-ipaddress0 = ${MS-IPAddress}  
-subnetmask0 = ${MS-IPSubnet}  
-defaultgateway = ${MS-IPRouter}  
-  
-Then rebuild the disk image as previously.  
-Note that for IP parameters, we do not use the BOOTP variables directly  
-because !LanManager needs then as space-separated numbers instead of  
-dot-separated numbers. Change dos.bpb to the following:  
-  
-----  
-  
-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  
-  
-----  
-  
-If you prefer, you can also put the .ref files in the server  
-/tftpboot directory instead of in the disk image.  
-  
-  
-We like to be able to easily change the computers configuration  
-without rebuilding the image. To do that, copy your autoexec.bat  
-and config.sys as autoexec.ref and config.ref to the  
-server /tftpboot  
-and add the following two lines to the batch file above:  
-  
-patch "autoexec.ref" "{:1}autoexec.bat"  
-patch "config.ref" "{:1}config.sys"  
-  
-You can then freely change the files and even customize them  
-with machine-dependant values obtained from BOOTP.  
-  
-  
-After making any change to the client machine configuration,  
-do not forget to rebuild the disk image using mrzip  
-if you want to preserve your changes.  
-  
-  
-  
-  
-!System Maintenance and Upgrades  
-  
-  
-If you want later to add new software or change anything else,  
-proceed as follow:  
-  
-  
-*Remote-boot a client computer to get a fresh install  
-*  
-  
-*Make your changes  
-*  
-  
-*Redo the disk image  
-*  
-  
-*Copy the new image in place of the old one on the server  
-*  
-  
-That means, you can upgrade software on your server-based configuration  
-as if it were a purely local install.  
-  
-  
-  
-  
-!!4.6 Setting up Windows 95  
-  
-  
-  
-In previous versions of this document, we used  
-the Microsoft server-based installation of Windows 95, but it  
-was really too much pain and not much worth:  
-  
-  
-*It is very, very bogus  
-*  
-  
-*Many software package do not support it and their install will fail.  
-Among them, Microsoft Internet Explorer, !OnNet 32, Novell's  
-Protected-mode client (which is MUCH more secure than Microsoft  
-Client for Netware).  
-*  
-  
-*It cannot be used with the Microsoft Network client over TCP/IP,  
-since Microsoft provides no real-mode driver for TCP/IP  
-compatibe with Windows 95. That means, it cannot be used  
-with Samba  
-*  
-  
-*It makes software upgrades almost impossible since every client  
-turned on will lock many DLLs on the server, and thus produce  
-''sharing violations'' if you try to upgrade them.  
-*  
-  
-Consequently, we throwed away of this document all the informations  
-and bug-workaround collected during months (you can still find  
-them as a HTML document at  
-http://cuiwww.unige.ch/info/pc/remote-boot/win95old/win95old.html)  
-and turned to our new disk-based remote-boot concept.  
-Basically, the configuration for Windows 95 is now almost as easy  
-the configuration for DOS.  
-  
-  
-  
-  
-!Setting up a Stand-Alone Client  
-  
-  
-Setup a regular Windows 95 client, either starting from scratch  
-as explained in the configuration of a DOS client, starting from  
-the DOS client and installing over the network (that is what we did).  
-You can also start with a preconfigured Windows machine, but you  
-will probably have less knowledge of what stuff is on the hard disk.  
-  
-  
-Proceed as described above for a DOS client. It is usually NOT necessary  
-to use EMM386 with Windows 95.  
-If you are using Windows 95 OSR2 (alias MSWIN 4.1, alias Windows 95  
-service pack 1, alias Windows 95 with Internet Explorer), you should  
-add the following line in the [[Options ] section of  
-MSDOS.SYS (yes, it is a text file):  
-  
-----  
-  
-AUTOSCAN=  
-  
-----  
-  
-This will let Windows know that you do not want !ScanDisk to be runned  
-automatically at boot time.  
-  
-  
-If you want to reduce network and server load (which will improve your system  
-performances) while keeping all softwares on the server, you should  
-consider installing the excellent Shared LAN Cache, from Measurement  
-Techniques, Inc (see  
-http://www.lancache.com).  
-This software runs on each client computer, and caches to the local  
-hard disk every data obtained from the network. Even MS-Office starts  
-much faster the second time you run it... You need one license  
-per client computer, but  
-it is not very expensive, and the firm make special prices for universities  
-and colleges. The best thing to do is to go to their Web site and  
-download the free evaluation copy.  
-  
-  
-  
-  
-!Building the Disk Image  
-  
-  
-Your !MrZip script will be named zipwin95.mrz and contain:  
-  
-----  
-  
-showlog  
-filter -"temp/*"  
-filter -"*.swp"  
-fullzip "c:/" "L:/tftpboot/win95.imz"  
-  
-----  
-  
-  
-  
-To build the image, mount the admin volume on drive  
-L:, go to your utils directory and type the following command:  
-  
-mrzip -b zipwin95  
-  
-  
-  
-A few minutes later, you will have a new file if the server  
-/tftpboot subdirectory called win95.imz, which is a  
-compressed image of your hard disk. If your compressed image was bigger  
-than 87 MB, it has probably been splitted in two or more fragments.  
-These fragments will automatically loaded one after the other when  
-needed. Note that an image bigger than 87 MB will usually take  
-More than one minute to uncompress and may irritate your users.  
-Our Windows 95 image is only 70 MB big, because most software (except  
-Office and Explorer) completely reside on the server. Only 45 seconds  
-are needed to uncompress the image and restore the full disk.  
-  
-  
-Copy the following batch file to /tftpboot/win95.bpb:  
-  
-----  
-  
-hidelog  
-setpartitions "bigdos:1024"  
-setbootpart 1  
-fullunzip "win95.imz" 1  
-hidebootprom  
-hdboot :1  
-  
-----  
-  
-  
-  
-Your remote-boot Windows 95 configuration is ready ! You can now either  
-set the BOOTP-option-155 to "win95", or type include "win95.bpb"  
-from within !BpBatch to test it.  
-  
-  
-  
-  
-!Adapting the configuration for other Machines  
-  
-  
-The big difference between Windows 3.1 and Windows 95 is that the  
-later includes code for Plug-and-play , ie. automatic detection  
-of your hardware. This not a bad thing in itself, but the trouble is  
-that it is often too sensible, and that it sometimes fails.  
-  
-  
-If you try to start another client with exactly the same boot image,  
-you will probably get several messages during startup telling that  
-Windows has detected new hardware: a new sound card, a new hard-disk,  
-a new network card, and even a new mouse... There can be two reasons  
-for that:  
-  
-  
-*the devices may not use the same ressources (for instance the mouse  
-is not connected on the same port, or the sound card is not  
-connected in the same slot - yes, that is detected)  
-*  
-  
-*the devices may tell to Windows 95 their personal serial number  
-(for instance, every Windows 95 differenciate every network  
-card on the basis of its world-wide unique ethernet address)  
-*  
-  
-The fact that Windows 95 discover that the hardware has changed may not  
-be a problem if the plug-and-play works as-is, but it become a problem  
-when the plug-and-play does not work. For instance, Windows 95  
-plug-and-play for our Logitech PS2/aux mouse does not work, and result  
-in no mouse at all. To solve such kind of problems, arrange to have  
-all computers as similar as possible, or make different images for  
-different hardware. Later, you will discover that you can simply use  
-the same image and just have several copies of the registery, that  
-you can copy after having restoring the disk image but before booting.  
-  
-  
-The thing you cannot avoid to differ between computers is the network  
-card. PCI cards usually do not mind, but ISA Plug and Play do.  
-Bad luck for us, the plug-and-play code for our SMC EtherEZ card  
-hangs the computer. The only solution is to let Windows 95 believe  
-that it already know the network card, and that it is not necessary  
-to trigger plug-and-play. The trick for doing that is to automatically  
-insert an entry for the network card in Windows 95 registery, before  
-starting it.  
-Note that this trick is not any more needed with most PCI cards.  
-  
-  
-Move the autoexec.bat to the server as described above for DOS.  
-Edit it (on the server) and add the following lines:  
-  
-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 is a standard Windows 95 program that let you browse  
-the registery if you start it from within Windows 95, or do simple  
-operations on the registery if you call it from DOS.  
-Run regedit under Windows 95, search for your network card,  
-usually under  
-  
-HKEY_LOCAL_MACHINE\Enum\ISAPNP  
-  
-and export the branch using the ''File'' menu. This will create a text  
-file, that you should same as patch.ref in the server /tftpboot  
-diretory. Edit this file and find out where the card ethernet address  
-is stored (do that on two different machines and compare the files  
-if you can't find it by yourself). Replace it by a pettern in the  
-form ${MACID}.  
-Then add lines to the win95.bpb script like this:  
-  
-set macid = "$BOOTP-Client-ID"  
-patch "patch.ref" "{:1}temp/patch.reg"  
-  
-(do any necessary string manipulation for setting MACID if it is  
-not exactly the client Ethernet address).  
-That's all, your clients should not any more try to autodect the network  
-card.  
-  
-  
-Once again, this whole trick is not necessary when using PCI network  
-adapters.  
-Incidentally, we can use the same mechanism for automatically  
-configuring the hostname, which Windows 95 does not seem to take  
-into account when configuring through DHCP. We just add the  
-following line to our patch.ref file:  
-  
-----  
-  
-[[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}"  
-  
-----  
-  
-  
-  
-Using this small registery trick, your configuration should normally be  
-portable for all machines with similar configurations. If you cannot avoid  
-that Windows detect some hardware as new on one machine, try to rebuild  
-the disk image from this machine. This will include the registery  
-configuration specific to this machine into the image, and hopefully  
-supress the problem.  
-  
-  
-  
-  
-!System Maintenance and Upgrades  
-  
-  
-If you want later to upgrade software, install bug fixes and  
-security fixes, proceed as follow:  
-  
-  
-*Remote-boot a client computer to get a fresh install  
-*  
-  
-*Make your changes  
-*  
-  
-*Redo the disk image  
-*  
-  
-*Copy the new image in place of the old one on the server  
-*  
-  
-That means, you can upgrade software on your server-based configuration  
-as if it were a purely local install.  
-  
-  
-  
-  
-!!4.7 Setting up Windows NT  
-  
-  
-  
-We do not use Windows NT for remote-boot client computers but we  
-have tested our system to ensure that it work as well. And it works.  
-  
-  
-As our utilities currently have no support for NTFS (we neither  
-have the documentation nor the time to do that, but I would be  
-happy to help anyone who is interested in doing it), you will have to  
-install NT on FAT16 (simply do not convert your partitions to NTFS  
-during the setup).  
-  
-  
-Copy your win95.bpb boot script to winnt.bpb.  
-Change the setpartitions line in winnt.bpb to the following:  
-  
-setpartitions "BIGDOS:512 BIGDOS:512"  
-  
-Then boot Windows 95 using this script, and install  
-your NT client on drive C. Do not worry about the second partition for now.  
-Do not install too much stuff, or you will  
-get a really large and slow-to-uncompress image.  
-Remove Windows 95 from the disk disk C, you do not need it  
-in a Windows NT image (the boot menu is handled by the bootprom,  
-not by NT boot loader).  
-  
-  
-Reboot your computer in without overwriting the hard disk, ie. do not  
-execute the winnt script but just  
-  
-hidebootprom  
-hdboot  
-  
-Your NT station should start-up correctly. Make any  
-necessary customization.  
-  
-  
-  
-  
-!Building the Disk Image  
-  
-  
-The trouble with Windows NT is that direct disk access is prohibed  
-by the kernel. That means, !MrZip will not even be able to read the  
-boot sectors. The best way to do an image is then to boot Windows 95  
-and to run !MrZip from a DOS window. To do that, change the  
-winnt.bpb script so that the Windows 95 image is not restored  
-on the first but on the second partition:  
-  
-----  
-  
-hidelog  
-setpartitions "BIGDOS:512 BIGDOS:512"  
-setbootpart 2  
-fullunzip "win95.imz" 2  
-hidebootprom  
-hdboot :2  
-  
-----  
-  
-(if you have any supplementary patch, change the "{:1}" to  
-"{:2}"). Boot with this script; you should have Windows  
-95 running, but a new drive D: should be available, with  
-Windows NT inside.  
-  
-  
-Make your disk image as usual (but on D:, of course), and  
-save it as winnt.imz on the server /tftpboot directory.  
-Edit one last time the winnt.bpb script like this:  
-  
-----  
-  
-hidelog  
-setpartitions "BIGDOS:512 BIGDOS:512"  
-setbootpart 1  
-fullunzip "winnt.imz" 1  
-clean 2  
-#fullunzip "win95.imz" 2  
-hidebootprom  
-hdboot :1  
-  
-----  
-  
-Your Windows NT remote-boot configuration is ready. Of course, if you do  
-not like to have two partitions, you can setup a single partition  
-instead. But when you have to rebuild the image, you will have to setup  
-the second partition again for booting Windows 95.  
-  
-  
-  
-  
-!System Maintenance and Upgrades  
-  
-  
-If you want later to upgrade software, install bug fixes and  
-security fixes, proceed as follow:  
-  
-  
-*Remote-boot a client computer to get a fresh install  
-*  
-  
-*Make your changes  
-*  
-  
-*Edit winnt.bpb: comment the clean and winnt fullunzip,  
-uncomment win95 fullunzip  
-*  
-  
-*Redo the disk image  
-*  
-  
-*Copy the new image in place of the old one on the server  
-*  
-  
-That's all, folks !  
-  
-  
-  
-  
-!!4.8 Troubleshooting (FAQ)  
-  
-  
-  
-This section lists most frequently encountered problems.  
-  
-; __The image download never ends__:  
-  
-You are probably using a standard TFTP server, and it cannot handle more  
-than 65535 packets of 512 bytes (or even 32767 packets for the Solaris  
-server). That is, your image must be fragmented in pieces of no more  
-than 30 MB (or 15 MB for Solaris). See under ''!CopyArchive'' for  
-instructions on fragmenting an existing image. But you should seriously  
-thing about using !InCom's extended TFTP server, as it is much more  
-efficient (it uses packets of 1408 bytes instead of 512 bytes).  
-; __The archive decompression fails immediately__:  
-  
-There are three possibilities. Either the image is really corrupted on the  
-server (try use !MrZip to see if it is the case), or the file transfer  
-has failed because of TFTP timeout, or because of incompatible protocol.  
-  
-  
-TFTP timeout occurs when the network  
-is too heavily loaded (for instance if you try to download a huge image  
-with more than four clients at a time). In this case, !BpBatch  
-does not retry indefinitely because it would not help. Shut down  
-a few computers and retry with no more than four computers (or maybe  
-even three).  
-If you often need to download images for a lot of computers, you can  
-try our special Broadcast TFTP server (see the section dedicated to it).  
-  
-  
-Incompatible protocol is caused by using a standard TFTP server  
-(typically the one built-in in your UNIX server) while asking  
-!BpBatch to work with enhanced TFTP. If you use a standard TFTP  
-server, __you should remove the .P extension__ (see the explanation  
-in the next question).  
-  
-  
-  
-; __The computer hangs instead of downloading/unzipping (1)__:  
-  
-If you are using Incom's TFTP server, try to add -s 1408 59 to the command  
-line. If you are not using an enhanced TFTP server, remove the .P  
-extension from !BpBatch filename on the server and in bootptab.  
-  
-  
-Detailed explanation :  
-this problem occurs if you did not setup an extended TFTP server but  
-you used bpbatch.P as the bootfilename DHCP/BOOTP tag. !BpBatch will  
-indeed try to connect to an extended TFTP server when the bootfilename  
-ends with  
-a .P extension. To solve this problem, you can either remove the .P  
-extension at the end of the bootfilename (it will tell !BpBatch to use standard  
-TFTP) or install an extended TFTP server.  
-The only supported extended TFTP server today is the  
-one provided by Incom. You can find compiled binaries on their web site, or  
-on our distribution directory. For Incom's TFTP server to properly work with  
-the extended TFTP feature, you must add -s 1408 59 to the command line.  
-; __The computer hangs instead of downloading/unzipping (2)__:  
-  
-May be your computer has a bad VESA support. Try giving the -v  
-command-line argument or setting the VESA variable to "OFF".  
-; __VESA scrolling is broken__:  
-  
-We use a VESA 1.1 function for scrolling. If your video adapter does not  
-support VESA 1.1, forget it. If the scrolling works for one page, but  
-then produces a strange strippled pattern, do not worry. This is a known  
-bug, I will fix it as soon as I have time for it (VESA scrolling is not  
-really essential...)  
-; __There is a corrupted file in the cache__:  
-  
-When a file in the cache is corrupted by an external program,  
-it is automatically removed from the cache. When a file in the cache  
-is not fully written (because the computer is turned off during the  
-file transfer), it is also automatically removed. But if the server  
-transmits a corrupted file or if the transfer aborts from the server  
-side, it is possible that this file stays in the cache. You can clean-up  
-the cache simply by holding both shift down while !BpBatch access  
-it for the first time. Alternatively, you can evaluate clean -1  
-in interactive mode.  
-; __The EXIT command does not work in a batch file__:  
-  
-This is not a bug. Exit is not a command.  
-There is no exit or quit command because it does not make any sense  
-to exit from a boot script without booting. And !MrBatch is  
-really the same program as !BpBatch.  
-What you can do instead is calling !HdBoot. This makes sense, and the  
-DOS version will cleanly exit instead of rebooting.  
-Note that you can exit from the DOS version at any time by  
-pressing Ctrl-Break. This will restore all hooked interrupts  
-before leaving.  
-; __The Print command does not print__:  
-  
-If you try to print something and immediately enter interactive mode,  
-you may not see your text. This is because your text was written  
-on the ''runtime'' screen and the Interact command has  
-switched the display to the ''Log'' screen. Just put a !GetKey  
-after the print commands and you will see the text output.  
-; __!MrZip says Malloc failed__:  
-  
-!MrZip needs a lot of conventional memory to run.  
-If you encounter this problem, first ensure that you have unloaded  
-the bootprom either using !HideBootprom or using !InCom's bputil.  
-If you run !MrZip from  
-bare MS-DOS (not within Windows 95 DOS box), you should use EMM386  
-to load the network drivers high in order to get as much conventional  
-memory as possible. From a Windows 95 DOS box, there is usually no  
-problem (as long as you have not left your old 16-bit stuff in  
-your autoexec.bat when you installed Windows 95).  
-; __!MrZip aborts while reading directories__:  
-  
-This bug has already been fixed once. Get the latest release of  
-!MrZip. If the problem persists,  
-try to build your image with Trace set to "ON" (and usually  
-!PauseLog set to "OFF"); this will let you discover which  
-file causes the problem. Send a detailled bug report.  
-; __!MrZip cannot access some file__:  
-  
-!MrZip is probably trying to read a locked, open or special file,  
-such as Windows swap  
-file. Such files should usually not be included in  
-the image and should be filtered out (using the filter command).  
-It is also possible that the operating system is playing you a trick.  
-If !MrZip does not tell you what file causes the problem,  
-try to build your image with Trace set to "ON" (and usually  
-!PauseLog set to "OFF").  
-You can also try to use direct  
-disk access (that is, do not refer the source partition as  
-"C:" or "/" but as "{:1}" or  
-whatever partition it is). Using  
-direct disk access is usually slower because we have less buffers than  
-the operating system, but it may be sometimes more reliable.  
-; __Disk images are always reloaded from the server__:  
-  
-Disk images are stored in the special cache area and should not be  
-reloaded if they have not changed on the server. However, as the cache  
-area always starts after the last used partition, changing the total  
-size of partitions will move the location of the cache and thus destroy  
-its content. Another possible reason for a file disappearing from the  
-cache is that the previous file has grown more than one-and-an-half  
-times its initial size. The file would then have been overwritten and  
-need to be downloaded once again. This should almost never occurs.  
-A third possible reason is a too small cache area. If the free space  
-left outside the partitions is less than one-and-an-half times the sum  
-of all compressed image sizes, only the most recently used images will  
-be present in the cache and the other will have to be reloaded on demand.  
-; __Red Hat Linux 5.1 does not boot properly__:  
-  
-This distribution assumes Linux was booted using lilo and checks  
-for the BOOT_IMAGE command line argument (in  
-/etc/rc.d/rc.sysinit). Simply add it in the linuxboot  
-call, or change your rc.sysinit.  
-; __The broadcast TFTP ramdisk hangs (''Got in bound state'')__:  
-  
-Linux dhcp client is a program that dynamically changes the  
-IP address of the client according to DHCP offers. If the address  
-is offered forever (infinite lease time), the DHCP client just  
-set the address and returns (this is what we expect).  
-However, if the lease time is  
-limited, the DHCP client must remain loaded and ask for new  
-addresses every few minutes. And if the  
-DHCP client does not return, !MrBatch will never be loaded...  
-The solution is to give an infinite lease time (sometimes  
-encoded as -1).  
-; __File access hangs under !BpBatch, but not under !MrBatch__:  
-  
-This problem occured on an AMI BIOS dated 94/07/25. We investigated  
-a little bit, and found no solution. It seems that this problem is  
-due to a bug in this BIOS (some register or memory location must  
-be destroyed).  
-; __Unzip of a fragmented archive fails (Malloc failed)__:  
-  
-This problem was introduced with PXE compatibility, but has now been  
-fixed. Please get the latest version.  
-; __!MrBatch and !MrZip complain about the terminal under !RedHat 5.x__:  
-  
-This problem has been fixed in the 9th of August version of !MrBatch/!MrZip.  
-There was a problem with a new version of ncurses which has been released  
-with !RedHat 5.1.  
-; __"libncurses.so.3.: cannot open shared object file" under Linux__:  
-  
-!MrZip has been linked to the version 3.0 of libncurses. You can use other  
-versions of libncurses only if they are newer than version 3.. To use a  
-newer libncurses, all you have to do is to create a soft link from  
-libncurses.so.3.0 to your libncurses.so.xx file.  
-With !RedHat 5.1, you can use the following command :  
-cd /usr/lib ; ln -s libncurses.4.2 libncurses.3.  
-You can also download a version recent version of mrzip/mrbatch. Starting  
-from the 10/25/98, mrbatch is now compiled under !RedHat 5.1.  
-; __!MrBatch and !MrZip do not start under Linux (file not found)__:  
-  
-This problem is the reverse of the previous one. Now that the distribution  
-is libc6 ready, it cannot be used any more with libc5. If you encounter  
-this problem, simply upgrade your Linux box (Well, if we hear too  
-much complaints, we might try to keep two distributions...).  
-; __I can not access other mode than the default 800x600 VESA mode__:  
-  
-You should first display the contents of the VESA-Modes variable, to  
-see if your hardware support the mode you would like to use.  
-Then, try one of the two ways to select a special VESA mode :  
-  
-  
-*!InitGraph "mode": Try !InitGraph "1024x768", and then run the  
-graphical primitive you are interested in (e.g !DrawGif).  
-*  
-  
-*VESA-Modes: The first field of the VESA-Modes variable is  
-the name of the default mode. If you change the VESA-Modes variable, all  
-graphical primitive will use the mode you specified.  
-*  
-  
-; __!BpBatch prints a "Malloc failed" message when restoring multiple fragments images__:  
-  
-We corrected a bug in the memory allocation functions of !BpBatch. You should make sure that you have a version of !BpBatch which has been released after september the 22nd 1998.  
-; __Fullunzip using the Linux version of !MrBatch always fails__:  
-  
-We corrected this problem in the 09/22/1998 release.  
-; __Scandisk says my disk is corrupted__:  
-  
-The 10/25/98 release did correct a problem with large images. Try to download a recent version of !BpBatch.  
-; __My !RedHat boot floppydisk does not work with !FloppyBoot__:  
-  
-This bug has been corrected in the 10/25/98 release.  
-; __My FAT32 disk image does not boot properly__:  
-  
-This bug has been corrected in the 02/09/99 release.  
-  
-  
-  
-  
-----  
-  
-!!5. Remote-Boot Tools Reference Manual  
-  
-  
-This section provides detailled informations on the use of the tools  
-we developped at the CUI, University of Geneva for this remote-boot  
-configuration.  
-  
-  
-  
-  
-!!5.1 !BpBatch, !MrBatch and !MrZip  
-  
-  
-  
-These three names stand for three variants of the same program,  
-with the following characteristics:  
-  
-  
-*!BpBatch is a special program that can be started from the  
-!BootProm before the operating system is loaded. It is made  
-of two parts: bpbatch.P, the dynamic loader, and  
-bpbatch.ovl, the program itself. !BpBatch has  
-full disk I/O capabilities through our own implementation  
-of FAT16, FAT32 and Ext2fs, as well as remote network I/O  
-capabilities through the !BootProm TFTP API.  
-!BpBatch was compiled under DOS using  
-Borland C 5.0 and Turbo Assembler 3.2.  
-*  
-  
-*!MrBatch is the DOS/Linux version of !BpBatch.  
-All commands recognized by !BpBatch are recognized by  
-!MrBatch and vice versa. This is very usefull if you  
-want to test your batch scripts from a DOS/Linux session.  
-Under DOS, !MrBatch emulates remote I/O by OS-based file  
-access if the bootprom is not available. Under Linux,  
-the bootprom cannot be seen anymore but !MrBatch  
-can emulate it using Linux IP support, or use OS-based file  
-access.  
-!MrBatch was compiled under Linux using GCC 2.7.2.1  
-and under DOS using Borland C 5.0 and Turbo Assembler 3.2.  
-*  
-  
-*!MrZip is an interpreter that recognizes a superset of  
-!MrBatch language, and that serves to build disk images.  
-In !MrZip, the limited remote file I/O is replaced by a  
-full-featured OS-based file access. !MrZip does not  
-include VESA support.  
-!MrZip was compiled under Linux using GCC 2.7.2.1  
-and under DOS using Borland C 5.0 and Turbo Assembler 3.2.  
-*  
-  
-  
-  
-  
-  
-!Command Line Arguments  
-  
-  
-All programs accept the same syntax of arguments. !MrBatch and  
-!MrZip take them from the command line, while !BpBatch  
-look for them in the BOOTP option 155 (decimal). Here is the  
-syntax of the arguments:  
-  
-[[-x] [[-l] [[-b] [[-v] [[-w] [[-i] [[script-basename]  
-  
-where:  
-  
-  
-*-x disable the use of extended memory  
-*  
-  
-*-l disable the use of ISO-latin-8859-1 as default character  
-set  
-*  
-  
-*-b cancel the bootprom detection (which cause a floppy  
-seek under DOS)  
-*  
-  
-*-v cancel the VESA detection (which cause a switch to full  
-screen under Windows 95)  
-*  
-  
-*-w enable direct disk write access (disabled by default  
-under DOS and Linux)  
-*  
-  
-*-i enable interactive mode even if a script name is provided  
-*  
-  
-The script-basename is optional. If provided, !MrBatch and  
-!BpBatch load the file with the .bpb extension, and !MrZip  
-loads the file with the .mrz extension. If not provided,  
-!MrBatch and !MrZip run in interactive mode while !BpBatch  
-loads the file with the same basename as the BOOTP Boot file and  
-a .bpb extension.  
-  
-  
-  
-  
-!Syntax rules  
-  
-  
-The following rules apply when !BpBatch parses an input line.  
-  
-  
-*Commands are parsed line by line. Lines are separated by CR and/or LF.  
-*  
-  
-*The maximal line length is currently 255 characters.  
-*  
-  
-*Keywords and variable names are case-insensitive.  
-*  
-  
-*" is interpreted as the special string delimiter  
-*  
-  
-*When ${variable} or $variable is encountred, it is substituted by  
-the value  
-of the variable, or by an empty string if the variable is undefined.  
-The substitution also occurs within a string. Moreover, the resulting  
-substituted value must be explicitely enclosed between double quotes  
-if used as a string value (ie. one should merely speak of macro expansion  
-than of a variables).  
-*  
-  
-*  
-  
-  
-**\a is substituted by the audible-bell character (ASCII 7)  
-**  
-  
-**\b is substituted by the backspace character (ASCII 8)  
-**  
-  
-**\n is substituted by the newline character (ASCII 10)  
-**  
-  
-**\r is substituted by the return character (ASCII 13)  
-**  
-  
-**\t is substituted by the tabulation character (ASCII 9)  
-**  
-  
-**\v is substituted by the vertical-tab character (ASCII ...)  
-**  
-  
-**\nnn where n is a 3-digit octal number between 000 and 377  
-is substituted by the character with ascii code specified  
-**  
-  
-**\X where X is any other character not listed above  
-is substituted by X itself. In particular,  
-  
-  
-***\" is substituted by a regular double-quote (not a string-delimiter)  
-***  
-  
-***\$ is substituted by a regular dollar sign (not variable substitution)  
-***  
-  
-***\\ is substituted by a regular backslash (not a special character)  
-***  
-  
-  
-**  
-  
-  
-*  
-  
-*The character "end of string" (ASCII code ) CANNOT be used anywhere  
-as it is used internally as end-of-string delimiter  
-*  
-  
-*The character "floating diaeresis" (ASCII code dec 249, hex F9,  
-octal 371)  
-CANNOT be used in any string as it is used internally as string delimiter  
-in the input parsing routine.  
-*  
-  
-*The character "block space" (ASCII code dec 255, hex FF, octal 377)  
-CANNOT be used in any variable value as it is used internally as  
-variable delimiter.  
-*  
-  
-  
-  
-Empty lines are ignored.  
-Lines starting with a sharp (#) are treated as comments and are  
-not interpreted.  
-Lines starting with a column (:) are treated as labels and are  
-not interpreted.  
-  
-  
-  
-  
-; __String expressions__:  
-  
-Strings are delimited by opening and closing double-quotes:  
-  
-"Hello world"  
-  
-To include double-quotes within a string, quote them using a backslash:  
-  
-"I said: \"Hello world\""  
-  
-Strings can be postfixed with a few operators.  
-  
-  
-*The character substitution operator:  
-  
-"Hello world"/o=u/ == "Hellu wurld"  
-"198.76.54.32"/.= / == "198 76 54 32"  
-  
-  
-*  
-  
-*The word selection operator (zero-based):  
-  
-"Hello world"{} == "Hello"  
-"198 76 54 32"{1-3} == "76 54 32"  
-  
-  
-*  
-  
-*The substring selection operator (zero-based):  
-  
-"Hello world"[[4] == "o"  
-"Hello world"[[4-7] == "o wo"  
-  
-  
-*  
-  
-Operators can be chained by postfixing one after the other.  
-For informations about the string length and word count operators,  
-see under "Numerical expressions".  
-  
-  
-  
-; __Numerical expressions__:  
-  
-Numerical expressions work on 32-bits integer numbers  
-(from -2,147,483,646 to 2,147,483,647). Hexadecimal octal and  
-binary numbers are not understood.  
-Whenever a numerical expression is expected, the following  
-are recognized:  
-  
-  
-*A positive or negative integer number  
-*  
-  
-*An expression in the form (''expr1 op expr2'')  
-where ''op'' can be  
-either +, -, * (multiply), / (divide) or % (modulo)  
-and expr is a numerical expression.  
-Note that EACH operation MUST be enclosed between parenthesis :  
-  
-((3 * 5)+2) == 17  
-  
-  
-*  
-  
-*The string-length operator (@), followed by a string :  
-  
-@"Hello world" == 11  
-  
-  
-*  
-  
-*The word-count operator (#) followed by a string :  
-  
-#"Hello world" == 2  
-  
-  
-*  
-  
-  
-  
-  
-; __Durations__:  
-  
-A few commands expect durations as arguments. Durations are measured  
-in seconds, with a precision of up to a tenth of second:  
-  
-Delay 3 waits for 3 seconds  
-Delay .3 waits for 3/10 seconds  
-  
-  
-  
-  
-; __Colors__:  
-  
-Whenever a color is expected, you can either use the numeric value  
-of the color or its symbolic name (case-insensitive).  
-The following colors are recognized  
-  
-Black  
-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  
-  
-  
-  
-  
-; __File References__:  
-  
-File names are strings. They must therefore always be enclosed between  
-double-quotes. File names are case-sensitive on case-sensitive  
-filesystems, case-insensitive on case-insensitive filesystems.  
-Slash and backslash can be freely used one in place of the other.  
-Do not forget to double backslash since a single backslash  
-is an escape character.  
-  
-  
-There are two kinds of file references:  
-  
-  
-*Direct disk files  
-*  
-  
-*Foreign files  
-*  
-  
-  
-  
-Direct disk files are referenced using the following notation:  
-  
-"{disk:partition}/absolute/filename"  
-  
-The disk number can be omitted and defaults to zero.  
-For instance, "{:1}/usr/bin" points to /usr/bin  
-assuming there is  
-such a directory on the first partition. Direct file I/O is  
-solely based on our own file access routines (we do not use the  
-operating system).  
-  
-  
-There are two ''special'' partitions. Partition zero corresponds to  
-the hard disk master boot record (MBR) and has a pseudo file-system  
-which let you access the boot code. Partition minus-one (-1) corresponds  
-to the cache filesystem (see below).  
-  
-  
-Under !BpBatch/!MrBatch, foreign files correspond to remote files on the  
-TFTP server when the !BootProm is available:  
-  
-"help.bpb" is the file help.bpb in the /tftpboot directory  
-"gifs/!MyImage.gif" is a file in /tftpboot/gifs  
-  
-Other TFTP servers can be referenced :  
-  
-"198.76.54.32:help.bpb"  
-  
-If the other server is behind a gateway :  
-  
-"198.70..1/198.76.54.31:help.bpb"  
-  
-One can also specify a specific port for the TFTP connection :  
-  
-"198.76.54.32@89:getpasswd/smith"  
-  
-There can be only one open remote file at a time.  
-If the !BootProm is not available, remote files are emulated using  
-the operating system file I/O, but the same restriction apply.  
-  
-  
-Under !MrZip, foreign files correspond to files as seen by the operating  
-system. There is no limitation, and foreign files can be used wherever  
-direct disk files can be. Foreign files are usually faster than direct  
-disk files, because the operating system has more buffers. Foreign  
-files can refer to network files if supported by the operating system.  
-  
-"C:\\autoexec.bat"  
-"C:/config.sys"  
-"/mnt/net/usr"  
-  
-  
-  
-  
-  
-  
-!The Cache Filesystem  
-  
-  
-In order to reduce network load and to fasten the boot process,  
-disk archives, linux kernels and possibly other files are cached  
-on the hard disk. This disk cache is located at the end of the  
-hard disk, between the last cylinder allocated in the partition  
-table and the last physical cylinder of the disk (out of any  
-allocated partition). There MUST be room between the last partition  
-and the end of the disk if you want the cache filesystem to work.  
-The cache filesystem MUST work if you want to restore a disk image.  
-  
-  
-The disk cache is organised in a volatile, CRC-validated filesystem :  
-Each directory entry and each 32 KB data block is validated by a  
-32-bits CRC. Whenever a directory entry or a data block unexpectedly  
-changes, the file is automatically removed from the cache and  
-downloaded again upon the next request.  
-  
-  
-You can freely access the cache filesystem from within !BpBatch, !MrBatch  
-and !MrZip using direct disk access on the special partition  
-"{:-1}".  
-To see the content of the cache, just type :  
-  
-logdir "{:-1}"  
-  
-If the cache ever gets corrupted and is not automatically cleaned (which  
-should never occurs), you can either type :  
-  
-clean -1  
-  
-(in interactive mode) or hold both shifts down when !BpBatch access  
-the cache for the first time.  
-  
-  
-  
-  
-!Special variables  
-  
-  
-Some variable are initially set and/or have special meanings.  
-Some of them exist within all programs, other are only available  
-under !MrZip and other are only available when a BOOTP/DHCP  
-reply has been received.  
-  
-  
-  
-  
-; __General variables__:  
-  
-  
-  
-  
-*$Program is set to "!BpBatch" within !BpBatch, "!MrBatch" within  
-!MrBatch and "!MrZip" within !MrZip  
-*  
-  
-*$Basename is set to the basename of the script on which the  
-batch interpreter was started  
-*  
-  
-*$!HelpFile is the name of the file loaded when  
-Help is invoked.  
-Default: "${Basename}.hlp"  
-*  
-  
-*$BOOTP-... are variables set from the BOOTP/DHCP reply (see the  
-paragraph on BOOTP/DHCP variables for more details)  
-*  
-  
-*$DHCP-... are variables set from the DHCP reply (see the  
-paragraph on BOOTP/DHCP variables for more details)  
-*  
-  
-*$Disks is set to the space-separated list of sizes for each disk.  
-That means, #"$Disks" represent the number of disks  
-and "$Disks"{} is the size of the first disk  
-*  
-  
-*$Keypressed is set to the next ready-to-read key available in the  
-keyboard buffer (if available)  
-*  
-  
-*$LBA controls the use of LBA to access disks > 2Gb.  
-Default: "ON"  
-*  
-  
-*$FDA controls the use of fast disk access (write accross cylinders).  
-Default: "ON"  
-*  
-  
-*$VESA controls the use of VESA graphics.  
-Default: "ON" if available  
-*  
-  
-*$VESA-Modes gives the list of all available VESA modes.  
-The first entry of the list is the default mode, which is used  
-when no parameter is given to !InitGraph.  
-Note: if VESA="OFF", this variable is blank  
-*  
-  
-*$APM is set to "ON" if your computer supports Avanced Power  
-Management. If $APM is "ON", you can use the command !PowerOff  
-to turn your computer off.  
-Default: depends on your hardware  
-*  
-  
-*$Trace controls the display of each command before execution. It also controls the display of file names when creating new archives.  
-Default: "OFF"  
-*  
-  
-*$!AutoShowLog controls the automatic switch to the text log whenever  
-the ESC key is pressed.  
-Default: "ON"  
-*  
-  
-*$!PauseLog controls the pause between each page of log when the log  
-is visible.  
-Default: "ON"  
-*  
-  
-*$!CacheDisk is set to the disk used for caching remote files.  
-Default: empty == , the first hard disk  
-*  
-  
-*$!CacheAlways controls the automatic caching of remote files copied,  
-patched or drawn as GIF.  
-Default: "OFF"  
-*  
-  
-*$!CacheNever prevents any file from being cached.  
-Turn this variable on for diskless Linux boot.  
-Default: "OFF"  
-*  
-  
-*$!CacheReserve controls the preventive allocation  
-of 25 percent more space than necessary in the cache partition,  
-to let the files grow. Turn this variable off if you are short  
-of disk space.  
-Default: "ON"  
-*  
-  
-*$!ExtMemory controls the use of Extended Memory (or XMS).  
-Once deactivated, extended memory cannot be reactivated.  
-Default: "ON" if available  
-*  
-  
-*$!IsoLatin controls the interpretation of upper ASCII codes in  
-included and patched files. The !IsoLatin settings are  
-processed at the time the file is loaded, not at the  
-time the file is processed.  
-Default: "ON"  
-*  
-  
-*$ProgressX and $ProgressY controls the position of the progress  
-window displayed in VESA graphics during archive download  
-and decompression.  
-Default: 200 200  
-*  
-  
-*$EXT2-Backup controls the update of superblock backups in Linux  
-ext2 filesystem. Superblock backups take a few seconds to  
-do and are never used by current kernels (only by e2fsck).  
-*  
-  
-*$Security-Gateway controls the gateway-server used for user  
-authentication. Our special authentication gateway must be running  
-on the target computer.  
-Default: "${BOOTP-Server-IP}@89"  
-(ie. the TFTP server, on port 89)  
-*  
-  
-*$Security-Check contains the answer of the security server for the last  
-check performed, either PASSED or FAILED.  
-Default: "FAILED"  
-*  
-  
-*$Security-Passwd, $!HelpTopic, $!OnExit, $!OnKey-...  
-are used internally.  
-*  
-  
-  
-  
-See also BOOTP variables and !MrZip-specific variables.  
-  
-  
-  
-; __!MrZip-specific variables__:  
-  
-The following variables are only used within !MrZip.  
-  
-  
-*$!TempPath controls the directory where temporary files will be stored.  
-Default: <empty> == current directory  
-*  
-  
-*$!DumpFormat controls the way archives are dumped to the log when requested.  
-It is a string containing  
-  
-  
-**"h"/"H" to display the archive header  
-**  
-  
-**"b"/"B" to summarize/dump boot sectors  
-**  
-  
-**"s"/"S" to display a short/long allocation summary  
-**  
-  
-**"d"/"D" to display a short/long directory listing  
-**  
-  
-**"f"/"F" to summarize/dump files  
-**  
-  
-Default: "hbD"  
-*  
-  
-*$!FragmentSize controls the size of archive pieces.  
-If you do not use !InCom's extended TFTP server, you should  
-set this to "30 MB".  
-Default: "87 MB"  
-*  
-  
-*$!SourceArchive, $!DestArchive, $Filter... are used internally.  
-*  
-  
-  
-  
-  
-; __BOOTP variables__:  
-  
-The following BOOTP-... and DHCP-... variables are recognized, as long  
-as a BOOTP/DHCP reply has been received (TCP/IP Bootprom must be reported  
-as detected):  
-  
-$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  
-  
-  
-  
-Other BOOTP/DHCP parameters can be used under the name  
-  
-$BOOTP-Option-n  
-  
-where n is the decimal representation of the BOOTP option number.  
-  
-  
-Do not mix-up BOOTP-Gateway-IP, which is the gateway to use for TFTP  
-and should be ...0 if the TFTP server is in the same subnet, and  
-BOOTP-Routers, which contains the default IP gateway(s). The  
-TCP/IP Bootprom sometimes seems to set the value of BOOTP-Gateway-IP  
-from the value in BOOTP-Routers, causing each TFTP ack packet to  
-be sent to the router first. To avoid such behaviour, if your TFTP server  
-is in the same subnet as the client, force BOOTP-Gateway-IP to  
-...0 (thanks to Maciek Uhlig for having pointed out this problem).  
-  
-  
-  
-  
-  
-!Monitoring commands  
-  
-  
-This section lists commands for monitoring the system state.  
-Optional arguments are listed between parenthesis (I would have prefered  
-square brackets, but LaTeX do not like them at this place...)  
-  
-; __Interact__:  
-  
-Show the log and turn to interactive mode until QUIT or EXIT is entered.  
-Type !HideLog before quitting if you want to avoid disturbing log messages  
-during batch execution.  
-  
-  
-  
-; __Help (topic)__:  
-  
-Load the on-line help file (bpbatch.hlp) and display the description  
-of the given topic. If no topic is provided, or if the topic is unknown,  
-display the help index.  
-  
-  
-  
-; __Log "text"__:  
-  
-Display the string on the log. No return/linefeed is implicitely added.  
-  
-  
-  
-; __Echo "text"__:  
-  
-Display the string on the log and go to the next line.  
-Equivalent to  
-  
-Log "text\r\n".  
-  
-  
-  
-  
-; __!LogVars ("pattern")__:  
-  
-Log (ie. display on the log) all variables matching the given pattern.  
-The pattern can contain wildcards (? and *).  
-  
-Example: !LogVars "BOOTP-*" list all BootP variables  
-  
-; __!LogDir "path/pattern"__:  
-  
-Log (ie. display on the log) all files from the given path that  
-match the pattern. The pattern can contain wildcards (? and *).  
-  
-Example: !LogDir "/usr/g*p" list files names like g...p  
-  
-; __!LogTree "path"__:  
-  
-Log the directory tree starting with the given path as root.  
-  
-  
-  
-; __!LogFile "filename"__:  
-  
-Log the content of the file. The file must be no more than 64 KB big.  
-  
-  
-  
-; __!ShowLog__:  
-  
-Make the log visible if it was hidden.  
-Automatically performed when ESC is pressed with "$!AutoShowLog" == "ON"  
-and when entering interactive mode.  
-  
-  
-  
-; __!HideLog__:  
-  
-Prevent log messages to appear on the screen. Default state when !BpBatch,  
-!MrBatch and !MrZip are started on a script file.  
-  
-  
-  
-; __!CaptureLog__:  
-  
-Record all log output to a 64 KB buffer until !EndCapture is issued.  
-Wrap around buffer if the log output is more than 64 KB big.  
-This command can be used to create a text file with an arbitrary content.  
-The !EndCapture MUST occurs within the same batch file.  
-  
-  
-  
-; __!EndCapture ("filename")__:  
-  
-End up the capture of the log. If a filename is given, store the  
-captured text to a file. Otherwise, discard it.  
-  
-  
-  
-; __Beep__:  
-  
-Make a sound. This command is equivalent to Echo "\007".  
-  
-  
-  
-  
-  
-!Control commands  
-  
-  
-This section lists commands that control the batch execution.  
-Optional arguments are listed between parenthesis.  
-  
-; __Include "filename"__:  
-  
-Load the given file and start up the parser on it. Go back to  
-the current point when the include file processing is done.  
-The interpretation of characters above ASCII 127 within the  
-include file depends on the value of $!IsoLatin at the time  
-the file is included.  
-  
-  
-  
-; __!OnExit ''command''__:  
-  
-Setup an exit-handler that will automatically be evaluated at the  
-end of current batch file.  
-  
-  
-  
-; __Goto ''label''__:  
-  
-Move the execution cursor to the given label (ie. the line starting with  
-:''label'')  
-  
-  
-  
-; __Eval "command"__:  
-  
-Perform all substitutions on the "command" and run the parser on it.  
-  
-  
-  
-; __If ...__:  
-  
-  
-  
-If (not) <expr1> (==|!=|<|>|>=|<=|=>|=<|<>) <expr2> <command>  
-If (not) (ci) "str1" (==|!=|<|>|>=|<=|=>|=<|<>) "str2" <command>  
-If (not) (ci) "str1" Match-Expr "pattern" <command>  
-If (not) (ci) "str1" Match-Passwd "unix-passwd" <command>  
-If (not) (ci) "str1" in "wordlist" <command>  
-If (not) (ci) "str1" in-file "filename" <command>  
-If (not) exist "filename" <command>  
-If (not) valid <disk>:<partition> <command>  
-  
-  
-  
-These commands execute ''command;'' if the test succeeds.  
-The 1st form compares two numerical expressions.  
-The 2nd form compares two strings, optionally case-insensitive.  
-The 3rd form tests if "str1" matches the given pattern (wildcards allowed).  
-The 4th form tests if the clear password "str1" matches the Unix-crypted  
-password.  
-The 5th form tests if "str1" is included in the word list.  
-The 6th form tests if "str1" is included in the word file.  
-The 7th form tests if the given file exists.  
-The 8th form tests if the given partition is valid (i.e. formatted). This  
-form is only supported by !BpBatch versions after February 1999.  
-  
-  
-  
-; __Set ...__:  
-  
-  
-  
-Set variable = "string-value"  
-Set variable = <expr>  
-  
-  
-  
-Setup a value for the given variable. If the given value is a numerical  
-expresison, it will be implicitely converted to a string.  
-A variable can be used anywhere by refering it as $variable or  
-${variable}.  
-If the resulting reference is to be interpreted as a string, it  
-should be enclosed between double quotes: "$variable" or "${variable}".  
-  
-  
-  
-; __Delay ''duration''__:  
-  
-Waits until the specified duration (expressed in seconds) expired.  
-See also the paragraph on the format of durations.  
-  
-  
-  
-; __!GetTime ''variable'', !GetDate ''variable''__:  
-  
-Get the CMOS time and store it into ''variable''in the form HH:MM:SS.  
-Get the CMOS date and store it into ''variable''in the form YY/MM/DD.  
-This can be used to customize the behavior of your boot scripts  
-depending on the time of day or on the date.  
-  
-  
-  
-; __!SetTime "HH:MM:SS", !SetDate "YY/MM/DD"__:  
-  
-Set the computer CMOS time or date to the given value.  
-If you have a security gateway (our special TFTP server) running, you  
-can automatically adjust the CMOS time and date of the client computers  
-at each boot by evaluating the following command:  
-  
-include "$Security-Gateway:gettime"  
-  
-If you want to understand what this command does, just type:  
-  
-logfile "$Security-Gateway:gettime"  
-  
-  
-  
-  
-; __Poweroff__:  
-  
-Turn off the computer.  
-This command only works if the computer is Advanced Power Management (APM)  
-compatible.  
-  
-  
-  
-  
-  
-!Keyboard-related commands  
-  
-  
-This section lists commands that let you monitor the keyboard input.  
-Optional arguments are listed between parenthesis.  
-See also under ''National Language Support''.  
-  
-; __!GetKey (''variable'')__:  
-  
-Indefinitely wait until a key is pressed and store it in the ''variable''.  
-  
-  
-  
-; __!WaitForKey ''duration'' (''command'')__:  
-  
-Wait until a key is pressed for no more than ''duration'' seconds.  
-If no key has been pressed after the given time, evaluate the ''command''.  
-Otherwise, leave the key in the keyboard buffer.  
-See also the paragraph on the format of durations.  
-  
-  
-  
-; __Input (''variable'' (''max-length''))__:  
-  
-Read a return-terminated string from the keyboard and store the result  
-string in ''variable'' (without the terminating return). If ''max-length''  
-is given, do not allow the user to enter more than this number  
-of characters.  
-  
-  
-See also !GetPasswd under ''Security-related commands''.  
-  
-  
-  
-; __!OnKey "c" ''command''__:  
-  
-Setup a key handler that will automatically evaluate the given ''command''  
-when the key "c" is pressed (except is explicitely waited by a !GetChar  
-or an Input command). If the string "default" is used instead of  
-a single character, the command is executed if any other key is pressed.  
-  
-  
-  
-  
-  
-!Text output commands  
-  
-  
-This section lists commands used to perform regular text output.  
-All these commands can be used in graphic mode also, with  
-the same behaviour (except that text mode provides 80x25 characters  
-while graphic mode provides 100x37, because graphic mode  
-characters are of size 8x16).  
-Optional arguments are listed between parenthesis.  
-See also under ''National Language Support''.  
-  
-; __Print ''"text"/expr''__:  
-  
-Print the specified string/expression at current cursor position  
-and using current text attributes, then move the cursor.  
-Add "\r\n" to the end of the string to go to the next line.  
-  
-  
-  
-; __!TextAttr ''fg-color'' ''bg-color''__:  
-  
-Setup the text attributes. One can also put a single numeric value  
-representing both colors and defined as 16*''bg-color''+''fg-color''.  
-  
-  
-If you need more fantasy, you can use !LoadFont. See under  
-''National Language Support''.  
-  
-  
-  
-; __At ''line'',''col'' (''command'')__:  
-  
-Move the cursor position to the specified position and evaluate  
-the command if provided.  
-  
-Example: At 10,20 Print "Gnats and rats !"  
-  
-; __Clear (''color'' (''pattern-char'' (''top'',''left'',''bottom'',''right'')))__:  
-  
-Fill the given text area with the given ''pattern-char'' (either a string  
-or the decimal ascii code). The area defaults to the full screen,  
-the pattern char defaults to the full block (ASCII dec 219) and the  
-color defaults to black (clear screen). Move the cursor to the upper left  
-corner of the cleared area.  
-; __!BpMenu backward compatibility commands__:  
-  
-  
-  
-.ATT (<attribute>)  
-.CLS (<attribute>)  
-.DEF <key> (<timeout_val>)  
-.KEY <key> <filename>  
-.POS ((<x>) <y>)  
-.PWD <key> <cpasswd>  
-.WLN (<text>)  
-.WRT <text>  
-  
-  
-  
-See !InCom's manual for more infos. We wrote some time ago a  
-program program for editing menu files  
-using this syntax, but it is preferable to make your menus using the  
-new explicit syntax.  
-Note that the .PWD command is not implemented because we do not now the  
-password crypting algorithm used by !InCom GmbH.  
-  
-  
-  
-  
-  
-!Graphics output commands  
-  
-  
-This section lists commands used to perform graphic-mode output.  
-For the functions listed in this section, coordinates are given  
-in pixels. You can also use all text output commands (see above)  
-in graphic mode.  
-Optional arguments are listed between parenthesis.  
-  
-  
-Note that the graphic mode is automatically turned on whenever a graphic  
-command is used, unless the variable VESA is set to "OFF".  
-  
-; __!InitGraph ("mode")__:  
-  
-Turn on VESA graphics.  
-The origin is on the upper-left corner of the screen (0 ).  
-VESA graphics may hang some computers under Windows 95. Run !MrBatch  
-with the -v option to avoid such problems.  
-  
-  
-You can request a specific video mode if you use the parameter "mode"  
-This parameter is optional: if you do not specify any value, the video  
-mode will be taken from the first field of the VESA-Modes variable.  
-  
-  
-Valid modes are :  
-  
-  
-*640x480 => 640 by 480 pixels, 256 colors  
-*  
-  
-*800x600 => 800 by 600 pixels, 256 colors (default mode)  
-*  
-  
-*1024x768 => 1024 by 768 pixels, 256 colors  
-*  
-  
-*1280x1024 => 1280 by 1024 pixels, 256 colors  
-*  
-  
-  
-  
-The VESA-Modes variable lists the video modes supported by your hardware.  
-  
-  
-Example: !InitGraph "640x480"  
-  
-  
-  
-; __!CloseGraph__:  
-  
-Close VESA graphic mode and go back to text mode.  
-  
-  
-  
-; __!DrawBar ''x-pos'' ''y-pos'' ''width'' ''height'' ''color''__:  
-  
-VESA graphics. Draw a filled bar of the given size and colors.  
-  
-  
-  
-; __!DrawWindow ''x-pos'' ''y-pos'' ''width'' ''height'' (''bg-color'' (''bar-color'')) ("title" (''title-color''))__:  
-  
-VESA graphics. Draw a window of the given size and colors. The background  
-color defaults to !LightGray and the title-bar color defaults to Blue.  
-If you include a title string and a color, this text will be displayed in  
-the title bar.  
-  
-  
-  
-; __Drawtext ''x-pos'' ''y-pos'' "text" (''fg-color'')__:  
-  
-VESA graphics. Draw the text string at the given position with a  
-transparent background. The color defaults to text foreground color.  
-  
-  
-  
-; __!DrawGif "gif-filename" (''x-pos'' ''y-pos'' (''color-strategy''))__:  
-  
-VESA graphics. Load the given GIF-87a file and draw it on the screen.  
-The file can be interlaced, but must be in GIF-87a (not GIF-89a).  
-The image size should fit in the selected video mode. You cannot load a  
-1024x768 GIF file when you selected a 640x480 mode.  
-The GIF position defaults to the top left corner of the screen (0 ).  
-  
-  
-The ''color-strategy'' defines the allocation of colors in the palette  
-when more than 256 colors are needed (for instance when two 256 colors  
-GIF files are displayed simultaneously):  
-  
-  
-*Best-Colors use best possible colors for the most recent GIF  
-*  
-  
-*Spare-Colors try to avoid allocating colors, change existing colors  
-*  
-  
-*Share-Colors try to avoid allocating colors, use existing colors  
-*  
-  
-*Reuse-Colors allocate no new color, only use existing colors  
-*  
-  
-The default strategy is Best-Colors.  
-  
-  
-  
-  
-  
-!Security-related commands  
-  
-  
-This section lists commands that help you authenticate a user.  
-Optional arguments are listed between parenthesis.  
-  
-  
-Some of these functions cooperate with a ''Security gateway'',  
-that you should first install. See the section on ''Special  
-TFTP servers'' for more infos.  
-  
-; __!GetPasswd (''variable'' (''max-length''))__:  
-  
-Same as Input, but echo stars instead of the typed characters.  
-  
-  
-  
-; __Crypt "text" "salt" ''variable''__:  
-  
-Apply the Unix crypt function to the given 8-chars text and store the  
-resulting crypted string into ''variable''. The "salt" is usually a  
-two-character string that will be found as the first two characters  
-of the crypted string.  
-  
-  
-Note that Unix crypt is a one-way function. It is not possible to  
-decode the crypted string. One can only try to crypt another string  
-with the same salt and compre the resulting crypted string.  
-  
-  
-  
-; __DESCrypt "text" "key" ''variable''__:  
-  
-Crypt the given text using the given 8-chars key and store the result  
-as an hexadecimal string in ''variable''.  
-  
-  
-  
-; __DESDecrypt "hexcode" "key" ''variable''__:  
-  
-Decrypt the given hexadecimal string using the given 8-chars key and  
-store the result in ''variable''.  
-  
-  
-  
-; __MD5 "text" ''variable''__:  
-  
-Compute the MD5 checksum of the given text and store it as an hexadecimal  
-string in ''variable''. Can be used as an alternative to the Unix crypt  
-function to check for passwords bigger than 8 characters.  
-  
-  
-  
-; __!CheckUser "user" "password" "domain"__:  
-  
-Connect to the $Security-Gateway and check if the given user exist  
-in the given radius domain and uses the specified password.  
-If the domain is "Unix", use the Unix user/password definition  
-on the security gateway. For any other domain, use the security  
-gateway domain definition file to determine the real Radius or NT  
-domain to check.  
-  
-  
-Set the value of $Security-Check to "PASSED" or "FAILED".  
-The password do not transit in clear on the network.  
-  
-  
-  
-  
-  
-!Disk-related commands  
-  
-  
-This section lists commands for preparing the hard-disk.  
-Optional arguments are listed between parenthesis.  
-  
-; __!GetPartitions ''variable'' (''disk'')__:  
-  
-Read the partition table(s) for the given disk and store it as a  
-string into the given ''variable''. The result string is a space-separated  
-list of ''Type:Size'', where  
-  
-  
-* ''Type'' is FAT16, EXT, BIGDOS, NTFS, FAT32, FAT32-LBA,  
-BIGDOS-LBA, EXT-LBA, LINUX-SWAP, LINUX-EXT2  
-or the decimal filesystem id for unknown types.  
-*  
-  
-* ''Size'' is the size of the partition in megabytes.  
-*  
-  
-See !SetPartitions for more informations about partitions.  
-  
-  
-  
-; __!SetPartitions "partitions" (''disk'')__:  
-  
-Setup the partition table(s) to the content of the string. The format  
-used is the same that for !GetPartitions. This command also  
-reset all boot flags (hint: use !SetBootPart).  
-  
-  
-The main partition table in the master boot record (MBR)  
-has only four entries. Moreover, DOS and Windows accept  
-only ONE FAT partition (called the Primary partition, C:)  
-in the main partition table. Any supplemental FAT partition  
-should be nested in an extended partition (and is thus  
-called a Logical partition). If we give numbers 1-4 to  
-the partitions described in the MBR partition table  
-and numbers 5-8 to the partitions described in the  
-first extended partition, the definition of two  
-FAT partitions would work by defining partition 1  
-as FAT, partition 2 as EXT and partition 5 as  
-FAT. Partitions 3,4,6,7 and 8 should be marked  
-as UNUSED. The same scheme can be used recursively  
-to define more than two FAT partitions: nesting  
-another extended partition in partition 6 and  
-adding a logical FAT partition in partition 9.  
-  
-  
-In the most strict interpretation of DOS specifications,  
-that means that entries 3 and 4 of the partition tables  
-are never used. In practice, some versions of DOS and  
-some other OS are able to use more than two partitions  
-per partition table, but there is no clear rule.  
-On this side, !BpBatch is rather flexible in its  
-interpretation of partition tables, it can often  
-understands things that OSes cannot.  
-  
-  
-One universal rule is that there should never be more  
-than one extended partition per partition table, otherwise  
-the partition numbering scheme breaks down.  
-  
-  
-If you want to try funny configurations, make your own  
-experiments, but don't complain if the OS does not  
-recognize your partitions. The only way it is guarantee  
-to work is to use the primary partition to store the  
-OS boot partition, and to nest all other partitions,  
-one at a time, in extended partitions.  
-  
-  
-Example of extended partitions :  
-  
-!SetPartitions "BIGDOS:100 EXT:400 EMPTY EMPTY BIGDOS:400"  
-  
-  
-  
-  
-; __!GetBootPart ''variable'' (''disk'')__:  
-  
-Get the partition number with the boot flag turned on (DOS says:  
-the activated primary partition) and store it to the ''variable''.  
-The first partition is numbered 1.  
-If no partitions has the boot flag turned on, answers zero.  
-  
-  
-  
-; __!SetBootPart ''partition'' (''disk'')__:  
-  
-Set the boot flag to the given partition. The boot flag let the  
-master boot record (MBR) choose which partition to boot on.  
-The first partition is numbered 1.  
-  
-  
-  
-; __Blank ''partition'' (''disk'')__:  
-  
-Fill the given partitions with zeroes. Can take quite a lot of time  
-for big partitions. Do not format the partition for any operating  
-system. See also Clean.  
-  
-  
-  
-; __Clean ''partitions'' (''disk'') ("label")__:  
-  
-Fast-format the given partition(s) according to the type declared  
-in the partition table. If a label is given and the filesystem  
-supports it, setup the partition label. For a paranoiac full format,  
-call Blank on the partition first.  
-  
-  
-Clean is supported for (FAT16) BIGDOS, FAT32, EXT, LINUX-EXT2 and LINUX-SWAP  
-partitions. To clean the master boot record (MBR), use Clean .  
-  
-  
-Clean should be used on data partitions and on MBR/EXT partitions.  
-It is totally useless to clean a partition before unzipping a filesystem  
-on it using !FullUnzip.  
-  
-  
-  
-; __!FullUnzip "full-archive" ''partition'' (''disk'')__:  
-  
-Decompress a full disk archive to the given partition, overwriting  
-any existing file (clean-up on the fly).  
-  
-  
-!FullUnzip is supported for (FAT16) BIGDOS, FAT32 and LINUX-EXT2.  
-  
-  
-This commands turn on VESA graphics to display a progress banner,  
-unless VESA has been turned OFF.  
-  
-  
-  
-; __!IncrUnzip "incr-archive" "destpath"__:  
-  
-Decompress an incremental disk archive to the given path. Files  
-in the archive replace those with the same name on the target path,  
-but other files are not deleted.  
-  
-  
-!IncrUnzip is supported for (FAT16) BIGDOS, FAT32 and LINUX-EXT2.  
-This command is far less efficient than !FullUnzip since the existing  
-filesystem structure must be preserved. However, it avoids  
-multiplying the number of different disk images by storing  
-the differences only.  
-  
-  
-  
-; __!FileUnzip "source-filename" "dest-filename"__:  
-  
-Uncompress a file previously compressed with !MrZip !FileZip command.  
-The file is validated by a 32-bits CRC.  
-  
-  
-  
-; __Copy "source-filename" "dest-filename"__:  
-  
-Copy the source file to the destinaton file, byte-to-byte.  
-Can be used after a !FullUnzip for instance to update configuration  
-files from the server without rebuilding the image.  
-Better to use !FileUnzip for big and easy-to-compress files.  
-  
-  
-  
-; __Append "src-filename-1" "src-filename-2" "dest-filename"__:  
-  
-Copy the first, then the second file to the destination file, byte-to-byte.  
-Can be used on arbitrary large files.  
-The destination file cannot be one of the two source files.  
-  
-  
-  
-; __Patch "source-filename" "dest-filename" ("prefix" ("postfix"))__:  
-  
-Read the source file and perform variable substitution before writing  
-it to the destination file. The interpretation of characters above ASCII  
-127 depends on the value of $!IsoLatin.  
-  
-  
-By default, variables are recognized when prefixed by "${" and  
-postfixed by "}". This can be changed to any other non-empty string.  
-remember that if you want to use a dollar sign within the prefix or  
-suffix, you must escape it or it will get macro-evaluated. For instance,  
-if you want to explicitely use the default prefix and postfix, use:  
-  
-Patch "source-file" "dest-file" "\${" "}"  
-  
-  
-  
-  
-; __!MkDir "path"__:  
-  
-Recursively create directories from the root to the given full path.  
-If the path already exists, this command has no effect.  
-  
-  
-  
-; __Delete "filename", Del "filaname"__:  
-  
-Remove the given file. The file must exist.  
-  
-  
-  
-; __!DelTree "path"__:  
-  
-Recursively remove all files and directories under the given path,  
-and remove the directory itself.  
-  
-  
-  
-  
-  
-!Boot commands  
-  
-  
-This section lists commands for continuing the boot process.  
-Optional arguments are listed between parenthesis.  
-  
-; __!HideBootProm__:  
-  
-Restore the memory and the interrupt vectors allocated by the bootprom.  
-All attempts to make TFTP transfers will fail after calling this command.  
-It is usually a good idea to call this command before !HdBoot, or you  
-might run short of memory under DOS/Windows. This command is  
-implicitely called by !FloppyBoot.  
-  
-  
-Note that although this function restore all vectors "officially"  
-rerouted by the !BootProm, it does not seems to restore everything.  
-But it works well enough for DOS and Windows.  
-  
-  
-  
-; __!LoadRamDisk "ramdisk-filename"__:  
-  
-Load a floppy disk image into the extended memory and redirect  
-the BIOS Disk Services to make floppy disk calls use this image  
-instead. This command implicitely calls !HideBootProm. Call  
-!FloppyBoot to boot on the ramdisk you just loaded.  
-  
-  
-This kind of ramdisk may not be as robust as what you get when  
-you use the TFTPBoot command. The only advantage is that it only  
-steals a few hundred bytes of conventional memory instead of the  
->64 KB reserved by the TCP/IP BootPROM. Warning, nothing secures the  
-extended memory in which the ramdisk resides.  
-There is no way to uninstall such a ramdisk.  
-  
-  
-  
-; __LoadZRamDisk "ramdisk-filename"__:  
-  
-Do the same as !LoadRamDisk, but for an image that has been  
-compressed using !MrZip !FileZip command. Compressed ramdisks are  
-protected against data corruption (and uncomplete download) by a  
-byte count and a 32-bits CRC.  
-  
-  
-  
-; __TFTPBoot "remote-bootfile"__:  
-  
-Chain to another boot file (for instance a floppy image made with  
-!InCom's !BpShell program). See the file referencing conventions  
-for accessing a file on another TFTP server.  
-  
-  
-  
-; __!FloppyBoot__:  
-  
-Hide the Boot ROM, load the floppy disk boot sector and boot on it.  
-  
-  
-  
-; __!HdBoot (''disk'')(:''partition'')__:  
-  
-Load the given boot sector and boot from it. The disk default to zero,  
-the first hard disk, and the partition defaults to zero, ie. the  
-master boot record. You can boot from any partition, but be warned that  
-Windows 95 may not let you boot a partition that has not been  
-set as the boot partition (hint: use !SetBootPart).  
-  
-  
-This command does not implicitely call !HideBootProm, so you might  
-want to call it before.  
-  
-  
-  
-; __!LinuxBoot "kernelfile" ("command-line" ("ramdisk-file"))__:  
-  
-Load the given kernel and ramdisk into the high memory,  
-setup the command line and boot the kernel. It is a good idea  
-to put at least a minimal command line with the location of the  
-root filesystem (like "root=dev/hda1"/). If you are using a linux  
-system that heavily relies on lilo (like !RedHat Linux 5.1),  
-it may be necessary to add to the command line something like  
-BOOT_IMAGE=linux. Note that the kernel  
-can be loaded by TFTP (automatically cached on the hard disk)  
-or directly from the target root partition.  
-  
-  
-This command works for small and big kernels (zImage and bzImage).  
-  
-  
-  
-  
-  
-!National language support  
-  
-  
-This section lists commands related not national language support.  
-Optional arguments are listed between parenthesis.  
-  
-; __!RemapKeys "original-keys" "remapped-keys"__:  
-  
-National keyboard support. Remap given keys to other characters.  
-For instance, to swap the Y and Z keys, use  
-  
-Remapkeys "yzYZ" "zyZY"  
-  
-It is a good idea to use the quoted octal notation when using characters  
-not included in the minimal ASCII character set, in order to avoid a  
-dependency to the iso-latin modal settings.  
-  
-  
-For international keyboards, there are two keys that produce a backslash  
-in non-remapped (US) mode. Each of them can be independantly remapped,  
-thanks to the fact that !BpBatch sees one of them as a key answering  
-ASCII code 252 (octal) or ASCII code 335 (octal) when shifted.  
-  
-  
-If you send me a sample script that does keyboard mapping for  
-your national keyboard, I will make it available under  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/sample-scripts  
-To help you make your own keyboard mapping, I suggest pressing all ''special''  
-keys without remapping the keyboard and writing down the character they produce.  
-These will be the original-keys. The remapped-keys simply are  
-the key you would have liked to see, in the same order. If some keys (either  
-original or remapped) produce characters above ASCII dec 127, use the quoted  
-octal notation. You can easily get the octal code for any given character by  
-looking in the ASCII table of HelpPC for instance (HelpPC is a shareware  
-hypertext on-line help program by David Jurgens).  
-  
-  
-  
-; __!RemapAltkeys "original-keys" "remapped-keys"__:  
-  
-National keyboard support. Remap the given keys when ALT is depressed  
-For instance, to map Alt-2 to the ampersand sign, use  
-  
-!RemapAltKeys "2" "@"  
-  
-Note that dead keys are not supported.  
-  
-  
-  
-; __!LoadCodePage "cpxxx.bin"__:  
-  
-Load and activate the given binary Codepage file.  
-Codepages are used for the translation of Unicode characters  
-(present on VFAT valumes for instance) into 8-bits characters.  
-If you do not have the right Codepage loaded, you will get FAT warnings  
-while accessing the filesystem when special characters are encountred.  
-  
-  
-All binary codepage files are available at  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/codepage.zip  
-  
-  
-The default codepage is 850, a reordered superset of ISO-Latin-1.  
-If you load a more exotic codepage, you should usually turn the variable  
-$!IsoLatin to "off" or you might get meaningless  
-implicit conversions. Moreover, if you want to display exotic characters,  
-you should also load the proper screen font (use "!LoadFont").  
-  
-  
-  
-; __!LoadFont "fontfile"__:  
-  
-Load and activate a VGA/VESA font, both in text and graphic mode.  
-The font file must be a binary file of 16 bztes/characters  
-(8x16 bitmap). This command can be used for National Language Support  
-as well as for Fantasy support.  
-  
-  
-An archive with several fantasy fonts is available at  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/fonts.zip.  
-This archive also contains a program to extract fonts for your codepage  
-from the DOS .CPI file.  
-  
-  
-  
-  
-  
-!Commands specific to !MrZip  
-  
-  
-  
-  
-; __Source...__:  
-  
-  
-  
-Source (i)archive "filename"  
-Source path "path"  
-  
-  
-  
-Set the source for the archive manipulation to the given (incremental)  
-archive file or disk path.  
-  
-  
-  
-; __Dest...__:  
-  
-  
-  
-Dest (i)archive "filename"  
-Dest (i)dump  
-Dest path "path"  
-  
-  
-  
-Set the destination for the archive manipulation to the given (incremental)  
-archive file, dump or disk path. To control the quantity of data  
-displayed during dump, use the $!DumpFormat special variable.  
-  
-  
-  
-; __!FileZip "source-filename" "dest-filename"__:  
-  
-Compress a file for further decompression with !FileUnzip or for  
-using as ZRamDisk. The file is validated by a 32-bits CRC.  
-  
-  
-  
-; __Filter...__:  
-  
-  
-  
-Filter -"pattern"  
-Filter +"pattern"  
-  
-  
-  
-Avoid/allow files and directories matching the given pattern (wildcards  
-allowed) to be included in the archive. The pattern is matched agains the  
-full pathname. By default, all files are included in the image.  
-You only need to explicitely allow files that where cancelled by a filter.  
-Each negative filter has its own positive filter (allowed) sublist.  
-  
-  
-For DOS/Windows images, you will typically use  
-  
-Filter -"*.swp"  
-Filter -"temp/*"  
-  
-and for Unix images, you will typically use  
-  
-Filter -"var/log/*"  
-Filter -"tmp/*"  
-  
-  
-  
-  
-; __!CopyArchive__:  
-  
-Start the archive manipulation operation, according to source, destination  
-and filter settings. Except in a few circumstances, you will probably use  
-the shortcut below instead of explicitely calling !CopyArchive.  
-One circumstance in which you will use !CopyArchive explicitely is  
-when you want to change the fragmentation of an image, as follow:  
-  
-set !FragmentSize="30 MB"  
-Source archive "original.imz"  
-Dest archive "refragmented.imz"  
-!CopyArchive  
-  
-  
-  
-  
-; __!FullZip "path" "full-archive"__:  
-  
-Shortcut for  
-  
-Source path "path"  
-Dest archive "full-archive"  
-!CopyArchive  
-  
-You should usually first setup filters.  
-  
-  
-  
-; __!IncrZip "path" "incr-archive"__:  
-  
-Shortcut for  
-  
-Source path "path"  
-Dest iarchive "incr-archive"  
-!CopyArchive  
-  
-  
-  
-  
-; __!FullDump "full-archive"__:  
-  
-Shortcut for  
-  
-Source archive "full-archive"  
-Dest dump  
-!CopyArchive  
-  
-  
-  
-  
-; __!IncrDump "incr-archive"__:  
-  
-Shortcut for  
-  
-Source iarchive "incr-archive"  
-Dest dump  
-!CopyArchive  
-  
-  
-  
-  
-; __XCopy "srcpath" "dstpath"__:  
-  
-Shortcut for  
-  
-Source path "srcpath"  
-Dest path "dstpath"  
-!CopyArchive  
-  
-  
-  
-  
-  
-  
-!!5.2 !NoBreak.sys  
-  
-  
-  
-Nobreak.sys is a very small (about 350 bytes only) driver that  
-you include at the beginning of your config.sys. Its goal is  
-to secure the boot process, until the user is logged in.  
-DOS provides a setting for this (namely BREAK=OFF), but it is not  
-drastic enough, and has almost no effect in the autoexec.bat.  
-Our driver works by modifying the scan-code of the key  
-pressed when a break is requested, directly at the BIOS level.  
-This way, no program at all can receive a break until break is  
-enabled again.  
-  
-  
-The driver must be loaded from the config.sys (or using the devlod  
-program from ''Undocumented DOS''). Afterwards, break can be  
-enabled by sending Yes to the NOBRK pseudo-device,  
-and disabled again by sending No (in fact, only the first  
-character, Y or N is significant).  
-  
-  
-As this driver relies on the BIOS, it does only work for DOS and Windows 3.1.  
-Windows 95 has its own low-level keyboard handling routines.  
-  
-  
-Assembler source code is  
-available.  
-  
-  
-  
-----  
-  
-!!6. Special TFTP Servers  
-  
-  
-As the only network support available in the TCP/IP BootPROM is TFTP, there  
-is a special interest in enhancing TFTP servers for providing new  
-capabilities.  
-  
-  
-  
-  
-!!6.1 Incom Enhanced TFTP Server  
-  
-  
-  
-!InCom GmbH distributes with the TCP/IP BootPROM an enhanced TFTP server that  
-can send packets of up to 1408 bytes instead of the standard 512 bytes.  
-This is a great enhancement that you should use. This server is available  
-on the TCP/IP Bootprom Utility disk for Solaris, Windows and as Netware NLM.  
-  
-  
-  
-  
-!!6.2 Linux Enhanced TFTP Server  
-  
-  
-  
-We built a modified version of Linux TFTP server that acts as !InCom  
-enhanced TFTP server. Basically, we simply changed the packet size from  
-512 to 1408 bytes and the port from 69 to 59.  
-It is available from  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/etdtpd.tar.gz.  
-  
-  
-  
-  
-!!6.3 The Security Gateway  
-  
-  
-  
-We wrote a special TFTP server that serves as security gateway for  
-authenticating users. This server runs under Linux or Solaris,  
-and can authenticate users according to a Unix password database  
-(NIS and shadow passwords are supported), a Windows NT (or Samba)  
-server or a Radius server.  
-It is available from  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/stdtpd.tar.gz,  
-with source and precompiled binaries.  
-The precompiled binaries do not  
-include NT password encryption as we cannot distribute libdes  
-but compilation is straightforward.  
-  
-  
-In order to use the security gateway, you just have to setup a trivial  
-''security domains'' configuration file that describes to which  
-authentication server each logical security domains maps (the Unix  
-domain implicitely maps to the server Unix password database). This is  
-a sample configuration file:  
-  
-----  
-  
-#  
-# STFTPD configuration file  
-#  
-# This file specify the server of the "security domains". Two types of  
-# authentication servers are supported : radius or winnt (winnt includes  
-# NT Server and Samba)  
-#  
-# Format of radius servers  
-# radius <domain> <serveraddress> <secret>  
-#  
-# secret is the secret word as specified in your /etc/raddb/clients file  
-#  
-# Format of SMB servers  
-# winnt <domain> <serveraddress> <netbiosname>  
-#  
-# netbiosname is the NETBIOS name of your server  
-#  
-# Examples  
-radius sec-dom-rad radiusserver testing123  
-winnt sec-dom-nt1 192.168.1.1 NTSERVER1  
-winnt sec-dom-smb samba SAMBA1  
-  
-----  
-  
-Note that if you are using Samba, you must set security = user.  
-  
-  
-You can also provide to the security server a file containing a list of  
-users which are not allowed to log on (for which the check will fail anyways).  
-  
-  
-  
-  
-!!6.4 The Broadcast TFTP Server  
-  
-  
-  
-We wrote a special TFTP server that implements a home-made Broadcast  
-variant of TFTP. Using this server, we were able to download  
-images to 25 clients on a heavily loaded 10 Mb ethernet network  
-at 6 Mb/s (it is more efficient than the regular TFTP because  
-it does not need to acknowledge each packets).  
-This server runs under Linux or Solaris.  
-It is available from  
-http://cuiwww.unige.ch/info/pc/remote-boot/soft/btdtpd.tar.gz,  
-with source and precompiled binaries.  
-  
-  
-As the TCP/IP bootprom  
-does not support this protocol, our solution consist in booting  
-a tiny ramdisk-based linux system using the tools described in this document,  
-and running the Linux version of !MrBatch which has built-in support  
-for Broadcast TFTP. A simple batch file can the download all files  
-to the cache in a few minutes, simultaneously on all client computers.  
-You do not need to install Linux yourself to use this package, except  
-if you have exotic hardware and cannot directly use the kernel provided  
-in the package.  
-  
-  
-The process works as follow. First, you startup the broadcast server  
-manually, giving the number of expected client computers as argument  
-(remember, this procedure is not to be used every day but only when  
-you changed an image and want to ensure it is immediately uploaded  
-to all your client computers). Then, you turn on all client computers,  
-which will run the following !BpBatch script:  
-  
-----  
-  
-#  
-# This batch is run by bpbatch to launch a mini-linux using an initial  
-# ramdisk, which will then run mrbatch under linux.  
-#  
-# The broadcast TFTP protocol only works with the Linux implementation of  
-# mrbatch, because of the lack of broadcast support in the bootprom itself.  
-#  
-# 1. Setup a tiny partition, to let a lot of space for the cache  
-setpartitions "BIGDOS:50"  
-# 2. Clean the MBR  
-clean  
-# 3. Run a Linux Kernel with initrd (Initial Ramdisk) supprt, and use  
-# bcastrd.gz as the initial ramdisk (will be mounted root and then  
-# executed via /linuxrc). See initrd.txt for more details about  
-# initial ramdisks. You don't have to specify a root device (second  
-# parameter is null) to the kernel, it will use the initial ramdisk.  
-linuxboot "linux.krn" "" "bcastrd.gz"  
-# 4. The initial ramdisk will run dhcpcd to setup networking using DHCP.  
-# It will then run mrbatch -w bcastlx  
-  
-----  
-  
-The initial ramdisk contains:  
-  
-  
-*dhcpcd, a DHCP client used to setup networking  
-*  
-  
-*mrbatch  
-*  
-  
-*linuxrc, a little wrapper automatically started by initrd and  
-that starts dhcpcd then mrbatch.  
-*  
-  
-*usr/lib/terminfo/l/linux, used by !MrBatch  
-*  
-  
-*dev/*, devices needed to run Linux and mrbatch  
-*  
-  
-All programs are statically linked and stripped, to avoid libc.so  
-which is really huge. The resulting ramdisk is Gzipped and takes  
-less than 300 KB. The kernel itself takes 450 KB (with many network  
-cards and initrd support).  
-When Linux is up and running, !MrBatch is called with the following script  
-(that you should edit for your needs):  
-  
-----  
-  
-# This file is executed when mrbatch is launched by the initial ramdisk  
-# bcastrd.gz  
-# It's main purpose is to "broacast copy" files to the cache  
-#  
-# 1. Be verbose  
-showlog  
-# 2. Don't want a "press a key"  
-set pauselog="OFF"  
-# 3. Set partitions at their final values.  
-# Important: Since you will copy files into the cache to be used in future  
-# boot, you need to specify the same partitions as in the future boots.  
-setpartitions "BIGDOS:1024"  
-# 4. Clean the CACHE partition  
-clean -1  
-# 5. And the copy files into the cache, using the Broadcast TFTP protocol  
-# (port 99)  
-#  
-# You can use the script "as is", but you surely need to modify the following  
-# line ! In our example, we download the file mblinux.imz, which is the image  
-# file for our installation of Linux.  
-copy "$BOOTP-Server-IP@99:mblinux.imz" "{:-1}mblinux.imz"  
-  
-----  
-  
-When the transfer is done, you can simply turn off all client computers  
-and change their initial boot script to your favorite menu .  
-  
-  
-  
-----  
+Describe [HowToRemoteBoot ] here