Upgrade time can be a daunting time specially if you are new or not that confident in performing upgrades, I will be covering the basics of upgrading which will allow you to perform an upgrade of your Debian 8 system to a Debian 9 system.

The system that I last performed the upgrade on was my personal Gitlab CE server so I will add a little at the end for gitlab-ce. The first thing that you want to do before making any changes is make sure you are familior with the server and it's primary function, for example is it a mail server, web server database server,file server etc... this will then enable you to test it's primary function once the upgrade has completed and point out any major problems that may crop up.

You will also want to ensure that you have a backup and that you are able to restore that backup in the event that it's required if it's a virtual machine then take a snapshot if posible. You should also consider how you will access the machine if there are problems, do you have physical access or remote access via an IPKVM/IPMI the last thing you want is for the server to go down in a remote location and you then can't get onto it or boot a live cd of some sort to try and fix it.

With all that said I have not had a system upgrade require remote access since one of my first debian 6 upgrades, leson learned the hard way......

As a general rule of thumb is, the less additional or 3rd party software installed on your system, the higher chance for a successful upgrade, if you have installed any 3rd party software or manually installed software then you should check if this will upgrade with the rest of the system, in some cases you may need to remove the software prior to performing the upgrade, I should also point out that MariaDB replaces MySQL in Debian 9, this change introduces some changes which are not backwards compatible with Debian 8 database format, as part of the upgrade your databases will be upgraded automatically. If you run into some problems with the upgrade you will not be able revert back, so it is important to ensure you have a backup of all your databases prior to the upgrade.

Upgrade existing system

Before starting the upgrade to Debian 9 you will need to ensure that your system is fully uptodate

apt-get update
apt-get upgrade
apt-get dist-upgrade

Checks for partially installed, missing and obsolete packages.

dpkg -C

Check what packages are held back if any.

apt-mark showhold

Before proceeding make sure you don't have any issues with packages or packages on hold.

Update Sources

The system should now be fully updated with no issues with packages so we can now update the sources.list file with the Debian Stretch sources.

Make a backup the current /etc/apt/sources.list

cp /etc/apt/sources.list /etc/apt/sources.list_backup_`date +%Y-%m-%d_%H-%M`

Edit your sources.list file and update the keyword jessie to stretch.


deb jessie main
deb jessie-updates main
deb jessie/updates main


deb stretch main
deb stretch-updates main
deb stretch/updates main

If you have other repos that need updating then you can do them to, here I have gitlab-ce so this was also updated Gitlab CE repo list /etc/apt/sources.list.d/gitlab_gitlab-ce.list JESSIE

# this file was generated by for
# the repository at

deb jessie main
deb-src jessie main


# this file was generated by for
# the repository at

deb stretch main
deb-src stretch main

If that seems like a bit to much work you could use a sed command to replace jessie to stretch for you.

sed -i 's/jessie/stretch/g' /etc/apt/sources.list
sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/gitlab_gitlab-ce.list

Upgrading The System

When upgrading the system will prompt for user input so be aware of this so don't issue the command and run!! After the sources are updated you will need to update the packages list then start the upgrade process

apt-get update
apt-get upgrade
apt-get dist-upgrade

You should now have your system fully upgraded to Debian 9 Jessie, reboot and then check services are working as expected.

After the reboot I also needed to run a small reconfigure for gitlab

gitlab-ctl reconfigure
gitlab-ctl restart

Add a comment

0.0(0 votes)

Next Post Previous Post