Upgrading to Raspberry Pi OS Bullseye

In this quick guide, we will be showing you how to upgrade Raspberry Pi OS from Buster to Bullseye.

Raspberry Pi OS Upgrade Buster to Bullseye

Raspberry Pi OS Bullseye brings with it a wealth of changes to both the desktop frontend and the underlying backend.

These changes include adding a new window manager, an updated video driver, an updater plugin for the desktop interface, and a refined file manager.

Upgrading your Pi to use this new version of the operating system is a reasonably straightforward process. However, it can cause issues. If possible, we recommend that you start with a fresh image of Raspberry Pi OS when upgrading to a new major version.

Before you begin, please note that upgrading your Raspberry Pi to use Bullseye is a risky process. There is a chance that this upgrade process can wreck your installation, meaning you will have to start from scratch.

If you do not want to lose files from your SD card, please make sure that you perform a backup before continuing.

Preparing your Sources File for Raspberry Pi OS Bullseye

Our first task is to adjust the source list files to point to “bullseye” instead of “buster“. Changing this will ensure that the package manager will start looking for the newer versions of any existing packages.

1. The first source file that we will be modifying is located at “/etc/apt/sources.list“. This file is the main list of sources.

You can begin editing this file by using the following command on your Raspberry Pi.

sudo nano /etc/apt/sources.list

2. Within this file, you will need to replace any occurrence of “buster” with “bullseye“.

For example, you should see the following line within this file.

deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

You will need to change this line so that it looks like the following.

deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi

3. Once you have changed all occurrences of “buster” to “bullseye” within this file, you can save your changes.

To save your changes, press CTRL + X, then Y, and finally the ENTER key.

4. You may also need to modify some additional source lists. These lists are typically kept within the “/etc/apt/sources.list.d” directory.

It is possible to list all of the files in this directory by running the command below.

ls /etc/apt/sources.list.d/

From this command, you should get a result somewhat like the following.

raspi.list  vscode.list

Each file provided by this command will need to be modified with all references to “buster” being replaced with “bullseye“.

5. For example, to edit the “raspi.list” file, we will run the command below, using the nano text editor to open the file.

sudo nano /etc/apt/sources.list.d/raspi.list

6. Once all files have been modified, you can now proceed to upgrade your Raspberry Pi from Buster to Bullseye

Updating Raspberry Pi OS to Bullseye

With the sources file updated, we can begin upgrading Raspberry Pi OS from Buster to Bullseye.

You are at the point of no return, now is the last time you can back out of the upgrade process without having to restore from a backup.

1. As we modified the source files, we will need to run an update. This update will grab new package lists from our modified repositories.

This is a crucial part of the upgrading process. Up until now, the package manager won’t be aware that packages are now out of date.

sudo apt update

2. As part of the upgrade process to Raspberry Pi OS Bullseye, we will need to install some new packages.

These are a required dependency of the distribution and can not be skipped.

You can install these new packages by running the following command on your device.

sudo apt install -y libgcc-8-dev gcc-8-base

Please note, quite a few packages will be downloaded and installed as part of this process. So please be patient while it completes.

During this installation, you may be prompted whether you want services to be automatically restarted. It is safe to select the “<Yes>” option.

3. Finally, everything is set up for us to perform the upgrade to Bullseye.

To begin upgrading all of the packages on your system, run the following command.

sudo apt full-upgrade

This upgrade process will take considerable time as a ton of packages will need to be upgraded or installed.

Please note that during the upgrade process you may have to press the ENTER key from time to time to continue the process.

4. Once the upgrade process completes, do not turn off or restart your device.

We still need to make several other changes before your Raspberry Pi is ready to run Bullseye. Make sure you follow the next two sections.

Modifying an Incorrect dhcpcd Configuration File

Our next task is to remove one of the configuration files for “dhcpcd” that is pointing to an incorrect location. Without changing this file your Raspberry Pi can fail to retrieve an IP address while running Bullseye.

1. We can verify that this file exists within our current distribution by using the stat command.

sudo stat /etc/systemd/system/dhcpcd.service.d/wait.conf

If the file does not exist you will see text saying that there is “No such file or directory“.

2. Now that we know the file exists we can now modify it.

To begin editing the config file all you need to do is use the following command within the terminal.

sudo nano /etc/systemd/system/dhcpcd.service.d/wait.conf

3. Within this file you will need to find and replace the following lines. We are essentially just changing the configuration so that it points to the correct location of the dhcpcd binary.

ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w

Replace the line with the following:

ExecStart=/usr/sbin/dhcpcd -q -w

4. Once you have made these changes, save the file by pressing CTRL + X, then Y, followed by the ENTER key.

Modifying the Boot Configuration

The last step upgrading to Raspberry Pi OS Bullseye requires us to modify the boot config file.

As the video driver for Raspberry Pi OS has been changed with the move to Bullseye, we will need to make some changes to the boot configuration file.

For this guide, we will be assuming you are completing these steps on the Raspberry Pi itself. However, you can access this file when you plug your SD card into a computer.

1. Begin modifying the boot configuration file by using the command below on your Pi.

To edit this file, we will be relying on the nano text editor again.

sudo nano /boot/config.txt

2. Within this file, we need to comment out the original “dtoverlay” line by adding a “#” to the front of it.

We need to do this is no longer a Raspberry Pi 4 only driver.

dtoverlay=vc4-fkms-v3d

Replace with the following.

#dtoverlay=vc4-fkms-v3d

3. With that line commented out, our next step is to add the new “dtoverlay” line. With this change, we are telling the Pi to load in the new video driver.

This line will need to be added to the “[all]” section at the bottom of the config file.

[all]

Once you have found the “[all]” section, add the following line below it.

dtoverlay=vc4-kms-v3d

4. With the changes made, save and quit out of the file by pressing CTRL + X, then Y, followed by the ENTER key.

5. Finally, it is safe to restart your Raspberry Pi.

You can safely restart your device by using the following command on your device.

sudo reboot

Hopefully, the upgrade process from Raspberry Pi OS Buster to Bullseye has been successful. However, if your Pi fails to boot correctly or you run into issues, the upgrade process will likely not .

Conclusion

At this point in the guide, you should now understand how you can upgrade from Raspberry Pi Buster to Bullseye.

OS Bullseye has a lot of under the hood improvements and access to updated versions of numerous packages.

The process of upgrading your existing OS is straightforward but time-consuming. Not all systems will upgrade cleanly, so it’s best to either make a backup or start from a clean Bullseye image.

If you have run into any issues upgrading your system to the latest version, please comment below.

Additionally if you run into any issues when running one of our tutorials on Bullseye, please make a comment on that guide. We will be ensuring compatibility with Bullseye as issues are reported.

With your system upgraded to Bullseye, you can check out our extensive range of Raspberry Pi projects to see what you can do on your system.

22 Comments

  1. Avatar for Richard
    Richard on

    Hi,

    Thanks for the guide i used it back in the day to upgrade from buster to bullseye i am wondering if you could do another guide for bullseye to Bookworm or is it to much of a difference on the underlying functions to require a SD wipe and to reconfigure everything?

    1. Avatar for Emmet
      Emmet on
      Editor

      Hi Richard,

      It is possible to upgrade from Bullseye to Bookworm and it is something I can quickly write up a guide for. There are some pretty significant risks in doing so due to some major changes in Bookworm, however, it doesn’t hurt to try if you ahve to start over anyway.

      I will quickly write up a guide later today and will try and remember to add the link to this comment.

      Please check out our guide on upgrading from Raspberry Pi OS Bullseye to Bookwork.

      Kind Regards,
      Emmet

  2. Avatar for Iosif
    Iosif on

    I followed to the letter and now get an error message “Cannot currently show the dekstop” whether connecting to a monitor or through VNC

    1. Avatar for Emmet
      Emmet on
      Editor

      Hi Losif,

      Sadly the upgrade process is far from flawless. There is the chance that something was broke during the upgrade process.

      Does the error message get displayed on your screen when using a monitor, or does your screen remain blank? Additionally upon bootup do you at least see the Pi’s bootloader.

      My line of thought is that it may be attempting to use a resolution that isn’t supported by either your monitor or VNC

      Cheers,
      Emmet

    2. Avatar for Iosif
      Iosif on

      Just commented all references to dtoverlay and now everything works fine. I thought I didn’t need it as I dodn’t have it in the first place

    3. Avatar for Emmet
      Emmet on
      Editor

      Hi Losif,

      Glad to hear that you managed to fix the issue and thank you for sharing your solution here!

      Cheers,
      Emmet

  3. Avatar for Paweł
    Paweł on

    Please add to your guide, that before any reboots, once the full-upgrade is done, it’s the best approach to manually delete the file:

    `/etc/systemd/system/dhcpcd.service.d/wait.conf`

    Otherwise the DHCP service won’t start (as the config points to wrong binary) and if you use headless Raspi, it will save you a lot of troubles trying to do it without network.

    1. Avatar for Emmet
      Emmet on
      Editor

      Hi Pawel,

      Thank you very much for pointing this out.

      I have added work around steps as part of the upgrade process so hopefully others will be able to avoid this issue.

      Cheers,
      Emmet

  4. Avatar for Michael Wallis
    Michael Wallis on

    Hmm … just did this and my Pi no longer has any network connections. I’m researching possible options.

    1. Avatar for Emmet
      Emmet on
      Editor

      Hi Michael,

      There is a chance a file located at “/etc/systemd/system/dhcpcd.service.d/wait.conf” is causing you issues.

      Please try following our section titled “Modifying an Incorrect dhcpcd Configuration File” and let me know if it helps you out.

      Cheers,
      Emmet

  5. Avatar for Rick Crosoer
    Rick Crosoer on

    I get a Putty Fatal Error. Couldn’t agree a key exchange algorithm…
    Looks like an old key needs to be removed. Anybody got this error and found the location of the offending key?

    Looks like the server is running OK, just the SSH problem.

    1. Avatar for Rick
      Rick on

      Oops! Using an old version of Putty. Updated to V0.76. Problem fixed.

  6. Avatar for Egbert Nierop
    Egbert Nierop on

    for me, this wrecked my desktop. It seems that bullseye defaults to using openbox, instead of xfce. I had to add xfce again, reboot, and remove openbox.

    sudo apt install -y  xfce4 xfce4-goodies
    make sure xfce is default
    sudo update-alternatives --config x-session-manager

    remove openbox

    sudo apt remove openbox
    sudo reboot

    after that, I had to install a bluetooth manager and all is working again

    1. Avatar for Jan
      Jan on

      Hi Egbert,

      Dank je wel! (Thank you very much!)

      Your comment helped me tremendously in getting my desktop over VNC back!

      Kudos to you!

  7. Avatar for David Reed
    David Reed on

    Worked fine for me. No problems.

  8. Avatar for ramzez
    ramzez on

    after following this tutorial my raspberry pi no longer works ( I have headless one). just doesn’t connect, waiting on micro hdmi adapter now to figure out what went wrong. if anyone has an idea how to fix it would be great?

    1. Avatar for Laurel Raven
      Laurel Raven on

      If it’s wireless, I’m having the same problem; thankfully, mine is already hooked to a monitor (it’s part of a lab I play around with, figured this would be the best to test the upgrade on), so I’m able to at least troubleshoot. If you have the option, I don’t think this issue affects the ethernet port.

      I don’t really know what the issue is yet, but I’ve been able to do a workaround by getting onto the console, stopping the wpa_supplicant service (sudo systemctl stop wpa_supplicant.service) and manually running the wpa_supplicant pointed at its config file (sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -iwlan0). It then connects to the wifi configured in wpa_supplicant.conf just fine and I’m able to remote on to continue troubleshooting.

      I also had it soft block the wifi on reboot with rfkill, which I fixed with `sudo rfkill unblock all`. I’m not really sure where to go from here but I’m continuing to poke at it and if I find an answer I’ll add it here.

      I have a feeling it’s going to turn out to be yet another wonderful part of systemd that’s causing the problem.

  9. Avatar for Name
    Name on

    on my system this changed network interface name – had to change config files to get connection

    1. Avatar for ramzez
      ramzez on

      what did you need to do?

  10. Avatar for Radu
    Radu on

    Just to test this, i tried with the most useless pi in my house.
    Following this tutorial bricked by RPi3. im stuck in the command line with no wifi working and no desktop environment. so no ssh or vnc.
    Unbelievable that they expect to fresh install each pi, remember how to configure each pi and each app for it…
    not wasting days for this anytime soon, should have been a simple `apt update && apt full-upgrade` not a week long project involving starting from 0. unbelievable.

  11. Avatar for Wian
    Wian on

    FYI, vc4-kms-v3d does not play nice with Pi 1B+. Issues include displays turning off after boot, load average of 7 and inability to reboot due to the logs being spammed with:
    Oct 30 13:32:32 pidisplay kernel: [ 38.861756] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
    Oct 30 13:32:32 pidisplay kernel: [ 38.871952] Registered IR keymap rc-cec
    Oct 30 13:32:32 pidisplay kernel: [ 38.872382] rc rc0: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0
    Oct 30 13:32:32 pidisplay kernel: [ 38.872790] input: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0/input1

    I replaced vc4-kms-v3d with vc4-fkms-v3d and all the sudden it’s fine after a hard power cycle.

  12. Avatar for Jonas Rademacher
    Jonas Rademacher on

    Hey,
    following your instructions I found a problem with the new bullseye-sources.
    The security source has to be changed from “buster” to “bullseye-security”
    –> deb-src http://deb.debian.org/debian-security/ bullseye-security main
    Otherwise an error will occur on apt-update

    Best Regards
    Jonas

Leave a Reply

Your email address will not be published. Required fields are marked *