Difference between revisions of "TFTP server manage netboot kernels"

Line 48: Line 48:
 
=Prepare NetBoot kernel=
 
=Prepare NetBoot kernel=
  
 +
All these steps must be done on the server who has the kernel you want to extract.
  
'''Make sure that the server you're gonna use to extract the kernel has all the drivers setup and doesn't need a reboot before starting'''
 
  
 +
Best practice: you should perform that on the TFTP server!
  
== 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!
+
==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''' and '''it doesn't need a reboot''' before starting
  
 +
== 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 NetBoot menu | defaults==
 
 
Now, we have to specify which kernel to use and which distributions are available for NetBoot.
 
 
 
Create the default configuration file:
 
 
<syntaxhighlight lang="bash">
 
vim /tftpboot/pxelinux.cfg/default
 
</syntaxhighlight>
 
 
 
Put the following:
 
 
<syntaxhighlight lang="bash">
 
# 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
 
</syntaxhighlight>
 
 
* 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.
 
  
  
 +
==Create TFTP Kernel directory==
  
==Init Kernel files==
+
Create the TFTP kernel's folder. You should create '''1 folder for each kernel''' you'd like to provide in NetBoot.  
 
 
 
 
===Create directories===
 
 
 
Create the target kernel folders. You should create 1 folder for each distribution you'd like to provide in NetBoot.
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
# Debian 7.x
+
# Ubuntu 14.04 - Kernel version 3.13.0.32 (August 2014)
mkdir -p /tftpboot/images/wheezy
 
 
 
# Ubuntu 14.04
 
 
mkdir -p /tftpboot/images/trusty
 
mkdir -p /tftpboot/images/trusty
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
===Prepare ''initramfs'' to boot over NFS===
 
 
'''This step must to be run on the machine that has the kernel you are going to serve to your clients'''.
 
 
 
>>> In our case it has to be run on the TFTP server
 
  
  
 +
==Enable NFS support==
  
 
Copy initramfs settings for PXE boot
 
Copy initramfs settings for PXE boot
Line 141: Line 93:
 
vim /etc/initramfs-pxe/initramfs.conf  
 
vim /etc/initramfs-pxe/initramfs.conf  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
  
Line 153: Line 104:
  
  
===Copy and prepare kernel===
+
==Copy and prepare kernel==
 
 
  
You have to copy your current kernel files to the boot folder:
+
Copy kernel's files
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
# Debian 7.x
 
cp /boot/vmlinuz-`uname -r` /tftpboot/images/wheezy/vmlinuz
 
cp /boot/initrd.img-`uname -r` /tftpboot/images/wheezy/initrd.img
 
 
# Ubuntu 14.04
 
 
cp /boot/vmlinuz-`uname -r` /tftpboot/images/trusty/vmlinuz
 
cp /boot/vmlinuz-`uname -r` /tftpboot/images/trusty/vmlinuz
 
cp /boot/initrd.img-`uname -r` /tftpboot/images/trusty/initrd.img
 
cp /boot/initrd.img-`uname -r` /tftpboot/images/trusty/initrd.img
Line 169: Line 114:
  
  
 
+
Enable NFS boot option
Enable NFS boot on target kernel:
 
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 177: Line 121:
  
  
Adjust rights:
+
Adjust rights
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 189: Line 133:
 
* Do NOT use some symlink for "vmlinuz" and "initrd.img" !! It won't work.
 
* 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
+
* 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
 
* You have to run ''mkinitramfs'' for each kernel you'll provide
Line 216: Line 160:
  
 
Note that '''you have to adjust the /nfs'''/XXX
 
Note that '''you have to adjust the /nfs'''/XXX
 +
 +
 +
 +
 +
 +
==Create NetBoot menu | defaults==
 +
 +
Now, we have to specify which kernel to use and which distributions are available for NetBoot.
 +
 +
 +
Create the default configuration file:
 +
 +
<syntaxhighlight lang="bash">
 +
vim /tftpboot/pxelinux.cfg/default
 +
</syntaxhighlight>
 +
 +
 +
Put the following:
 +
 +
<syntaxhighlight lang="bash">
 +
# 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
 +
</syntaxhighlight>
 +
 +
* 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.

Revision as of 10:57, 21 August 2014




TFTP configuration

TFTP can manage different configurations, up to 1 per host!

This is how a ThinClient (= netBoot client) will retrieve its configuration:


TFTP getConfiguration()


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 that 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 and it doesn't need a reboot before starting

== 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

-- This is an optional step ; but it can avoid many bugs --


If you're using a local kernel as the default NetBoot kernel, then you need to do copy the modules + kernel source to every distribution.

# Copy kernel modules
cp -r /lib/modules/`uname -r` /nfs/trusty/lib/modules

# Copy kernel sources
cp -r /usr/src/linux-headers-`uname -r` /nfs/trusty/usr/src


Note that you have to adjust the /nfs/XXX



Create NetBoot menu | defaults

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.