IPXE/TFTP error after upgrade to Fedora 34: 'No such file or directory'

Hi all,

Running into an issue with booting from iPXE after upgrading incrementally from Fedora 29 to 34. We use a program called CloneDeploy to deploy images to new computers via ethernet, which uses IPXE and TFTP.

After the upgrade, we were unable to connect to it, which I narrowed down to the IP address of our server changing. I’ve fixed that, but now we’re getting ‘tftp://192.168.1.51/proxy/bios/pxeboot.0… no such file or directory’. I’ve confirmed that the file still exists (in /tftpboot/proxy/bios/) and that the tftp service is running. If I boot from our backup still running Fedora 29 it works fine, so something got messed up with the upgrade.

Any suggestions?

I’m not sure, may be you already did this but just in case.

From this forum and this doc looks like it related to directories structure after chroot.

The symlink of pxeboot.0 need to update to new directory structure inside the chroot.

Let say before chroot we have folder structure /var/folder/something/file and file is symlink to /var/folder/something/other/file.

After chroot above directories become: /folder/something/file and /folder/something/other/file

We need to update ln -s /folder/something/other/file /folder/something/file.

Yeah, I had come across that SUSE article. It does seem that might be the issue, but I have no idea which files and folders to symlink, haha.

I did find my tftp.service file in /lib/systemd/system/, which contains this:

[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
StandardInput=socket

[Install]
Also=tftp.socket

/var/lib/tftpboot appears to be an empty directory, so would I create the symlink there to point to /tftpboot/?

From those links you should first check above file with file pxeboot.0 or ls -l pxeboot.0. It will give where the file pointing to. Then modify it base on after chroot directory structure.

Update:

Look like bellow are after chroot:

And for real directory, check the real /path/to/directory/proxy/bios/pxeboot.0 in the server/new computer(?) or when where you confirm that the file exist.

From this machine check with ls -l pxeboot.0.

When I check the file in /tftpboot/proxy/bios, I get this:

/tftpboot/proxy/bios  
➜ ls -l pxeboot.0
-rw-r--r-- 1 apache apache 46923 Sep 21  2020 pxeboot.0

Seems to be indicating this is a regular file and not a symlink. ‘file pxeboot.0’ gives this output:

/tftpboot/proxy/bios  
➜ file pxeboot.0 
pxeboot.0: data

Try to edit your config file as proposed here:

Look like you’re right about above file. Please open CloneDeploy doc. On part Install TFTP Server, it mentioned sed -i 's/\/var\/lib\/tftpboot/\/tftpboot -m \/tftpboot\/remap/g' /usr/lib/systemd/system/tftp.service that will change ExecStart to ExecStart=/usr/sbin/in.tftpd -s /tftpboot -m /tftpboot/remap.

I think it reasonable since tftpboot folder provided by CloneDeploy are copied/placed in top root folder /tftpd.

You could also check all again on how to to install CloneDeploy from documentation link above.

Thanks, I ended up reinstalling the TFTP server per the CloneDeploy documentation and it works now! I guess it must have been removed or a dependency broken during the upgrade process.