Trouble shooting is par for the course. At this point, start with the laptop. Can you get that laptop to connect to the internet? Configure this laptop with all static network configurations. Static IP, Subnet, Gateway. Make sure you can get this thing on the network. Connect the laptop into a switch, plug one computer that you want to clone into that switch and set it to boot via PXE. If you know the linux laptop can connect to the network and you know that the other computer can PXE boot, and you've got them on their own switch where no other DHCP server or firewall can interfere, then you move on to troubleshooting your clonezilla DHCP setup. The easiest way that Clonezilla can be set to configure its server is to do the default values settings with: sudo /opt/drbl/sbin/drbl4imp
Anytime you have to "reset" the clonezilla sytem, try that command line to get you back to a known good state.
If you can't ever seem to get the chosen computer to PXE boot and talk to the clonezilla server, can you get some OTHER brand of computer with a DIFFERENT brand of network card to connect to the clonezilla server?
Just troubleshoot piece by by piece, Can I get the clonezilla server on the network? Put the computers on an independent switch with no other devices to eliminate switch and port blocking issues, then can I find one machine that is known to be able to PXE boot? Get a clear clean path of communication from server to switch to host computer. Are those cables good? Go back and reset the clonezilla server if needed. You CAN get it to work.
Don't get too frustrated by the fact that it won't work out of the box, expect a bit of fighting, and expect to win too.
Good luck.
No, there is no default kernel configuration for PXE booting.
It is possible to compile a monolithic kernel that will automatically attempt to get itself an IP address using basic BOOTP/DHCP, but this is not the way it is usually done.
The modern approach is to use a bootloader (e.g. pxelinux or iPXE) which will download two files: the kernel and an initramfs/initrd file. The initramfs/initrd file can contain kernel modules (to be loaded as necessary, on detection of matching hardware) and utilities needed for initialization of critical hardware so that the boot can proceed. In the case of booting from network, this includes initialization of the network interfaces. What happens after that is determined by the combination of the code/scripts built into the initramfs/initrd file, and the boot options given to the kernel by the bootloader (most commonly using the APPEND keyword).
I am not very familiar with udhcpd, but it appears to be a very minimal DHCP client. So it might have the following properties:
- it may expect the network interface to be powered up ahead of time (e.g. "ifconfig eth0 up" or "ip link set eth0 up", depending on whether the old "ifconfig" configuration command or the newer "ip" is available)
- it may not handle the actual interface set-up after it has received the DHCP parameters: instead, it will pass them to a script, which is expected to use commands like "ifconfig", "ip" and/or "route" to set up the network interface according to the parameters received.
I think you may have got unnecessarily fixated to the idea of building a kernel; it is very unlikely to be the root cause of your problem. You are referring to https://bugs.busybox.net/show_bug.cgi?id=1963 which is now 7 years old information. (In full-featured Linux distributions, "ifup -a" is a common high-level command to initialize all network interfaces; in compact set-ups like Clonezilla the ifup command is usually not present.)
You said your attempts have so far ended with a panic. That means the kernel is failing to access the root filesystem - and with Clonezilla, the root filesystem is in the filesystem.squashfs file which is supposed to be downloaded by the initrd once the network interface has been configured.
So do you know exactly what went wrong with your attempts? Have you monitored the network traffic with Wireshark or similar?
The problem with troubleshooting network boot is that when something goes wrong at boot time, the Linux kernel and the associated utilities often spew out so much information that the first error messages get scrolled off the screen. And usually that first error message is the most important one: it is very likely that all the subsequent errors are consequences of that first failure.
By monitoring the network traffic, you can get some hard facts:
- will the bootloader successfully download the kernel and the initrd file from the TFTP server?
- after bootloader gets the kernel started, can you see another DHCP query? That would be udhcpd getting the network parameters.
- After that, there should be a TFTP request for the filesystem.squashfs file. Is it successful or not? If not, what is the actual TFTP request sent and which pathname it maps to in the filesystem of the TFTP server? Is that file present at the correct pathname, and is the TFTP server allowed to send it?
Have you tried Clonezilla Live, a version of Clonezilla that is explicitly intended to be PXE netbootable?
http://clonezilla.org/livepxe.php
Best Answer
The WDS TFTP server uses Windows-style pathname separators, i.e. backslashes instead of Unix-style forward slashes.
Also pay attention to Windows Registry values ReadFilter and RootFolder in HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/WDSServer/Providers/WDSTFTP.
By default, TFTP downloads are allowed only from \boot and \tmp sub-folders of the TFTP root folder (as defined by the RootFolder registry value).
Your "fetch=tftp://$serverIP/filesystem.squashfs" translates into trying to download from <RootFolder>\filesystem.squashfs, which is not allowed by the default ReadFilter.