CREATIVE CHAOS   ▋ blog

Downgrading Packages in Debian via Snapshot

PUBLISHED ON 05/10/2020 — EDITED ON 11/12/2023 — SYSOPS

Gnarly little bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=969261 forced us to roll back the packages for cyrus.

Open http://snapshot.debian.org and under Binary search, look for your package. In our case cyrus-imapd.

We are presented with a list of all binary versions http://snapshot.debian.org/binary/cyrus-imapd/.

Find the right one, 3.2.2-1 in our example:

http://snapshot.debian.org/package/cyrus-imapd/3.2.2-1%7Ebpo10%2B1/#cyrus-imapd_3.2.2-1:7e:bpo10:2b:1

Click the /pool/main/c/cyrus-imapd link (http://snapshot.debian.org/archive/debian/20200729T085837Z/pool/main/c/cyrus-imapd/).

Use the obtained link but only the part to the timestamp and create a new source for packages:

# vim /etc/apt/sources.list.d/snapshot.list
deb http://snapshot.debian.org/archive/debian/20200729T085837Z buster-backports main

Pin the packages, so the system does not update them:

root@g:/etc/apt/preferences.d
# cat cyrus.pref
Package: cyrus-admin
Pin: version 3.2.2-1~bpo10+1
Pin-Priority: 1001

Package: cyrus-clients
Pin: version 3.2.2-1~bpo10+1
Pin-Priority: 1001

Package: cyrus-common
Pin: version 3.2.2-1~bpo10+1
Pin-Priority: 1001

Package: cyrus-imapd
Pin: version 3.2.2-1~bpo10+1
Pin-Priority: 1001

Package: libcyrus-imap-perl
Pin: version 3.2.2-1~bpo10+1
Pin-Priority: 1001

# vim: set ts=4 sw=0 et cc=80:

Update the package list, ignoring the “valid until” parameter:

# apt-get -o Acquire::Check-Valid-Until=false update

Review the policy:

# apt-cache policy cyrus-imapd
cyrus-imapd:
  Installed: 3.2.3-1~bpo10+1
  Candidate: 3.2.3-1~bpo10+1
  Version table:
 *** 3.2.3-1~bpo10+1 500
        500 http://ftp.si.debian.org/debian buster-backports/main amd64 Packages
        100 /var/lib/dpkg/status
     3.2.2-1~bpo10+1 500
        500 http://snapshot.debian.org/archive/debian/20200729T085837Z buster-backports/main amd64 Packages
     3.0.8-6+deb10u4 500
        500 http://ftp.si.debian.org/debian buster/main amd64 Packages
     3.0.8-6+deb10u3 500
        500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
     2.5.10-3+deb9u2 500
        500 http://ftp.si.debian.org/debian stretch/main amd64 Packages
        500 http://security.debian.org/debian-security stretch/updates/main amd64 Packages

It is highly adviseable to use --dry-run, to see what will be done. With the same swithc, you can also see if any other package is dependent on the one you want to downgrade. The line you are looking for is:

0 upgraded, 0 newly installed, 5 downgraded, 0 to remove and 4 not upgraded.
# apt-get install cyrus-imapd=3.2.2-1~bpo10+1 cyrus-common=3.2.2-1~bpo10+1 cyrus-admin=3.2.2-1~bpo10+1 cyrus-clients=3.2.2-1~bpo10+1 libcyrus-imap-perl=3.2.2-1~bpo10+1  --dry-run
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  cyrus-caldav cyrus-doc cyrus-murder cyrus-nntpd cyrus-pop3d cyrus-replication
The following packages will be DOWNGRADED:
  cyrus-admin cyrus-clients cyrus-common cyrus-imapd libcyrus-imap-perl
0 upgraded, 0 newly installed, 5 downgraded, 0 to remove and 4 not upgraded.
Inst cyrus-imapd [3.2.3-1~bpo10+1] (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64]) []
Inst cyrus-clients [3.2.3-1~bpo10+1] (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64]) []
Inst cyrus-admin [3.2.3-1~bpo10+1] (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64]) []
Inst libcyrus-imap-perl [3.2.3-1~bpo10+1] (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64]) []
Inst cyrus-common [3.2.3-1~bpo10+1] (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])
Conf cyrus-imapd (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])
Conf cyrus-clients (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])
Conf cyrus-admin (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])
Conf libcyrus-imap-perl (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])
Conf cyrus-common (3.2.2-1~bpo10+1 Debian Backports:buster-backports [amd64])

Install the older packages:

# apt-get install cyrus-imapd=3.2.2-1~bpo10+1 cyrus-common=3.2.2-1~bpo10+1 cyrus-admin=3.2.2-1~bpo10+1 cyrus-clients=3.2.2-1~bpo10+1 libcyrus-imap-perl=3.2.2-1~bpo10+1

Review the policy again:

# apt-cache policy cyrus-imapd
cyrus-imapd:
  Installed: 3.2.2-1~bpo10+1
  Candidate: 3.2.2-1~bpo10+1
  Version table:
     3.2.3-1~bpo10+1 500
        500 http://ftp.si.debian.org/debian buster-backports/main amd64 Packages
 *** 3.2.2-1~bpo10+1 1001
        500 http://snapshot.debian.org/archive/debian/20200729T085837Z buster-backports/main amd64 Packages
        100 /var/lib/dpkg/status
     3.0.8-6+deb10u4 500
        500 http://ftp.si.debian.org/debian buster/main amd64 Packages
     3.0.8-6+deb10u3 500
        500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
     2.5.10-3+deb9u2 500
        500 http://ftp.si.debian.org/debian stretch/main amd64 Packages
        500 http://security.debian.org/debian-security stretch/updates/main amd64 Packages

See Also