Der Begriff systemd
wird immer umfassender da es sich nicht mehr (wie ursprünglich) nur um ein init
Systemd handelt, sondern immer weitere Komponenten hinzugefügt wurden. Wir werden uns nicht mit allen Komponenten beschäftigen, aber mit den wichtigsten für deine Arbeit.
Ziele
- Du weißt, für was man ein init System benötigt
- Du weißt, welche Alternativen/Vorgänger es zu
systemd
gibt - Du kennst die wichtigsten Komponenten von
systemd
(core und ancillary) und für was diese da sind - Du weißt, was eine
systemd
unit
ist - Du weißt, wie du einen Service konfigurierst
- Du weißt, wie du units abhängig vom Zeitpunkt und/oder anderen Events im System laufen lassen kannst
- Du weißt, wie du systemd
timer
verwendest - Du weißt, wie du systemd
mount
units verwendest - Du weißt, wie DNS Auflösung mit
resolved
funktioniert
Inhalte
Die offizielle systemd Dokumentation für sämtliche Komponenten findest Du hier:
Freedesktop
Show archive.org snapshot
Du kannst auch die man pages mit den gleichen Inhalten verwenden z.b. man systemd.service
oder man systemd.timer
- Wikipedia Show archive.org snapshot
- Tutorialspoint Show archive.org snapshot
- Freedesktop Systemd Service Show archive.org snapshot
- ArchWiki Systemd Timers Show archive.org snapshot
man loginctl
- ArchWiki systemd-networkd Show archive.org snapshot
man file-hierarchy
Übungen
-
Erstelle dir eine Anwendung für einen Service
Für Testzwecke brauchst du eine einfache App die du später als Service starten kannst. Du kannst dir die badapp herunterladen. Das ist eine Go binary, die du erst ausführbar machen musst. Anschließend kannst du diese mit
./badapp
starten. Die Anwendung startet einen Webserver. Mitcurl localhost:8080
kannst du testen ob es funktioniert. -
Erstelle einen systemd Service der
badapp
startet.Wenn die App erfolgreich startet, versuche als nächstes deinen Service so anzupassen, dass der Service automatisch neu gestartet wird, wenn er abstürzt. Stelle aber sicher, dass das nicht unendlich oft passieren kann. Einen Absturz kannst du herbeiführen indem du den Pfad
/crash
von der badapp aufrufst. -
Wie kannst du den Log deiner Anwendung sehen?
Von deinem Service wird es automatisch logs geben. Finde heraus, wie du dir diese anschauen kannst. Finde auch heraus, wie du den Zeitraum für die Logs, die dir angezeigt werden, begrenzen kannst oder du nur eine begrenzte Anzahl von Zeilen erhältst.
-
Schreibe einen Service für eine nicht dauerhaft laufende Aufgabe
Schreibe einen Service für ein Script, das immer nur einmal ausgeführt wird und durchläuft. Zum Beispiel ein Backup oder etwas, das laufen würde, bevor ein anderer Service startet. Die Unitfile hierfür wird anders aussehen als vom vorherigen Service. Der Service soll außerdem als System User Service laufen.
-
Führe deinen neuen Service regelmäßig aus
Setze einen
timer
unit ein, um deinen Service regelmäßig laufen zu lassen. -
Lass dir Informationen über angemeldete Benutzer anzeigen
Finde heraus, wie du dir anzeigen lassen kannst, welche Benutzer an deinem System angemeldet sind und finde heraus, ob diese lokal oder remote (z. B. über SSH) angemeldet sind.
-
Verbanne einen User vom System
Ein Hacker hat eines deiner Benutzerkonten gekapert. Was kannst du tun, um schnell alle Sitzungen dieses Benutzers zu beenden und gleichzeitig sicherzustellen, dass sich dieser Benutzer nicht mehr anmelden kann?
-
Konfiguriere dein Netzwerk
Bei Ubuntu Server kommt standardmäßig Netplan Show archive.org snapshot zum Einsatz. Starte eine Ubuntu Jammy Vagrant VM und konfiguriere dein Netzwerk stattdessen mit
systemd-networkd
. Dabei solltest du sicherstellen, dass die Netzwerkkonfiguration nicht mehr von Netplan generiert wird. Dazu musst du dir erst nochvagrant
undvirtualbox
installieren. Lege anschließend einen Ordner an der eineVagrantfile
enthält und paste den im folgenden gezeigten Content. Anschließend kannst du die VM mitvagrant up
starten. Mitvagrant ssh
kannst du dich zu der Instanz verbinden. Wenn du fertig bist, kannst du die VM mitvagrant destroy
wieder löschen.Vagrant.configure("2") do |config| config.vm.box = "ubuntu/jammy64" config.vm.network 'private_network', type: 'dhcp' config.vm.provider "virtualbox" do |vb| vb.memory = "2048" vb.cpus = "2" end end
-
Konfiguriere eine statische IP-Adresse
Nutze statt DHCP eine statische Adresse für das zweite Netzwerkinterface der VM. Das Netzwerkinterface mit der IP im 10er Netz darfst du nicht verändern.
-
Konfiguriere DNS
Suche dir zwei beliebige DNS-Anbieter aus (z. B. Cloudflare, Google DNS, Quad9) und konfiguriere dein Netzwerk so, dass diese verwendet werden.
-
Unterschiedliche Resolver-Typen
Mit systemd kann man einen Stub-Resolver verwenden oder nicht. Was ist der Unterschied? Wie kannst du dir anzeigen lassen, ob du einen Stub-Resolver verwendest?
-
Das
/tmp
VerzeichnisStarte eine Vagrant VM mit der
archlinux/archlinux
Box. Wenn dudf -h / /tmp
ausführst, siehst du, dass für/tmp
eintmpfs
verwendet wird. Dieses ist aber nicht in/etc/fstab
konfiguriert. Was löst das Mounten destmpfs
aus? -
Besonderheiten von
tmpfs
Warum wird bei /tmp
nicht einfach auf die Root-Partition geschrieben? Was sind die Unterschiede von tmpfs
?