Booting with RPL
Introduction
RPL (also known as RIPL) is protocol used in some older machines to boot from network.
There are actually two such protocols: IBM-style (also known as Microsoft) and Novell-style.
This description is for IBM/Microsoft-style
RPL.
Boot process
RPL cannot handle file larger than approximately 250 KB (not authoritative, this is the result of experiments), so booting using
RPL must be in two stages.
In first stage
RPL loads some other bootloader - in this description
Etherboot is used as second stage bootloader.
Next
Etherboot loads proper kernel image as described on page about booting with
Etherboot.
Server-side requirements
rpld daemon setup
To send boot image, server must be running
RPL daemon -
rpld. rpld is shipped with many distributions (for example Debian), if it is not, you can use rpld
homepage.
Important note: Due to technical reasons, rpld can listen only on one network interface. If you have more than one network interface, you must provide rpld with name of interface to use. If you are using standard daemon startup script (
/etc/rc.d/init.d/rpld), you have to set variable
INTERFACE in
/etc/sysconfig/rpld config file, for example to:
INTERFACE="eth1"
If you are starting rpld using some other means, you have to use option
-i of rpld, for example:
/usr/sbin/rpld -i eth1
rpld configuration
rpld default configuration file is
/etc/rpld.conf. In this file you need to setup section specifying boot image for clients. Boot image is Etherboot file proper for client's network card (LILO image, i.e. with extension
.zlilo). In this description I assume images are put in directory
/rplboot, but it can be put anywhere (where only root has write privileges), for example in
/tftpboot.
Each client is identified by ethernet MAC address. Its address must be set in
ethernet directive in section. Image definition is a bit complicated, it is the same directive as used in
rpld.conf example for
memtest.
Here is example config file:
HOST {
ethernet = 00:60:b0:cd:00:00; //client address
// Last step load the rest of the kernel starting
// at bootloader length + sector length=0xa00
// To 0x10000
FILE {
path="/rplboot/eb-5.4.0-pcnet32.zlilo";
offset=0xa00;
load=0x10000;
};
// Middle step, load the secondary boot loader at 0x90200
// The secondary boot loader is typically 4 512 byte blocks
// However in needn't be; the 497th byte of the kernel contains
// the size of the bootloader in 512 byte blocks. If zero then
// it is actually 0x800 (4 blocks)
FILE {
path="/rplboot/eb-5.4.0-pcnet32.zlilo";
offset=0x200;
length=0x800;
load=0x90200;
};
// First step load the setup sector (not actually executed)
// but is used to determine file sizes.
FILE {
path="/rplboot/eb-5.4.0-pcnet32.zlilo";
length=0x200;
load=0x90000;
};
// Jump into the secondary boot loader
execute=0x90200;
};
There is a (theoretical) possibility to specify MAC address mask instead of separate sections for each client (for example
00:60:b0:cd:00:00/4 matches addresses with any last 4
bytes - not digits!), but it seems not to work (rpld complains about parse error in config file).
Troubleshooting
Client is complaining that RPL server was not found
Check system log (in some distributions
/var/log/messages, in others
/var/log/daemon.log) for rpld messages.
If client correctly starts loading image, the message is similar to this:
Aug 14 00:04:52 athlon rpld[14042]: client 00:60:b0:cd:00:00 requested block 0
If message is like that:
Aug 13 23:40:30 athlon rpld[13873]: unknown client 00:60:b0:cd:00:00
Then it means there is no proper image section for this client in rpld.conf.
rpld does not give any messages about client when it is booting
Check if you receive
RPL requests on server. Run tcpdump on proper interface. You should see similar lines when client is requesting image using
RPL:
23:47:24.249474 00:60:b0:cd:00:00 > 03:00:02:00:00:00 sap fc ui/C len=83
If you do not see such packets, check your network connections, firewall settings and whether rpld is listening on proper network interface.
If you see such packets and reply similar to this:
23:47:30.181965 00:80:48:eb:00:00 > 00:60:b0:cd:00:00 sap fc ui/C len=58
Then it is possible that you are using Novell-style
RPL not IBM/Microsoft style
RPL. Change booting protocol in client BIOS.
--
KrzysztofLichota - 14 Aug 2005