How to upgrade Debian 10 (buster) to 11 (bullseye) safely
This tutorial explains the procedure to upgrade Debian 10 (buster) to Debian 11 (bullseye) in a few simple steps.
Before you start with the upgrade, backup all critical data. That’s especially the config data in the /etc directory and the user data in /home. When you run a server then you should include the databases (MySQL, PostgreSQL, etc), web and email data in the backup as well. The backup should be stored on an external hard disk, on an external server e.g. by FTP or on a cloud drive. Here are a few examples of how to create backups with tar.
Backup the configuration and data
Configuration files in the /etc directory.
tar -pczf etc.tar.gz /etc
Backup of the /var/www website directory.
tar -pczf www.tar.gz /var/www
Backup of the /home directories.
tar -pczf home.tar.gz /home
Backup of the /usr/local/directadmin directory.
tar -pczf direct_admin.tar.gz /usr/local/directadmin
Backup MySQL databases.
mysqldump --defaults-file=/etc/mysql/debian.cnf -cCeQ --hex-blob --quote-names --routines --events --triggers --all-databases -r all_databases.sql
Then move the tar.gz and .sql files for safe storage on a backup drive.
Check the apt sources.list file
We will install all available buster updates first before we upgrade to bullseye. On some systems, the package source is defined as “stable” in the sources.list file instead of “buster” or “bullseye”. To avoid an accidental early upgrade to bullseye, please check the sources.list now and ensure that it contains “buster” and not “stable” as source:
Use a command line editor like nano or vi to open /etc/apt/sources.list, the lines should be similar to the ones below:
deb http://deb.debian.org/debian/ buster main deb-src http://deb.debian.org/debian/ buster main deb http://deb.debian.org/debian/ buster-updates main deb-src http://deb.debian.org/debian/ buster-updates main deb http://security.debian.org/debian-security buster/updates main deb-src http://security.debian.org/debian-security buster/updates main
Update the packages for Debian 10
The following commands will install all pending buster updates. This ensures that your system is in a good shape for the update to buster.
Ready for the first upgrade:
Follow this with:
Check the package state to ensure that no packages are on hold or in half installed state
This test is important, we will check the package state to ensure that no packages are on hold or in half installed state. Your system and apt database must be in a good shape before we proceed with the dist upgrade. If there are any broken or “on hold” packages, then fix these issues before the upgrade.
Check that no packages are on hold by querying the package database with the dpkg command:
dpkg --audit dpkg --get-selections | grep hold
When both commands did not return any packages, then proceed with the upgrade.
Update the sources.list for Debian 11
Edit the /etc/apt/sources.list file again:
and replace its content with the following lines:
deb http://deb.debian.org/debian/ bullseye main deb-src http://deb.debian.org/debian/ bullseye main deb http://deb.debian.org/debian/ bullseye-updates main deb-src http://deb.debian.org/debian/ bullseye-updates main deb http://security.debian.org/debian-security bullseye-security main deb-src http://security.debian.org/debian-security bullseye-security main
Save the file and run the following command to update the sources database:
Check if packages are upgradable
We can test with apt command if the installed packages are upgradable. Run this command to perform the test:
apt list --upgradable
Debian 10 (buster) to Debian 11 (bullseye) Update in two steps
It is recommended to do the upgrade in two steps, first run “apt-get upgrade” to install the base packages and then run “apt-get dist-upgrade” to do the actual distribution upgrade,
Start with the update by running this command:
Next, we will do the distribution upgrade by running:
A reboot is required to finish the upgrade and load the new kernel:
Check the update
To check which Debian version is currently installed on the system, take a look at the file /etc/os-release.
The result on a Debian Bullseye system is:
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"