| Title: GearBSD: managing your packages on OpenBSD | |
| Author: Solène | |
| Date: 02 June 2021 | |
| Tags: rex openbsd gearbsd | |
| Description: | |
| # Introduction | |
| I added a new module for GearBSD, it allows to define the exact list of | |
| packages you want on the system and GearBSD will take care of removing | |
| extra packages and installing missing packages. This is a huge step | |
| for me to allow managing the system from code. | |
| Note that this is an improvement over feeding pkg_add with a package | |
| list because this method doesn't remove extra packages. | |
| GearBSD packages in action on asciinema | |
| # How to use | |
| In the directory openbsd/packages/ of the GearBSD git repository, edit | |
| the file Rexfile and list the packages you want in the variable | |
| @packages. | |
| This is the packages set I want on my server. | |
| ```Rexfile content | |
| my @packages = qw/ | |
| bwm-ng checkrestart colorls curl dkimproxy dovecot dovecot-pigeonhole | |
| duplicity ecl geomyidae git gnupg go-ipfs goaccess kermit lftp mosh | |
| mtr munin-node munin-server ncdu nginx nginx-stream | |
| opensmtpd-filter-spamassassin p5-Mail-SpamAssassin postgresql-server | |
| prosody redis rss2email rsync | |
| /; | |
| ``` | |
| Then, run "rex -h localhost show" to see what changes will be done like | |
| which packages will be removed and which packages will be installed. | |
| Run "rex -h localhost configure" to apply the changes for real. I use | |
| "rex -h localhost" using a local ssh connection to root but you could | |
| run rex as root with doas with the same effect. | |
| # How does it work | |
| Installing missing packages was easy but removing extra packages was | |
| harder because you could delete packages that are still required as | |
| dependencies. | |
| Basically, the module looks at the packages you manually installed (the | |
| one you directly installed with the pkg_add command), if they are not | |
| part of your list of packages you want to have installed, they are | |
| marked as automatically installed and then "pkg_delete -a" will remove | |
| them if they are not required by any other package. | |
| # Where is going GearBSD | |
| This is a project I started yesterday but I've long think about it. I | |
| really want to be able to manage my OpenBSD system with a single | |
| configuration file. I currently wrote two modules that are | |
| independently configured, the issue is that it doesn't allow altering | |
| modules from one to another. | |
| For example, if I create a module to install gnome3 and configure it | |
| correctly, this will require gnome3 and gnome3-packages but if you | |
| don't have them in your packages list, it will get deleted. GearBSD | |
| needs a single configuration file with all the information required by | |
| all packages, this will permit something like this: | |
| ```Configuration example | |
| $module{pf}{TCPports} = [ 22 ]; | |
| $module{gnome}{enable} = 1; | |
| $module{gnome}{lang} = "fr_FR.UTF-8"; | |
| @packages = qw/catgirl firefox keepassxc/; | |
| ``` | |
| The module gnome will know it's enabled and that @packages has to | |
| receive gnome3 and gnome3-extras packages in order to work. | |
| Such main configuration file will allow to catch incompatibilities like | |
| enabling gdm and xenodm at the same time. |