Subject: bug#688: systemctl infinite loop, missing /bin/systemctl symlink

From: Jernej Jakob <[email-masked]>
Date: Thu, 7 Jul 2022 21:52:50 +0200

Package: systemctl-service-shim
Version: 0.0.1-1
Severity: grave
Tags: stable

When executing the "enable" action, systemctl enters into an infinite
loop.

# /bin/systemctl enable chrony.service
update-rc.d chrony enable
insserv: warning: script 'cgroups' missing LSB tags
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `cgroups'
insserv: Default-Stop  undefined, assuming empty stop runlevel(s) for script `cgroups'
 * rc-update: chrony already installed in runlevel `default'; skipping
update-rc.d chrony enable
insserv: warning: script 'cgroups' missing LSB tags
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `cgroups'
insserv: Default-Stop  undefined, assuming empty stop runlevel(s) for script `cgroups'
 * rc-update: chrony already installed in runlevel `default'; skipping
update-rc.d chrony enable

Additionally, there is no /bin/systemctl, as the script is installed to
/usr/sbin/systemctl, so some scripts that call a hardcoded binary path
/bin/systemctl won't work without manually creating a symlink after
installation.

I see some code to manipulate the symlink was added in 0.0.2
https://git.devuan.org/devuan/systemctl-service-shim/commit/abd012174f9545f4d4bd236716e51dedcad8c6f1
if I understand it correctly, it's a workaround (fix) for this infinite
loop problem which is caused by the init scripts calling systemctl
again.

In my opinion, the symlink should also be created in the package
postinst script. This way packages that depend on /bin/systemctl
will work immediately without manual symlink creation. There should be
no conflict with systemd, as the package already has a conflict with
systemd, it will never be simultaneously installed.