New with cme: a GUI to configure Systemd services
Hello
Systemd is powerful, but creating a new service is a task that require creating several files in non obvious location (like /etc/systemd/system
or ~/.local/share/systemd/user/
). Each file features 2 or more sections (e.g. [Unit]
, [Service]
). And each section supports a lot of parameters.
Creating such Systemd configuration files can be seen as a daunting task for beginners.
cme project aims to make this task easier by providing a GUI that:
- shows all existing services in a single screen
- shows all possible sections and parameters with their documentation
- validates the content of each parameter (if possible)
For instance, on my laptop, the command cme edit systemd-user
shows 2 custom services (“free-imap-tunnel@” and “gmail-imap-tunnel@”) with:
The GUI above shows the units for my custom systemd files:
$ ls ~/.config/systemd/user/
free-imap-tunnel@.service
free-imap-tunnel.socket
gmail-imap-tunnel@.service
gmail-imap-tunnel.socket
sockets.target.wants
and the units installed by Debian packages:
$ find /usr/lib/systemd/user/ -maxdepth 1 \ '(' -name '*.service' -o -name '*.socket' ')' \ -printf '%f\n' |sort |head -15 at-spi-dbus-bus.service colord-session.service dbus.service dbus.socket dirmngr.service dirmngr.socket glib-pacrunner.service gpg-agent-browser.socket gpg-agent-extra.socket gpg-agent.service gpg-agent.socket gpg-agent-ssh.socket obex.service pulseaudio.service pulseaudio.socket
The screenshot above shows the content of the service defined by the following file:
$ cat ~/.config/systemd/user/free-imap-tunnel@.service
[Unit]
Description=Tunnel IMAPS connections to Free with Systemd
[Service]
StandardInput=socket
# no need to install corkscrew
ExecStart=-/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888
Note that empty parameters are not shown because the “hide empty value” checkbox on top right is enabled.
Likewise, cme is able to edit system files like user files with sudo cme edit systemd
:
For more details on how to use the GUI to edit systemd files, please see:
Using a GUI may not be your cup of tea. cme
can also be used as a validation tool. Let’s add a parameter with an excessive value to my service:
$ echo "CPUShares = 1000000" >> ~/.local/share/systemd/user/free-imap-tunnel@.service
And check the file with cme:
$ cme check systemd-user cme: using Systemd model loading data Configuration item 'service:"free-imap-tunnel@" Service CPUShares' has a wrong value: value 1000000 > max limit 262144
ok, let’s fix this with cme
. The wrong value can either be deleted:
$ cme modify systemd-user 'service:"free-imap-tunnel@" Service CPUShares~' cme: using Systemd model Changes applied to systemd-user configuration: - service:"free-imap-tunnel@" Service CPUShares: '1000000' -> ''
Or modified:
$ cme modify systemd-user 'service:"free-imap-tunnel@" Service CPUShares=2048' cme: using Systemd model Changes applied to systemd-user configuration: - service:"free-imap-tunnel@" Service CPUShares: '1000000' -> '2048'
You can also view the specification of a service using cme:
$ cme dump systemd-user 'service:"free-imap-tunnel@"'---
Service:
CPUShares: 2048
ExecStart:
- '-/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888'
StandardInput: socket
Unit:
Description: Tunnel IMAPS connections to Free with Systemd
The output above matches the content of the service configuration file:
$ cat ~/.local/share/systemd/user/free-imap-tunnel@.service
## This file was written by cme command.
## You can run 'cme edit systemd-user' to modify this file.
## You may also modify the content of this file with your favorite editor.
[Unit]
Description=Tunnel IMAPS connections to Free with Systemd
[Service]
StartupCPUWeight=100
CPUShares=2048
StartupCPUShares=1024
StandardInput=socket
# no need to install corkscrew now
ExecStart=-/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888
Last but not least, you can use cme shell if you want an interactive ui but cannot use a graphical interface:
$ cme shell systemd-user cme: using Systemd model >:$ cd service:"free-imap-tunnel@" Service >: service:"free-imap-tunnel@" Service $ ll -nz Exec* name │ type │ value ──────────┼──────┼─────────────────────────────────────────────────────────────────── ExecStart │ list │ -/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888 >: service:"free-imap-tunnel@" Service $ ll -nz name │ type │ value ─────────────────┼─────────┼─────────────────────────────────────────────────────────────────── StartupCPUWeight │ integer │ 100 CPUShares │ integer │ 2048 StartupCPUShares │ integer │ 1024 StandardInput │ enum │ socket ExecStart │ list │ -/usr/bin/socat - PROXY:127.0.0.1:imap.free.fr:993,proxyport=8888 >: service:"free-imap-tunnel@" Service $ set CPUShares=1024 >: service:"free-imap-tunnel@" Service $ ll -nz CPUShares name │ type │ value ──────────┼─────────┼────── CPUShares │ integer │ 1024 >: service:"free-imap-tunnel@" Service $ quit Changes applied to systemd-user configuration: - service:"free-imap-tunnel@" Service CPUShares: '2048' -> '1024' write back data before exit ? (Y/n)
Currently, only service, socket and timer units are supported. Please create a bug report on github if you need more.
Installation instructions are detailed at the beginning of Managing Systemd configuration with cme wiki page.
As all softwares, cme probably has bugs. Please report any issue you might have with it.
For more information:
- Managing Systemd configuration with cme wiki page
- Config::Model::Systemd documentation
- Source code on GitHub. Feel free to star this project
- rate this project on Perl CPAN system
All in all, systemd is quite complex to setup. I hope I made a little bit easier to deal with.
All the best
Trackbacks & Pingbacks