How to Upgrade Debian 8 Jessie to Debian 9 Stretch

Debian 9 Stretch was released as the latest stable version of the Linux Debian operating system today. While you can install Debian 9 Stretch fresh, you can also perform an in place upgrade from Debian 8 Jessie quite easily, which is what we will cover here.

For full documentation on the process, it is suggested that you also read through the official release notes.


  • Upgrading to Debian 9 Stretch is only supported from Debian 8 Jessie. If you are running a version older than 8, you must first upgrade to 8 before working through this process.
  • The upgrade involves a kernel update, so a reboot will be required toward the end of the process.
  • It is strongly recommended that you have a full system backup or backup of any important data before proceeding with the upgrade, ensure that you have a plan to roll back. In the case of a virtual machine, take a snapshot before starting.

Performing the upgrade to Debian 9 Stretch

In this example we’ll be upgrading from Debian 8.8.

root@debian8:~# cat /etc/debian_version

Before proceeding with the upgrade, please read through the list of issues to be aware of when upgrading to Stretch.

  1. It is recommended that you have your Debian 8 Jessie installation completely up to date before starting, to do this run “apt-get update” followed by “apt-get upgrade” and install available updates.
    root@debian8:~# apt-get update
    root@debian8:~# apt-get upgrade
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    In my case all updates have been applied already, so it’s fine to proceed.

  2. Edit the /etc/apt/sources.list file, my file is shown below. As you can see all of the lines are currently specifying “jessie”. Note that your mirror sources will likely be different which is fine.
    deb jessie main
    deb-src jessie main
    deb jessie/updates main contrib
    deb-src jessie/updates main contrib
    # jessie-updates, previously known as 'volatile'
    deb jessie-updates main contrib
    deb-src jessie-updates main contrib

    Change the instances of “jessie” to “stretch”, you can either do this manually, or automatically with the below sed command.

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

    my new sources.list file is shown below.

    deb stretch main
    deb-src stretch main
    deb stretch/updates main contrib
    deb-src stretch/updates main contrib
    # stretch-updates, previously known as 'volatile'
    deb stretch-updates main contrib
    deb-src stretch-updates main contrib

    You can either use “stretch” or “stable”, as Debian 9 Stretch is now the current stable version as of writing. However note that if you use stable instead of the specific release name, in future when Debian 10 is released that will be the stable version so you may upgrade to that unintentionally.

  3. The recommended way to upgrade Debian is with the ‘apt-get’ command. First update the list of available packages with the below command, as we’ve just updated the sources.list file.
    apt-get update
  4. Now that the list of available packages has been updated from the mirror, run the below command to perform a minimal upgrade.
    apt-get upgrade

    This is known as a minimal system upgrade as it only upgrades packages that can be upgraded without needing any other packages to be removed or installed, so it’s a safe place to start. This upgraded 932 packages requiring 412MB on my system.

  5. Now you’re ready to do the complete system upgrade, this will upgrade to the latest available version for all packages installed.
    apt-get dist-upgrade

    Ensure that you have enough free disk space to complete the operation, in my case it notes that afterwards 1,048MB of additional disk space will be used with 639 package upgrades and 479 newly installed packages.

    Note that this will remove conflicting obsoleted packages, potentially packages that you may want to keep, so check what it’s going to do by reading the output before proceeding.

  6. Once the upgrade has completed you may have packages that can be removed and are no longer required, you’ll see these when trying to use apt-get upgrade. We can clean these out by running “apt-get autoremove”.
    apt-get autoremove

    This cleaned 496MB of packages from my system that were identified as no longer being required after the upgrade.

  7. All that’s left to do is perform a reboot of the system, this is required as the kernel version has been updated. This can be done by simply entering “reboot” in the terminal.
    Before upgrade:
    root@debian8:~# uname -a
    Linux debian8 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2 (2017-04-30) x86_64 GNU/Linux
    After upgrade and system reboot:
    root@debian8:~# uname -a
    Linux debian8 #1 SMP Debian 4.9.30-2 (2017-06-12) x86_64 GNU/Linux

    As you can see the newer kernel version 4.9 is now in place after rebooting.

    You can also check the /etc/debian_version file to confirm that you’re on version 9.

    root@debian8:~# cat /etc/debian_version

    Now I just need to change my “debian8” hostname!

Debian 9 Stretch


As shown it’s quite a simple process to complete an in place upgrade from Debian 8 Jessie to Debian 9 Stretch. The process involves fully updating your Debian 8 installation, modifying the /etc/apt/sources.list file by changing instances of “jessie” to “stretch”, running an ‘apt-get update’, ‘apt-get upgrade’, followed by a ‘apt-get dist-upgrade’ and then finally a reboot so that the newer kernel version will be used.

Leave a comment ?


  1. “issues to be aware of when upgrading to Stretch” links back to this page

  2. An RHCE should be aware of the following Jarrod:

    # sed -i ‘s/jessie/stretch/g’ /etc/apt/sources.list

    Looking forward in upgrading my Jessie to Stretch otherwise, thanks for the article! :)

  3. My phpmyadmin now say undefined mysqi_connect

    • yes, please. I have the same problem. I’ve upgraded a bunch of debian computers and now, most of them have this kind of error and I can’t get my phpmyadmin to work.

      • Because php7.* has deprecation errors. Just upgrade your pma (PhpMyAdmin). If that doens’t work, dont use APT to install pma

  4. kernel should be 4.9 after? your code block is correct, but your text says it should be the previous version after.

  5. Is that a custom welcome screen after the SSH login in the last image in the article ?

    How can I have the same welcome screen ?


  6. Jim Christiansen

    Hello. Oddly, after the upgrade, my videos both in chrome and media players loads but won’t play. I can advance around in them but they just seem frozen…Mvp, Firefox and Chrome load videos but don’t play them. VLC loads and plays with no audio… Do you have any suggestions about where to begin fixing this? Thank for any ideas.

  7. Well, this procedure is really great – but only if it works perfectly.

    My experience over the last 3 Debian releases is that it NEVER works correctly: always missing something. Typical result = no KDE (must drop into Gnome), etc., etc., etc.

    I have found it quicker/more effective to download an Install .iso DVD and rebuild from that.

    apt and apt-get are very convenient for updating an installed & running system, but they are totally worthless in the event that ANYTHING goes wrong / ANY PACKAGE is missing.

    Follow these instructions if you wish, but be prepared to download the .iso an do a Total Reinstall…

  8. great instructional. Thanks.

  9. Works fine, even on a Raspberry Pi with Raspbian, which is sometimes a little picky regarding upgrades.

  10. Thank you!! I used your sources script and fixed my issue.

  11. Todo chingon en Azure :-)

  12. Very good! Congratulation!

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>