Debian 10 to Debian 11 in place upgrade

OS type and version Debian 10
Virtualmin version 7.3

Having searched the documentation and forums, I have not found an officially recommended way to upgrade Debian 10 to Debian 11.

Is there an official recommendation? If so, can it be added here? Upgrades and Migrations – Virtualmin

Hi @en3r0 ,

I was standing these day in front of this problem as well. I did some research and the best solution for me was actually to spin up a new Debian 11 VPS server. After this I moved all the Virtual-servers to the new one.


Upgrading distros is not within the scope of support that Virtualmin offers. You’d have to read about this kind of stuff at the distro website, however often a which Google search will turn up some good articles on the topic from those who’ve been through the process already.

Yeah, we haven’t had time to document an upgrade, though I would expect the old docs to be pretty close to reasonable for new upgrades.

The trickiest upgrades were back when one would have to go from non-systemd (either initscripts or upstart) to systemd…those days are long gone, and the past several years worth of Debian/Ubuntu and RHEL-based distros are systemd, so the upgrade isn’t painful, generally.

But, of course, the most likely to be successful and in a known good state would be to start with a fresh OS and migrate backups. But, if you’ve heavily customized your server (beyond just Virtualmin configuration, which can be backed up and moved easily), it may be more challenging to go that route.


I would also recommend setting up a new fresh server with Debian 11 and migrating… but here’s the cheat sheet I put together for 10 to 11 in-place upgrade:

Upgrade Debian 10 to Debian 11 Bullseye using the CLI

Step 1. Backup your system

lsb_release -a
uname -mrs
cat /etc/debian_version

Step 2. Update ALL existing installed packages

sudo apt-mark showhold # list any pkgs in hold status
sudo apt-mark unhold package_name # remove the host status for all listed packages one-by-one

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt --purge autoremove
sudo systemctl reboot

Step 3. Update /etc/apt/sources.list file

sudo vim /etc/apt/sources.list # change all references from Buster to Bullseye

# Debian 11 Bullseye
deb Index of /debian bullseye main contrib non-free
deb-src Index of /debian bullseye main contrib non-free
deb Index of /debian-security bullseye-security main contrib non-free
deb-src Index of /debian-security bullseye-security main contrib non-free
deb Index of /debian bullseye-updates main contrib non-free
deb-src Index of /debian bullseye-updates main contrib non-free
#deb Index of /debian bullseye-backports main contrib non-free
#deb-src Index of /debian bullseye-backports main contrib non-free

(additional virtualmin lines here)

sudo apt update

Step 4. Minimal system upgrade

sudo apt upgrade --without-new-pkgs # avoid the removal of large numbers of packages that you want to keep

Step 5. Upgrading Debian 10 to Debian 11

sudo apt full-upgrade
sudo systemctl reboot

Step 6. Verification

uname -r
lsb_release -a

Maybe remove unneeded packages

sudo apt --purge autoremove

1 Like

Tried these steps and even resolved issues with packages not upgrading correctly but still ended up with virtualmin not booting after a restart. Guess I should just bit the bullet and do a fresh install.

Or you could post what errors you get and we could help you solve it. It’s probably nothing serious; I’d be much more worried about everything other than Virtualmin/Webmin.

If I give it another go I will definitely do that, what logs would I look in for virtualmin errors?

Here are some I use:

journalctl --no-pager
journalctl -n 20
journalctl -f
journalctl --since “1 hour ago”
journalctl --since “2 days ago”
journalctl --since today
journalctl --since yesterday
journalctl -b
journalctl -u mysql.service -f
journalctl -n 50 --since “1 hour ago”
journalctl -u sshd.service -r -n 1

1 Like

Virtualmin, specifically, logs to the Webmin logs, which are in /var/webmin. Why it won’t start would either be in /var/webmin/miniserv.error or in the journal for the webmin unit.