PXE boot of 18.04 ISO

19,927

Solution 1

I worked around this issue in iPXE by following the advice of "Woodrow Shen" over at the Launchpad bug tracker.

Basically I adapted our old entry for ubuntu 16.04.3:

:deployUbuntu-x64-16.04.3
set server_ip 123.123.123.123
set nfs_path /opt/nfs-exports/ubuntu-x64-16.04.3
kernel nfs://${server_ip}${nfs_path}/casper/vmlinuz.efi || read void
initrd nfs://${server_ip}${nfs_path}/casper/initrd.lz || read void
imgargs vmlinuz.efi initrd=initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=${server_ip}:${nfs_path} ip=dhcp splash quiet -- || read void
boot || read void

To look like this for ubuntu 18.04:

:deployUbuntu-x64-18.04
set server_ip 123.123.123.123
set nfs_path /opt/nfs-exports/ubuntu-x64-18.04
kernel nfs://${server_ip}${nfs_path}/casper/vmlinuz || read void
initrd nfs://${server_ip}${nfs_path}/casper/initrd.lz || read void
imgargs vmlinuz initrd=initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=${server_ip}:${nfs_path} ip=dhcp splash quiet toram -- || read void
boot || read void

note the following changes:

  • rename vmlinuz.efi to be vmlinux on lines 4 and 6
  • add the toram option to line 6
  • obviously change the nfs_path to match the location of the new extract ISO

note that as pointed out on Launchpad, this toram option requires additional RAM. In my testing, i needed to ensure my virtual machines had 4GB of RAM allocated

Note that this also works for both our EFI and legacy BIOS systems.

Solution 2

After the weekend, I found a reported bug describing my exact symptoms (and provides an interactive workaround).

https://bugs.launchpad.net/ubuntu/+source/casper/+bug/1755863

Apparently I'll be waiting on 18.04.1. At least I now know I'm not (entirely) crazy!

Share:
19,927

Related videos on Youtube

Joe Marley
Author by

Joe Marley

Updated on September 18, 2022

Comments

  • Joe Marley
    Joe Marley over 1 year

    Previously, I've set up PXE booting of the Ubuntu LiveCDs by extracting the ISO to an NFS mount and copying vmlinuz.efi and initrd.gz from casper to the tftpboot directory with some iPXE scripting magic.

    This worked flawlessly for 16.04, 16.10, and 17.10 (Artful).

    With 18.04, I first find that vmlinuz.efi no longer exists in casper, but vmlinuz does. So, I try again with some name changing...

    And now it still doesn't complete booting. I get the "emergency mode". Typing in 'journalctl -xb' (as suggested by the emergency mode prompt) and browsing leads to the following:

    Unit sys-fs-fuse-connections has begun starting up.
    ubuntu systemd[1]: Failed to set up mount unit: Device or resource busy
    ubuntu systemd[1]: Failed to set up mount unit: Device or resource busy
    sys-kernel-config.mount: Mount process finished, but there is no mount.
    sys-kernel-config.mount: Failed with result 'protocol'.
    Failed to mount Kernel Configuration File System.
    

    Help!

    Added 2018-04-30:

    Script code used to extract ISO for PXE mount (TARGET set to image name, e.g. bionic):

    set -e
    
    # Look for bionic.iso as the ISO I am going to extract.
    TARGET=invalid.iso
    [ -f bionic.iso ] && TARGET=bionic
    echo TARGET=$TARGET
    
    # Mount the ISO to the /tmp directory
    sudo rm -rf /var/nfs/$TARGET/*
    sudo rm -rf /tmp/$TARGET
    mkdir /tmp/$TARGET
    sudo mount -o loop ~/$TARGET.iso /tmp/$TARGET
    
    # Clear up the NFS directory where things will be copied (and copy them)
    sudo rm -rf /var/nfs/$TARGET
    sudo mkdir /var/nfs/$TARGET
    sudo rsync -avH /tmp/$TARGET/ /var/nfs/$TARGET
    
    # I've not had luck with iPXE changing filesystems to find
    # vmlinuz, vmlinuz.efi, or initrd.gz... so I copy those files
    # specifically to the tftp directory structure so the boot loader
    # can load them.
    sudo rm -rf /var/lib/tftpboot/$TARGET
    sudo mkdir /var/lib/tftpboot/$TARGET
    sudo cp /tmp/$TARGET/casper/vmlinuz* /var/lib/tftpboot/$TARGET/.
    sudo cp /tmp/$TARGET/casper/initrd.lz /var/lib/tftpboot/$TARGET/.
    
    # Cleanup: unmount the ISO and remove the temp directory
    sudo umount /tmp/$TARGET/
    sudo rm -rf /tmp/$TARGET/
    echo Done.
    
    • Jonathan
      Jonathan about 6 years
      Was this a "clean" install, meaning, the drive that the kernal is on was freshly formatted? Or is it alongside/overtop another OS?
    • Joe Marley
      Joe Marley about 6 years
      The target machines in question have no hard drive, and are loading the 18.04 desktop LiveCD via network boot. There is no previous configuration. Imagine a group of machines that instead of using USB keys or CDs to boot the liveCD, boot the live CD using iPXE over the network instead.
  • Brian Sidebotham
    Brian Sidebotham almost 6 years
    Thankyou DrGecko - the toram option worked for me with mint 19!
  • Joe Marley
    Joe Marley almost 6 years
    This works also for lubuntu 18.04.1 (LTS), which is exactly what I was needing. Thank you!
  • Ricflomag
    Ricflomag over 5 years
    There is another option, which does not require toram and allows to boot a computer with much less RAM : change the end of line 6 to ip=dhcp systemd.mask=tmp.mount ro -- || read void
  • Skylar Ittner
    Skylar Ittner over 5 years
    @Ricflomag Thank you so much, I have a pile of computers with 2GB of RAM. Tested and works on Ubuntu MATE 18.04.1 and Linux Mint 19.1, which has the same issue since it's based on Ubuntu 18.04.
  • Regmi
    Regmi over 5 years
    I should have clicked on the link before - spent quite a lot of time figuring. I was using AIO Boot. Thanks.