The "removing systemd" experiment
Round 2: Install the Magic Package and Then Remove systemd
To restore a working system right after installation, I'll introduce the no-systemd.deb
package (Listing 2). Now this looks a lot better! Only systemd and a few other packages are removed – not the entire desktop system – because an empty package (no-systemd
contains no files) is installed first, which fakes a systemd installation as the dependency for other packages (Listing 3).
Listing 2
Setting Up no-systemd
Listing 3
Building the no-systemd.deb Magic Package
libpam-systemd
is clearly a dependency for systemd; rfkill
has a hard-coded dependency on a package named systemd, which is probably a mistake and unnecessary. Rebuilding the package without this dependency should help.
After removing systemd and libpam-systemd followed by a reboot, I still can't get past the point where the graphical subsystem should start up, because the root filesystem stays mounted read-only; therefore, Xorg can't open its logfile at /var/log/Xorg.0.log
. Changing the root filesystem's mount mode to rw
instead of ro
in the bootloader's config is a quick workaround for now. A better fix would be to change the bootup procedure to remount/read-write at some point. Apparently, this is missing in my sysvinit.deb
package.
Now I have a working desktop – kind of. After using it awhile, you will realize that some things are dysfunctional, like configuring the network with the graphical NetworkManager GUI.
Round 3: Install SysVinit over systemd and Do a Lot of Post-Configuration
The reason the previous round failed to produce a fully working system is that some desktop components require the session management introduced by systemd-logind
, which is located inside the systemd package. After installing the SysVinit packages (which replace /sbin/init
by SysVinit's version plus the necessary basic startup scripts), I also need to install the systemd-shim package to start session management and other services automatically around systemd clients. Also, the policykit-1 package needs to be installed, and permissions for services like NetworkManager should be set to yes
instead of no
or auth_admin*
, if the session can't be detected properly, as shown in the excerpt in Listing 4 from /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy
.
Listing 4
Setting Permissions
Also, newer versions of systemd require the cgroup mount point; otherwise, systemd-shim
won't be able to start systemd-logind
, so login sessions won't be reported to services that request information about the logged-in user. This would be a minimal subset of mounts that systemd-logind
expects. I put the following commands in my own startup scripts:
mkdir -p -m 0777 /cgroup/cpu mount -t cgroup cgroup -o cpu /cgroup/cpu mkdir -m 1777 /cgroup/cpu/user
It Works!
After round 3, the system looks very much like a Knoppix installation, in which the startup system is run through SysVinit, with other systemd components still present to make programs happy that are hard-coded with systemd dependencies (e.g., on systemd-logind
and the libsystemd0
library). Still, LXSession pops up a confusing hard-coded message (Figure 1) that is produced if systemd is not listening on D-Bus. The best way I found to circumvent this problem is to remove the erroneous error message from the lxsession source and recompile the package.
Also, the rfkill
tool has a confusing dependency on a package named (!) "systemd" instead of just the systemd provision in my no-systemd package. Downgrading rfkill
or recompiling without the hard-coded dependency fixes this issue.
« Previous 1 2 3 Next »
Buy this article as PDF
(incl. VAT)