Debian 9 Stretch comes with a significant amount of new and updated packages as well as a score of packages had been marked obsolete. According to Debian release notes, the new release has a lot more software than its predecessor Jessie. The distribution includes a total of over 51687 packages, of which over 15346 are new packages. Majority of the software in Stretch has been updated: over 29859 software packages that is around 57% of all packages in Jessie. There are 6739 packages which are removed from Stretch due to various reasons.

In this tutorial, I will explain the process to upgrade Debian 8 Jessie to Debian 9 Stretch in a few simple steps.

Backup the data and configuration files

Before you start with the actual upgrade, first make sure that you backup all critical data and configurations. This especially includes configuration data in /etc directory and the user data in /home. If you are running a database server like MySQL or PostgreSQL on Debian 8, consider creating a backup of all your databases. The easiest way to backup everything is to create a server snapshot. For AWS EC2 or Digital Ocean droplet, you can create a snapshot from your server settings. If anything goes wrong during the upgrade, you will be able to revert back to old setup by restoring a snapshot.

Update Debian 8 packages

Before upgrading to Stretch, we will first install all available Jessie updates. To avoid an unwanted early upgrade to Stretch, you should first check the sources.list file to ensure that it only contains jessie sources and no stable sources. Run the following command to open the sources.list file on a command line editor:

$ nano /etc/apt/sources.list

Make sure your sources.list contains the following:

deb http://httpredir.debian.org/debian jessie main contrib non-free
deb http://httpredir.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org jessie/updates main contrib non-free

Now run the following commands to install and upgrade all the pending and current Jessie packages. It will make sure that your system is update-to-date for the upgrade to Stretch.

$ apt update
$ apt upgrade
$ apt dist-upgrade

Before we proceed with Stretch upgrade, check the package state to ensure that there are no packages on hold or in half installed state with the following commands:

$ dpkg --audit
$ dpkg --get-selections | grep hold

If both commands return nothing, then proceed with the next step.

Upgrade to Debian 9 Stretch

First of all, edit sources.list file again and replaces its content with the following lines:

$ nano /etc/apt/sources.list
deb http://httpredir.debian.org/debian stretch main contrib non-free
deb http://httpredir.debian.org/debian stretch-updates main contrib non-free
deb http://security.debian.org stretch/updates main contrib non-free

Save the file and then run the following commands to update and upgrade packages to Stretch:

$ apt update
$ apt upgrade
$ apt dist-upgrade

The last command will do the distribution upgrade to Debian 9 Stretch. If everything goes well, your server will be upgraded to Debian 9 Stretch. A reboot is required to finish the upgrade and to load the new kernel. Run the following command in your terminal to reboot:

$ reboot

That's all. If you want to check which Debian version you are currently running, execute the following command to take a look at the file /etc/os-release.

$ cat /etc/os-release

Join weekly newsletter and get latest tutorials from my blog and around the internet.

No spam, ever. You can unsubscribe anytime.

Follow @attacomsian on Twitter to stay up-to-date with posts on this blog. You can also follow me on LinkedIn and DEV.


Need help to start a new Spring Boot or MEAN stack project? I am available for contract work. Hire me to accomplish your business goals with engineering and design. Let’s talk about your project: hi@attacomsian.com.