19.04.2023

Linux System

Linux Tastenkombinationen
Konfigurations-Dateien und Verzeichnisse unter Linux
System Anpassung
Systemreparatur
Bootmanager - Grub2/Grub/LiLo
Hardwareerkennung
Paket-Verwaltung
Init-System SysV-Init, Systemd, Upstart, Busybox u.a.
System Protokollierung - syslog
PAM Zugriffssteuerung
Admin-Rechte-Steuerung
Kernel 2.4 | 2.6
Linux Intrusion Detection System (LIDS)
User Mode Linux UML
Dateisysteme
Drucken unter Linux
Sound konfigurieren
Partition kopieren
IPX Protokoll
SoftwareRAID
Netzwerk
Bluetooth
X-Server und Desktops
64Bit und 32Bit auf einem System
ACPI System einrichten
Shared Libraries
Linux Console
Jobs mit cron automatisieren
PCMCIA
ISDN und Capi
VNC-Server einrichten
Verschlüsselter Zugriff auf Ressourcen übers Netzwerk
Festplatten Überwachen mit S.M.A.R.T
Linux Systemhilfe richtig verwenden
sudo konfigurieren
Installation aus den Sourcen
SCSI Emulation für ATAPI Geräte einrichten
cloop (Komprimiertes Loopback Device) einrichten
Übersicht ext2 / ext3 Zusatzflags
Versionsverwaltung von Dateien
SSHFS einrichten
Linux unter VMware
sonstiges

Seitenanfang

Init-System SysV-Init, Systemd, Upstart, Busybox u.a.

SysV-Init
Upstart
Systemd
Busybox
Runit
Minit
RunLevel editieren
sonstiges

nach dem abarbeiten der etwigen Boot-Scripte aus der Initrd RamDisk startet der Kernel als ersten Prozess mit der ID1 die SysV-Init oder Upstart.

Seitenanfang

SysV-Init


 

Dienstscripte werden unter /etc/init.d gespeichert.

Systeminitialisierungsdatei von SysV-Init ist die /etc/inittab, hier wird der Default Runlevel festgelegt.

Runlevel Verzeichnisse sind unter /etc/rcX.d zu finden (X je nach Runlevel, 0 - 6, oder S). Die Links unter /etc/rcX.d Verzeichnis werden in nummerische Reihenfolge abgearbeitet.

S<Nummer><Scriptname> Start-Script wird beim Eintreten des Runlevels ausgeführt
K<Nummer><Scriptname> Stop-Script wird beim Verlassen des Runlevels ausgeführt

Init startet alle Daemon als Hintergrund-Prozesse, da es sonst für die weitere Ausführung warten müsste bis der gestartete Prozess beendet ist. Zur Prozessüberwachung wird meist durch den Init-Script eines Daemons unter /var/run/ eine xxx.pid Datei angelegt, mit der ProzessID.

0=System halt
S=Single User
1=Single User Textmodus
2=Frei
3=Multi User Textmodus
4=Frei
5=Multi User X11
6=Reboot

Befehl Beschreibung
init 3 Runlevel wechsel in Runlevel 3
   

 

Seitenanfang

Upstart

ubuntu Upstart Wiki

Seit Ubuntu 6.10 ist Upstart fester Bestandteil von Ubuntu.

Upstart arbeitet Eventbasiert mit Jobs, die unter /etc/event.d hinterlegt sind. Eine Reihenfolge in der die Jobs abgearbeitet werden, gibt es nicht. Jeder Job gibt an, für welchen Event er zuständig ist, trift der Event zu, werden alle zugehörigen Jobs parallel gestartet. Die Prozesse die durch Upstart gestartet werden laufen im Vordergrund.

Upstart merkt sich den Status aller Jobs die in /etc/event.d aufgeführt sind, läuft ein Job ist dieser mit running gelistet, wird ein Event beendet, wird dieser auf waiting gesetzt und Upstart beendet auch den Job der mit exec ausgefüht wurde.

Als erstes wird das Event startup (Systemprozess) erzeugt, jeder Start oder jedes Beenden eines Jobs erzeigt vier weitere Events, starting Jobname, started Jobname, stopping Jobname und stopped Jobname.

Das Event startup wird durch die Job-Datei /etc/event.d/rcS erzeugt.

#/etc/event.d/rcS
start on startup
stop on runlevel
exec /etc/init.d/rcS
Befehl Beschreibung
start on benennet Event
stop on benennet Event
exec ... Daemon der durch den Job ausgeführt wird
respawn startet ein Prozess neu, wenn dieser sich beendet
respawn limit 10 100 Limit für den Neustart eines Prozesses setzen, max. 10 Versuche innerhalb 100 Sekunden
pre-start Befehl vor dem Start ausführen
post-start Befehl nach dem Start ausführen
pre-stop Befehl vor dem Stop ausführen
post-stop Befehl nach dem Stop ausführen
   
   
initctl start Jobname Job starten
initctl stop Jobname Job stoppen
initctl list Status aller Jobs anzeigen
initctl status Jobname Status eines Jobs anzeigen
service --status-all alle Dienste anzeigen
service <Dienst> start Dienst starten
service <Dienst> restart Dienst neustarten
service <Dienst> stop Dienst stoppen
update-rc.d <Dienst> defaults Dienst beim Systemstart starten
update-rc.d <Dienst> remove Systemstart des Dienstes deaktivieren
echo "manual" | sudo tee /etc/init/jobname.override Systemstart des Dienstes deaktivieren
rm /etc/init/jobname.override durch löschen der Datei <dienstname>.override wird der Dienst beim Start wieder geladen

Beispiel mit respawn

start on event2
stop on event1
respawn
respawn 10 120
exec /Path/Prozess

Beispiel mit pre-start

exec /sbin/sulogin
console owner

pre-start script

        echo "Type 'exit' when finished."
end script

Prozesse die mit post-start und post-stop ausgeführt werden, werden von Upstart parallel mit dem durch exec ausgeführten Befehl gestartet.

 

Seitenanfang

Systemd

Systemd wird bei Fedora ab Version 15, OpenSuse 12.1 und Mandriva 2011 genutzt, Arch Linux, Gentoo und Debian soll es bald Bestandteil werden.

Heise Artikel Teil1, Heise Artikel Teil 2, Systemd-Journal

Befehl Beschreibung
allgemeine Informationen
systemctl list-unit-files Dienste Dateien
systemctl list-units Alle Dienste auflisten
systemctl list-sockets Sockets auflisten
systemctl list-dependencies <Service/Target> Abhängigkeiten auflisten
systemd-cgls Baumansicht der Prozesse
systemctl --type=target Target anzeigen, /etc/systemd/system und /lib/systemd/system wobei die Targets unter /etc Vorrang haben
systemctl --type=service alle Services anzeigen, Spalte SUB zeigt den Status des Services, exited = ohne Fehler beendet, running = Service wird ausgeführt
systemd-analyze kurze Zusammenfassung zum SystemStart
systemd-analyze plot > ergebnis.svg Systemstart analysieren, Analysedatei kann mit Browser angezeigt werden
systemd-analyze blame Startzeit der Dienste, sortiert
Dienste managen
systemctl start <Service> Dienst starten
systemctl stop <Service> Dienst stoppen
systemctl reload <Service> Dienst Konfiguration neu laden
systemctl restart <Service> Dienst neustarten
systemctl status <Service> Dienste Status anzeigen
systemctl show <Service> Dienste Status anzeigen
systemctl is-active <Service> Dienste Status anzeigen aktiv/inaktiv
systemctl --failed Dienst die in einen Fehler gelaufen sind
Systemstart konfigurieren
systemctl enable <Service> Dienst zum Systemstart ausführen aktivieren
systemctl disable <Service> Dienst zum Systemstart ausführen deaktivieren
systemctl is-enable <Service> zeigt, ob der Dienst zum Systemstart aktiviert wurde
systemctl get-default vergleicht derzeitige Konfiguration mit der Standardkonfiguration und zeigt Unterschiede auf, z.B. ob ein Service mit systemctl disable deaktiviert wurde
systemctl set-default <Service/Target> stellt Standardeinstellung des Service/Target wieder her
Systemstatus ändern
systemctl reboot System neustarten
systemctl halt System herunterfahren
systemctl poweroff System in den Energiesparmodus setzen
sonstiges
systemctl edit <ServiceUnit> Konfigurationsdatei bearbeiten
systemctl daemon-reload Konfigurationsdatei neu einlesen
systemctl --force poweroff System herunterfahren
systemctl kill <Service> Dienst wird sofort beendet
Systemd LOG
journalctl -xe Log ausgeben, bis ans Ende springen (-e)
journalctl -f -u apache2 Log permanent überwachen (-f) und nach Meldungen von Apache2 filtern (-u)
journalctl -o verbose -n Metadaten anzeigen
journalctl -p err Log nach Priorität filtern, im Beispiel Error, mögliche Priorität "emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7)
   

nach der Aktualisierung der Systembibliotheken das Init-System neu starten ohne den Rechner neustarten zu müssen

systemctl daemon-reexec

Journald wird dabei nicht mit neu gestartet, dies erreicht man wie folgt

systemctl restart systemd-journald

 

 

 

Seitenanfang

Busybox

BusyBox Projekt

es gibt keine Runlevel, alles was zum starten gebraucht wird, steht in /etc/inittab.

- aus den Quellen übersetzen

make defconfig
make menuconfig

- in das Verzeichnis /usr/src/busybox installieren

make CONFIG_PREFIX=/usr/src/busybox install

die Unterordner bin, sbin, usr/bin, usr/sbin werden automatisch angelegt. Manuell muß das Verzeichnis lib angelegt werden, drin die Dateien libc.so.6, libm.so.6 und ld-linux.so.2 aus dem Build-System hineinkopieren.

- anzeigen der notwendigen Liberys

ldd busybox

für ein LiveSystem das aus dem RAM läuft, benötigt man noch die Verzeichnisse dev, etc, lib/modules, proc, sys und tmp. Nach lib/modules werden die Module des Kernels kopiert. Unter etc benötigt man die Dateien fstab mit den Mounteinträgen für Proc und SysFS, sowie passwd und group und inittab

# /etc/fstab
none	/dev/pts	devpts	defaults        0	0
proc	/proc		proc	defaults        0	0
none	/sys		sysfs	noauto		0	0
# /etc/inittab
# convenience shells
tty1::askfirst:-/bin/sh
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh

# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot > /dev/null 2>&1

# re-exec init on receipt of SIGHUP/SIGUSR1
::restart:/sbin/init

- Busybox InitScript /init

#!/bin/busybox sh

mount /proc
mount /sys
mount /dev/pts

# Load all kernel modules
VER=$(uname -r)
for m in $(cat /lib/modules/$VER/modules.*map|cut -d" " -f1|sort -u); do
  modprobe $m
done

export TERM_TYPE=pts

exec /bin/busybox init

- alle statischen Geräte anlegen

MAKEDEV generic-i386

- BusyBox InitialRamDisk erstellen

find . | cpio -o-H newc | gzip > /boot/busyboxinit.img

- Grub Menü erweitern

# /boot/grub/menu.lst
title BusyBox MiniTux
root (hd0,1)
kernel /boot/vmlinuz
initrd /boot/busyboxinit.img

Boot-CD erstellen

ein Verzeichnis iso/isolinux erstellen und den CD Bootloader isolinux.bin mit der Datei isolinux.cfg in dieses Verzeichnis kopieren.

# isolinux/isolinux.cfg
DEFAULT BusyBox 
LABEL BusyBox 
KERNEL /boot/vmlinux
APPEND initrd=/boot/busyboxinit.img

die Path-Angaben entspricht dem Wurzelverzeichnis der CD.

- ISO Image erstellen

genisoimage -b isolinux/isolinux.bin -no-emul-boot -boot-info-table -o busybox.iso iso
Optionen Erklärung
-b Path zum CD Bootloader
-no-emul-boot keine Festplattenemulation
-boot-info-table Tabelle mit CD-Index integrieren
-o Name des CDImages

Hardwareerkennung

- eine InitialRamDisk der NetbootCD entpacken

zcat /media/cdrom/install.386/initrd.gz | cpio -idm

Dateien udevd und udevadm aus dem Verzeichnis sbin und ld-linux.so.2 und libc.so.6 aus lib, Verzeichnis /etc/udev und lib/udev.

Programme insmod und modprobe aus sbin und /etc/modprobe.d und /etc/hotplug.d übernehmen, damit man eine automatische Hardwareerkennung hat.
Unter /dev benötigt man nur noch die statischen Einträge für null und console, alle anderen können gelöscht werden, diese werden bei Bedarf durch udev erzeugt.

Seitenanfang

Runit

alle Scripte die nur einmal gebraucht werden, sind in /etc/runit/1 für den Start und /etc/runit/2 für den Shutdown des Systems.
In Verzeichnissen im Ordner /etc/sv liegen Scripte für Dienste, die beim Start/Stop parallel ausgeführt werden, SymLinks liegen in /var/service.
runsv überwacht laufende Programme und startet diese neu falls sie beendet werden.
Runinit Tools svn für manuellen start|stop|status der Dienste

sv start dienst
sv status dienst
sv stop dienst

startet Runit Dienste

#/etc/inittab
SV:123456:respawn:/sbin/runsvdir-start
Seitenanfang

Minit

FIFOs /etc/minit/in und /etc/minit/out werden verwendet, in /etc/minit werden die Dienste definiert.

 

Seitenanfang

RunLevel editieren

chkconfig

Unterstützt von: Fedora, Mandiva, per Wrapper-Script SuSE, ...

Befehl Beschreibung
chkconfig --list RunLeveleinstellungen aller Dienste anzeigen
chkconfig --list <Dienst> RunLevel eines Dienstes anzeigen
chkconfig --add <Dienst> Standard RunLevel für einen Dienst einrichten
chkconfig --del <Dienst> Standard RunLevel für einen Dienst entfernen
chkconfig --level 3 <Dienst> on nur einen bestimmten RunLevel ändern (nicht bei SuSE)
chkconfig --level 34 <Dienst> on mehrere RunLevel ändern (nicht bei SuSE)
chkconfig <Dienst> on|off|Runlevel bei SuSE ein Wrapper-Script für insserv verwendet

Variablen im Init-Script der Dienste

# chkconfig: 345 55 25
# description: Apache
Parameter Beschreibung
chkconfig: Runlevel Nummer (RC 345), Start-Priorität (S55), Stop-Priorität (K25)
description: Beschreibung
processname: Name des Prozesses
config: Konfigurationsdatei
pidfile: Name PID Datei

 

insserv

Unterstützt von: SuSE, ...

/etc/insserv.conf Konfigurationsdatei SuSE
/etc/insserv.conf.d/ Konfigurations-Verzeichnis

Variablen im Init-Script der Dienste

### BEGIN INIT INFO
# Provides: sshd
# Required-Start: $network $remote_fs
# Required-Stop: $network $remote_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start the sshd daemon
### END INIT INFO
Parameter Beschreibung
Provides: Name des Dienstes
Required-Start: Abhänigkeiten Start
Required-Stop: Abhänigkeiten Stop
Default-Start: Runlevel in denen der Dienst gestartet wird
Default-Stop: Runlevel in denen der Dienst beendet wird
Description: Beschreibung
Befehl Beschreibung
insserv <Dienst> RunLevel Links anlegen
insserv -r <Dienst> RunLevel Links entfernen
insserv <Dienst>,start=4 Standard RunLevel Links anlegen und zusätzlich einen Link im RC4 Ordner
insserv -d <Dienst> setzt aud default zurück
   

update-rc.d

Unterstützt von: Debian, ubuntu, ...

Befehl Beschreibung
update-rc.d <Dienst> defaults RunLevel Links anlegen
update-rc.d -f <Dienst> remove RunLevel Links entfernen
   

 

rcconf (GUI)

Unterstützt von: Debian, ubuntu, ...

sysv-rc-conf (GUI und Kommandozeile)

Unterstützt von: Debian, ubuntu, ...

sysv-rc-conf Projekt

Befehl Beschreibung
sysv-rc-conf --list RunLevel anzeigen
sysv-rc-conf <Dienst> on RunLevel Links anlegen
sysv-rc-conf <Dienst> off RunLevel Links entfernen
sysv-rc-conf --level 35 <Dienst> off einzelne RunLevel bearbeiten

 

 

Seitenanfang

sonstiges