Linux,Sysadmin

How to install Debian 10 on a headless 2009 Xserve (1,1)

You will need:

  • A laptop running a modern Linux
    • Windows with WSL is fine, too.
    • macOS might work, if you can build iPXE there.
  • A USB flash drive that can store at least 512kB. (256kB should suffice, if that’s all you have.)
  1. Download the source code for the iPXE open source boot firmware:
    git clone git://git.ipxe.org/ipxe.git
    cd ipxe/src
  2. Within this directory, edit the config/console.h file. Remove the slashes at the beginning of this line:
    #define CONSOLE_SERIAL /* Serial port console */
    and save the file.
  3. Type make bin-i386-efi/ipxe.efi, and wait while iPXE builds.
  4. Format your flash drive as FAT32.
    • I’ve only tested this with one big partition.
    • Some people say you have to use a flash drive with a GPT label, but this is not the case on the Xserve1,1.
  5. Make the directory efi/boot on the flash drive. Find the ipxe.efi file you built, and place it in that directory. Rename it to bootia32.efi.
  6. Unmount and remove the flash drive.
  7. Plug the flash drive into the Xserve. Unplug all other disks from the server (just back out the internal disks a little bit).
  8. Connect to the Xserve serial port using a serial cable, and open your favorite serial terminal program at the 115200 bit rate. The details of this are left as an exercise for the reader.
    • I used a DB9 to RJ45 adapter, and a Cisco console cable.
    • I used this command line:
      screen /dev/ttyUSB0 115200
  9. Within a minute, you should see iPXE start to boot from the network! Once you see this, alternate between pressing Ctrl+C and Ctrl+B until you are dropped to the iPXE prompt.
  10. Push the internal hard disks back in (hotplug them).
  11. Type these lines into the prompt:
    dhcp
    ifconf
    kernel http://ftp.us.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/linux console=ttyS0,115200n8 nokaslr mirror/suite=stable initrd=initrd.gz
    initrd http://ftp.us.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz
    boot
  12. Install Debian, but once you reach the step “Finishing the installation,” drop to a shell using the installer menu.
  13. Edit the file /target/boot/grub/grub.cfg. On the first kernel line, remove the word quiet, and add the following:
    console=ttyS0,115200n8 nokaslr
    • nano is available in the installer environment.
  14. Exit this shell, finish the Debian installation, and boot into the installed system.
  15. Create the file /etc/modprobe.d/ipmi.conf with these two lines:
    blacklist ipmi_si
    blacklist ipmi_msghandler
  16. Edit the file /etc/default/grub and edit the GRUB_CMDLINE_LINUX variable so that it looks like this:
    GRUB_CMDLINE_LINUX="console=ttyS0,9600n8 nokaslr"
  17. Run these commands:
    depmod -a
    update-initramfs -u
    update-grub
  18. Reboot the system.

You are now running Debian 10 for i386. To migrate to an amd64 kernel:

  1. dpkg --add-architecture amd64
    apt update

    apt install linux-image-amd64
  2. sudo apt remove linux-image*686*
  3. Reboot the system.

If you want to migrate to an amd64 userspace:

  1. Follow the Debian wiki instructions on crossgrading, but do not reboot!
  2. Ensure the grub-efi-ia32 package is installed.
  3. Edit /etc/default/grub and restore the changes you made to GRUB_CMDLINE_LINUX above, if they are missing.
  4. dpkg-reconfigure grub-efi-ia32; when asked “Force extra installation to the EFI removable media path,” select Yes. When asked “Update NVRAM variables to automatically boot into Debian,” select No.
  5. Run update-grub for good measure.
  6. Now reboot the system.

Leave a Reply