Calamares extensions and out-of-tree modules
Calamares is a universal Linux installer framework. It provides a distribution- and desktop-agnostic set of tools that Linux distributions (and potentially FreeBSD as well) can use to build an installer for Live media (that is, ISO images). It is broadly themable, brandable, configurable and tweakable – the core repository contains 54 modules for various parts of the install process.
Even 54 modules can’t do justice to all the breadth of things-people-might-want for Linux, so Calamares encourages people to write their own modules to solve specific problems. Calamares is also an eager upstream, so if the problem is specific, but affects lots of people, or can be made generally useful, then Calamares is eager to incorporate those modules into the “core” of the software product.
To help and support people developing modules, Calamares should provide all the necessary bits for development: it has a C++ API and some CMake stuff that needs doing, for instance, and module-developers will need that.
It’s also possible to extend Calamares through Python scripts and even shell scripts, so not all extensions or all tweaks need that infrastructure. For the most-fancy C++ extensions, though …
postmarketOS is a Linux distribution for Phones. It aims to take over where the phone vendors give up (i.e. 6-12 months after introduction of a new model, in my experience). The postmarket people are experimenting with Calamares to see if it does what they need – and to that end they are also writing custom modules. Custom modules aren’t a surprise, here: a phone is a different beast from most install-from-ISO situations.
They hit some fundamental problems really quick.
And very importantly, they filed an issue, explained the problem, did some investigation and were responsive on IRC about what was going on.
So, two days of solid ugh-why-did-I-ever-do-things-this-way later, the Calamares development branch (which will be 3.2.26 next week) has the following:
- all the headers needed for C++ development are now installed, and in a consistent manner (there were a whole bunch missing, because I hadn’t updated things after various code-reorganizations),
- the CMake infrastructure is simpler and more consistent.
In the Calamares extensions repository, I’ve tweaked the examples a little, written extra documentation inspired by the issues the postmarketOS people ran into, and added a whole new UI example that uses all of the bits-that-needed-fixing.
So, thanks postmarket – you gave the impetus to improve things. Calamares 3.2.26 and later will fully support out-of-tree module development again.