Preseeded (unattended) netboot UEFI Debian installation


  • With the assistance of @george1421 in this thread, I arrived at the following process.

    Features

    • Unattended installation, preseeded (using a preseed.cfg)
    • Completely hands-off, after selecting the appropriate FOG menu item on PXE boot
    • Based on Debian’s netboot - no need to download the Debian ISO
    • Uses HTTP only (though you could swap in NFS, TFTP, etc., if you prefer)
    • The three files required for the installation can reside in a single location on the FOG server
    • Process can be generalised to other versions of Debian and other OSes (though you’d need to work out the Kickstart part for RedHat distros, etc.)
    • Works with UEFI - I repeat, works with UEFI!!!

    Process

    On the FOG server, Unpack netboot.tar.gz to a folder under the Apache root, e.g.:

    mkdir -p /home/fogproject/www/os/debian/10.7N
    cd /home/fogproject/www/os/debian/10.7N
    wget http://ftp.nl.debian.org/debian/dists/buster/main/installer-amd64/current/images/netboot/netboot.tar.gz
    tar zxf netboot.tar.gz
    rm netboot.tar.gz
    chown -R apache:apache /home/fogproject/www/os/debian/10.7N
    

    Note that I relocated my www root to /home/fogproject. Yours may still be at /var/www. or similar.

    The above unpacks:

    debian-installer/
    pxelinux.0@
    pxelinux.cfg@
    version.info
    

    We only really need two files, which are in the debian-installer directory: linux and initrd.gz. Still, I leave this folder structure as it is.

    Place your preseed file (normally preseed.cfg) in the same directory as the netboot files above (/home/fogproject/www/os/debian/10.7N in my example). The content of your preseed file is entirely up to you. See the official example, to get started.

    Create a FOG menu entry as follows:

    Menu item: os.Debian.10.7.auto.UEFI
    Description: Unattended Debian 10.7 installation (UEFI)
    Parameters:

    kernel http://${fog-ip}/os/debian/10.7N/debian-installer/amd64/linux auto=true url=http://${fog-ip}/os/debian/10.7N/preseed.cfg interface=auto hostname=debian-10 domain=local initrd=initrd.gz vga=788 noprompt quiet
    imgfetch http://${fog-ip}/os/debian/10.7N/debian-installer/amd64/initrd.gz
    boot || goto MENU
    

    Menu Show with: All hosts

    Notes

    If you need an option for manual installation, simply drop the auto parameters from the kernel line:

    kernel http://${fog-ip}/os/debian/10.7N/debian-installer/amd64/linux initrd=initrd.gz vga=788 quiet
    

    The clue to getting this working was to include initrd=initrd.gz in the kernel line and then use imgfetch to make initrd.gz available.


  • @george1421 I was asking for the suggestion made by @fogman4 which seems to be focused on Ubuntu, with a large amount or ram set for ramdisk

  • Moderator

    @faboulous said in Preseeded (unattended) netboot UEFI Debian installation:

    do machines need a large amount of ram booting this way?

    Realize that Rob is addressing the debian installer and not the ubuntu installer. For ubuntu it uses the iso image that gets transferred over to the target computer. Your target computer needs to have enough ram to hold the entire iso image and enough ram for the OS (linux) and virtual drive (initrd.gz). In this setup the iso image is not unpacked but executed as a virtual dvd image in memory.

    If you look at the instructions here for the Debian 10.7 installer https://forums.fogproject.org/post/140720 that uses the disk on the FOG server to hold the files from the ISO image. So the only ram requirements is for the linux kernel and the initrd.gz file. In this setup less than 1GB is all that is needed to run the installer.


  • @fogman4 do machines need a large amount of ram booting this way? I have a lot of machines with low spec to install: 4G of ram which is not enough to unpack the iso using http method. More detail on what I already tried here :
    https://forums.fogproject.org/topic/14590/20-04-autoinstall


  • @fogman4 Cool - good result!


  • Thanks @Tom-Elliott and @RobPomeroy .

    I managed to boot an Ubuntu iso with preseed via tftp + ftp .

    kernel tftp://${fog-ip}/os/ubuntu/20.04D/vmlinuz
    initrd tftp://${fog-ip}/os/ubuntu/20.04D/initrd
    imgargs vmlinuz initrd=initrd ip=dhcp root=/dev/ram0 ramdisk_size=1800000 url=ftp://192.168.100.10/ubuntu-20.04.2.0-desktop-amd64.iso net.ifnames=0 biosdevname=0 ipv6.disable=1 locale=fr_FR.UTF-8 keyboard-configuration/layoutcode=fr hostname=TESTX-L ro automatic-ubiquity url=ftp://192.168.100.10/preseed.cfg DEBCONF_DEBUG=5
    boot || goto MENU
    

    I changed the original vsftpd.conf of the fog server.

    By the way i’ll try to boot and preseed with http.

    Thank you for the suggestion.


  • @fogman4 As Tom says, I wouldn’t use FTP. It’s a painful protocol. 😁 I’ve favoured HTTP because of past experiences with TFTP (dropped packets and lower quality networks, corruption…). TFTP would be marginally faster at certain points though. And the HTTP setup leaves you with a clean directory structure.

  • Senior Developer

    @fogman4 ftp wouldn’t be a supported protocol for iPXE. At least not that I’m aware of.

    You could change it out for tftp but then you’d have to move the files to /tftpboot/ instead of the html folder root.


  • @robpomeroy Thaks for this howto. I tried it replacing http by ftp and it doesn’t work.

    Have any clue how to do it via ftp ?

388
Online

8.4k
Users

15.2k
Topics

142.5k
Posts