The purpose of this document is to list all of the notable changes to this project. The format was inspired by Keep a Changelog. This project adheres to semantic versioning.

Release 0.9.1 (2020-08-17)

Speed up reboot-remote-system by opting out of OpenSSH connection multiplexing during reboot check.

Release 0.9 (2020-05-20)

Noteworthy changes:

  • Switch from requests to six (six.moves.urllib.request).

    The debuntu-nodejs-installer program needs to make two HTTPS requests and until now used requests to do so. However requests pulls in quite a few dependencies (certifi, chardet, idna and urllib3).

    On older Python 2.7 releases requests was needed to provide proper TLS support including SNI, however with most of the world moving on to modern Python releases the simple responsibility of making two HTTPS requests no longer warrants five dependencies…

    Besides, six was already part of the transitive requirements and the code changes required were minimal. I also got to remove most of the complexity from

  • Make it possible to instruct the Python API of upgrade-remote-system to perform a reboot regardless of whether this is required by package updates.

  • Updated the usage messages embedded in the readme.

Miscellaneous changes:

  • Update Ubuntu releases mentioned in readme.
  • Update PyPI and RTD links in readme.
  • Use console highlighting in readme.
  • Refactored makefile (use Python 3 for local development, treat Sphinx warnings as errors, etc).
  • Fixed existing Sphinx reference warnings.
  • Bumped requirements, fixed deprecated imports.

Release 0.8 (2019-06-23)

  • debuntu-nodejs-installer: Bump Node.js version to 10.x. This was triggered by the build failure at which caused me to wonder why I had never bothered to update this default. So here it is :-).
  • Bug fix for reboot-remote-system: Don’t run lsblk on regular files.
  • Bug fix for reboot-remote-system: Ignore usernames in config check.

Release 0.7 (2019-04-10)

  • Improved upgrade-remote-system (reboot when running old kernel).
  • Bug fix for reboot-remote-system (always confirm SSH connectivity).
  • Updated the remote root disk encryption how to (Ubuntu 18.04 compatibility).

Release 0.6.4 (2018-11-17)

The debuntu-kernel-manager program now supports cleaning up Linux kernel modules packages (linux-modules-*).

Release 0.6.3 (2018-10-24)

Bump connection timeout of unlock-remote-system from 60 seconds to 2 minutes.

In the past months the reboot-remote-system command has failed to reboot my Raspberry Pi in an unattended fashion in about half of my attempts, because after the reboot command is given it takes more than 60 seconds for the pre-boot environment to become available… 😒

Now on the one hand this is just a single use case based on crappy hardware, and I could have just configured a longer connect-timeout in the configuration file of course. On the other hand I do intend for tools like reboot-remote-system to be as much “do what I mean” as possible and picking reasonable defaults is part of that.

Also I have plenty of experience with server hardware and I know that some of those servers take more than a minute to finish initializing their hardware and actually booting the OS, so even with fancy hardware boot times can be long 😇.

Because I didn’t see the harm in bumping the connect-timeout for all users I decided to do that instead of configuring this on my end, potentially “obscuring a bad default”. Anyone who disagrees is free to define a more restrictive connect-timeout using a configuration file.

Release 0.6.2 (2018-10-24)

  • Improve header package detection of debuntu-kernel-manager: While doing routine maintenance on the Raspberry Pi that handles DHCP and DNS in my home network I noticed that while the package linux-headers-4.4.0-1096-raspi2 was recognized the package linux-raspi2-headers-4.4.0-1096 was not suggested for removal by debuntu-kernel-manager. This is now fixed.
  • I’ve also reduced code duplication in debuntu-kernel-manager. While this isn’t intended to change the behavior of the program I haven’t gone to great lengths to actually verify this, however it seems to me that only in obscure theoretical corner cases would there be an actual observable difference in behavior.

Release 0.6.1 (2018-07-03)

Bumped linux-utils requirement to pull in an upstream bug fix:

  • An exception was being raised by the upgrade-remote-system program (at the point where it calls into reboot-remote-system) because the file /etc/crypttab didn’t exist.
  • However experience tells me that /etc/crypttab doesn’t exist in default Debian and Ubuntu installations (unless that system was specifically set up with root disk encryption using the installation wizard).
  • Furthermore this was in the code path responsible for figuring out whether a given system has any encrypted filesystems. Because “none” is definitely a valid answer, I’ve changed linux-utils to log a notice that the file couldn’t be found but not raise any exceptions.

Release 0.6 (2018-06-28)

  • Added upgrade-remote-system program.
  • Improved reboot-remote-system API (it’s now possible to give a name to reboot_remote_system() and leave it up to that function to get the execution context from the configuration file).
  • Documentation about remote root disk encryption on Raspberry Pi.

Release 0.5 (2018-05-26)

  • Make it possible to interactively enter the root disk encryption password into an interactive prompt on the remote system, while connected over SSH.
  • Added documentation about remote root disk encryption.
  • Fixed a confusing typo in logging output of reboot-remote-system.
  • Improved reboot_remote_system() API documentation.
  • Added this changelog, restructured the online documentation.
  • Integrated property_manager.sphinx in online documentation.
  • Added license='MIT' key to script.
  • Include documentation in source distributions.
  • Fixed broken reStructuredText reference in
  • Fixed unaligned reStructuredText headings.

Release 0.4.1 (2018-04-03)

Release 0.4 (2018-04-01)

  • Added the unlock-remote-system program for unattended unlocking of remote root disk encryption over SSH.
  • Added the reboot-remote-system program for rebooting of remote systems (optionally with root disk encryption).

Release 0.3.8 (2017-07-11)

  • Try to improve security requirements handling.
  • Changed the Sphinx theme of the online documentation.

Release 0.3.7 (2017-04-17)

Improved package name parsing in debuntu-kernel-manager.

Recently I installed the Linux kernel image meta package linux-image-generic-hwe-16.04 on my Ubuntu 16.04 laptop and since then I noticed that debuntu-kernel-manager got confused by the -16.04 suffix. This is now fixed.

Release 0.3.6 (2017-01-18)

Reduced tty usage and code duplication in debuntu-kernel-manager.

Release 0.3.5 (2016-10-31)

Expose the “kernel preserve count” in the debuntu-kernel-manager command line interface.

Release 0.3.4 (2016-10-31)

Bug fix: Always run apt-auto-removal script with root privileges.

Release 0.3.3 (2016-10-25)

Bug fix: Automatically update the list of auto-removable kernels after cleanup.

Release 0.3.2 (2016-10-25)

  • Bug fix: Never remove signal files when performing a dry-run.
  • Simplified the dpkg -l package status handling.

Release 0.3.1 (2016-10-25)

Bug fix: Don’t complain when multiple header meta packages are installed.

Release 0.3 (2016-09-07)

Added the debuntu-nodejs-installer program to install Node.js from the NodeSource binary repositories.

Release 0.2 (2016-06-23)

  • Remove the /var/run/reboot-required file when it seems safe to do so.
  • Rename s/collector/manager/g throughout the package.

Release 0.1 (2016-06-15)

The initial release of debuntu-tools contained only the program debuntu-kernel-manager. Half the value for me in creating this program was getting to know how Debian and Ubuntu kernel image/header meta packages worked. My initial goal was to create a safer alternative to sudo apt-get autoremove --purge with the ultimate goal of completely automating the cleanup of old kernel packages.