A couple of weeks 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 a few weeks ago. It’s based upon Debian 11 and on the right hardware can provide a significant speed boost with certain 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 4, Compute Module 4 , or the Raspberry Pi 400) will likely choose to upgrade regardless.
Before you begin, I can’t stress enough that the best (and frankly, 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 backup your files anyway 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:
$ sudo apt update
2. Install all of the latest packages (and their dependencies):
$ sudo apt full-upgrade
3. Reboot your Pi to activate any packages that require a reboot:
$ sudo reboot
4. Optional, if you like to live on the edge! Update to the latest version of the Raspberry Pi firmware:
$ sudo rpi-update
Another reboot may be necessary after updating your firmware.
5. Next, edit your
sources.list file to switch your repository list from Buster to Bullseye:
$ sudo nano /etc/apt/sources.list
Locate the following line and change
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
Save your changes and proceed to the next step.
6. Update your repository lists again (this time it will be using the Bullseye-specific repositories):
$ sudo apt update
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.
$ sudo apt install nodejs
Note that you may receive a prompt to “Restart services during package upgrades without asking”. If so, choose “Yes”.
8. Update to the latest version of GCC 8 (this also helps avoid an error in the next step).
$ sudo apt install gcc-8-base
9. Run another full upgrade to install any additional Bullseye requirements and downstream dependencies:
$ sudo apt full-upgrade
NOTE: It’s at this point your Wi-Fi may go out! We’ll fix that in a bit.
10. Clean up your packages to remove any that are obsolete or no longer used:
$ sudo apt autoclean $ sudo apt autoremove
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!
$ sudo sed -i 's/dtoverlay=vc4-fkms-v3d/#dtoverlay=vc4-fkms-v3d/g' /boot/config.txt $ sudo sed -i 's/\[all\]/\[all\]\ndtoverlay=vc4-kms-v3d/' /boot/config.txt
12. When you’re all done, reboot your Pi:
$ sudo reboot
13. After a reboot, check to see if everything was updated properly:
$ cat /etc/os-release
This should return the following:
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)" NAME="Raspbian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
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 “autoconnect”.
If any wireless or network panels are missing from the taskbar, you can re-add those by right-clicking on the taskbar, choosing “Add/Remove Panel Items”, then adding the appropriate panels.
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.
While you’re here, if you’re curious about adding wireless cellular capabilities to your Raspberry Pi, check out the Notecard and get 10 years and 500 MB of cellular data using the Raspberry Pi starter kit!
Happy Hacking on the Pi! 👩💻