TFTP server manage netboot kernels
Contents
TFTP configuration
TFTP can manage different configurations, up to 1 per host!
This is how a ThinClient (= netBoot client) will retrieve its configuration:
As you can see you have 3 possibilities:
1. MAC @ filter. Configuration file name must be:
- Start with ARP type '01-'
- all in lower case hexadecimal
- dash '-' separators instead of ';'
for example a MAC @ 88:99:AA:BB:CC:DD would search for the filename 01-88-99-aa-bb-cc-dd.
2. IP @ filter. Configuration file name must be:
- host IP / network address in hexadecimal
- all in upper case
e.g. 192.0.2.91 -> C000025B
3. Default configuration
To learn more about all the available option, check out http://www.syslinux.org/wiki/index.php/PXELINUX.
Prepare NetBoot kernel
All these steps must be done on the server who has the kernel you want to extract.
Best practice: you should perform the kernel extraction on the TFTP server!
IMPORTANT NOTES
You're about to extract a server kernel and make it available for NetBooting. Make sure that:
- The kernel has all the drivers installed and configured
- The kernel doesn't need a reboot
If your client(s) will use some specifics drivers then you MUST install these drivers before going through the following steps.
You need to be very careful, especially if you plan to use some smart-card reader!
Create TFTP Kernel directory
Create the TFTP kernel's folder. You should create 1 folder for each kernel you'd like to provide in NetBoot.
# Ubuntu 14.04 - Kernel version 3.13.0.32 (August 2014)
mkdir -p /tftpboot/images/trusty
Enable NFS support
Copy initramfs settings for PXE boot
cp -r /etc/initramfs-tools /etc/initramfs-pxe
Adjust PXE boot configuration
cd /etc/initramfs-pxe/
vim /etc/initramfs-pxe/initramfs.conf
Add / adjust the following options:
BOOT=nfs
MODULE=netboot
Copy and prepare kernel
Copy kernel's files
cp /boot/vmlinuz-`uname -r` /tftpboot/images/trusty/vmlinuz
cp /boot/initrd.img-`uname -r` /tftpboot/images/trusty/initrd.img
Enable NFS boot option
mkinitramfs -d /etc/initramfs-pxe -o /tftpboot/images/trusty/initrd.img
Adjust rights
chmod -R 755 /tftpboot/images/
Notes:
- Do NOT use some symlink for "vmlinuz" and "initrd.img" !! It won't work.
- If you don't want to use `uname -r` [current kernel version and architecture] then adjust the values to target kernel number + architecture. You can use the `uname -r`command's result.
- You have to run mkinitramfs for each kernel you'll provide
- Don't forget to adjust the rights to 755 for every distribution
Kernel modules and source
Your NFS image must have the kernel's libraries and modules, and that must match the kernel's version of the TFTP server!!
Since Linux kernel is evolving every month or so, you need to backup your kernel's libraries and modules for future use.
Create kernel source directory
# Ubuntu 14.04 - Kernel version 3.13.0.32 (August 2014)
mkdir -p /tftpboot/sources-images/trusty/lib/modules
mkdir -p /tftpboot/sources-images/trusty/usr/src
Copy libraries and modules
# Copy kernel modules
cp -r /lib/modules/`uname -r` /tftpboot/sources-images/trusty/lib/modules
# Copy kernel sources
cp -r /usr/src/linux-headers-`uname -r` /tftpboot/sources-images/trusty/usr/src/
Now, we have to specify which kernel to use and which distributions are available for NetBoot.
Create the default configuration file:
vim /tftpboot/pxelinux.cfg/default
Put the following:
# Debian 7.x
LABEL wheezy
kernel images/wheezy/vmlinuz
initrd images/wheezy/initrd.img
# Ubuntu 14.04
LABEL trusty
kernel images/trusty/vmlinuz
initrd images/trusty/initrd.img
# Prompt user for selection
PROMPT 1
# No timeout
TIMEOUT 0
- Each LABEL is a specific configuration that will displayed on the NetBoot menu.
- PROMPT 0 = enable user prompt so you can choose the configuration
- TIMEOUT 0 = timeout (in seconds) before the default option is chosen. 0 == no timeout
Note that I used a reference to "trusty/", that's a folder I need to create later on.