After facing issue after issue with Idera/R1soft’s PXE and CD-ROM boot media — specifically, ancient kernels which are unable to obtain network connectivity on modern hardware, I decided to roll my own PXE boot image including the R1soft agent and a few other tools with the latest Debian stable. It turned out to be easier than I expected — kudos to the debian-live project.
Boot into a debian Live-CD and set up the bootstrap environment. I’m using 7.6.0 (latest stable at this time).
apt-get install debootstrap squashfs-tools
mkdir -p work/chroot
cd work
If you’re creating the image from scratch, use the following commands.
debootstrap --arch=amd64 stable chroot
cp /etc/network/interfaces chroot/etc/network/interfaces # Needed for network connectivity
If you are re-working an existing image, you can import it instead.
wget http://webserver/debian-live/filesystem.squashfs
unsquashfs -f -d chroot filesystem.squashfs
rm -f filesystem.squashfs
Now we prep the image and chroot.
cp /etc/resolv.conf chroot/etc/resolv.conf # Needed for network connectivity
chroot chroot
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts
export HOME=/root
export LC_ALL=C
Now you can do whatever you want to the image by installing packages and modifying configurations. You need to install the kernel at a minimum if you want to load modules after boot such as raid. You can install kernel headers and compile 3rd party modules like the r1soft cdp agent. This is a minimal image, so don’t forget basic filesystem utilities like mdadm if you’re installing the r1soft agent; I learned the hard way and had to re-work the image several times. I enabled auto-login on tty1 through tty3 by installing mingetty and modifying inittab. I also like to redirect syslog to tty4 and disable any console logging on tty1 – tty3.
When you think you’re done, clean up and exit the chroot.
apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf
umount -lf /dev/pts
umount -lf /sys
umount -lf /proc
exit
Compress and package the new filesystem image.
mksquashfs chroot filesystem.squashfs -e boot
Send it off to your HTTP webserver:
scp filesystem.squashfs user@webserver:/var/www/html/debian-live/.
And a working pxelinux.cfg entry after we’ve got the kernel and initrd in the correct place on the tftp server:
LABEL deblive
KERNEL /debian-live/debian-live-7.6.0-amd64-standard.vmlinuz
APPEND initrd=/debian-live/debian-live-7.6.0-amd64-standard.initrd.img dhcp ethdevice=eth0,eth1 boot=live fetch=http://webserver/debian-live/filesystem.squashfs
Awesome tutorial! Wonder if you can help me, I got to the end of the tut and booted the client, but I’m getting a kernel panic saying “not syncing: VFS: Unable to mount root fs on unknown-block(0,0)”
Caleb did you ever fix the kernel panic?
add “root=/dev/ram0” to your APPEND line for pxelinux.cfg
Hi,
Do you know how to change the keyboard layout ?
https://www.debian-fr.org/pxelinux-debian-live-keymap-t54450.html#p537243
I tried all theses confs and nothing worked :/
Thx for that tutorial.
Have a nice day.
Hi,
for me is was necessary to change the unmount sequence to reverse
umount -lf /dev/pts
umount -lf /sys
umount -lf /proc