{"id":182174,"date":"2025-08-09T23:07:54","date_gmt":"2025-08-09T23:07:54","guid":{"rendered":"https:\/\/linuxiac.com\/?p=182174"},"modified":"2025-08-14T21:51:50","modified_gmt":"2025-08-14T21:51:50","slug":"how-to-upgrade-to-debian-13-trixie-from-12-bookworm","status":"publish","type":"post","link":"https:\/\/linuxiac.com\/how-to-upgrade-to-debian-13-trixie-from-12-bookworm\/","title":{"rendered":"How to Upgrade to Debian 13 (Trixie) from 12 (Bookworm)"},"content":{"rendered":"\n<p>After more than two years in the making, <a href=\"https:\/\/linuxiac.com\/debian-13-trixie-released-this-is-whats-new\/\">Debian 13 (Trixie)<\/a> has finally arrived\u2014packed with a bunch of new features and improvements. It\u2019s no surprise that many <a href=\"https:\/\/linuxiac.com\/debian-12-bookworm-released\/\">Debian 12<\/a> users are already itching to make the jump to this latest stable release.<\/p>\n\n\n\n<p>If that\u2019s you, I have some good news for you &#8211; you\u2019re in the right place. While the upgrade process is pretty straightforward, it\u2019s always best to do it the safe way\u2014following the right steps, in the right order, with the right guidance. And that\u2019s exactly the purpose of this article.<\/p>\n\n\n\n<p>I&#8217;ll walk you through the process of upgrading to Debian 13 (Trixie) from Debian 12 (Bookworm), covering all key points to navigate this major version transition successfully.<\/p>\n\n\n\n<p>Naturally, the time it takes to finish the task will depend on how many packages you\u2019ve got installed and how powerful your hardware is. But for most cases, the whole process usually wraps up in about 30 to 60 minutes.<\/p>\n\n\n\n<p>Needless to say, everything you\u2019ll see below has been tested and proven to work in our lab. And as always, the goal is simple\u2014making your upgrade to Trixie as smooth and hassle-free as possible. So, let\u2019s do it together.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Take System Backup<\/h2>\n\n\n\n<p>First, let\u2019s ensure all your important data is safe. Before doing anything else, <strong>I strongly recommend<\/strong> fully backing up your Bookworm installation using one of the system snapshot tools you\u2019re familiar with. If you\u2019re not sure which one to go with, check out <a href=\"https:\/\/linuxiac.com\/best-free-hard-disk-imaging-software\/\">my recommendations<\/a> on the topic.<\/p>\n\n\n\n<p>Thus, if something goes wrong, you can restore it to its previous state with all the vital data.<\/p>\n\n\n\n<p>However, if you do not feel like taking the above approach, you can instead use a command like the one shown below, which will archive all of the more critical directories and their contents in a&nbsp;<a href=\"https:\/\/linuxiac.com\/how-to-untar-tar-gz-file\/\">tar.gz archive<\/a>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo tar czf \/bookworm.tar.gz \\\n     --exclude=\/bookworm.tar.gz \\\n     --exclude=\/dev \\\n     --exclude=\/run \\\n     --exclude=\/mnt \\\n     --exclude=\/proc \\\n     --exclude=\/sys \\\n     --exclude=\/tmp \\\n     --exclude=\/media \\\n     --exclude=\/lost+found \\\n     \/<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Feel free to add more \u201c<em>\u2013exclude=<\/em>\u201d parameters if needed. Finally, the command creates a backup of all files in the \u201c<em>bookworm.tar.gz<\/em>\u201d file located on the root partition (\/), which you should ideally transfer to another computer or drive, for example,&nbsp;<a href=\"https:\/\/linuxiac.com\/scp-command-in-linux\/\">using the SCP command<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Update All Software<\/h2>\n\n\n\n<p>Ensure you have a fully updated Debian 12 system. Run the three commands below to ensure no packages are waiting to be updated. If there are, apply them before moving on.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt update\nsudo apt upgrade\nsudo apt full-upgrade<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Next, I recommend cleaning off any leftover packages and rebooting the system.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt --purge autoremove\nsudo reboot<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>By the end, you\u2019ll need to end up with the fully updated latest minor release of Debian 12 series \u2014 which, at the time of writing, is <a href=\"https:\/\/linuxiac.com\/debian-12-11-released-with-security-fixes-and-stability-updates\/\">version 12.11<\/a>. You can quickly check this by running the command below.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">cat \/etc\/debian_version<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01.jpg\"><img decoding=\"async\" width=\"1024\" height=\"687\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01-1024x687.jpg\" alt=\"Ensure you have a fully updated Debian 12 system.\" class=\"wp-image-182231\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01-1024x687.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01-380x255.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01-768x516.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-01.jpg 1144w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ensure you have a fully updated Debian 12 system.<\/figcaption><\/figure>\n\n\n\n<p>Below is our current fully-updated Debian 12 (Bookworm) system before we upgrade to Debian 13 (Trixie).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10.jpg\"><img decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10-1024x640.jpg\" alt=\"Debian 12 before starting the upgrade to Debian 13.\" class=\"wp-image-182285\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10-1024x640.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10-380x238.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10-768x480.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10-1536x960.jpg 1536w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-10.jpg 1680w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Debian 12 before starting the upgrade to Debian 13.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Check for Installed Non-Debian Packages<\/h2>\n\n\n\n<p>Before proceeding with the upgrade to Trixie, following best practices, we will check if any additional packages currently installed on our system are from outside the official Debian 12 repositories.<\/p>\n\n\n\n<p>We do this because, over time, we might have installed extra server or client software on our Debian 12 system that didn\u2019t come from the official Debian repositories\u2014things like Google Chrome, VirtualBox, and so on.<\/p>\n\n\n\n<p>In that case, this may cause complications when upgrading to Debian 13, as these external repositories may not yet be set up to work with the Trixie release.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">sudo apt <span class=\"hljs-keyword\">list<\/span> <span class=\"hljs-string\">'?narrow(?installed, ?not(?origin(Debian)))'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-02.jpg\"><img decoding=\"async\" width=\"983\" height=\"269\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-02.jpg\" alt=\"Check for installed packages from non-Debian repositories.\" class=\"wp-image-182240\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-02.jpg 983w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-02-380x104.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-02-768x210.jpg 768w\" sizes=\"(max-width: 983px) 100vw, 983px\" \/><\/a><figcaption class=\"wp-element-caption\">Check for installed packages from non-Debian repositories.<\/figcaption><\/figure>\n\n\n\n<p>As you can see, the check showed that we have a Docker and Google Chrome installation that is from non-Debian repositories. So what do we do in such a situation?<\/p>\n\n\n\n<p>My best and recommended advice is, if the installed software is not critical to your needs, to uninstall it and reinstall it after successfully upgrading to Debian 13 to avoid issues.<\/p>\n\n\n\n<p>However, in this case, with Docker and Google Chrome, since the software is from proven companies that immediately made their software compatible with Debian 13, we will continue upgrading to Trixie without removing it.<\/p>\n\n\n\n<p>In addition, check for packages that, for some reason, you have specified not to be updated. You can do this by running:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt-mark showhold<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If the command returns an empty output, it is okay to move on. However, if you get a list of package names, you must allow them to be updated, as for each manually executed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt-mark unhold package_name<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Finally, if you use the Debian backports repositories, the packages from bookworm-backports have lower version numbers than those in Trixie, so they should upgrade just like regular Bookworm packages during the distribution upgrade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Modify Software Sources Files<\/h2>\n\n\n\n<p>The Debian software repositories are defined in the \u201c<em>\/etc\/apt\/sources.list<\/em>\u201d file and the \u201c<em>\/etc\/apt\/sources.list.d\/<\/em>\u201d directory. Before upgrading, <strong>you must<\/strong> update them to point to the Debian 13 (Trixie) repositories.<\/p>\n\n\n\n<p>Before you do so, however, it is a good practice to back up the current software repositories\u2019 configuration files. We\u2019re doing this just in case something goes wrong with the commands below, so we can easily restore the original files if needed.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">mkdir ~\/apt\ncp \/etc\/apt\/sources.list ~\/apt\ncp -r \/etc\/apt\/sources.list.d\/ ~\/apt<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Now, let&#8217;s update the current Debian 12 (Bookworm) repositories to those of Debian 13 (Trixie).<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo sed -i <span class=\"hljs-string\">'s\/bookworm\/trixie\/g'<\/span> \/etc\/apt\/sources.list\nsudo sed -i <span class=\"hljs-string\">'s\/bookworm\/trixie\/g'<\/span> \/etc\/apt\/sources.list.d\/*<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The above commands will replace the \u201c<em>bookworm<\/em>\u201d keyword with \u201c<em>trixie<\/em>\u201d in software repository files. After the changes, the final version of your \u201c<em>\/etc\/apt\/sources.list<\/em>\u201d file should look something like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">deb http:\/\/deb.debian.org\/debian\/ trixie main contrib non-free non-free-firmware\ndeb http:\/\/security.debian.org\/debian-security trixie-security main contrib non-free non-free-firmware\ndeb http:\/\/deb.debian.org\/debian\/ trixie-updates main contrib non-free non-free-firmware<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03.jpg\"><img decoding=\"async\" width=\"1024\" height=\"204\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03-1024x204.jpg\" alt=\"Debian 13\u2019s sources.list file.\" class=\"wp-image-182249\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03-1024x204.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03-380x76.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03-768x153.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-03.jpg 1096w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Debian 13\u2019s sources.list file.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Perform an Initial Minimal Upgrade<\/h2>\n\n\n\n<p>At this point, your Debian 12 system is ready to be upgraded to Debian 13. The first step is to update the repository to let the system recognize the newly added repo URLs.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt update<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-04.jpg\"><img decoding=\"async\" width=\"950\" height=\"358\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-04.jpg\" alt=\"Packages awaiting update.\" class=\"wp-image-182258\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-04.jpg 950w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-04-380x143.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-04-768x289.jpg 768w\" sizes=\"(max-width: 950px) 100vw, 950px\" \/><\/a><figcaption class=\"wp-element-caption\">Packages awaiting update.<\/figcaption><\/figure>\n\n\n\n<p>Once the command finishes running, you\u2019ll notice that quite a lot of packages\u2014over 1,300 in this case\u2014are ready for an update. That\u2019s perfectly fine\u2014we can move on.<\/p>\n\n\n\n<p>According to the official Debian documentation, the recommended way to handle the upgrade is to break it into two separate steps.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Minimal system upgrade<\/li>\n\n\n\n<li>Full system upgrade<\/li>\n<\/ol>\n\n\n\n<p>So, let&#8217;s proceed with the first step, which tells APT to upgrade all currently installed packages to their latest available versions \u2014 but without installing any brand-new packages that aren\u2019t already on your system. This option is handy for a safer, more minimal update.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt upgrade --without-new-pkgs<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05.jpg\"><img decoding=\"async\" width=\"1024\" height=\"597\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05-1024x597.jpg\" alt=\"Debian 13 minimal upgrade.\" class=\"wp-image-182261\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05-1024x597.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05-380x222.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05-768x448.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-05.jpg 1140w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Debian 13 minimal upgrade.<\/figcaption><\/figure>\n\n\n\n<p>Just hit &#8220;<em>Enter<\/em>&#8221; and keep an eye on the screen \u2013 it will show you important information about some upgraded packages. Press \u201c<em>q<\/em>\u201d after reading to exit the pager and continue the upgrade.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-06.jpg\"><img decoding=\"async\" width=\"1007\" height=\"665\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-06.jpg\" alt=\"Important information about any of the updated packages.\" class=\"wp-image-182264\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-06.jpg 1007w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-06-380x251.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-06-768x507.jpg 768w\" sizes=\"(max-width: 1007px) 100vw, 1007px\" \/><\/a><figcaption class=\"wp-element-caption\">Important information about any of the updated packages.<\/figcaption><\/figure>\n\n\n\n<p>In addition, the upgrade process will prompt for permission to restart services without asking. Choose \u201c<em>Yes<\/em>\u201d and hit \u201c<em>Enter<\/em>.\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07.jpg\"><img decoding=\"async\" width=\"1024\" height=\"605\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07-1024x605.jpg\" alt=\"Accept services to be auto-restarted.\" class=\"wp-image-182267\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07-1024x605.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07-380x225.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07-768x454.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-07.jpg 1093w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Accept services to be auto-restarted.<\/figcaption><\/figure>\n\n\n\n<p>Be patient. During the process, you may also be asked what you want to do with a specific configuration file whose content you\u2019ve changed so it no longer matches what\u2019s expected in the updated package. If you\u2019re unsure what to do, go with defaults by pressing the \u201c<em>Enter<\/em>\u201d key to continue with the upgrade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Upgrade to Debian 13 (Trixie) from Debian 12 (Bookworm)<\/h2>\n\n\n\n<p>Once the minimal system upgrade completes, run the following command to begin the full upgrade.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt full-upgrade<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You\u2019ll see a long list of packages that are about to be updated. Hit &#8220;<em>Enter<\/em>&#8221; and again, keep an eye on the screen, read the notifications, and perform the necessary actions required for the upgrading process to proceed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08.jpg\"><img decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08-1024x468.jpg\" alt=\"Performing a full upgrade to Debian 13.\" class=\"wp-image-182270\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08-1024x468.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08-380x174.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08-768x351.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-08.jpg 1063w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Performing a full upgrade to Debian 13.<\/figcaption><\/figure>\n\n\n\n<p>The command will upgrade all packages, install new dependencies, and remove packages if necessary to complete the upgrade. So, hang tight \u2014 it\u2019s going to take just a little longer. Once everything is complete, reboot the system.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo reboot<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-09.jpg\"><img decoding=\"async\" width=\"931\" height=\"410\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-09.jpg\" alt=\"Once the update\u2019s done, go ahead and reboot your system.\" class=\"wp-image-182273\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-09.jpg 931w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-09-380x167.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-09-768x338.jpg 768w\" sizes=\"(max-width: 931px) 100vw, 931px\" \/><\/a><figcaption class=\"wp-element-caption\">Once the update\u2019s done, go ahead and reboot your system.<\/figcaption><\/figure>\n\n\n\n<p>And that\u2019s all. Your system has been successfully upgraded to version 13 (Trixie) from 12 (Bookworm). Log in, and enjoy your newly upgraded Debian system.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13.jpg\"><img decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13-1024x640.jpg\" alt=\"The system was successfully upgraded to Debian 13 (Trixie) from Debian 12 (Bookworm).\" class=\"wp-image-182312\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13-1024x640.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13-380x238.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13-768x480.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13-1536x960.jpg 1536w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-13.jpg 1680w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">The system was successfully upgraded to Debian 13 (Trixie) from Debian 12 (Bookworm).<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Installation Steps<\/h2>\n\n\n\n<p>Now it&#8217;s time to update your Debian repository configuration files, switching from the old format used in Bookworm to the newer one introduced in Trixie. If you don\u2019t do it, APT will still work just fine either way\u2014but you might see a \u201cmodernize sources\u201d warning when running APT commands.<\/p>\n\n\n\n<p>So, to keep things clean and avoid the extra message, it\u2019s worth taking a moment to make the change.<\/p>\n\n\n\n<p>It&#8217;s a single command, a helper tool introduced in newer versions of APT, which automates the conversion of your system\u2019s software repository configuration from the older .list\u2011based format (&#8220;<em>\/etc\/apt\/sources.list<\/em>&#8221; and files under &#8220;<em>\/etc\/apt\/sources.list.d\/<\/em>&#8220;) to the newer, structured <a href=\"https:\/\/manpages.debian.org\/trixie\/dpkg-dev\/deb822.5.en.html\" target=\"_blank\" rel=\"noreferrer noopener\">deb822 format<\/a> that uses &#8220;<em>.sources<\/em>&#8221; files.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt modernize-sources<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-14.jpg\"><img decoding=\"async\" width=\"961\" height=\"462\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-14.jpg\" alt=\"Modernizing APT's repo configuration files.\" class=\"wp-image-183278\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-14.jpg 961w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-14-380x183.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-14-768x369.jpg 768w\" sizes=\"(max-width: 961px) 100vw, 961px\" \/><\/a><figcaption class=\"wp-element-caption\">Modernizing APT&#8217;s repo configuration files.<\/figcaption><\/figure>\n\n\n\n<p>If you\u2019re curious to see what the new files look like, just run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">cat \/etc\/apt\/sources.list.d\/debian.sources<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-15.jpg\"><img decoding=\"async\" width=\"977\" height=\"564\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-15.jpg\" alt=\"APT configuration files in deb822 format.\" class=\"wp-image-183281\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-15.jpg 977w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-15-380x219.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-15-768x443.jpg 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/><\/a><figcaption class=\"wp-element-caption\">APT configuration files in deb822 format.<\/figcaption><\/figure>\n\n\n\n<p>Your old files are still there\u2014they\u2019ve just been automatically renamed with an added &#8220;<em>.bak<\/em>&#8221; extension. For example: &#8220;<em>\/etc\/apt\/sources.list.bak<\/em>.&#8221; Of course, with this new name, APT won\u2019t use them anymore.<\/p>\n\n\n\n<p>And one last step &#8211; let&#8217;s clean up the leftover Debian 12 packages. Execute the command below\u2014you\u2019ll be asked to confirm the removal\u2014just type &#8220;<em>y<\/em>&#8221; to proceed.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt --purge autoremove<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-12.jpg\"><img decoding=\"async\" width=\"980\" height=\"666\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-12.jpg\" alt=\"Removing obsolete packages.\" class=\"wp-image-182306\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-12.jpg 980w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-12-380x258.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2025\/08\/debian-12-to-13-upgrade-12-768x522.jpg 768w\" sizes=\"(max-width: 980px) 100vw, 980px\" \/><\/a><figcaption class=\"wp-element-caption\">Removing obsolete packages.<\/figcaption><\/figure>\n\n\n\n<p>Finally, delete the outdated package files from the local APT cache.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo apt autoclean<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>As you can see, upgrading from Debian 12 (Bookworm) to Debian 13 (Trixie) is straightforward when you follow the right steps. Once the upgrade is complete, verify that all services are running correctly and that your applications are functioning as expected.<\/p>\n\n\n\n<p>I made this guide as simple as possible. Thanks for taking the time to read it and for using it. As always, your comments are most welcome.<\/p>\n\n\n\n<p>For additional help, check&nbsp;the official Debian <a href=\"https:\/\/www.debian.org\/releases\/trixie\/release-notes\/upgrading.en.html\" target=\"_blank\" rel=\"noreferrer noopener\">upgrade documentation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A tried-and-true step-by-step guide for a hassle-free upgrade to Debian 13 (Trixie) from Debian 12 (Bookworm).<\/p>\n","protected":false},"author":10,"featured_media":182177,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,4417],"tags":[31,5921,4695],"class_list":["post-182174","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-linux-knowledge","tag-debian","tag-debian-13","tag-upgrade"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts\/182174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/comments?post=182174"}],"version-history":[{"count":0,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts\/182174\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/media\/182177"}],"wp:attachment":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/media?parent=182174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/categories?post=182174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/tags?post=182174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}