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
systemdgibt - Du kennst die wichtigsten Komponenten von
systemd(core und ancillary) und für was diese da sind - Du weißt, was eine
systemdunitist - 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
timerverwendest - Du weißt, wie du systemd
mountunits verwendest - Du weißt, wie DNS Auflösung mit
resolvedfunktioniert
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
./badappstarten. Die Anwendung startet einen Webserver. Mitcurl localhost:8080kannst du testen ob es funktioniert. -
Erstelle einen systemd Service der
badappstartet.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
/crashvon 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 eine
timerunit 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 nochvagrantundvirtualboxinstallieren. Lege anschließend einen Ordner an der eineVagrantfileenthält und paste den im folgenden gezeigten Content. Anschließend kannst du die VM mitvagrant upstarten. Mitvagrant sshkannst du dich zu der Instanz verbinden. Wenn du fertig bist, kannst du die VM mitvagrant destroywieder 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
/tmpVerzeichnisStarte eine Vagrant VM mit der
archlinux/archlinuxBox. Wenn dudf -h / /tmpausführst, siehst du, dass für/tmpeintmpfsverwendet wird. Dieses ist aber nicht in/etc/fstabkonfiguriert. Was löst das Mounten destmpfsaus? -
Besonderheiten von
tmpfsWarum wird bei
/tmpnicht einfach auf die Root-Partition geschrieben? Was sind die Unterschiede vontmpfs?