2.2. PXE Booting

The PXE boot environment needs a DHCP server on the subnet and a tftp server on the subnet, reachable by the soekris. The pxeboot provided with FreeBSD (at least the 4.8 build) is not compiled with TFTP support. If you're running NFS this is not a problem as you can put the files in a NFS accessible directory. To use TFTP (which seems easier) you need to do the following:

First edit your make file config (/etc/make.conf) and add the following line:

LOADER_TFTP_SUPPORT=YES

Then, rebuild the pxeboot file:

cd /usr/src/sys/boot
make clean
make depend
make

And copy the just created pxeboot file to /tftpboot:

cp /usr/src/sys/boot/i386/pxeldr/pxeboot /tftpboot

2.2.1. DHCP server

Check if you have a (running) DHCP server on the network where the soekris (and the development system) are on. If not, build isc-dhcp from the ports tree with:

cd /usr/ports/net/isc-dhcp3; make all install clean

PXE boot needs some extra entries in the dhcp record for the (soekris) target. It needs the (tftp)server address from which to retrieve the bootfile (denoted by the next-server keyword) and the actual name of the bootfile (denoted by filename). An example of the dhcp record for the soekris is shown below:

host soekris {                
     hardware ethernet 0:0:24:ad:bc:ac;                                     
     fixed-address soekris.example.net;
     filename "pxeboot"; 
     next-server 192.168.1.2;
     option root-path "/tftpboot";
 }

Here we assume the SOEKRIS having the ip number refrenced by the name soekris.example.net. You could put the ip address here (when not running DNS). The host system (the machine where the SOEKRIS is booted from) is assumed to have the address 192.168.1.2 in this example. Please change these addresses to reflect your network setup.

2.2.2. tftp server

To enable the tftp server to be started from inetd (you should be running inetd, did I mention this ??) uncomment the following line in /etc/inetd.conf:

tftp  dgram  udp wait root /usr/libexec/tftpd  tftpd -s  /tftpboot

Now, restart inetd:

kill -HUP `cat /var/run/inetd.pid`