# Einführung in Linux
YALC - Yet Another Linux Course
Author: Daniel Schubert

# LINUX

### Das universelle Betriebssystem

Eine Einführung - Teil 8

Deutsche Angestellten Akademie

Frage: Fragen zur letzten Stunde?
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`
der simple webserver ist praktisch zum dateien teilen

#### Ä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`

timer datei ansehen
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

man journalctl
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

cat /etc/init.d/apache2
cat /lib/systemd/system/apache2.service

## 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