systemd - Ein Überblick

systemd - Ein Überblick

8dfa4d1af5c7bb536a71e68a749d41ce?s=128

Christine Koppelt

September 25, 2015
Tweet

Transcript

  1. systemd systemd Ein Überblick Ein Überblick Open-Source-Tre�en Open-Source-Tre�en Christine Koppelt

    Christine Koppelt 25. September 2015 25. September 2015
  2. Wer bin ich Wer bin ich Softwareentwicklerin Softwareentwicklerin Linux seit

    2006 Linux seit 2006
  3. Frage an euch: Frage an euch: Was ist systemd? Was

    ist systemd?
  4. Allgemeines Allgemeines System and Service Management Suite für Linux beinhaltet

    ein init System Wurde 2010 veröffentlicht Im Wesentlichen von RedHat Mitarbeitern entwickelt LGPL lizenziert Mittlerweile default init System in den meisten Linux Distributionen Debian, Arch, Fedora, Ubuntu, Red Hat Enterprise Linux Nicht: Gentoo, MINT
  5. Netzwerk Zeit & Datum Init System systemd-core User Login Logging

    journal Container nspawn
  6. "systemd is in the process of becoming a comprehensive, integrated

    and modular platform providing everything needed to bootstrap and maintain an operating system's userspace." http:/ /0pointer.de/blog/projects/why.html http:/ /0pointer.de/blog/projects/why.html
  7. Init Prozess Init Prozess & & Service Management Service Management

  8. Start mit SysVinit Start mit SysVinit Linux Kernel BIOS/UEFI Bootloader

    /etc/init.d/rc 2 S01motd S13rpcbind S14nfs-common ... S16rsyslog S16sudo ... S17cron S17dbus S17exim4 S17speech-dispatcher S18avahi-daemon S18bluetooth S18network-manager S19cups S19gdm3 S19pulseaudio S19saned S20bootlogs S21minissdpd S21rc.local S21rmnologin init
  9. Start mit systemd Start mit systemd network-online.target network.target network-pre.target remote-fs.target

    local-fs.target remote-fs-pre.target local-fs-pre.target graphical.target systemd init multi-user.target rescue.target basic.target getty.target sysinit.target paths.target slices.target sockets.target cryptsetup.target emergency.target swap.target Linux Kernel BIOS/UEFI Bootloader
  10. systemd init systemd init Units statt Services Verschiedene Typen von

    Units (ua. Services, Sockets, Targets, Timer) Targets statt Runlevel spezieller Unit-Tyo Gruppierung von Units und Synchronisationspunkten Können parallel gestartet werden Wichtige Targets default graphical target multi-user.target shutdown.target, reboot.target
  11. Typen von Units Typen von Units services Standard-Prozess sockets Socket

    basierte Aktivierung eines Services mounts Mount Point des Dateisystems timers Entsprechen Cron-Jobs, können verwendet werden um .service Units zu kontrollieren snapshots Werden nicht kon�guriert, sondern können automatisch erstellt werden Speichern den Zustand aller aktiven Zustand
  12. Analysieren des Systems Analysieren des Systems Startzeit Kernel & Userspace

    systemd-analyze Critical Chain systemd-analyze critical-chain Anzeige aller aktiven Targets systemctl list-units --type=target Default Target systemctl get-default
  13. Analysieren des Systems Analysieren des Systems Anzeige aller laufenden Units

    systemctl list-units systemctl list-units --type=service Anzeige Units die nicht gestartet werden konnten systemctl list-units failed Anzeige aller vorhandenen Unit-Files systemctl list-unit-files
  14. Neustarten, Herunterfahren & Stand-By Neustarten, Herunterfahren & Stand-By sysvinit halt

    poweroff reboot pm-suspend pm-hibernate systemd systemctl halt systemctl poweroff systemctl reboot systemctl suspend systemctl hibernate
  15. Verwalten von Services Verwalten von Services SysVInit systemd Unterstützt werden

    nur Standard Optionen (start, stop, restart) Services können so kon�guriert werden, dass sie im Fehlerfall automatisch neu gestartet werden service httpd start/stop systemctl start/stop httpd.service
  16. Units vs. init-Skripte Units vs. init-Skripte Neue, deklarative Syntax init-Skripte

    funktionieren großteils weiterhin System Defaults: [/usr]/lib/systemd Sollten nicht geändert werden Eigene Kon�gurationen /etc/systemd/system wird gegenüber dem Default bevorzugt Überschreiben der Defaults möglich Typ wird durch Dateiendung des Kon�gurations�les angezeigt myapplication.service systemd-delta
  17. Anlegen eines neuen Service Anlegen eines neuen Service /etc/systemd/system/testserver.service [Unit]

    Description=Some HTTP server After=remote-fs.target sqldb.service Requires=sqldb.service AssertPathExists=/srv/webserver [Service] Type=notify ExecStart=/usr/sbin/some-fancy-httpd-server Nice=5 [Install] WantedBy=multi-user.target Manuell Starten systemctl start testserver Status prüfen systemctl status testserver
  18. Kon�gurieren eines Services Kon�gurieren eines Services Überprüfen der unit-Files auf

    Korrektheit systemd-analyze verify Automatisches Starten aktivieren systemctl enable foo.service Manueller Reload nach Änderungen erforderlich systemctl daemon-reload
  19. Kon�gurationsmöglichkeiten Kon�gurationsmöglichkeiten Angabe von Startbedingungen, beispielweise Virtualisierte Umgebung Rechnerarchitektur Verzeichnisse/Dateien

    vorhanden Maximaler Ressourcenverbrauch Arbeitsspeicher Device Zugriff CPU Zeit Überwachungsfunktionen Neustart eines Services im Fehlerfall Timeouts für Start/Stop
  20. Logging Logging

  21. syslog syslog syslogd /dev/log /etc/(r)syslog.conf /var/log/*.log Konsole Remote Host logger

    Prozesse Kernel
  22. journal journal journald /dev/log /run/systemd/journal/dev-log syslogd /run/systemd/journal/syslog /var/log/*.log Konsole Remote

    Host logger Prozesse Kernel systemd-cat /run/log/journal volatile /var/log/journal persistent forwarding (optional) /etc/systemd/journald.conf
  23. journal: Eigenschaften journal: Eigenschaften Binärformat strukturierte Daten indiziert => schneller

    analysierbar nicht mehr mit Texttools analysierbar spezielle Tools für Analyse erforderlich default: nicht persistent Optional: Forwarding an syslog daemon Speicherung umfangreicher Metadaten Trusted Fields
  24. Journal lesen: journalctl Journal lesen: journalctl journalctl journalctl -f Unit

    journalctl -u sshd journalctl -u httpd.service die letzten n Zeilen journalctl -n 100 journalctl -u httpd.service -n 100 journalctl _PID=2100 -n 100 Autovervollständigung journalctl <TAB>
  25. Journal lesen: journalctl Journal lesen: journalctl Zeiträume journalctl -u httpd.service

    --since today journalctl --since="2015-09-21 09:00:00" --until="2015-09-22 13:59:59" journalctl --since "20 min ago" Bootlog journalctl -b journalctl -b -1 Ausgabeformat journalctl -o verbose journalctl -o json
  26. Schreiben von Journal-Einträgen Schreiben von Journal-Einträgen Ausgaben von systemd Prozessen

    Kommandozeilentools systemd-cat logger Schreiben mittels syslog Schreiben mittels journald API Bindings echo 'hello' | systemd-cat echo 'hello' | systemd-cat -p info echo 'hello' | systemd-cat -p warning echo 'hello' | systemd-cat -p emerg logger -p notice Hello
  27. Journal: Bindings Journal: Bindings Of�ziell: Python, Erlang Viele weitere: Ruby,

    Go, Haskell, Lua, Perl ... Eingeschlafen: (node, php) Beispiel: Integration in das Python Logging Framework log = logging.getLogger('custom_logger_name') log.propagate = False log.addHandler(journal.JournalHandler()) log.warn("Some message: %s", detail)
  28. Logeintrag syslog Logeintrag syslog logger ein logeintrag mittels logger syslog

    Sep 24 22:43:44 dev ck: ein logeintrag mittels logger Format: TIMESTAMP HOSTNAME CONTENT Timestamp im Format Mmm DD HH:MM:SS, z.B. Sep 25 18:42:23 Jahr? Zeitzone? Hostname: kurz oder FQDN Eindeutigkeit? Content: meist Prozessname[PID]: Message Kaum vorgegebene Struktur Syslog Protokoll RFC 3164
  29. Logeintrag journal Logeintrag journal Format nicht standardisiert, Änderungen möglich Trusted

    Fields Beginnen mit _ Metadaten zum aufrunden Prozess und dem aufrufenen Kommando Werden vom Journal Daemon hinzugefügt, können vom loggenden Programm nicht geändert werden User Fields Können vom loggenden Client gesetzt werden Message, Message Id, Log Level, Code Location, Fehlertyp
  30. Beispiel Logeintrag Beispiel Logeintrag logger ein logeintrag mittels logger journal

    Do 2015-09-24 22:43:44.070670 CEST _BOOT_ID=648d7d2635754b94b17e90a13ab4422e _MACHINE_ID=d4da9ca42888e9dae063f4f852049ef1 _HOSTNAME=dev PRIORITY=5 _TRANSPORT=syslog SYSLOG_FACILITY=1 _CAP_EFFECTIVE=0 _GID=1000 _AUDIT_SESSION=1 _AUDIT_LOGINUID=1000 _SYSTEMD_OWNER_UID=1000 _SYSTEMD_SLICE=user-1000.slice _UID=1000 _SYSTEMD_CGROUP=/user.slice/user-1000.slice/session-1.scope _SYSTEMD_SESSION=1 _SYSTEMD_UNIT=session-1.scope _COMM=logger SYSLOG_IDENTIFIER=ck MESSAGE=ein logeintrag mittels logger _PID=14313 _SOURCE_REALTIME_TIMESTAMP=1443127424070670
  31. Kon�guration: /etc/systemd Kon�guration: /etc/systemd /journald.conf /journald.conf Art der Speicherung (keine,

    in-Memory, auf der Platte) Komprimierung (ja/nein) Kryptographische Signierung Schreibintervall auf die Platte Maximal belegter Plattenplatz Logrotation (Zeit oder Speicherplatzbasiert) Weiterleitung von Log Meldungen an syslog/Konsole/alle Benutzer Max. Loglevel das berücksichtigt werden soll emerg, alert, crit, err, warning, notice, info, debug Ein Integer Wert zwischen 0..7
  32. Fragen? Fragen! Fragen? Fragen!