|
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.
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 0.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).
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.
Get the BpBatch software, either as .zip
or as .tar.gz. The executables are available
at
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.
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.0. 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
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.
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.
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=0
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.
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 !
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.0: 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.0. 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.0 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.
TABLE OF CONTENTS
|