SJ cartoon avatar

Development Installing Fedora 37 on a Raspberry Pi

I've spent the past few months on a Linux distro hopping journey. Needing rock solid reliability, stability, and general surprise avoidance - my production servers all run Debian (Bullseye, at time of writing). I think it's great, no issues, no complaints. I've even recently started using it in lieu of Yocto or Buildroot on my embedded projects. Unfortunately, my complaint-free attitude doesn't extend to setting up a custom Debian system with u-boot and a custom Linux kernel... However, that's a post for another day.

My journey

Ubuntu - specifically, Kubuntu - was my first real foray into Linux a long, long time ago. Didn't really know how to feel about it at the time, and still don't. It never really resonated with me but I'm not entirely sure why. When it came to needing to setup servers, I used Ubuntu Server just out of familiarity with Ubuntu. Didn't particularly like it. I spent too much time fiddling with package management errors, and it was a distraction from actual work. Upgrades were always a "sit and stare nervously at my monitor" situation.

A while later, I was lamenting about these issues with a friend and he asked why I was even using Ubuntu and why I wouldn't just strip out the Canonical "crap" (his words, not mine) and stick with Debian. I gave it a shot, and haven't looked back for the past 7 or 8 years. All my package management and upgrade grief went away immediately. I've had servers running without needing any handholding for years at a time. They're all provisioned, configured, hardened, setup with automatic security updates - and then I let them run free in the wild. Every so often, I'll log back in and think that maybe it's time for a dist upgrade. If it's in the cloud, I'll tear down, install the latest, run the same scripts I ran on the previous version of Debian - and no problem. If it's a physical server, I take it out of the redundancy pool, run a couple commands, take a nap, and it's back up and running on its own when I wake up.

Given the title of this post, it should be clear that Debian isn't all unicorns and rainbows. While I love the reliability and stability for my production servers, I don't need that for my daily driver computer. I want a decent level of stability, I'm willing to work a little for it, but I want all the shiny new tools that OSS has to offer. Python 3.11 the day after it drops without needing to customize my package sources? Yes please, wipe out that 3.10 garbage and plug 3.11 into my veins. A Linux kernel that's 2 years old? Don't waste my time with that crap.

That's all to say that, while Debian is great - it'll never be my personal computer's distro of choice.

Without going too deep into the weeds, I experimented with a few options (Pop OS, Void, and obviously, Arch). They were all pretty cool, Arch being the coolest - but as much as I like fiddling with my computer, Arch needed a bit -too- much fiddling from time to time. It wasn't that often, but it could end up hitting me where it hurts when I didn't have time to fix it. Self-imposed problems, but still - I'm not yet ready to join the Cult of Arch (I am pretty swayed by their literature though).

Alright, where does this leave me? Whelp turns out the answer was under my nose the whole time... One day I realized I use a lot of Red Hat-backed tools, but had never tried the OSes they back. I installed Fedora that day, and haven't looked back. While I'm still deciding on whether SilverBlue is right for me and which Desktop Environment I'll finally land on, the distro strikes the right balance of stability and "new-ness" for me.

What about the Raspberry Pi?

In my last post about the Pi, I talked about bridging wifi to ethernet, and in that article, I mentioned using Raspberry Pi OS (Bullseye). That was mostly for convenience, but also because Fedora didn't get official RPi4 support until Fedora 37 was released a month ago (while dropping ARMv7 support).

So... Let's install it!

Upgrade your EEPROM

My first attempt at installing Fedora 37 was a fail. I don't think it was related to the EEPROM version, but while messing around with installing Fedora Core OS - I noticed that my EEPROM version was wildly out-of-date. As a precaution, it's worth following the instructions for upgrading the EEPROM since it only takes a few minutes and might save you some hassle down the road.

Note: I select the USB boot (with an SD Card fallback) - so that I have more options when messing around with my boards.

Create the microSD Image

Similar to my Debian Bullseye instructions, you'll need:

The Fedora project has some docs on various ways to install the OS, but just note the URLs are out-of-date.

I think the Fedora Media Writer is a very streamlined way to install any Fedora version, but you'll probably have the Raspberry Pi Imager installed already if you did the EEPROM upgrade.

Raspberry Pi Imager main page

Select your OS

For this first attempt, I suggest using Fedora Workstation 37. Personally, I've moved to Fedora Server (since I run my Pi's headless), and I'm investigating Fedora IoT or Fedora CoreOS to see if they'll make more sense for me on my RPis. The Pis are usually a test bed for my custom embedded hardware projects - so small footprint, easily updated, reliability, and stability are critical.

If you're following my suggestion, grab the "Fedora 37: aarch64 raw image" from https://getfedora.org/en/workstation/download/. The downloaded file will end with .aarch64.raw.xz.

Write the image

From Raspberry Pi Imager, click on "Choose OS" and then scroll to the bottom to select "Use Custom".

Select the image you just downloaded, then select your storage card, and click "Write".

When the writing finishes, plug the SD card into your Raspberry Pi, power it on, and wait until Fedora is loaded. Follow the first run instructions, and you're off to the races.

That's it!

No, seriously, that's all there is to it. It was super seamless. The whole time I was prepping to install and then installing, I was waiting for something to fail, but nothing ever did. Pretty great, eh?

[me@fedora37-rpi ~]$ neofetch
             .',;::::;,'.                me@fedora37-rpi
         .';:cccccccccccc:;,.            ---------
      .;cccccccccccccccccccccc;.         OS: Fedora Linux 37 (Workstation Edition) aarch64
    .:cccccccccccccccccccccccccc:.       Host: Raspberry Pi 4 Model B Rev 1.1 Unknown
  .;ccccccccccccc;.:dddl:.;ccccccc;.     Kernel: 6.0.7-301.fc37.aarch64
 .:ccccccccccccc;OWMKOOXMWd;ccccccc:.    Uptime: 2 hours, 31 mins
.:ccccccccccccc;KMMc;cc;xMMc:ccccccc:.   Packages: 1667 (rpm)
,cccccccccccccc;MMM.;cc;;WW::cccccccc,   Shell: bash 5.1.16
:cccccccccccccc;MMM.;cccccccccccccccc:   Resolution: 2560x1080
:ccccccc;oxOOOo;MMM0OOk.;cccccccccccc:   Terminal: /dev/pts/1
cccccc:0MMKxdd:;MMMkddc.;cccccccccccc;   CPU: (4) @ 1.500GHz
ccccc:XM0';cccc;MMM.;cccccccccccccccc'   Memory: 1384MiB / 3808MiB
ccccc;MMo;ccccc;MMW.;ccccccccccccccc;
ccccc;0MNc.ccc.xMMd:ccccccccccccccc;
cccccc;dNMWXXXWM0::cccccccccccccc:,
cccccccc;.:odl:.;cccccccccccccc:,.
:cccccccccccccccccccccccccccc:'.
.:cccccccccccccccccccccc:;,..
  '::cccccccccccccc::;,.