In this quick guide, we will be showing you how to upgrade Raspberry Pi OS from 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.
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?
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
I followed to the letter and now get an error message “Cannot currently show the dekstop” whether connecting to a monitor or through VNC
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
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
Hi Losif,
Glad to hear that you managed to fix the issue and thank you for sharing your solution here!
Cheers,
Emmet
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.
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
Hmm … just did this and my Pi no longer has any network connections. I’m researching possible options.
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
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.
Oops! Using an old version of Putty. Updated to V0.76. Problem fixed.
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.
remove openbox
after that, I had to install a bluetooth manager and all is working again
Hi Egbert,
Dank je wel! (Thank you very much!)
Your comment helped me tremendously in getting my desktop over VNC back!
Kudos to you!
Worked fine for me. No problems.
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?
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.
on my system this changed network interface name – had to change config files to get connection
what did you need to do?
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.
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.
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