The Python package linux-utils provides utility functions that make it easy to script system administration tasks on Linux systems in Python. The following functionality is currently implemented:
- Parsing of the /etc/fstab and /etc/crypttab configuration files.
- A basic Python API for cryptsetup and a Python implementation of cryptdisks_start and cryptdisks_stop (with a command line interface).
- Atomic filesystem operations for Linux in Python.
- Simple network location awareness / discovery.
The package is currently tested on cPython 2.7, 3.4, 3.5, 3.6, 3.7 and PyPy (2.7) on Ubuntu Linux (using Travis CI).
The linux-utils package is available on PyPI which means installation should be as simple as:
$ pip install linux-utils
There's actually a multitude of ways to install Python packages (e.g. the per user site-packages directory, virtual environments or 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 😉.
For details about the Python API please refer to the API documentation available on Read the Docs. The Python implementation of cryptdisks_start and cryptdisks_stop is available on the command line as the following two programs:
As the names imply these programs are not functional equivalents of their "official" counterparts, because they only support LUKS encryption and a small subset of the available encryption options.
Usage: cryptdisks-start-fallback NAME
Reads /etc/crypttab and unlocks the encrypted filesystem with the given NAME.
This program emulates the functionality of Debian's cryptdisks_start program, but it only supports LUKS encryption and a small subset of the available encryption options.
Usage: cryptdisks-stop-fallback NAME
Reads /etc/crypttab and locks the encrypted filesystem with the given NAME.
This program emulates the functionality of Debian's cryptdisks_stop program, but it only supports LUKS encryption and a small subset of the available encryption options.
Back in 2015 I wrote some Python code to parse the Linux configuration files /etc/fstab and /etc/crypttab for use in crypto-drive-manager. Fast forward to 2017 and I found myself wanting to use the same functionality in rsync-system-backup. Three options presented themselves to me:
- Copy/paste the relevant code
- Having to maintain the same code in multiple places causes lower quality code because having to duplicate the effort of writing documentation, developing tests and fixing bugs is a very demotivating endeavor. In fact sometime in 2016 I did copy/paste parts of this code into a project at work, because I needed similar functionality there. Of course since then the two implementations have started diverging 😛.
- Make crypto-drive-manager a dependency of rsync-system-backup
- Although this approach is less ugly than copy/pasting the code, it still isn't exactly elegant because the two projects have nothing to do with each other apart from working with LUKS encrypted disks on Linux.
- Extract the functionality into a new package
- In my opinion this is clearly the most elegant approach, unfortunately it also requires the most work from me 😇. On the plus side I'm publishing the new package with a test suite which means less untested code remains in crypto-drive-manager (which doesn't have a test suite at the time of writing).
While extracting the code I shortly considered integrating the functionality into debuntu-tools, however the /etc/fstab and /etc/crypttab parsing isn't specific to Debian or Ubuntu at all and debuntu-tools has several dependencies that aren't relevant to Linux configuration file parsing.
Since then it has become clear that this was a good choice (not merging the functionality into debuntu-tools) because linux-utils now provides a Python implementation of cryptdisks_start and cryptdisks_stop, which is mostly useful on Linux systems that aren't based on Debian 🙂.
The latest version of linux-utils is available on PyPI and GitHub. The documentation is available on Read the Docs and includes a changelog. For bug reports please create an issue on GitHub. If you have questions, suggestions, etc. feel free to send me an e-mail at peter@peterodding.com.
This software is licensed under the MIT license.
© 2020 Peter Odding.