LINUX

Das universelle Betriebssystem

Eine Einführung - Teil 8

Deutsche Angestellten Akademie

https://www.schubertdaniel.de/linuxkurs

Systemverwaltung

Begriff: daemon

Ein Systemdienst der automatisch startet und ohne Eingriffe arbeitet ( meistens :-) )

vgl. Dienste unter Windows

Name endet oft mit „d“

  • systemd - ...
  • sshd - SSH Server Daemon
  • dockerd - docker daemon
  • smbd - SAMBA File Server
  • ntpd - Network Time Protocal Daemon
  • atd - at Daemon

Begriff: Runlevel

Runlevel Beschreibung
0 Shutdown. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt (d. h. die im Verzeichnisbaum eingebundenen Datenträger werden ausgehängt).
S Single-User-Runlevel; niedrigster Systemzustand für Wartungsarbeiten, in dem ausschließlich Systemressourcen wie Festplatten oder Dateisysteme aktiv sind.
1 Einzelnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. In vielen Implementierungen identisch mit 'S'.
2 Lokaler Mehrnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. Unter einigen Linuxdistributionen (z. B. Debian) wird in Runlevel 2 auch das Netzwerk konfiguriert.
3 Netzwerkbetrieb, über das Netzwerk erreichbare Ressourcen sind nutzbar, eine grafische Oberfläche steht nicht zur Verfügung. Firewalls sollten aktiviert werden.
4 Ist normalerweise nicht definiert. Kann aber für diverse Dienste genutzt werden.
5 Wie 3, zusätzlich wird die grafische Oberfläche bereitgestellt.
6 Reboot. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt.

Part 5 - systemd

  • Relativ neu
  • bricht mit alter Linux Philosophie:
    -- do one thing and do it well --
  • Sysvinit funktioniert über Shell Scripte, die nacheinander abgearbeitet werden
  • Systemd ist schneller - startet Dienste parallel
  • Kritik : übernimmt sehr viel Kontrolle - single point of failure
  • zB Gnome3 ist abhängig von systemd
  • -->Abspaltungen: Devuan - nutzt weiterhin Sysvinit
  • Standard in : Debian RedHat Suse Ubuntu

Der Boot-Ablauf mit systemd

Das initramfs ist ein komprimiertes Archiv, das für den Systemstart benötigte Dateien enthält.

systemd ist organisiert mit

  • units - einzelne Dienste
  • targets - Gruppen von Diensten, Systemzustände
    • entspr. runlevel unter Sysvinit

Dateien:

/lib/systemd/system/ -> default

/etc/systemd/system/ -> custom

Informationen anzeigen

  • Systemstatus anzeigen:
    systemctl status
  • Liste der fehlgeschlagenene Units
    systemctl --failed
  • Liste aller installierter Units
    systemctl list-unit-files
Default Target
systemctl get-default
Alle Targets
systemctl list-units --type target

Ensprechenungen der alten Runlevel und der neuen Targets

SysV Runlevel systemd Target Notes
0 runlevel0.target, poweroff.target Halt the system.
1, s, single runlevel1.target, rescue.target Single user mode.
2, 4 runlevel2.target, runlevel4.target, multi-user.target User-defined/Site-specific runlevels. By default, identical to 3.
3 runlevel3.target, multi-user.target Multi-user, non-graphical. Users can usually login via multiple consoles or via the network.
5 runlevel5.target, graphical.target Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.
6 runlevel6.target, reboot.target Reboot
emergency emergency.target Emergency shell

Dienste Steuern

  • Laufende Dienste anzeigen:
    systemctl
  • Eine Unit starten
    systemctl start DIENST
  • Eine Unit neu starten
    systemctl restart DIENST
  • Unit Status anzeigen
    systemctl status DIENST
  • Dienst Autostart anschalten
    systemctl enable DIENST
  • Dienst Autostart anschalten und sofort starten
    systemctl enable --now DIENST
  • Dienst Autostart abschalten
    systemctl disable DIENST

Eine unit

/lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
Alias=sshd.service
		
Aufgabe: Erstellt eine Unit und startet sie.

https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files
/etc/systemd/system/simple-webserver.service
[Unit]
Description=Simple Web Server

[Service]
Type=simple
ExecStart=/home/USERNAME-HIER-EINSETZEN/hello-web.sh

[Install]
WantedBy=multi-user.target

						
~/hello-web.sh
#!/bin/bash 
cd /home/
python3 -m http.server 8082 
systemctl start simple-webserver.service
systemctl status simple-webserver.service
Wenn das gescheitert sein sollte:
journalctl -xe 
journalctl --unit=simple-webserver.service 
Browser öffnen: http://localhost:8082/BENUTZERNAME

Ändern der Standard-Units

  • systemctl edit unit
  • Öffnet /etc/systemd/system/unit.d/override.conf
  • Aktualiseren systemctl daemon-reload
  • UnDo:
    systemctl revert unit
timer als cron Ersatz
systemctl list-timers --all
die Timer Datei muss den selben namen haben wie das Unit-File

toller-dienst.service

toller-dienst.timer

Aufgabe: Erstellt einen Service, der alle 5 Minuten omikron.net pingt. Die Zeitplanung soll mit systemd timer umgesetzt werden. Die Ausgabe soll nach /var/log/omikron-ping.log geschrieben werden.

https://wiki.archlinux.org/index.php/Systemd/Timers

/bin/ping-omikron.sh

#!/bin/bash
date &>> /var/log/ping-omikron.log
ping -c 3 omikron.net &>> /var/log/ping-omikron.log
					
/etc/systemd/system/ping-omikron.timer
[Unit]
Description=Ping Omikron Timer

[Timer]
OnActiveSec=30s
OnUnitActiveSec=5m
Persistent=true

[Install]
WantedBy=basic.target
						
/etc/systemd/system/ping-omikron.service
[Unit]
Description=Ping Omikron Unit

[Service]
Type=simple
ExecStart=/PFAD/ZU/ping-omikron.sh
					

journalctl

journalctl
journalctl -xe
journalctl --unit=backup.service 
Nützliche sytemd Targets

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets

timedatectl

Die Zeit mit systemd einstellen.

https://wiki.ubuntuusers.de/Systemzeit/

sudo timedatectl set-timezone Europe/Berlin 
sudo timedatectl set-time 2019-28-02 19:01 

Vorteile / Nachteile zu cron:

  • Nachteil: 2 Dateien müssen angelegt werden
  • Vorteil: Besser steuerbar, Logs landen im systemd-journal
  • Das ist die Zukunft

Bemerkungen:

Systemd ist rückwärtskompatibel zu Sysvinit.
Alte init Befehle werden von systemd verstanden, sind teilweise noch in Benutzung

init-scripte sind in /etc/init.d/ zu finden

sudo /etc/init.d/apache2 start 

Die logs landen weiterhin zusätzlich in /var/log/

ein weiteres init-System : Upstart -> eingestellt

Part 7 - Dateisysteme

Benennung von Datenträgern

Festplatten / USB Sticks

  • /dev/sda - Erste Festplatte
  • /dev/sdb - zweite FP
  • /dev/sda1 - erste Partition auf erster FP
  • /dev/sdb2 - 2. P. auf 2. FP.

externe Laufwerke

  • /dev/scd0 od. /dev/sr0 - erstes CD / DVD Laufwerk
  • /dev/scd1 od. /dev/sr1 - zweites CD / DVD Laufwerk
lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 489,1G  0 disk 
├─sda1   8:1    0  63,1G  0 part /
├─sda2   8:2    0     1K  0 part 
├─sda5   8:5    0 407,3G  0 part /home
├─sda6   8:6    0   9,4G  0 part [SWAP]
└─sda7   8:7    0   9,2G  0 part /tmp
sdb      8:16   0 298,1G  0 disk 
└─sdb1   8:17   0 298,1G  0 part /home/dany
sr0     11:0    1  1024M  0 rom  
sr1     11:1    1  1024M  0 rom  
				
Reihenfolge kann sich beim Umstecken ändern.
For the rescue: UUID
ls -Lr /dev/disk/
fstab, partitionieren, mounten