Like many Linux distributions, Debian comes with a package management and distribution system called apt (Advanced Package Tool). While apt is a very useful feature of Debian systems, upgrading packages can be a little daunting. Here’s what a recent apt-get upgrade
looked like for me:
ψ sudo apt-get upgrade
[sudo] password for jxf:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
linux-headers-generic linux-signed-generic
linux-signed-image-generic lxc-docker postgresql-client-common
postgresql-common
The following packages will be upgraded:
atom libdrm-intel1 libdrm-intel1:i386 libdrm-nouveau2
libdrm-nouveau2:i386 libdrm-radeon1 libdrm-radeon1:i386 libdrm2
libdrm2:i386 libicu52 libtasn1-6 libtasn1-6:i386 linux-libc-dev
oxideqt-codecs-extra steam-launcher
15 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
Need to get 61.3 MB of archives.
Do you want to continue? [Y/n]
Notice that a number of important-looking packages changed: graphics driver middleware, libc, and the text editor I use to write this blog. But it’s hard to know whether we should install these changes or not, and what the urgency on them is.
What if the updates are critical security fixes in libc? We might want to install them immediately. Conversely, what if the new graphics driver introduced features that disrupted the framerate on our favorite games? We might want to hold off.
With the apt-get interface, we know whether something has been updated, but we don’t know what the updates are. Can we do better?
What changed?
Enter apt-listchanges, a wonderful tool by Sandro Tosi and Thadeu Lima de Souza Cascardo. Each apt package usually ships with two files that describe interesting human-readable details about the package:
- a
debian/changelog
file that describes recent changes made to the package, usually of a technical nature - a
debian/NEWS
file that describes user-friendly updates about the package
For example, if we download a recent Firefox nightly package:
apt-get download firefox
and run apt-listchanges
on it:
apt-listchanges --which=changelogs firefox
we’ll get this output:
firefox (40.0~a2~hg20150520r262219-0ubuntu1~umd1~trusty) trusty; urgency=medium
* Refresh patches
- update debian/patches/unity-menubar.patch
- update debian/patches/dont-include-hyphenation-patterns.patch
- update debian/patches/allow-lockPref-everywhere.patch
-- Chris Coulson <chris.coulson@canonical.com> Wed, 20 May 2015 17:17:16 +0100
firefox (39.0~a2~hg20150429r255253-0ubuntu1) vivid; urgency=medium
* Refresh patches
- update debian/patches/unity-menubar.patch
- update debian/patches/ubuntu-ua-string-changes.patch
* Drop patches fixed upstream
- remove debian/patches/add-non-skia-fallback.patch
- update debian/patches/series
* Bundle our checkout of compare-locales in a different location, given
that the Mozilla repo now contains a different version of it in the
location we used previously
- update debian/build/rules.mk
- update debian/build/create-tarball.py
-- Chris Coulson <chris.coulson@canonical.com> Tue, 31 Mar 2015 19:32:34 +0100
Using apt-listchanges
It would be nice if we could get this list whenever we installed a package. Fortunately, apt-listchanges does just that for us, too!
First we’ll install the package:
sudo apt-get install apt-listchanges
After installation, there’s a configuration step which asks you how you’d like to view the changes and make some other choices; I find the pager
mode is most convenient for viewing. If you want to revisit your configuration choices, you can run dpkg-reconfigure apt-listchanges
.
After the configuration is done your preferences will be saved in /etc/apt/listchanges.conf
.
Now that we’ve got that, let’s install a package!
sudo apt-get install firefox
[...]
Do you want to continue? [Y/n]
Reading changelogs... Done
firefox (40.0~a2~hg20150520r262219-0ubuntu1~umd1~trusty) trusty; urgency=medium
* Refresh patches
- update debian/patches/unity-menubar.patch
- update debian/patches/dont-include-hyphenation-patterns.patch
- update debian/patches/allow-lockPref-everywhere.patch
-- Chris Coulson <chris.coulson@canonical.com> Wed, 20 May 2015 17:17:16 +0100
apt-listchanges: Do you want to continue? [Y/n] y
Notice the second prompt for apt-listchanges; this is one of the configuration settings you can choose. Here, you’ll get a chance to review what changed before you decide to pull the trigger.
In short, apt-listchanges is an excellent addition to your Debian package-management workflow and highly recommended.
Comments