The following sequence of helper commands will create a basic netboot image containing the Debian standard system without X.org. It is suitable for booting over the network.
Note if you performed any previous examples, you will need to clean up your working directory with the lh clean
helper command:
$ lh clean --binary
Run the lh config
helper command with the parameters to configure the "config/"
hierarchy to create our netboot image:
$ lh config -b net --net-root-path "/srv/debian-live" --net-root-server "192.168.0.1"
In contrast with the ISO and USB hdd images, netbooting does not support serving a filesystem image with the client so the files must be served via NFS. The net-root-path
and net-root-server
options specify the location and server, respectively, of the NFS server where the filesytem image will be located at boot-time.
Now build the image with the lh build
helper command:
# lh build
In a network boot the client runs a small piece of software, which usually resides on the EEPROM of the Ethernet card. This program sends a DHCP request to get an IP address and information about what to do next. Typically the next step is getting a higher level boot loader via the TFTP protocol. That could be Grub, PXELINUX, or even boot directly to an operating system like Linux.
For example, if you unpack the generated binary-net.tar.gz
archive in the /srv/debian-live
directory, you'll find the filesystem image in live/filesystem.squashfs
and the kernel, initrd and PXE Linux bootloader in tftpboot/debian-live/i386
.
We must now configure three services on the server to enable netboot:
We must configure our network's DHCP server to be sure to give an IP address to the computer netbooting, and to advertise the location of the PXE bootloader.
Here is an example for inspiration, written for the ISC DHCP server (package dhcp3-server
) in the /etc/dhcp3/dhcpd.conf
configuration file:
# Options DHCP spécifiques à Pxelinux: option space pxelinux; option pxelinux.magic code 208 = string; option pxelinux.configfile code 209 = text; option pxelinux.pathprefix code 210 = text; option pxelinux.reboottime code 211 = unsigned integer 32; subnet 192.168.1.0 netmask 255.255.255.0 { # 192.168.1.0/24 # IP addresses available for guests range 192.168.1.100 192.168.1.149; # allow booting from the net allow bootp; # for net booting, server where the first file to be loaded (by TFTP # protocol) ("filename" following definition) lies : so the TFTP # server's name. next-server myserver; # net boot configuration for guests with a PXE client : if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { # Note : all files for PXE are relatives to the TFTP server's root # path, as usually defined in /etc/inetd.conf. # PXE boot loader (first program to be loaded, by TFTP) filename "pxelinux.0"; # describe some specific pxelinux's options through DHCP options : site-option-space "pxelinux"; option pxelinux.magic f1:00:74:7e; if exists dhcp-parameter-request-list { # Always send the PXELINUX options (specified in hexadecimal) option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3); } # For a PXE boot menu, different versions are available : simple # text, text with curses, graphic (VESA) #option pxelinux.configfile "pxelinux/config_simple"; #option pxelinux.configfile "pxelinux/config_curses"; option pxelinux.configfile "pxelinux/config_vesa"; # automatically reboot after 10 minutes of no activity option pxelinux.reboottime 600; } }
This serves the kernel and initial ramdisk to the system at run-time.
You should install the tftpd-hpa package. It can serve all files contained inside a root directory, usually /var/lib/tftpboot/
, as defined with its -s
option. To let it serve files inside /srv/debian-live/tftpboot
, modify its start definition in /etc/inetd.conf
with:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /srv/debian-live/tftpboot -r blksize -v -v
and reload the super server with /etc/init.d/openbsd-inetd reload.
Once the guest computer has downloaded and booted a Linux kernel and loaded its initrd, it will try to mount the Live filesystem image through a NFS server.
You should install the nfs-kernel-server package -- nfs-user-server does not function correctly with netboot.
Then, make the filesystem image available through NFS by adding a line like the following to /etc/exports
:
/srv/debian-live *(ro,async,subtree_check,no_root_squash)
and tell the NFS server about this new export with the following command:
# exportfs -rv
Setting up these three services can be a little tricky. You might need some patience to get all of them working together. The Debian Installer Manual's TFTP Net Booting section might help as that process is very similar.