208 Systemd [3 PT]

Updated . Posted . Visible to the public.

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

Übungen

  1. 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. Mit curl localhost:8080 kannst du testen ob es funktioniert.

  2. 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.

  3. 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.

  4. 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.

  5. Führe deinen neuen Service regelmäßig aus

    Setze einen timer unit ein, um deinen Service regelmäßig laufen zu lassen.

  6. 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.

  7. 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?

  8. 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 noch vagrant und virtualbox installieren. Lege anschließend einen Ordner an der eine Vagrantfile enthält und paste den im folgenden gezeigten Content. Anschließend kannst du die VM mit vagrant up starten. Mit vagrant ssh kannst du dich zu der Instanz verbinden. Wenn du fertig bist, kannst du die VM mit vagrant 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
    
  9. 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.

  10. Konfiguriere DNS

    Suche dir zwei beliebige DNS-Anbieter aus (z. B. Cloudflare, Google DNS, Quad9) und konfiguriere dein Netzwerk so, dass diese verwendet werden.

  11. 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?

  12. Das /tmp Verzeichnis

    Starte eine Vagrant VM mit der archlinux/archlinux Box. Wenn du df -h / /tmp ausführst, siehst du, dass für /tmp ein tmpfs verwendet wird. Dieses ist aber nicht in /etc/fstab konfiguriert. Was löst das Mounten des tmpfs aus?

  13. Besonderheiten von tmpfs

Warum wird bei /tmp nicht einfach auf die Root-Partition geschrieben? Was sind die Unterschiede von tmpfs?

Claus-Theodor Riegg
Last edit
Stefan Xenopol
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2022-03-30 14:34)