How to remove systemd from a Debian jessie/sid installation
Contents |
Sysvinit
Installing Sysvinit
First install the SysV init packages:
apt-get install sysvinit-core sysvinit-utils cp /usr/share/sysvinit/inittab /etc/inittab
Grub Configuration
This section on grub may only apply to Debian Jessie 8.3+
Next, change the GRUB_CMDLINE_LINUX_DEFAULT
line in /etc/default/grub
from:
GRUB_CMDLINE_LINUX_DEFAULT="init=/bin/systemd console=hvc0 console=ttyS0"
to
GRUB_CMDLINE_LINUX_DEFAULT="init=/lib/sysvinit/init console=hvc0 console=ttyS0"
After changing the configuration, execute update-grub
as sudo or root.
Purge Systemd
Reboot your machine, then remove all of the systemd packages. BE AWARE that the following command removes packages that depend on systemd itself or things like libpam-systemd!
apt-get remove --purge --auto-remove systemd
Pin Systemd Packages
Prevent apt from installing systemd packages in the future.
echo -e 'Package: systemd\nPin: release *\nPin-Priority: -1' > /etc/apt/preferences.d/systemd
Prevent apt from installing any systemd like packages in the future (note the star before and after systemd)
echo -e '\n\nPackage: *systemd*\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
Note: This prevents the installation of the package systemd-shim as well. However this is a emulation of systemd functions, so you can install software which depends on systemd. So if you get "Package systemd-shim is not available, but is referred to by another package." you might temporary disable the three lines in the preferences.d/systemd file.
In the case your system uses multiarch (mixed 32 and 64bit packages), you need to pin the 64bit version of systemd too. Otherwise apt-get could still install it as dependency later.
echo -e '\nPackage: systemd:amd64\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
In other multiarch cases where amd64 is the default architecture, you may have to pin the i386 package to prevent APT from installing it:
echo -e '\nPackage: systemd:i386\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
polkit
To enable polkit based stuff (suspend, hibernate, mount via gvfs etc.), the following procedure can be used.
Warning: tested with lightdm on jessie only!
Add wheezy repo to apt lists:
echo deb http://ftp.debian.org/debian/ wheezy main contrib non-free >/etc/apt/sources.list.d/wheezy.list
Pin essential packages to wheezy:
echo -e '\n\nPackage: policykit-1\nPin: release "wheezy"\nPin-Priority: 990' >> /etc/apt/preferences.d/systemd echo -e '\n\nPackage: libpolkit-*\nPin: release "wheezy"\nPin-Priority: 990' >> /etc/apt/preferences.d/systemd echo -e '\n\nPackage: upower\nPin: release "wheezy"\nPin-Priority: 990' >> /etc/apt/preferences.d/systemd
Note: for multiarch system you may need also to pin 64bit and i386 versions separately as mentioned above.
Install polkit-1 with libs, upower and udisks (not udisks2!)
apt-get install policykit-1 libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 upower udisks
Install policykit authentication agent depending on what desktop environment you use:
apt-get install policykit-1-gnome # For GNOME or XFCE4 apt-get install mate-polkit # For MATE apt-get install lxsession # For LXDE
Reboot or restart your *dm service.
see also
- debian.org wiki page Installing Jessie without systemd describes a preseed command which will remove systemd and install sysvinit-core during post-install