Ist jetzt zwar schon wieder etwas her. Aber ich hab mich in den vergangenen Wochen auch mal in Systemd etwas anfänglich eingearbeitet. Bei meinem HTPC hab ich die Startzeit von ca. 1 Minute auf ca. 15 Sekunden verkürzen können, um bis ins XBMC zu booten.
X-Server
Also erst mal muss man den X-Server definitiv nicht starten lassen. Unter sysvinit hab ich das über die /etc/inittab hingebogen. Unter Systemd ist das viel einfacher:
/etc/systemd/system/startx.service
[Unit]
Description=Startx
[Service]
User=xbmc
ExecStart=/usr/bin/startx
[Install]
WantedBy=graphical.target
Alles anzeigen
Danach noch einfach ein: systemctl enable startx.service. Und der X-Server startet direkt beim Rechnerstart. Ein grafischer Login-Manager wie KDM/GDM usw. ist nicht notwendig.
In der /home/xbmc/.xinitrc lass ich dann bei mir xbmc starten:
exec /usr/bin/ck-launch-session /usr/bin/dbus-launch --exit-with-session xbmc-standalone
Ob der Start der Consolekit-Session und das dbus-launch noch notwendig sind, weiß ich nicht. Aber zumindest funktioniert es. Statt xbmc kann man da natürlich auch irgendein vdr-Frontend starten lassen.
VDR
Ich hab mir die vorige Diskussion mal etwas durchgelesen. Ich weiß nicht, was das runvdr-Script alles macht. Bei mir läuft ein Gentoo. Und da wurde die ganze Funktionalität ins Init-Script gepackt. Entsprechend ist das Ding elende lang. Dazu gibt's noch eine Unmenge an zusätzlichen Configdateien:
- /etc/conf.d: vdr vdr.periodic.epgscan vdr.streamdev-server vdradmin vdr.periodic.general vdr.watchdogd vdr.cd-dvd vdr.plugins vdr.xineliboutput vdr.imonlcd vdr.shutdown - Für jedes Plugin werden halt irgendwelche Environment-Variablen festgelegt.
- /usr/share/vdr/inc: Da stehen haufenweise Funktionen, z.B. für shutdown, Plugins, Sprache
- Beim vdr-Start: Logging-Optionen, User, unter dem der vdr-Daemon läuft, Home-Dir.
- Dann gibt's noch einen Watchdog, der zumindest nach dem Kommentar im Config-File alle 8 Sekunden checkt, ob VDR noch läuft.
Weiß nicht, ob man das alles umsetzen muss. Ist aber haufenweise Zeug erst mal zu analysieren.
Probleme mit Systemd
Systemd soll ja die hochgelobte Distributionsunabhängigkeit bringen. Unter Gentoo wird Systemd noch sehr kritisch betrachtet, was wohl durchaus auch seine Berechtigung hat. Zumindest liefern die allerwenigsten Pakete überhaupt eine Systemd-Unit mit. Ich hab mir die meisten Unit-Files von Fedora gezogen, musste die meisten aber noch anpassen. So richtig distributionsunabhängig waren sie dann doch nicht.
Ein großes Problem war das Einbinden der Environment-Files. Im Gegensatz zur Systemd-Doku scheinen Systemd die Variablen nicht oder nicht vollständig zu expandieren. Beispiel /etc/conf.d.distccd:
DISTCCD_OPTS=""
DISTCCD_EXEC="/usr/bin/distccd"
DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"
DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/16"
DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"
Ich hab's nicht hinbekommen, dass Systemd irgendwie die DISTCCD_OPTS-Variable zu einer vollständigen Optionskette expandiert hat. Aber selbst wenn ich die ganzen Bestandteile in eine Zeile geschrieben hab, kam Systemd in der Unit nicht damit klar. Ich hab dann sämtliche Optionen in die Unit reingeschrieben. Damit ging's dann. Damit kommen wir gleich zum nächsten Punkt:
Config-File vs. Unit
Soweit wie ich das von heise.de in der Einführung Teil1 und Teil2 entnehmen wollte, meint der Lennart wohl:
- Standard-Units stehen in /usr/lib/systemd/system/
- Eigene Units stehen in /etc/systemd/system/
Will man die Standard-Units überschreiben, kopiert man die Standard-Unit einfach von /usr/lib nach /etc. EnvironmentFiles wären demnach nicht notwendig, da man ja seine eigene angepasste Service-Datei sowieso bereits angelegt hat.
Ich wollte zwar auch netterweise meine ganzen Config-Dateien aus /etc/conf.d verwenden. Aber nachdem ich mit distccd und pdnsd schon gescheitert bin, bin ich langsam dazu übergegangen, alle Configdaten direkt in die Service-Files reinzuschreiben. Das wird dann damit irgendwo zu meinem Config-Verzeichnis - praktisch die Zusammenlegung von /etc/conf.d und /etc/init.d. Ich gewöhn mich mittlerweile daran.
Ich hätte also nicht unbedingt was dagegen, wenn sämtliche VDR-Optionen übersichtlich in der vdr.service landen würden.