Package: debuntu-tools
Thedebuntu-toolspackage is my playground for experiments in automating
system administration tasks on Debian and Ubuntu Linux systems. Right now
there’s just four programs and no test suite, but I intend to keep working
on this package in order make it a lot more useful. For usage instructions
please refer to following sections and thedocumentation.ContentsStatusInstallationRequirementsUsagedebuntu-kernel-managerdebuntu-nodejs-installerreboot-remote-systemunlock-remote-systemupgrade-remote-systemConfiguration filesContactLicenseStatusRight nowdebuntu-toolsis just an experiment and as such I’m not making any
claims about or commitments towards usability, reliability or backwards
compatibility. I guess we’ll see how long it’s going to take me to consider
this more than an experiment 😊. The programs in this package have been
manually tested on and are being used to manage headless Linux servers running
Ubuntu 16.04 and 18.04.InstallationThedebuntu-toolspackage is available onPyPIwhich means installation
should be as simple as:$pipinstalldebuntu-toolsThere’s actually a multitude of ways to install Python packages (e.g. theper
user site-packages directory,virtual environmentsor just installing
system wide) and I have no intention of getting into that discussion here, so
if this intimidates you then read up on your options before returning to these
instructions ;-).RequirementsSeveral Python packages are required by debuntu-tools but installation of
the Python package should automatically pull in those dependencies for you.Thedebuntu-kernel-managerprogram expects to be running on a Debian or
Ubuntu derived Linux distribution, more specifically you need a functionaldpkginstallation. This enables version sorting according to the semantics
used bydpkg, which is quite significant if your goal is to removeolderkernels but preservenewerones :-). To actually install and remove kernel
packages you needapt-getandsudoprivileges on the system whose kernels
are being managed.Theunlock-remote-systemprogram expects a remote Linux system that has been
configured in such a way that the pre-boot environment (the initial ramdisk)
enables a static IP address and starts an SSH server likedropbear. More
information about how to set this up isavailable in the documentation.Theupgrade-remote-systembuilds on top ofdebuntu-kernel-manageras
well asunlock-remote-system(in the form ofreboot-remote-system)
and so all of the requirements above apply.UsageThere are two ways to use thedebuntu-toolspackage:The command line interfaces which are described below.The Python API which is documented onRead the Docs.The following programs are documented here:debuntu-kernel-managerdebuntu-nodejs-installerreboot-remote-systemunlock-remote-systemupgrade-remote-systemdebuntu-kernel-managerUsage:debuntu-kernel-manager [OPTIONS] – [APT_OPTIONS]Detect and remove old Linux kernel header, image and modules packages that can
be safely removed to conserve disk space and speed up apt-get runs that install
or remove kernels.By default old packages are detected and reported on the command line but no
changes are made. To actually remove old packages you need to use the-c,--cleanor--removeoption. Using the following command you can perform
a dry run that shows you what will happen without actually doing it:$debuntu-kernel-manager--remove----dry-runThe debuntu-kernel-manager program is currently in alpha status, which means
a first attempt at a usable program has been published but there are no
guarantees about what it actually does. You have been warned :-).Supported options:OptionDescription-c,--clean,--removeRemove Linux kernel header and/or image packages that are deemed to be safe
to remove. The use of this option requires sudo access on the system in
order to run the ‘apt-get remove’ command.-f,--forceWhen more than one Linux kernel meta package is installed the-c,--cleanand--removeoptions will refuse to run apt-get and exit with an error
instead. Use the-for--forceoption to override this sanity check.-p,--preserve-count=NUMBERPreserve theNUMBERnewest versions of the kernel packages (defaults to 2).-r,--remote-host=ALIASDetect and remove old Linux kernel header and image packages on a remote
host over SSH. TheALIASargument gives the SSH alias that should be used
to connect to the remote host.-v,--verboseIncrease verbosity (can be repeated).-q,--quietDecrease verbosity (can be repeated).-h,--helpShow this message and exit.debuntu-nodejs-installerUsage:debuntu-nodejs-installer [OPTIONS]Install an up to date Node.js binary distribution on a Debian or Ubuntu
system by configuring and using the NodeSource binary package repositories.Due to the time it takes for new software releases to find their way into the
Debian and Ubuntu ecosystems versus the speed with which the Node.js community
is currently moving, the system packages that provide Node.js are hopelessly
out of date. Fortunately the folks at NodeSource maintain Debian and Ubuntu
package repositories that provide up to date Node.js binary distributions.NodeSource makes installation scripts available and the suggested way to run
these is to download and pipe them straight to a shell. That kind of rubs me
the wrong way :-) but I’ve nevertheless had to set up NodeSource installations
a dozen times now. One thing led to another and now there is this program.Supported options:OptionDescription-i,--installConfigure the system to use one of the NodeSource binary package
repositories and install the ‘nodejs’ package from the repository.-V,--version=NODEJS_VERSIONSet the version of Node.js to be installed. You can find a list of
available versions on the following web page:https://github.com/nodesource/distributions/Default: node_10.x (active LTS)-s,--sources-file=FILENAMESet the pathname of the ‘package resource list’ that will be added to the
system during configuration of the NodeSource binary package repository.Default: /etc/apt/sources.list.d/nodesource.list-r,--remote-host=ALIASPerform the requested action(s) on a remote host over SSH. TheALIASargument gives the SSH alias that should be used to connect to the remote
host.-v,--verboseIncrease verbosity (can be repeated).-q,--quietDecrease verbosity (can be repeated).-h,--helpShow this message and exit.reboot-remote-systemUsage:reboot-remote-system [OPTIONS] [SSH_ALIAS]Reboot a remote system and wait for the system to come back online. If the SSH
alias matches a section in the ‘unlock-remote-system’ configuration, the root disk
encryption of the remote system will be unlocked after it is rebooted.Supported options:OptionDescription-s,--shellStart an interactive shell on the remote system
after it has finished booting.-v,--verboseIncrease logging verbosity (can be repeated).-q,--quietDecrease logging verbosity (can be repeated).-h,--helpShow this message and exit.unlock-remote-systemUsage:unlock-remote-system [OPTIONS] PRE_BOOT [POST_BOOT]Boot a remote Linux system that’s waiting for the root disk encryption password
to be entered into an interactive prompt by connecting to the remote system
over the network using SSH and entering the password non-interactively. The
remote Linux system needs to be configured in such a way that the pre-boot
environment enables a static IP address and starts an SSH server like Dropbear.The PRE_BOOT argument defines how to connect to the pre-boot environment:Its value is assumed to be a host name, IP address or SSH alias.It can optionally start with a username followed by an ‘@’ sign.It can optionally end with a ‘:’ followed by a port number.The default username is ‘root’ and the default port number 22. The optional
POST_BOOT argument defines how to connect to the post-boot environment, this
is useful when the pre and post-boot environments run SSH servers on different
port numbers.If the PRE_BOOT argument matches the name of a user defined configuration
section the options in that section define how unlock-remote-system operates.Supported options:OptionDescription-i,--identity-file=KEY_FILEUse the private key stored inKEY_FILEfor SSH connections to the pre-boot
environment. The post-boot environment is expected to use your default
private key or have a suitable configuration in ~/.ssh/config.-k,--known-hosts=HOSTS_FILEUseHOSTS_FILEas the “known hosts file” for SSH connections to the
pre-boot environment. When this option is not given host key verification
will be disabled to avoid conflicts between the host keys of the different
SSH servers running in the pre-boot and post-boot environments.-p,--password=NAMEGet the password for the root disk encryption of the remote system from
the local password store in ~/.password-store using the ‘pass’ program.
TheNAMEargument gives the full name of the password.-r,--remote-host=SSH_ALIASConnect to the remote system through an SSH proxy.-s,--shellStart an interactive shell on the remote
system after it has finished booting.-w,--watchStart monitoring the remote system and automatically unlock the root disk
encryption when the remote system is rebooted. The monitoring continues
indefinitely.-a,--allEnable monitoring of all configured systems when combined with--watch.-v,--verboseIncrease logging verbosity (can be repeated).-q,--quietDecrease logging verbosity (can be repeated).-h,--helpShow this message and exit.upgrade-remote-systemUsage:upgrade-remote-system [OPTIONS] [SSH_ALIAS]Upgrade the system packages on a remote Debian or Ubuntu system, reboot the
system when this is required due to security updates or because the system
isn’t yet running the newest kernel, remove old Linux kernel and header
packages and optionally remove ‘auto-removable’ system packages.If the given SSH alias matches a section in the ‘unlock-remote-system’
configuration, the root disk encryption of the remote system will be
automatically unlocked when the system is rebooted.Supported options:OptionDescription-s,--shellStart an interactive shell on the remote system afterwards.-v,--verboseIncrease logging verbosity (can be repeated).-q,--quietDecrease logging verbosity (can be repeated).-h,--helpShow this message and exit.Configuration filesunlock-remote-systemConfiguration files are text files in the subset ofini syntaxsupported by
Python’sconfigparsermodule. They can be located in the following places:DirectoryMain configuration fileModular configuration files/etc/etc/unlock-remote-system.ini/etc/unlock-remote-system.d/*.ini~~/.unlock-remote-system.ini~/.unlock-remote-system.d/*.ini~/.config~/.config/unlock-remote-system.ini~/.config/unlock-remote-system.d/*.iniThe available configuration files are loaded in the order given above, so that
user specific configuration files override system wide configuration files.Each section of the configuration applies to a single host.
The following options are supported in these sections:Configuration optionDefault valueboot-timeout5 minutesconnect-timeout60 secondscryptroot-config/conf/conf.d/cryptrootcryptroot-program/scripts/local-top/cryptrootkey-script/tmp/keyscript.shknown-hosts-file(no value)named-pipe/lib/cryptsetup/passfifopassword(no value)password-name(no value)password-store(no value)post-boot(no value)pre-boot(no value)retry-interval1 secondscan-timeout5 secondsssh-proxy(no value)The links in the table above lead to the Python API documentation
which explains the purpose of each of these options.ContactThe latest version ofdebuntu-toolsis available onPyPIandGitHub. The
documentation is hosted onRead the Docsand includes achangelog. For bug
reports please create an issue onGitHub. If you have questions, suggestions,
etc. feel free to send me an e-mail atpeter@peterodding.com.LicenseThis software is licensed under theMIT license.© 2018 Peter Odding.