Difference between revisions of "TFTP server manage netboot kernels"
(12 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
− | = | + | =Prepare NetBoot kernel= |
− | + | All these steps must be done on the server who has the kernel you want to extract. | |
+ | |||
+ | Best practice: ''<big>you should perform the kernel extraction on the TFTP server!</big>'' | ||
+ | |||
+ | |||
+ | |||
+ | ==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. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | # Ubuntu 14.04 - Kernel version 3.13.0.32 (August 2014) | ||
+ | mkdir -p /tftpboot/images/trusty | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ==Enable NFS support== | ||
+ | |||
+ | Copy initramfs settings for PXE boot | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | cp -r /etc/initramfs-tools /etc/initramfs-pxe | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Adjust PXE boot configuration | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd /etc/initramfs-pxe/ | ||
+ | vim /etc/initramfs-pxe/initramfs.conf | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Add / adjust the following options: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | BOOT=nfs | ||
+ | MODULE=netboot | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ==Copy and prepare kernel== | ||
+ | |||
+ | Copy kernel's files | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | cp /boot/vmlinuz-`uname -r` /tftpboot/images/trusty/vmlinuz | ||
+ | cp /boot/initrd.img-`uname -r` /tftpboot/images/trusty/initrd.img | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Enable NFS boot option | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkinitramfs -d /etc/initramfs-pxe -o /tftpboot/images/trusty/initrd.img | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Adjust rights | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | chmod -R 755 /tftpboot/images/ | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | 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 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | # | + | # Ubuntu 14.04 - Kernel version 3.13.0.32 (August 2014) |
− | /tftpboot/ | + | mkdir -p /tftpboot/sources-images/trusty/lib/modules |
+ | mkdir -p /tftpboot/sources-images/trusty/usr/src | ||
+ | </syntaxhighlight> | ||
− | + | Copy libraries and modules | |
− | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | # 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/ | ||
+ | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | /tftpboot/ | + | =Update TFTP configuration= |
+ | |||
+ | If you haven't configure TFTP boot yet, check-out [[TFTP_server_PXE_configuration]] | ||
+ | |||
+ | |||
+ | |||
+ | To use your new kernel you just need to update TFTP configuration file. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | vim /tftpboot/pxelinux.cfg/default | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | Put the following instead of the previous kernel: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | # Ubuntu 14.04 | ||
+ | kernel images/trusty/vmlinuz | ||
+ | initrd images/trusty/initrd.img | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | =Debug kernel= | ||
+ | |||
+ | During NetBoot client startup you might encounter some '''modprobe errors'''. | ||
+ | |||
+ | That means the thin client failed to access your kernel's libraries and / or modules. | ||
+ | |||
+ | |||
+ | ==NFS image update== | ||
+ | |||
+ | Access your NFS image by CHROOT /nfs/... + login | ||
+ | |||
+ | |||
+ | |||
+ | 1. Be sure to '''install the kernel's header''' on the NFS image: | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | apt-get install linux-headers-3.13.0-32 | ||
+ | apt-get install linux-headers-3.13.0-32-generic | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <small>''Replace "3.13.0-32" by your version''</small> | ||
+ | |||
+ | |||
+ | |||
+ | 2. Check the symlinks | ||
+ | |||
+ | Sometimes when there is just 1 kernel the OS will check for libraries in ''/lib/modules'' instead of ''/lib/modules/kernel-version'' | ||
+ | |||
+ | |||
+ | You can try to copy all the modules files to /lib/modules and adjust the symlink. | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd /lib/modules | ||
+ | mv 3.13.0-32-generic/* . | ||
+ | rm -rf 3.13.0-32-generic | ||
+ | ln -s /lib/modules/ /lib/modules/3.13.0-32-generic | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <small>''Replace "3.13.0-27" by your version''</small> | ||
+ | |||
+ | |||
+ | That should do ! |
Latest revision as of 10:31, 21 August 2014
Contents
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/
Update TFTP configuration
If you haven't configure TFTP boot yet, check-out TFTP_server_PXE_configuration
To use your new kernel you just need to update TFTP configuration file.
vim /tftpboot/pxelinux.cfg/default
Put the following instead of the previous kernel:
# Ubuntu 14.04
kernel images/trusty/vmlinuz
initrd images/trusty/initrd.img
Debug kernel
During NetBoot client startup you might encounter some modprobe errors.
That means the thin client failed to access your kernel's libraries and / or modules.
NFS image update
Access your NFS image by CHROOT /nfs/... + login
1. Be sure to install the kernel's header on the NFS image:
apt-get install linux-headers-3.13.0-32
apt-get install linux-headers-3.13.0-32-generic
Replace "3.13.0-32" by your version
2. Check the symlinks
Sometimes when there is just 1 kernel the OS will check for libraries in /lib/modules instead of /lib/modules/kernel-version
You can try to copy all the modules files to /lib/modules and adjust the symlink.
cd /lib/modules
mv 3.13.0-32-generic/* .
rm -rf 3.13.0-32-generic
ln -s /lib/modules/ /lib/modules/3.13.0-32-generic
Replace "3.13.0-27" by your version
That should do !