User Tools

Site Tools


js#vista.png msort nsort


Table of Contents

Template for Debian System Release Upgrade

This template is meant to serve as a general upgrade path for any Debian release. This is my standard path and will be adjusted based on the “old” current release installed on the system and the target “new” release the server is being upgraded to.

I will normally create a complete system clone and use this template to work out the entire correct and functional path for the production system in question.

Debian Release upgrade paths:

Jessie -> Buster -> Bullseye
Stretch -> Buster -> Bullseye
Buster -> Bullseye

1. Preparing for the upgrade

1.1. Back up any data or configuration information

1.2. Inform users in advance

Who and How should be informed

1.3. Prepare for downtime on services

Set maintainance window for upgrade with buffer

1.4. Prepare for recovery

Verify the recoverability of system from backup image

1.5. Prepare a safe environment for the upgrade

Local terminal or SSH access

1.6. Develop tests for section 3.3 that will ensure correct execution of needed tasks


a. Web server delivers correctly
b. php scripts execute correctly
c. DB runs correctly
d. mail works

2. Checking system status

find NON-Pure Debian packages
  # apt install aptitude apt-forktracer
  # aptitude search '~i(!~ODebian)'
  # apt-forktracer | sort

2.1. Review actions pending in package manager

  # aptitude
Select GO and review

2.2. Disabling APT pinning

check /etc/apt/preferences & /etc/apt/preferences.d/ for entries

2.3. Checking packages status

# dpkg --audit
# aptitude search "~ahold"
# dpkg --get-selections | grep 'hold$'

To remove a hold on a package:

echo package_name install | dpkg --set-selections

2.4. Remove proposed-updates section if present in /etc/apt/sources.list

2.5. Verify Unofficial sources are available for target Debian version

3. Upgrading current version

3.1. Update current installation

# sudo apt update

3.2. Upgrade current installation

# sudo apt upgrade

3.3. Check functionality

Verify all services required of current host is functioning correctly

3.4. Upgrade current distribution

# sudo apt dist-upgrade

3.5. Check functionality

see 3.3 above

4. Preparing sources for APT

4.1. Adding APT Internet sources

# sudo sed -i 's/CURRENT_RELEASE/TARGET_RELEASE/g' /etc/apt/sources.list
# sudo sed -i 's/CURRENT_RELEASE/TARGET_RELEASE/g' /etc/apt/sources.list.d/*

4.2. Adding APT sources for a local mirror

Only required for special in-house software

4.3. Adding APT sources from optical media

Only required for special 3rd party delivered software

5. Upgrading packages

Ensure all partition mountpoints are mounted read-write

# mount -o remount,rw /mountpoint

5.1. Recording the session

# script -t 2>~/upgrade-TARGET_RELEASEstep.time -a ~/upgrade-TARGET_RELEASEstep.script

To replay session use scriptreplay

# scriptreplay ~/upgrade-TARGET_RELEASE.time ~/upgrade-TARGET_RELEASE.script

5.2. Updating the package list

# apt-get update

5.3. Make sure you have sufficient space for the upgrade

# apt-get -o APT::Get::Trivial-Only=true dist-upgrade

5.4. Minimal system upgrade

# apt-get upgrade

5.5. Check functionality

See 3.3 above

5.6. Upgrading the system

# apt-get dist-upgrade

5.7. Check functionality

See 3.3 above

6. Possible issues during upgrade

6.1. Dist-upgrade fails with “Could not perform immediate configuration”

# apt-get dist-upgrade -o APT::Immediate-Configure=0

6.2. Expected removals

6.3. Conflicts or Pre-Depends loops

use -o APT::Force-LoopBreak=1 with apt-get or

# dpkg --remove package_name


# apt-get -f install
# dpkg --configure --pending


# dpkg --install /path/to/package_name.deb

6.4. File conflicts

# dpkg -r --force-depends package_name

6.5. Configuration changes

Usually answer “YES” to files in /etc/init.d directory or /etc/manpath.config

6.6. Change of session to console

Ctrl+Alt+F1 should recover the terminal window

7.1. Install any needed kernel metapackage

Check for meta package

# dpkg -l "linux-image*" | grep ^ii | grep -i meta

if none are installed check which ones are available

# apt-cache search linux-image- | grep -i meta | grep -v transition

select correct one based on value returned by running “uname -r” eg. kernel “2.6.32-5-amd64”

# apt-cache show linux-image-amd64

8. Preparing for the next release

8.1. Purging removed packages

Remove redundant or obsolete packages. see 5.3 above

get list of removed packages

# dpkg -l | awk '/^rc/ { print $2 }'

remove using

# apt-get purge $(dpkg -l | awk '/^rc/ { print $2 }')

or use

# aptitude search '~c'
# aptitude purge '~c'

9. Obsolete packages

9.1. Dummy packages

debian/upgradepathtemplate.txt · Last modified: 2024/05/29 12:08 by