Instances of templated service units are currently not supported #100
Description
Short description
mkinitcpio-systemd-tool
does not support adding template service units (e.g. [email protected]
) to the initrd yet.
Steps to reproduce
Let's assume I have a service called my-fancy-tool
, that I need to run from the initial ramdisk during early boot. This service is expected to be executed multiple times with different configurations, so I have a template unit at /usr/lib/systemd/system/[email protected]
with
...
[Service]
ExecStart=/usr/bin/unlocked-client --config /etc/my-fancy-tool/%i.conf
...
Now I enable my service for a specific config with systemctl enable [email protected]
and then try to recreate the initrd.
Expected behavior
Recreating the initrd succeeds and my service is added to the initrd image.
Actual behavior
Recreating the initrd fails with
==> ERROR: can not find service unit:
[email protected]
Technical details
In the function add_systemd_unit_X
in src/mkinitcpio-install.sh
the unit of my service is parsed as [email protected]
.
Right after that, the tool tries to locate either /etc/systemd/system/[email protected]
or /usr/lib/systemd/system/[email protected]
.
However both files do not exist, as my unit is /usr/lib/systemd/system/[email protected]
and the tool failes.
Suggested solution
The unit name should be stripped from all arguments. So [email protected]
should become [email protected]
and initrd-cryptsetup.service
should remain initrd-cryptsetup.service
.
The name of the symlink should still be stored, as it should still be added to the initrd image with its argument in the name.