Systemd Kursnotizen

1 Tag 1

1.1 Vorstellungsrunde

  • Was wollen wir?
  • Unterrichtszeiten und Pausen
    • 9:00 – 18:00 Unterricht
    • 13:30 – 14:30 Mittagspause

1.2 Einrichtung Rechner

  • Windows11/OS-X ssh Anpassungen
    • .config/ssh
      • Host ...
        ServerAliveInterval 90
  • Putty Anpassungen
    • Putty-Categories (linke Liste)
      • Connection
        • keepalive aktivieren, z.B. auf 90 Sekunden setzen
  • Konfiguration unter git bringen
    • sollte auf einem produktiven Server eher nicht gemacht werden!
    • apt-get install etckeeper git
  • Editor einrichten
    • apt-get install vim oder emax-nox oder joe oder nano…
    • update-alternatives --config editor
    • Weitere Pakete (prüfen und ggfs. installieren): + aptitude, rsync, exa
    • Anpassung History?
editor /etc/skel/.bashrc

HISTCONTROL=ignoreboth
HISTSIZE=2000
HISTFILESIZE=1000000
HISTTIMEFORMAT='[%F_%T] '

# Aliase nach belieben
alias ip='ip --color=auto' # praktisch
  • Editoreinstellungen (falls notwendig)
# alle aus /etc/vim/vimrc geklaut
editor /etc/skel/.vimrc

syntax on
"set background=dark    "falls notwendig (dark themes)

" jump to the last position when reopening a file
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

set showmatch           " Show matching brackets.
set mouse=r             " Enable mouse usage (all modes)
  • Dateien kopieren (sowohl als root als auch als User)
cd
cp /etc/skel/.vimrc .
cp /etc/skel/.bashrc .
cp /etc/skel/.profile .
  • Container Subsystem
    • apt-get install systemd-container
    • Alma-Linux Tarball herunterladen und enttaren
cd /var/lib/machines
wget <url>
tar -xvzf alma9.tgz

1.3 Einführung

  • Wo finden wir ihn?
# Prozesse
ps ax | grep systemd
pgrep -alf systemd
pstree -pul| grep systemd

#  Paketmanager
dpkg -l | grep systemd
dpkg -L systemd
  • Rocky Container einrichten
# als app container (wie docker/podman)
systemd-nspawn -D /var/lib/machines/rocky9 /bin/bash -l
(container) pstree -pul
(container) # login shell läuft mit PID 1 ;-)
(container) passwd # root passwort setzen
(container) Ctrl+d # verlassen
# als sys container starten/booten (wie LXC/LXD)
systemd-nspawn -D /var/lib/machines/rocky9 -b
(container) login:
(container) # Einloggen wie auf einem TTY und nach Prozessen etc. suchen
(container) poweroff # herunterfahren (wichtig und bitte nur den Container)

1.3.1 sysV-init vs. systemd

  • Das alte Init-System
    • Was ist ein runlevel und wieviel gibt es davon?
    • Wechseln mit init x oder telinit x
    • Welche Dateien sind in /etc/init.d/ und /etc/rc?.d/
    • Persistieren mit update-rc.d (Debian) oder chkconfig (RH)
    • Was war daran schlecht?
  • Layered Configuration
    • /usr/lib/systemd/... oder /lib/systemd/...
    • /run/systemd/...
    • /etc/systemd/...
 sysV-init         systemd                                     
 /etc/rc?.d/     
      (symlinks) 
 {/usr}/lib/systemd/...                      
      1. Ebene: Vendor/System/Distributor RO 
 /etc/init.d/    
 (shell scripts) 
 /run/systemd/...                            
                 2. Ebene: Runtime/dynamisch 
     (generator)   -->                       (bis Version 251) 
                 
                 
 /etc/systemd/...                            
                          3. Ebene: Admin RW 

1.3.2 Container und VM-Grundlagen

 Userspace            Appl-C.     containerd 
 Init-Prozess         System-C.   LXC/LXD    
 Kernel               Container              
 BIOS / EFI                     
           
 Paravirt. 
            
            
 virtio     
 HID/Periph. (FW)   
                    
 CPU (Microcode)    
 VMX       
 Virt.     
 KVM        
            
 HW: GraKa NIC (FW)   Emulation   Bochs/QEmu 

1.4 Praxisteil (-> Wiki)

1.4.1 Units überladen

  • (Meta-)Dokumentation man systemd.directives
  • Drop-Ins

1.4.2 Eigene Units

  1. Targets

2 Tag 2

2.1 Eigene Units

  • Der Nachteil, auf eine Shell zu verzichten bei vmstat
  • Warum es dennoch ein Vorteil ist

2.1.1 Service Types

  • oneshot Unit
  • oneshot Unit mit Start und Stop (Flip-Flop)
  • simple
  • exec
  • notify

2.1.2 Parameter

2.2 systemctl

  • Units auflisten list-units, list-unit-files
  • Selektieren mit --type und --state

2.3 Linux- und Kernel-Features

  • CGroups
  • Namespaces
  • Capabilities

2.3.1 Abbildung im systemd

  • Properties
  • systemd-run

2.4 Prozessmechanik

  • KillMode

2.5 Abhängigkeiten

3 Tag 3

3.1 Templates

3.2 Trigger

3.2.1 Sockets

  • Accept=yes
    • socket -> service
  • Accept=no
    • socket -> @service

3.2.2 Mount

  • automount -> mount

3.2.3 Path und Timer

  • path -> service
  • timer -> service

3.3 Alte Subsysteme (!systemd)

3.3.1 cron

$ crontab -e

# m     h       dom     mon     dow     command
 *      *       *       *       *       date >> /tmp/crontest
0       *       *       *       *       echo "KUCKUCK" >> /tmp/crontest

5,45    9-17,19 *       *       *       echo

# Wo ist der Fehler?
55      8       13      *       fri     echo "Pass bitte, bitte auf !!111!!ELF"

#*      8-12    10-20   sep,oct sat     echo "TEST TEST TEST" >> /tmp/crontest

# */7 := x:00, x:07, x:14, ... x:56, x+1:00

# mon := 1,2,3 OR jan,feb,mar
# dow := 0,1,2,...,6,7 OR sun,mon,tue,...,sat,sun

# @...
  • Der “Fehler” ist, dass Freitag, der 13. jeden Freitag und jeden 13. meint

3.3.2 (r)syslog(-ng)

3.4 Journal

  • Syslog: Kompatibilität und Zusammenarbeit