Wrestling with Fedora

TL;DR

Fedora 39 installer kept hanging the computer. Adding uefi="no" to a dracut config file let the install finish successfully on my BIOS-based (non-UEFI) computer.

In which I try to reinstall Fedora on my computer

The computer has been having a few strange issues recently so a few weeks ago, with Fedora 39 going into beta, I decided it was time to do a reinstall.

It turned into a several weeks long and unexpected ordeal.

The install process worked fine up until the Fedora installer was saying “Installing bootloader”, at which point the computer froze before getting to the next stage. I could reboot the computer, and Fedora would start up fine but the user accounts hadn’t been created yet so there was no way to log in.

Booting up the live image and using a chroot to create the user accounts worked, but the system was still behaving abnormally. Tried a few other Fedora versions going back all the way back to Fedora 35, but the installer would still always hang the computer at the same place, somewhere during the bootloader installation.

I ended up going to KDE Neon, and then settling on Kubuntu for a bit just to get the computer working again so I could figure out what was going on. Had no problems installing either and both of them ran fine, so that gave me some confidence that my Fedora installation issues weren’t hardware related.

Finally, going all the way back to Fedora 33, I was able to get Fedora reinstalled on the system.

Yay! Cue celebration! Now I can upgrade my way to Fedora 39!

Hold up there bubba, not so fast.

The first upgrade step (33->35) went fine up until the kernel install scripts ran, at which point the computer froze up again. All the packages had installed at this point, so I rebooted and promptly got an error because the initramfs file for the Fedora 35 kernel wasn’t there.

Frustrating, but a valuable clue. Something must be happening to cause the computer to hang before or while creating the initramfs.

Fortunately I could still boot into the Fedora 33 kernel. Kicked off another upgrade step (35-37) and again, the computer froze up when the kernel install scripts ran. Again, the initramfs for the Fedora 37 kernel hadn’t been generated.

Dracut, what you doing?

The initramfs file is generated by dracut. Booting into the Fedora 33 kernel again, I tried to manually generate the missing initramfs files (dracut --kver <kernel>). In the middle of the process, the computer froze again. Now I had my culprit, dracut. But what was different about dracut that let it work on my computer with Fedora 33, but not after that?

Going through the dracut man page, the --uefi/--no-uefi options stood out to me. The computer is BIOS-based and doesn’t have UEFI, so I gave dracut --no-uefi --kver <kernel> a try. It worked! The initramfs was generated where the computer previously froze, and rebooting into the newly generated kernel worked without any problems.

Generated a few more missing initramfs files, and those also booted up without problems.

According to the dracut.conf man page, the uefi option can be set in a config file. It’s supposed to default to “no”, but it seemed like that either wasn’t the case, or the Fedora installer sets it to “yes” somewhere. Creating a dracut config file (/etc/dracut.conf.d/00-nouefi.conf) with just uefi="no" let dracut --kver <kernel> run successfully again.

Now that I had a potential solution, I booted up the Fedora 39 beta live image again, created the /etc/dracut.conf.d/00-nouefi.conf file, and started up the installer. This time the installer made it past the point it used to freeze and finished successfully!

Woohoo! Cue celebration! Now the computer is back to running Fedora!