/media/sda-magnetic/david/david2/david2/Dokumente/informatik/linux/learn-linux/linux6.txt


Bootstrap-Prozess
UEFI - Unified Extensible Firmware Interface
Units
BusyBox
Systemd-Init
NVRAM - NVRAM (Abk. für englisch Non-Volatile Random-Access Memory) ist in der Elektronik ein nichtflüchtiger Datenspeicher, der auf RAM basiert und dessen Dateninhalt ohne externe Energieversorgung erhalten bleibt. 
EFI - Systempartition (ESP)


1.) Bootstrap-Prozess
2.) Systemd-Init

Bootstrap-Prozess (4 Stufen)
1. Stufe) das UEFI
2. Stufe) der Bootloader 
3. Stufe) Mini-Debian 
4. Stufe) normales Debian 

Systemd-Init 
1.) Der Rechnername
2.) Das Dateisystem
3.) Initialisierung der Netzwerkschnittstellen


1.) Bootstrap-Prozess (4 Stufen)
1.1. Stufe) das UEFI
1.2. Stufe) der Bootloader 
1.3. Stufe) Mini-Debian 
1.4. Stufe) normales Debin 

2.) Systemd-Init 
2.1.) Der Rechnername
2.2.) Das Dateisystem
2.3.) Initialisierung der Netzwerkschnittstellen


Quellen:
- Debian Linux Kernel Handbook
- bootup (7)
- boot (7)


1.) UEFI 
- Unified Extensible Firmware Interface
- definiert u.a. einen Boot-Manager 
- Bootkonfiguration gespeichert in NVRAM 
- NVRAM: NVRAM (Abk. für englisch Non-Volatile Random-Access Memory) ist in der Elektronik ein nichtflüchtiger Datenspeicher, der auf RAM basiert und dessen Dateninhalt ohne externe Energieversorgung erhalten bleibt. 
- EFI System Partition
- The EFI (Extensible Firmware Interface) system partition or ESP is a partition on a data storage device (usually a hard disk drive or solid-state drive) that is used by computers having the Unified Extensible Firmware Interface (UEFI). 

2.) Bootloader 
- Lädt: System-Kernel-Image
- Lädt: initrd-Image 

- initrd-image: Abbild des Wurzeldateisystems 
- das initrd-image der Version 5.x ist ein initramfs (initial RAM Filsystem) Image 

Bootloader:
- GRUB UEFI, Paket: grub-efi-amd64 (Intelligenter Bootloader) 
- GRUB 2, Paket: grub-pc
- GRUB 2, Paket: grub-rescue-pc
- Lilo, Paket: lilo 
- Isolinux: syslinux 
- Syslinux: syslinux
- Loadlin: loadlin 
- MBR von Neil Turton: mbr 


Konfiguration:

/boot/grub/grub.cfg

Bedeutung: 
- Geladene GRUB2-Module (gzio, part_gpt, ext2)
- Verwendetes Root-Dateisystem, mit UUID
- Pfad-Kernelimage /boot/vmlinuz-5....-amd64
- Verwendeter Kernel-Boot-Parameter
- Pfad zum Initrd-Image im Rootsystem /boot/initrd.img- -amd64 


3.) Das Mini-Debian-System heißt eigentlich: initrd oder initramfs 

/init wird als erstes ausgeführt

Programm: Userspace 


Entweder:
/init = Shellscript: Wenn das initramfs durch initramfs-tools erstellt wurde 
/init = systemd Binärprogramm, wenn initramfs durch dracut erstellt wurde 

4.) Das Normale Debian-System 

init PID=1

Standardpfad: /sbin/init 

Variable mit Pfad: init 

Boot-Hilfsprogramme: 

- systemd 
- systemd-sysv
- init-system-helpers 
- initscripts 
- sysvinit-core 
- sysv-rc
- sysvinit-utils 
- lsb-base 
- insserv 
- uswsusp
- kexec-tools
- systemd-bootchart
- bootchart2
- pybootchartgui
- mingetty
- mgetty 


- systemd 
- systemd-sysv
- init-system-helpers 
- initscripts 
- sysvinit-core 
- sysv-rc
- sysvinit-utils 

systemd:
- systemd 
- systemd-sysv

system:
- systemd 
- systemd-sysv
- init-system-helpers 

sysv und sysvinit:
- systemd-sysv
- sysvinit-core 
- sysv-rc
- sysvinit-utils 

sysv:
- systemd-sysv
- sysv-rc

sysvinit:
- sysvinit-core 
- sysvinit-utils 

init und sysvinit:
- init-system-helpers 
- initscripts 
- sysvinit-core 
- sysvinit-utils 

init:
- init-system-helpers 
- initscripts 

sysvinit:
- sysvinit-core 
- sysvinit-utils 


1.) core
2.) rc
3.) utils
4.) helpers 


- systemd 
- sysv
- init-system
- initscripts 
- sysvinit


systemd-init-Prozess 

systemd 

1.) init 
2.) systemd 

systemd-system.conf 
systemd-resource-control

/lib/systemd/system
/etc/systemd/system
/run/systemd/system

Regeln: 

1. Wants=
2. Requires=
3. Before=
4. After=
5. BindsTo=
6. Requisite=
7. Description=

Zum Beispiel: 
- Description: Pflicht
- Requires: Welche andere Unit wird mitgestartet
- BindsTo: Harte Variante von Requires

Abhängigkeiten 

UNITs
In systemd ist eine Organisationseinheit eine "Unit"
z.B. für 
- Dienste
- Timer 
- Einhängepunkte
- Sockets
- Swap-Speicher
- Geräte 

Alle haben Einträge ähnlich wie INI-Dateien 

Bestehen aus Sektionen 

1.) systemd 
2.) Units
3.) Sektionen 

In den Sektionen stehen Schlüsselparameter, Direktiven 

1.) systemd 
2.) Units
3.) Sektionen 
4.) Direktiven 

systemweite Units 

/etc/systemd/system 
/lib/systemd/system 

User Units - Benutzerbezogene Units 



*.service beschreibt einen Prozess 
*.device beschreibt ein Gerät 
*.mount
*.automount
*.swap
*.path
*.socket
*.timer
*.slice
*.scope 
*.target 
*.network

Eigene UNITS 

[Unit]
Descriptio=Meine Unit 

[UNIT-TYP]

[Install]
WantedBy=...



WantedBy:
- multi-user.target
- graphical.target
- rescue.target
- reboot.target 
- poweroff.target
- default.target

angelegte: Unit: Aktivieren, deaktivieren 

Install legt fest, wann die Unit gestartet wird, früher run levels
/lib/systemd/system/default.target 

Rechnername in /etc/hostname 

systemd-hostnamed.service 

Dateisystem: 

/etc/fstab 

Verschlüsset

/etc/crypttab 

Software-RAID

/etc/mdadm.conf 



Kernelmeldungen 

dmesg -n3

0 KERN_EMERG
1 KERN_ALERT
2 KERN_CRIT
3 KERN_ERR 
4 KERN_WARNING
5 KERN_NOTICE 
6 KERN_INFO
7 KERN_DEBUG 

Systemmeldungen:

systemd-journal.service 

udev-System: Automatisches Erkennen von Hardware 

modprobe: Kernel-Module hin zu fügen 

/etc/modules 

lsmod 
modinfo 
depmod 


/etc/init.date

case "$1" in 
    start) 
        echo "Starting foo"
        sudo -u foo-user bash -c ...
    stop)
        echo "Stopping foo"
        sudo -u foo-user bash -c ...
        sleep 2
    *)
        echo "Usage: /etc/init.d/foo {start|stop}"
        exit 1
esac
exit 0


/etc/init.d

start-stop-daemon
start-stop-daemon --start
start-stop-daemon --start --exec 
service bla start
service bla stop
service bla install 
systemctl daemon-reload
journalctl -xe


sudo update-rc.d celeryd defaults
sudo update-rc.d celeryd enable

#!/bin/bash 
#
# twitter initscripts
#
### BEGIN INIT INFO
# Provides:          python
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: This is for Twitter
# Description: This is for Twitter
### END INIT INFO






systemd-sysv                fast das gleiche wie systemd
init-system-helpers         Dieses Paket enthält erforderliche Hilfsprogramme für das Umschalten zwischen den                       verschiedenen Debian-Init-Systemen (z.B. sysvinit oder systemd)
initscripts                 The scripts in this package initialize a standard Debian system at boot time and shut it down at halt or reboot time. 
sysvinit-core               This package contains programs required for booting a Debian system and doing basic process management. 
sysv-rc                     Dieses Paket stellt die Unterstützung für ein System zur Verfügung, das analog zu System-V das Booten, Wechseln zwischen Runleveln und Herunterfahren ermöglicht. Diese werden durch symbolische Verweise in /etc/rc?.d/ eingerichtet. 
sysvinit-utils              Dieses Paket enthält die wichtigen System-V-artigen Werkzeuge.
lsb-base                    Die Linux Standard Base (LSB, http://www.linuxbase.org/) ist ein vereinheitlichtes Basissystem, auf das Linuxanwendungen von Dritten aufbauen können. 
insserv                     The insserv program is used by the standard SysV-based init system. It updates the order of symlinks in /etc/rc?.d/ based on dependencies specified by LSB headers in the init.d scripts themselves. 
kexec-tools                  Dieses Paket bietet Werkzeuge, um einen Kernel in den Speicher zu laden und dann einen direkten »Neustart« in diesen Kernel durchzuführen. Dazu wird die Kernel-Funktion kexec aufgerufen, um den normalen Boot-Prozess zu umgehen
systemd-bootchart             is a tool, usually run at system startup, that collects the CPU load,
       disk load, memory usage, as well as per-process information from a running system.
       Collected results are output as an SVG graph. 
bootchart2                      bootchart2 instruments your boot process and provides a tool to render a graph of what was happening during the boot process later.
 Mgetty                     ist ein vielseitiges Programm, das alle Aspekte eines Modems unter Unix abdeckt.
    
                        Mit dem Programm »mgetty« können Sie ein Modem für den Umgang mit externen Logins und den Faxempfang einsetzen. Auch können Sie das Modem als Anrufbeantworter einsetzen, ohne beim Anrufen zu stören. 

                        
alsa-utils
anacron
apache2
apache-htcacheclean
apparmor
avahi-daemon
bluetooth
console-setup.sh
cron
cryptdisks
cryptdisks-early
cups
cups-browsed
dbus
exim4
gdomap
haveged
hwclock.sh
keyboard-setup.sh
kmod
lm-sensors
lvm2
lvm2-lvmpolld
mariadb
mysql
networking
plymouth
plymouth-log
postfix
procps
pulseaudio-enable-autospawn
rsync
rsyslog
saned
sddm
smartmontools
speech-dispatcher
ssh
sudo
tor
udev
ufw
unattended-upgrades
vlc1
vlc2
x11-common



alsa-utils              Advanced Linux Sound Architecture

anacron                 anacron ist ein Computerprogramm ähnlich cron zum zeitlich gesteuerten Starten von Computerprogrammen. Im Gegensatz zu cron, welches voraussetzt, dass der Computer wie bei Servern üblich, permanent läuft, nimmt Anacron zur Bewertung nicht nur die aktuelle Uhrzeit, sondern die vergangene Zeitspanne seit dem letzten Start mit in die Entscheidung.

apparmor                AppArmor (Application Armor, auf Deutsch etwa Anwendungs(programm)-Panzerung) ist eine freie Sicherheitssoftware für Linux, mit der Programmen einzeln bestimmte Rechte zugeteilt oder entzogen werden können. Mit dieser Erweiterung wird die Mandatory Access Control (MAC) implementiert. 

avahi-daemon            Avahi ist eine freie Implementierung von Zeroconf, einer Technik zur Vernetzung von Geräten in einem lokalen Netzwerk, ohne dass diese manuell konfiguriert werden müssen. 

cron                    Der Cron-Daemon dient der zeitbasierten Ausführung von Prozessen in Unix und unixartigen Betriebssystemen wie Linux, BSD oder macOS, um wiederkehrende Aufgaben – Cronjobs – zu automatisieren. 

dbus                    D-Bus (von englisch Desktop-Bus) ist eine freie Programmbibliothek zur Interprozesskommunikation. Sie orientiert sich insbesondere an den Bedürfnissen von Desktop-Umgebungen.

exim4                   Exim (ursprünglich ein Akronym für EXperimental Internet Mailer) ist ein Mail Transfer Agent und Mailserver.

Exim ist weitgehend aufrufkompatibel zu dem sehr traditionsreichen MTA Sendmail. Seine besondere Stärke liegt in einer sehr flexiblen, aber trotzdem einfachen Konfiguration. 

hwclock.sh
keyboard-setup.sh

kmod                    In computing, a loadable kernel module (LKM) is an object file that contains code to extend the running kernel, or so-called base kernel, of an operating system. 

networking
plymouth                Plymouth ist ein Bootsplash, der 2008 von Red Hat für die Linux-Distribution Fedora entwickelt wurde.        
                        Als Bootscreen bezeichnet man im Computerjargon eine grafische Anzeige des Bootprozesses während des Ladens eines Betriebssystems. 


plymouth-log
procps
pulseaudio-enable-autospawn     PulseAudio is a network-capable sound server program
rsync                   rsync gleicht Dateien und Ordner zwischen Lokalen oder Remote Systemen ab. die Synchronisation findet von der Quelle zum Ziel statt.
rsyslog                 Rsyslog ist eine Open-Source-Implementierung des syslog-Protokolls für Unix und Unix-ähnliche Systeme. syslog ist ein Standard zur Übermittlung von Log-Meldungen in einem IP-Rechnernetz. 
saned                   (Scanner Access Now Easy)
sddm                    The Simple Desktop Display Manager (SDDM) is a display manager. It is the recommended display manager for the KDE Plasma and LXQt desktop environments. 
smartmontools           Ein Festplattenausfall kommt meist überraschend und geht oft mit dem Verlust von Daten einher. Wehe dem, der nicht vorgesorgt hat, z.B. durch ein RAID-Festplatten-Verbund oder ein Backup.

Die smartmontools können Zustandsdaten der Festplatte auslesen und so dazu beitragen, rechtzeitig einen sich anbahnenden Festplatten-Ausfall zu erkennen.

Wie der Name schon vermuten lässt, geschieht dies mit Hilfe von S.M.A.R.T. = Self-Monitoring, Analysis and Reporting Technology. 


speech-dispatcher
udev
x11-common

https://www.linuxfromscratch.org/blfs/view/svn/multimedia/alsa-tools.html


/etc/systemd/system/hello.service

# Simple service unit file to use for testing
# startup configurations with systemd.
# By David Both
# Licensed under GPL V2
#

[Unit]
Description=My hello shell script

[Service]
Type=oneshot
ExecStart=/usr/local/bin/hello.sh

[Install]
WantedBy=multi-user.target


#!/usr/bin/bash
# Simple program to use for testing startup configurations
# with systemd.
# By David Both
# Licensed under GPL V2
#
echo "###############################"
echo "######### Hello World! ########"
echo "###############################"




gzio
gzip


Lempel-Ziv-Kodierung (LZ77)

gzip [ -acdfhklLnNrtvV19 ] [-S Endung] [ Name … ]
gunzip [ -acfhklLnNrtvV ] [-S Endung] [ Name … ]
zcat [ -fhLV ] [ Name … ]


-d --decompress --uncompress
-r --recursive

gzip -c Datei1 > foo.gz
gzip -c Datei2 >> foo.gz
gunzip -c foo
cat Datei1 Datei2 | gzip > foo.gz
gzip -c Datei1 Datei2 > foo.gz

Archive unter Linux (tar, gz, bz2, zip)


    1 tar
    2 gz, bzw. gzip
    3 bz2, bzw. bzip2
    4 zip

    Entpacken eines Archivs:
    tar xfv archiv.tar
    
    Dateien/Ordner in ein Archiv packen:
    tar cfv archiv.tar inhalt1 inhalt2 inhalt3
    
    Inhalt eines Archivs auflisten:
    tar tfv archiv.tar

        gzip file

    Ergbnis: file.gz

    Datei dekomprimieren:

    gunzip file

    Dateien in einem komprimierten Archiv zusammenfassen:

    tar cfvz archiv.tar.gz inhalt1 inhalt2
    
    
        bzip2 file

    Ergebnis: file.bz2

    Datei dekomprimieren:

    bunzip2 file.bz2
    
    
        Einzelne Dateien in einem komprimierten Archiv zusammenfassen:

    zip archiv.zip inhalt1 inhalt2

    Komplette Ordner in einem komprimierten Archiv zusammenfassen:

    zip -r archiv.zip ordner1 ordner2 ordner3

    Komprimiertes Archiv entpacken:

    unzip archiv.zip
    
    
    GUID Partition Table (GPT) specific instructions
    https://wiki.archlinux.org/title/GRUB