The Idiot-Proof Guide to Upgrading Raspberry Pi from Buster to Bullseye

raspberry pi upgrade
Illustration: © IoT For All

A few months ago, I enjoyed a very traditional Thanksgiving at home: I spent the day avoiding my extended family and proceeded to upgrade my home computers to their latest OS versions! While migrating to macOS 12 Monterey and Windows 11 were relatively painless point-and-click procedures, upgrading my Raspberry Pi 4 Model B single-board computer from the Buster release to Bullseye involved a few extra steps. I’ll admit the difficulty of this process was exacerbated by the fact that I wanted to perform an in-place upgrade to maintain all previously installed packages and stored files.

A New Raspberry Pi OS?

You heard that right, a new version of Raspberry Pi OS (codenamed Bullseye) was released. It’s based upon Debian 11, and with the proper hardware, can provide a significant speed boost with specific tasks. There are numerous updates and enhancements to be found in Bullseye, not the least of which include:

  • An updated PiCamera driver (which will require re-writing your code BTW);
  • Replacing GTK+2 with GTK+3 to provide an improved GUI;
  • Using Mutter instead of Openbox for window management (if your Pi has >= 2GB of RAM);
  • A fresh new notification manager in the taskbar;
  • A better updating experience for installed packages;
  • An update to the Chromium browser (v92), which supports hardware-accelerated video playback.

For a complete list of Raspberry Pi Bullseye updates, consult this article from the folks at Raspberry Pi.

This new release of Raspberry Pi OS does technically work with any Raspberry Pi SBC (yes, including the Raspberry Pi Zero). However, unless you need features from Bullseye specifically, you might want to stay on your current release. Owners of a “4.x” Raspberry Pi (e.g., the Raspberry Pi 4Compute Module 4, or the Raspberry Pi 400) will likely choose to upgrade regardless.

Upgrading Caveats

Before you begin, I can’t stress enough that the best, and frankly most supported, way to upgrade to Bullseye is to backup all of your critical files and perform a clean install using the Raspberry Pi Imager; however, if you’re like me and choose to live dangerously, be sure to back up your files any way and buckle up for the ride.

Please be aware that the following process is not officially supported AND may temporarily disable Wi-Fi (see the note below) or lead to other unintended issues. Backup any critical files on your RPi before proceeding!

Step-by-Step Installation of Bullseye

Disclaimers aside (did you read the warning above?), here is a step-by-step set of steps for you to upgrade from Buster to Bullseye via the Raspberry Pi terminal.

  1. Open your Raspberry Pi terminal and update the repository lists:

2. Install all of the latest packages (and their dependencies):

3. Reboot your Pi to activate any packages that require a reboot:

4. Optional if you like to live on the edge! Update to the latest version of the Raspberry Pi firmware:

Another reboot may be necessary after updating your firmware.

  1. Next, edit your sources.list file to switch your repository list from Buster to Bullseye:

Locate the following line and change buster to bullseye:

Save your changes and proceed to the next step.

  1. Update your repository lists again (this time it will be using the Bullseye-specific repositories):

7. Install the latest version of Node.js (this helps avoid an error you may receive when running apt full-upgrade in step 9). This step may take several minutes.

Note that you may receive a prompt to “Restart services during package upgrades without asking.” If so, choose “Yes.”

  1. Update to the latest version of GCC 8 (this also helps avoid an error in the next step).

9. Run another complete upgrade to install any additional Bullseye requirements and downstream dependencies:

NOTE: It’s at this point your Wi-Fi may go out! We’ll fix that in a bit.

  1. Clean up your packages to remove any that are obsolete or no longer used:

11. Next, you need to alter your /boot/config.txt file to enable KMS (the new standard video driver). This is done by default with a clean install, but our upgrade process requires this change to be performed manually. Thanks to Linux Uprising for this tip!

12. When you’re all done, reboot your Pi:

13. After a reboot, check to see if everything was properly updated:

This should return the following:

Wi-Fi Not Working?

To reclaim your Wi-Fi, go to “Preferences” –> “Connman Settings” –> “Wireless” and then click on the SSID to which you want to connect. You may also want to click the ⚙️ icon next to the SSID and enable “auto-connect”.

If any wireless or network panels are missing from the taskbar, you can auto-connect those by right-clicking on the taskbar, choosing “Add/Remove Panel Items”, then adding the appropriate panels.

Great Success…?

It should be stated again here, at the end when you’ve already made the mistake of performing an in-place upgrade that this process is not officially supported by Raspberry Pi. Rather the supported upgrade path is a clean installation of Bullseye using the Raspberry Pi Imager.

Happy Hacking on the Pi!

Blues simplifies wireless communication. Our mission is to transform every physical product into an intelligent service, helping communities and companies to save time and money, and improve the world.
Blues simplifies wireless communication. Our mission is to transform every physical product into an intelligent service, helping communities and companies to save time and money, and improve the world.