Topic 101 - System-Architektur

Voraussetzung: Linux installieren

Zuerst benötigen wir ein lauffähiges Linux-System. Es empfiehlt sich der Download der folgenden ISO-Datei, mit der man im einfachsten Fall auch ohne Installation sofort loslegen könnte:

Wir wollen aber in VirtuelBox schon mal eine richtige Installation durchführen:

  • Schalter "Neu"

  • Name: Debian 8 LXDE (Linux 64-bit)

  • RAM: 1800 MB

  • Festplatte erzeugen (VDI, dynamisch alloziiert, Größe 50 GB)

  • Schalter "Start"

  • Als Boot-Medium die CD 'debian-live-8.5.0-amd64-lxde-desktop.iso' einlegen

  • Mit Cursor nach unten ⇒ "Install"

  • Sprache wählen: "German", 3x Enter

  • Host- und Domainnamen vergeben

  • Benutzer einrichten (root, tux)

  • Zeitzone: "Berlin"

  • Partitionierung: Geführt - vollständige Platte ⇒ sda ⇒ Separate /home, /var- und /tmp-Partitionen

  • Partitionierung beenden ⇒ Änderungen schreiben? ⇒ JA

  • [Was bei der XFCE-Iso-Installation fehlt: Auswahlmenü "tasksel"] (Taskselektor) ein altes Tool: "dselect"

  • Kopieren des Systems…​

  • Netzwerkspiegel (Repository) verwenden? JA, welchen Mirror? ⇒ Deutschland / ftp-stud.hs-esslingen.de

  • Proxy? <LEER LASSEN>

  • Bootloader installieren: GRUB ind den MBR der Festplatte "sda" installieren (Gerät: /dev/sda)

  • Neustart (CD muss nicht manuell entfernt werden)

Login und kleiner Rundgang

Es steht für den Login ein grafischer Displaymanager zur Verfügung: Bitte als tux einloggen

Im Hauptmenü unter "Systemwerkzeuge":

  • Arbeitsmittel: LXTerminal

  • Zum Vergleichen gern den Dateimanager "pcmanfm" öffnen

Im Terminal:

=> df -h       # disk free, human readeable

Vergleich mit Windows:

  • Nutzerdaten: c:\Users ⇒ /home

  • Installierte Programme: c:\Program Files ⇒ /usr (Unix System Ressources)

  • Bestriebssystem: c:\WINDOWS ⇒ Rest von /

Es gibt keine LW-Buchstaben, die sich verschieben können, einen systemweit einheitlichen Namensraum unter der Wurzel "/"!

Zur Kontolle der Partitionierung:

  • mount # (cat /proc/self/mounts), gern filtern: mount | grep ^/dev

  • df -h # disk free

  • lsblk # list block devices, USB-Hostpluggeräte herausfinden

  • fdisk -l # Nur als root möglich

  • blkid # Auflisten der Devices unter Angabe der UUIDs

Grundlegende Konzepte

Benutzerschnittstellen

a) GUIs (Graphical User Interface)

  • X-Window-System (Fenstermanager + X-Server, X-Clients)

  • Desktops (LXDE, XFCE, GNOME, KDE), Kennzeichen: Integriert sind Zubehörprogramme, einheitliches Look & Feel

b) Cmdline

  • Vorteile: Geringer Ressourcesbedarf, bessere Stabilität, weil kein Programmierballast für Kommandozeilenbackends

  • Syntax: KOMMANDO [OPTIONEN] [PATAMETER]

    BSP:     ncal        -w         2016
    Wer kümmert sich um die Interpretation der Kommandozeile?
    tux@deb8:~$ echo $0
    /bin/bash
    ACHTUNG: Leerzeichen sind Trenner der einzelnen Bestandteile, daher müssen sie evl. maskiert werden:
    => mkdir Eigene\ Dateien

Wichtige Mechanismen:

  • Dateinamensexpansion (Platzhalter, Wildcard, Joker):

    rmdir  -v Eigen*
    touch abc.{1,2,3}                # Nur zum Erzeugen von Testdateien
    rm -v abc.?
    touch abc.{1,2,3}{x,y,z}         # Nur zum Erzeugen von Testdateien
    rm -v abc.[0-9]*                 # EIN beliebiges Zeichen aus der Menge 0 bis 9 (Negation: "[!1-5]")
  • Variablenexpansion (Variableninhalte einfügen)

    echo $PATH                       # Suchpfad für Anwendungen
    echo $USER
    echo $PWD                        # Print Working Directory
  • Kommandozeilensubstitution (Zuerst eine andere Befehlsfolge ausführen, dann der Rest ringsherum); es gibt zwei Varianten, die gleichberechtigt sind:

    ls -l /lib/modules/`uname -r`
    ls -l /lib/modules/$(uname -r)

Topic 101.1 - Determine and configure hardware settings

Im Buch: S. 21 ff

Ziel: Kernelmodule zur Laufzeit des Rechners laden und kontrollieren können

Der Kernel befindet sich unter: /boot/vmlinuz-<VERSION>

Zur des Laufzeit des Rechners werden Module geladen, aus dem Verzeichnis /lib/modules/uname -r

  • Ausgabe des Kernel-Releases: uname -r

  • Ausgabe des Hardware Typs (32 oder 64 bit): uname -m

  • Wie setzt sich die Release-Nummer zusammen?
    "MAJOR.MINOR.PATCH", z.B. 3.16.0
    (Weitere Nummern und Kürzel je nach Distribution - die Bezeichnung lässt sich im Makefile mittels "EXTRAVERSION = " festlegen)

  • Stabile Kernel: gerade-MINOR-Nummer, Entwickerkernel: ungerade MINOR-Nummer

  • Ab Kernel 3.0.0 ist dieses Unterscheidung aufgegeben worden

BEISPIEL: Suche nach einem Novell-kompatiblen Netzwerkkartentreiber:

find /lib/modules -name "*ne2k-pci*"
    /lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/8390/ne2k-pci.ko

Informationen darüber einholen:

root@deb8:~# modinfo ne2k-pci
filename:       /lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/8390/ne2k-pci.ko
license:        GPL
description:    PCI NE2000 clone driver
author:         Donald Becker / Paul Gortmaker
alias:          pci:v00008C4Ad00001980sv*sd*bc*sc*i*
alias:          pci:v000012C3d00005598sv*sd*bc*sc*i*
alias:          pci:v000012C3d00000058sv*sd*bc*sc*i*
alias:          pci:v00001050d00005A5Asv*sd*bc*sc*i*
alias:          pci:v000010BDd00000E34sv*sd*bc*sc*i*
alias:          pci:v00001106d00000926sv*sd*bc*sc*i*
alias:          pci:v00004A14d00005000sv*sd*bc*sc*i*
alias:          pci:v00008E2Ed00003000sv*sd*bc*sc*i*
alias:          pci:v000011F6d00001401sv*sd*bc*sc*i*
alias:          pci:v00001050d00000940sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008029sv*sd*bc*sc*i*
depends:        8390
intree:         Y
vermagic:       3.16.0-4-amd64 SMP mod_unload modversions
parm:           msg_enable:Debug message level (see linux/netdevice.h for bitmap) (uint)
parm:           options:Bit 5: full duplex (array of int)
parm:           full_duplex:full duplex setting(s) (1) (array of int)

Welche Optionen können die Ausgabe einschränken? -a, -d, -l, -p, -n

Zum Beispiel nur den Autor eines Modules ausgeben: Option "-a", z.B.:

root@deb8:~# modinfo -a ne2k-pci
Donald Becker / Paul Gortmaker

Zum Testen:

root@deb8:~# lsmod | grep ne2k
root@deb8:~#
root@deb8:~#
root@deb8:~# insmod ne2k-pci
insmod: ERROR: could not load module ne2k-pci: No such file or directory
root@deb8:~#
root@deb8:~# find /lib/modules -name "ne2k*"
/lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/8390/ne2k-pci.ko
root@deb8:~#
root@deb8:~# insmod /lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/8390/ne2k-pci.ko
insmod: ERROR: could not insert module /lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/8390/ne2k-pci.ko:
  Unknown symbol in module
root@deb8:~#

FEHLERURSACHE: Bei insmod werden keine Modulabhängigkeiten aufgelöst! ⇒ modprobe

root@deb8:~# modprobe ne2k-pci
root@deb8:~#
root@deb8:~# lsmod | grep ne2k
ne2k_pci               12955  0
8390                   17143  1 ne2k_pci

Module aus dem RAM entfernen:

a) rmmod ne2k-pci
b) modprobe -r  ne2k-pci    (BITTE FÜR LPI MERKEN!)

Man sieht hier, dass BEIDE entfernt wurden, da das Modul 8390 nur von ne2k-pci gebraucht wurde (kein anderes Modul benötigt es außerdem auch).

root@deb8:~# lsmod | grep ne2k
root@deb8:~#
root@deb8:~# lsmod | grep 8390
root@deb8:~#

Kontrolle der Modul-Lade-Aktion: dmesg (Debug Messages des Kernels als Ringpuffer)

Abhängigkeiten von Modulen prüfen und in einer Datenbank "modules.dep" zu speichern:

depmod
       -n (non execute + verbose)   => d.h. KEINE modules.dep erstellen
       -v (verbose)
       -A (Append = Anhängen, d.h. nur wenn neue Module gefunden wurden, eine neue modules.dep erstellen)

Nach erfolgreicher Erstellung der Abhängigkeits-Datenbank:

root@deb8:~# grep ne2k-pci /lib/modules/3.16.0-4-amd64/modules.dep
kernel/drivers/net/ethernet/8390/ne2k-pci.ko: kernel/drivers/net/ethernet/8390/8390.ko

Wo legt der Kernel Informationen beim Bootvorgang ab? Unter /proc (Processing)

Spezielles Verzeichnis: /proc/sys/kernel

root@deb8:~# cat /proc/sys/kernel/ostype
Linux
root@deb8:~#
root@deb8:~# cat /proc/sys/kernel/hostname
deb8
root@deb8:~#

AUFGABE FÜR DAS SELBSTSTUDIUM: Welche Dateien unterhalb von /proc/sys/kernel werden ausgelesen, wenn man uname -a (all) eingibt?

Weitere Pfade für Hardware- und Kernel-nahe Informationen:

  • /sys (Viele Infos aus /proc sind hier hinein gewandert, zB: /sys/bus/usb)

  • /dev (Allgemeines Verzeichnis für Gerätedateien)

    • IDE-Geräte (max. 4): /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd

    • SCSI-Geräte: /dev/sda, /dev/sdb, …​.

    • Partitionsnummern: 1 - 4 (max. 4 primäre Partitionen), die erste log. bekommt immer die 5 zugewiesen (/dev/sda5, max 63 Partitionen)

    • SCSI-CD/DVD/RW-Laufwerke: /dev/sr0, /dev/scd0

AUFGABE: Dateien auf Seite 32 mit cat ausgeben, Namen einprägen!

  • /proc/ioports (Gibt nur die Port aus, die gerade benutzt werden.)

  • …​

Außerdem

=> less /proc/bus/pci/devices

Aus diesen Files bezieht 'lspci' dann seine Informationen und bereitet sie auf.

Wichtige Optionen für das Kommando 'lspci':

-v  (Verbose, zeicht auch die Bez. des geladenen Modules an)
-k  (Kernel-Module ausgeben)
-n  (Numerische Ausgabe von Vendor- und Device-ID)
-t  (Ausgabe in Tree-Form)

Weitere Aufgaben/Hinweise:

  • USB-Geräte einbinden/konfigurieren (S. 34)

  • Welcher Host-USB-Controller ist eingebaut? → laut geladener Module lsmod | grep hci, u.a. taucht ohci_pci und ehci_pci auf!

  • Seit welchen Kernel-Versionen wird USB überhaupt unterstützt und wie ausgeprägt?

  • Unter http://www.tldp.org/HOWTO/Webcam-HOWTO/hardware.html liest man: "USB subsystem support has been present in the Linux kernel since the late 2.2 series."

  • Bessere USB-Unterstützung gab es erst mit dem Kernel 2.4

USB-Support bei verschiedenen Kerneln und Hostcontroller-Treibern:

  • Kernel 2.0 = überhaupt kein USB-Support!

  • Kernel 2.2.7 = USB 1.0 = ohci_pci

  • Kernel 2.4.0 = USB 2.0 = ehci_pci

  • Kernel 2.6.31 = USB 3.0 = xhci_pci

USB-Geräte im System auffinden:

a) dmesg
b) lsusb  (Geht die Pfade unter /proc/bus/usb  bzw.  /sys/bus/usb durch und gibt Infos aus.)
=> apt-get install usbutils

Was findet man unter /dev/bus/usb?

AUFGABE: Erkunden Sie die Device-Manager:

  • usbmgr

  • hotplug

  • udev

Zur Klärung der Aufgabe zuerst einmal Debians Paketmanager heranziehen:

apt-cache show udev
 ...
Description-de: /dev/ und hotplug Hintergrundprozess
 udev ist ein Hintergrundprozess der Gerätedateien in /dev/ dynamisch
 erzeugt und entfernt, hotplug-Ereignisse verarbeitet und Treiber während
 des Systemstarts lädt.
 ...

Fragen zur Vertiefung

  • Welche Verzeichnispfade repräsentieren virtuelle Dateisysteme bzw. Ansprechpunkte für Geräte?

    • /proc (Prozessdateisystem, Hardwareinformationen)

    • /sys (Hardware- und Systeminformationen)

    • /dev (Ansprechpunkte für Geräte)

  • Mit welchen Optionen kann man bei 'lspci' den Namen des geladenen Kernel-Modules ermitteln?

    • Optionen: '-v' sowie '-k'

  • Welche Kommandos können Sie einsetzen, um den soeben angesteckten USB-Stick zu identifizieren?

    • dmesg | tail

    • lsusb

  • Worin besteht ein wesentlicher Unterschied beim Laden von Modulen mit insmod bzw. modprobe?

    • insmod kann nur ein einziges Modul laden (keine abhängigen Module vorher laden), außerdem muss der exakte Modulname samt Pfad angegeben werden

    • modprobe ist intelligent: lädt andere Module in Abhängigkeit mit, es findet das betreffende Modul automatisch unter folgendem Pfad:

      /lib/modules/`uname -r`
  • Mit welchen zwei Kommandos und evl. benötigten Optionen kann man Module aus dem Hauptspeicher entfernen?

    • rmmod

    • modprobe -r

  • Worin besteht der Hauptunterschied bei 'modinfo' und 'depmod -n'?

    • modinfo gibt nur Modulinformationen über ein bestimmtes Modul aus

    • depmod -n (noinstall) testet nur Modulabhängigkeiten und gibt darüber Meldung aus

Topic 101.2 - Boot the system

⇒ Siehe Seite 38 ff

Typischer Ablauf eines Linux-Bootvorganges

  1. BIOS startet Power-on-self-Test (POST-Routine)

  2. Suche nach einem MBR mit Bootcode über mehrere Datenträger hinweg (laut Bootsequenz)
    MBR sichern: dd if=/dev/sda of=/root/myMBR.dd count=1 bs=512

    • if - Input File

    • of - Output File

    • count - Counter (Zähler), wie oft mal der Block kopiert werden soll

    • bs - Block size (kleinste Einheit im Intel-PC = Sektor, = 512 Byte)

  3. Bootcode wird geladen und damit der Bootloader, bei aktuellen Linux-Systemen ist das der Grand Unified Boot Loader (GRUB)

  4. Bootloader findet Kernel auf Boot-Partition und lädt ihn in den RAM

  5. Der sich im RAM breit machende Kernel startet den ersten Prozess init bzw. systemd (Prozess-ID 1, lässt sich nicht killen)
    Zur Kontrolle: pstree -pn | less (Optionen: p = Prozess-IDs zeigen; n = numerische Sortierung)

  6. Login via Konsole (tty) oder Displaymanger (grafisch)

Kernel-Parameter

Im 3. Schritt der obigen Startreihenfolge können dem Kernel verschiedene Parameter mitgegeben werden, z.B.

  • init=/bin/bash (root-Passwort überschreiben)

  • ide=nodma (für alte Festplatten: Keinen DMA-Kanal aktivieren)

  • apm=off (= das alte Verfahren "Advanced Power Management")

  • acpi=off (= das neue Verfahren "Advanced Configuration Power Interface")

Diese Paramater können im gebooteten System später ausgelesen werden:

tux@deb8:~$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=d426bdb3-2e30-4599-bc17-810bef991d42 ro quiet
tux@deb8:~$

Initiale RAM-Disk

Vielleicht aus DOS-Zeiten bekannt: RAM-Drive

Ziel: Für den Bootvorgang elementare Treiber frühzeitig bereitstellen (Die root-Partition ist nicht nicht gemountet)

Inhalt der RAM-Disk:

  • Minimales Dateisystem ähnlich ('/')

  • Treiber für Festplatten-Controller

  • Dateisystemtreiber für Festplattenpartitionen ( root-Partition mounten)

Wo liegt sie und wie groß ist sie?

tux@deb8:~$ ls -lh /boot/initrd.img-3.16.0-4-amd64
-rw-r--r-- 1 root root 22M Dez 23 09:34 /boot/initrd.img-3.16.0-4-amd64
tux@deb8:~$

Den Inhalt der RAM-Disk erforschen:

root@deb8:~# file /boot/initrd.img-3.16.0-4-amd64
/boot/initrd.img-3.16.0-4-amd64: gzip compressed data, last modified: Mon May  9 14:41:46 2016, from Unix
root@deb8:~#
root@deb8:~#
root@deb8:~# gunzip -c  /boot/initrd.img-3.16.0-4-amd64 > /tmp/initrd
root@deb8:~#
root@deb8:~# file /tmp/initrd
/tmp/initrd: ASCII cpio archive (SVR4 with no CRC)
root@deb8:~#
root@deb8:~# cd /tmp/
root@deb8:/tmp#
root@deb8:/tmp# cpio -idm < initrd
127156 blocks
root@deb8:/tmp#
root@deb8:/tmp# ls -ltrc | tail -8
drwxr-xr-x 2 root root     1024 Mai 10 16:29 sbin
drwxr-xr-x 2 root root     1024 Mai 10 16:29 run
drwxr-xr-x 2 root root     1024 Mai 10 16:29 lib64
drwxr-xr-x 8 root root     1024 Mai 10 16:29 lib
-rwxr-xr-x 1 root root     7137 Mai 10 16:29 init
drwxr-xr-x 7 root root     1024 Mai 10 16:29 etc
drwxr-xr-x 3 root root     1024 Mai 10 16:29 conf
drwxr-xr-x 2 root root     5120 Mai 10 16:29 bin
root@deb8:/tmp#
root@deb8:/tmp# ls -ltrc lib | tail -8
drwxr-xr-x 3 root root  1024 Mai 10 16:29 udev
drwxr-xr-x 2 root root  1024 Mai 10 16:29 systemd
drwxr-xr-x 3 root root  1024 Mai 10 16:29 modules
drwxr-xr-x 2 root root  1024 Mai 10 16:29 modprobe.d
-rw-r--r-- 1 root root 47712 Mai 10 16:29 libnss_files.so.2
-rw-r--r-- 1 root root 47712 Mai 10 16:29 libnss_files-2.19.so
-rwxr-xr-x 1 root root 71416 Mai 10 16:29 klibc-IpHGKKbZiB_yZ7GPagmQz2GwVAQ.so
drwxr-xr-x 4 root root  1024 Mai 10 16:29 firmware
root@deb8:/tmp#

Tools zur erzeugen der Initrds:

a) RedHat: whatis mkinitrd mkinitrd (8) - is a compat wrapper, which calls dracut to generate an initramfs

b) Debian: whatis mkinitramfs mkinitramfs (8) - low-level tool for generating an initramfs image

Startprotokollierung

⇒ läuft über zwei Ebenen:

  1. Kernel-Ringbuffer: dmesg (Bei RedHat zusätzlich in der Datei /var/log/boot.log)
    Siehe auch http://www.ibm.com/developerworks/linux/tutorials/l-lpic1111/

  2. Nach den Starten des Syslog-Dienstes wird die Datei '/var/log/messages' (oft auch /var/log/syslog) geführt.

Am besten mit dem tail-Monitor (als root, Option '-f' = follow Data Stream) betrachten:

root@deb8:~#  tail -f /var/log/messages

Nachrichten als einfacher Nutzer ins Syslog schreiben:

=> logger "ALARM: Festplatte voll $(df -h /)"

Init-System, Runlevel

a) Startverfahren nach System V

Konfigurationsdatei: cat /etc/inittab, hier wird der Standardrunlevel mit 'initdefault' festgelegt

⇒ Diese Datei definiert außerdem Runlevelverzeichnisse, in denen Skripte liegen und deren aufrufende Links ebenso

  • Ausführbare Skripte liegen im Verzeichnis: /etc/init.d

    • Im Beispiel Slitaz: DHCP-Server starten: /etc/init.d/udhcpd start

    • Kontrolle: netstat -una ⇒ Port 67 ist offen, Konfigdatei /etc/udhcpd.conf

  • Runlevelverzeichnisse, in denen die aufrufenden, symbolischen Verknüfungen liegen: /etc/rc0.d bis /etc/rc6.d

    • Unter DSL-Linux (root werden mit 'sudo su')

      • Kommando runlevel zum Ausgeben des vorherigen (N = kein vorheriger Level) und aktuellen Levels

      • Änderung der /etc/inittab einlesen: telinit q (telinit ist nur ein symbolischer Link auf /sbin/init)

      • Runlevelverzeichnis z.B. für Level 5: /etc/rc5.d

      • Runlevel wechseln (z.B. in den Level 0 = system halt): init 0

    • Rechner herunterfahren, wobei alle Nutzer darüber informiert werden: die kann allein nur shutdown -h 16:00
      (Das im Hintergrund für Broadcasts verwendete Kommando lautet 'wall'; zur Übung einfach wall eingeben, Nachricht schreiben und mit STRG + D abschicken)

    • Rechner herunterfahren, wobei beim nächsten Bootvorgang ein Dateisystemcheck durchgeführt werden soll: shutdown -F -h 16:00 (force file system check)

    • Rechner herunterfahren, wobei beim nächsten Bootvorgang ein evl. fälliger Dateisystemcheck verhindert werden soll: shutdown -f -h 16:00 (no file system check)

b) Ubuntu-Startverfahren

  • Name des Systems: 'upstart'

  • Benutzung mit dem Kommando 'service' anhand des ssh-Daemons:

    • Infos ausgeben: service sshd status

    • Starten: service sshd stop

    • Stoppen: service sshd start

Siehe auch Cheat Cheets unter:

c) Neues Startverfahren mit dem Systemd

Das 'd' steht für Disks AND Extensions MONitor (daemon) = Dienst bzw. Service

Es gibt drei Sub-Systeme:

  1. systemd-udevd - für die Geräteerkennung

  2. systemd-journald - für das Schreiben eines eigenen System-Logs

  3. systemd-logind - für das Aktivieren der User-Umgebungen beim Login

ps x | grep systemd
  163 ?        Ss     0:00 /lib/systemd/systemd-udevd
  164 ?        Ss     0:00 /lib/systemd/systemd-journald
  483 ?        Ss     0:00 /lib/systemd/systemd-logind

Benutzung als root (ACHTUNG: nicht mit 'sshd' ausführen, sondern nur mit 'ssh'):

  • Den ssh-Dienst stoppen: systemctl stop ssh

  • Den ssh-Dienst starten: systemctl start ssh

  • Den Status ausgeben: systemctl status ssh

  • Den ssh-Dienst nicht mehr automatisch beim Booten starten: systemctl disable ssh

  • Den ssh-Dienst beim Booten mit starten: systemctl enable ssh

  • Das Journal des Systemd ausgeben: journalctl (Komplettes Logfile mit dem Pager 'less' lesen)

  • Das Journal des Systemd ausgeben, aber nur die letzten Änderungen mit 'follow data stream': journalctl -f (wichtig unter SUSE, da hier kein Syslogd vorinstalliert)

  • Das "Fehler"-Journal mit Hinweisen ausgeben: journalctl -xn

  • Runlevel wechseln (hier Level 1 = SingleUser-Modus, ReparaturModus): systemctl isolate rescue.target

  • Runlevel wechseln (hier Level 5): systemctl isolate graphical.target

  • Standard-Runlevel anzeigen: systemctl get-default

  • Standard-Runlevel auf "nicht-grafisch" ändern: systemctl set-default multi-user.target

  • Standard-Runlevel wieder auf "grafisch" ändern: systemctl set-default graphical.target

Topic 101.3 - Change runlevels / boot targets and shutdown or reboot system

In diesem Kapitel werden die eben kennengelernten Aspekte über Init-Systeme vertieft und ergänzt.

Systemstart nach System V (SysVinit)

Wichtige Kennzeichen:

  • Dienst '/sbin/init' → Siehe auch 'pstree -p | head' ⇒ init(1)

  • Hauptkonfigurationsdatei '/etc/inittab'

    • Standardrunlevel konfigurieren: 'id:3:initdefault:' (Hier bitte NIEMALS 0 (poweroff) oder 6 (reboot) eintragen!!)

    • Affengriff konfigurieren: 'ca::ctrlaltdel:/sbin/shtudown -r +4'

Runlevel

  • Runlevel sind bestimmte Systemzustände, in denen unterschiedlich viel Dienste gestartet werden, z.B.

  • Im Vergleich: Abgesicherter Modus (Windows) ⇒ Runlevel 1 bzw. Single User

  • Herausfinden, in welchem wir uns gerade befinden: 'runlevel'

  • Wechseln: init [NR] bzw. telinit [NR], im Bsp.: 'telinit 1', wieder ins GUI fahren: 'telinit 5'

  • Kernelparameter für GRUB für Single-User-Modus: '1'

    • Zum Beispiel:

      kernel /boot/vmlinuz-3.16.0-4-amd64 root=/dev/sda3 ro initrd=/install/initrd.gz 1'

Rechner herunterfahren / neu starten

  • Nutzer dabei zu informieren, ist nur mit dem Kommando 'shutdown' möglich (im Hintergrund es verwendet es 'wall')

  • Wichtige Optionen: S. 52 unten, mit der Option '-f' kann ein evl. anstehender 'fsck' übergangen werden, ein '-F' erzwingt einen Check.

Systemstart mit dem neuen Systemd

Wichtige Kennzeichen:

  • Dienst '/bin/systemd'

  • Geräte automatisch erkennen mit '/lib/systemd/systemd-udevd'

  • Log-System mit '/lib/systemd/systemd-journald' - Der sich selbst aktualisierende Logmonitor: 'journalctl -f'

  • Kernelparameter für GRUB für Single-User-Modus: 'systemd.unit=rescue.target'

    • Zum Beispiel: 'kernel /boot/vmlinuz-3.16.0-4-amd64 root=/dev/sda3 ro initrd=/install/initrd.gz systemd.unit=rescue.target'

BEISPIEL: Den Samba-Hauptdaemon unter Debian stoppen, kontrollieren und deaktivieren:

root@deb8:~# systemctl stop smbd
root@deb8:~#

root@deb8:~# systemctl status smbd
● smbd.service - LSB: start Samba SMB/CIFS daemon (smbd)
   Loaded: loaded (/etc/init.d/smbd)
   Active: inactive (dead) since Mi 2016-05-11 16:47:45 CEST; 3s ago
  Process: 18286 ExecStop=/etc/init.d/smbd stop (code=exited, status=0/SUCCESS)
  Process: 17048 ExecReload=/etc/init.d/smbd reload (code=exited, status=0/SUCCESS)
  Process: 16861 ExecStart=/etc/init.d/smbd start (code=exited, status=0/SUCCESS)

Mai 11 16:23:20 deb8 smbd[16861]: Starting SMB/CIFS daemon: smbd.
Mai 11 16:23:28 deb8 smbd[16952]: Reloading /etc/samba/smb.conf: smbd.
Mai 11 16:23:28 deb8 smbd[17006]: Reloading /etc/samba/smb.conf: smbd.
Mai 11 16:23:31 deb8 smbd[17048]: Reloading /etc/samba/smb.conf: smbd.
Mai 11 16:47:44 deb8 smbd[17101]: pam_unix(samba:session): session closed for user nobody
Mai 11 16:47:45 deb8 smbd[18286]: Stopping SMB/CIFS daemon: smbd.
root@deb8:~#

root@deb8:~# systemctl disable smbd
Synchronizing state for smbd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d smbd defaults
Executing /usr/sbin/update-rc.d smbd disable
insserv: warning: current start runlevel(s) (empty) of script `smbd' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `smbd' overrides LSB defaults (0 1 6).
root@deb8:~#