Debian ohne systemd

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiInstallation von Debian ‹ Debian ohne systemd



Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


Warnung.png Warnung: dieser Artikel ist nicht für Einsteiger geeignet, selbst wenn er mal fertig werden sollte. Wer Angst hat, dass "aptitude mein halbes System deinstallieren will" sollte lieber nicht weiterlesen


Warum

wer braucht das?

jeder, bei dem systemd nicht funktioniert oder der mit systemd einfach nicht klar kommt. Solange es sysinit noch gibt, ist es einfach. Dies soll aber auch eine Vorsorge für jessie+1 sein, falls sysvinit tatsächlich nicht mehr unterstützt werden sollte.

wer kann das nicht gebrauchen?

jeder, der Gnome braucht; jeder, der xfce mit allen recommends braucht; sogar jeder, der den networkmanger braucht (obwohl, da gibt's sicher Alternativen).

Phase 1

systemd durch sysvinit-core ersetzen

Seit jessie installiert Debian per Default systemd, bietet jedoch upstart und sysvinit als Alternativen an. Der Betrieb ohne systemd wird noch offiziell unterstützt, die Umstellung ist ganz normal über die Paketverwaltung möglich. Allerdings wird ja ein essentieller Baustein des Systems ersetzt(1), deshalb sollte man sich an diese Reihenfolge halten:

  • Debianpackage.png systemd-sysv (nicht Debianpackage.png systemd) deinstallieren und gleichzeitig Debianpackage.png sysvinit-core installieren. Das ist nötig, weil immer genau eins der beiden Pakete installiert sein muss.
  • neu booten. Ja, das muss sein diesmal sein. Das System muss noch mit systemd runter gefahren werden, der Neustart erfolgt dann schon mit sysinit.
  • jetzt können die Pakete Debianpackage.png systemd und libsystemd* deinstalliert werden. Einzelne Verzeichnisse werden vom Paketsystem nicht gelöscht, weil sie nicht leer sind. Das ist normal, man sollte /lib/systemd/ auch nicht von Hand löschen, weil manche Pakete dort ihre service(?)-Dateien ablegen. /etc/systemd kann (wahrscheinlich) gelöscht werden.

udev ersetzen

Hinweis.png Hinweis: Ohne udev muss man auf manche Dinge verzichten oder einen Ersatz finden


Mittels Debianpackage.png equivs kann man ein Dummy-udev-Paket bauen, das die Abhängigkeiten erfüllt, aber keine ausführbaren Dateien enthält. Das originale Debianpackage.png udev kann dann deinstalliert werden, aber Pakete wie Debianpackage.png xserver-xorg-core können trotzdem noch installiert werden. Mit

root@debian:~# equivs-control udev

erstellt man eine Vorlage für die Control-Datei. Nach einem Edit sollte die ungefähr so aussehen:

### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: <syntaxhighlight package name; defaults to package name>
Section: admin
Priority: important
# Homepage: <enter URL here; no default>
Standards-Version: 3.9.2

Package: udev
Version: 342
# Maintainer: Your Name <yourname@example.com>
# Pre-Depends: <comma-separated list of packages>
# Depends: <comma-separated list of packages>
# Recommends: <comma-separated list of packages>
# Suggests: <comma-separated list of packages>
# Provides: <comma-separated list of packages>
# Replaces: <comma-separated list of packages>
# Architecture: all
# Copyright: <copyright file; defaults to GPL2>
# Changelog: <changelog file; defaults to a generic changelog>
# Readme: <README.Debian file; defaults to a generic one>
# Extra-Files: <comma-separated list of additional files for the doc directory>
# Files: <pair of space-separated paths; First is file to include, second is destination>
#  <more pairs, if there's more than one file to include. Notice the starting space>
Description: Dummy udev
 Dieses Paket ersetzt das Debian-Original mit dem gleichen Namen.
 Es hat keine Funktion, ermoeglicht aber die Installation von Paketen
 die von udev abhaengen, wie z.B. xserver-xorg-core.
 .
 Bevor dieses Paket installiert wird, sollte das Original udev mit
 purge deinstalliert werden, weil bei einem update nicht alle Dateien
 entfernt werden.

Maintainer, Version, Description???

root@debian:~# equivs-build udev

baut daraus ein Debian-Paket, das mit

root@debian:~# dpkg -i udev_342.deb

installiert werden kann.

Phase 2

eigene init-Scripte

rcS

mount /sys
mount /proc
mkdir /run
mkdir /run/network
mount /home

rc.0, rc.1, rc.6

  • Datenbanken u.ä. stoppen
  • besonders pflegebedürftige Programme stoppen
  • knifflig: man muss alle nötigen "umount" dynamisch erzeugen

rc.2 bis rc.5

trivial

Phase 3

inittab nutzen

Vorraussetzung ist natürlich, dass /etc/inittab und das originale /sbin/init aus gibt. Unter wheezy ist das normal erfüllt, unter jessie muss systemd ersetzt werden (s.o.), unter jessie+1 muss evt. das archivierte sysvinit eingespielt werden. Drei Teile der inittab lassen sich sehr einfach nutzen:

  • sysinit: hier muss all das ausgeführt werden, was früher unter rc.S lief. Das packt man in ein kleines Script und trägt dieses in die sysinit-Zeile ein.
  • die normalen Runlevel: hier werden Prozesse wie sshd oder rsyslog gestartet. Vernünftige Programme lassen sich einfach durch Aufruf der Datei in /usr/bin oder /usr/sbin starten, Optionen werden einfach dahinter geschrieben. In der Regel ist "once" die geeignete action; "respawn" geht nur, wenn der Prozess nicht forkt.
  • autologin (optional): das normale getty kann mit der Option "--autologin user" den Benutzer automatisch anmelden. Wenn dieser eine .xinitrc hat und in seiner .bashrc "xinit" aufruft, wird automatisch sein Desktop gestartet.

Der Rest kann zunächst unverändert übernommen werden (mir fällt jedenfalls nichts ein, was man ändern wollte).