Learning UEFI

This weekend I put together (mostly as it turned out) a new fileserver for home. The box that's currently pulling that duty is 9 years old and still working just fine.

However, 9 years old. I'm happily surprised that 40GB hard-drive is still working. Only 58,661 power-on hours, and all of 3 reallocated sectors. But still, 9 years old. There comes a time when hardware just needs to be retired before it goes bad in spectacular ways.

The system that is replacing this stalwart performer cost under $400 with shipping, which contrasts starkly with the sticker price on the old unit which was around $1400 back in the day. This system is based on the AMD E350 CPU. Underpowered, but this is a file-server and that ancient P4 is still keeping up. I have a Drobo that I'll be moving to this unit, which is where the bulk of the data I want to serve is being kept anyway.

As for the title of the post, this E350 mobo has a UEFI firmware on it. That's when things got complicated.
I wanted to see if I could get OpenSUSE 11.4 to install to UEFI. I hadn't done that before, and this is how we learn things. I spent w-a-y too long hammering on this before finding out that 11.4 and UEFI don't actually get along. The final process (I was keeping notes) that almost, almost worked until the very end:

  1. Boot off of the NET media, enter Rescue System
  2. In Rescue System, assign a GPT disk label to the drive(s) via parted
    1. parted /dev/sda mklabel gpt
  3. While in Rescue System, set up any mdraid/LVM stuff you need to set up
  4. Remember to leave a naked partition for root, since elilo can't handle LVM/MDRaid volumes (or maybe the installer doesn't let elilo handle it, either way)
  5. Reboot off of the NET media again, hitting F11 for the boot menu and select the "UEFI: DVD Drive" option. This will cause the install DVD to start ELILO and take you to the text mode installer.
  6. Install via HTTP (the ISO media is missing a couple critical packages, so you'll have to live with downloading over the internet)
    1. Server: download.opensuse.org
    2. Directory: /repositories/11.4/repo/oss
  7. To save download pain, install to the "Minimal Server (text mode)" desktop. You'll find it under "Other Desktops" on the screen where you're presented with KDE/Gnome. This reduces the total download to 100-200MB instead of over a gigabyte. You can add the other patterns later.
  8. When dealing with partitioning, do not delete and recreate the boot partition it don't work. Also, "/" must be a standard partition, not hiding in LVM/MD.
  9. Make your package selections and hit install.
  10. When it complains that it can't run the bootloader install (after it installs all of the packages), hit [alt]+[F2] to get to the console.
  11. Modify "/mnt/etc/resolv.conf" to have actual DNS information
  12. "chroot /mnt /bin/bash" to get a console in your new system.
  13. "zypper ref" to pull repo data
  14. "zypper in efibootmgr" to install a critically missing package
    1. For extra credit, you could hand-pick this package during package-selection and skip these steps.
  15. Hit [alt]+[F7] to go back to the GUI installer.
  16. Agree to reenter Bootloader config.
  17. Don't make any changes, just hit OK.
  18. It'll retry the bootloader install, and it'll work! Yay!
  19. Allow it to reboot.
On reboot, it'll return the UEFI version of "Operating system not found, hit any key to retry".

So close.

Upon googling like mad I found a bug on bugzilla.novell.com that covers this topic, and another page with a nice rundown of UEFI support on various distros. 11.4 is completely broken. Ubuntu 11.04 works but is also very broken. Fedora mostly works.

With OpenSUSE 12.1 around the corner I'm tempted to download milestone 5 and see how well that works. However... this project has already taken most of the time I had allocated to it and I haven't even moved any data and settings yet. Other Demands On My Time are getting beginning to get cranky. So, "get it done" is winning over, "contribute to the community for the betterment of all".

Grub2 has an EFI branch, and should be there for OpenSUSE 12.1. I just wish I had time to test it.