Aber: Heute das Thema - sysvinit und systemd -
Also es gibt quasi mehrere ideologische Bereiche bei Betriebssystemen
Das erste ist so zu sagen, der Minix-Quelltext. Und man muss ungefähr wissen, worum es geht. Speicherverwaltung und Co. Ich war auf dem technischem Gymnasium - was jedes Mal rein geflogen ist, wenn der Lehrer kam, waren Papiere über das Paging - das ist der Knüller, bei Betriebssystemen. Und die Klassenkameraden waren alle schon am Schimpfen
Es gibt auch andere Kurse zu Betriebssystemen, die erklären die Strategien, zum Beispiel zu - Signalen - wie Prozesse Signale austauschen. Dazu gibt extremst ausbaufähige Algorithmen. Weil es ist ja so - wenn ich ihnen ein Signal schicke und sie sind bereit, das zu empfangen - dann alles OK. Angenommen sie sind gerade beschäftigt - dann müssen sie mir eine Antwort geben - was passiert, wenn die Antwort im falschen kommt - es kommt zu Überschneidungen, unter Umständen
Ich denke es ist sinnvoll darüber nach zu denken, aber ehrlich gesagt: Verstehen sie lieber den Quelltext.
trotzdem: Ein anderes Thema, das ist: Der einbau des Betriebssystems in den PC.
https://www.henkessoft.de/
Das ist ganz nett. Und hier geht darum, dass sie Code auf die Festplatte so kriegen, dass das vom Computer geladen wird. Das ist gar nicht schwer.
https://www.henkessoft.de/OS_Dev/OS_Dev1.htm
Sie haben eigentlich nur eines zu tun:
Sie haben zu schreiben
Code: Alles auswählen
times 510-($-$$) db 0
db 0x55
db 0xAA
Erstens sie müssen Assembler können - gut, dann müssen sie Befehle wie
Code: Alles auswählen
mov, add, sub, mul, div, je, jne, ...
Code: Alles auswählen
512 Byte
Code: Alles auswählen
bm
Code: Alles auswählen
gif
Code: Alles auswählen
511 Byte
Code: Alles auswählen
512 Byte
Code: Alles auswählen
db 0x55
db 0xAA
Der Windows Nutzer kennt
Code: Alles auswählen
dd
Code: Alles auswählen
UEFI
Code: Alles auswählen
dd if=sektor.bin of=/dev/sda bs=512 count=1
Code: Alles auswählen
sektor.bin
Code: Alles auswählen
nasm
Code: Alles auswählen
add, sub, div, mul, cmp, je, jne
Gut, das ist der eine Teil vom Betriebssystem. Das ist aber ein bisschen Mau. Das ist kein Betriebssystem. Ein Betriebssystem hat gewisse Aufgaben - dazu gehören, Programme in den Arbeitsspeicher laden und als Prozesse ausführen - dazu gehört die Verwaltung von Dateien - oder das Multitasking. Das macht ein Betriebssystem. Jetzt gibt es Strategien und die Strategien werden ihnen dann erklärt in Form von, dass sie Signale untereinander austauschen. Ich denke, es ist der Mittelweg zu finden, sie lesen am Besten
Code: Alles auswählen
MINIX
Umgekehrt gibt es einen ganz anderen Ansatz - sie benutzen ein Betriebssystem. Am Ehesten werden sie ein Betriebssystem kennen lernen, indem sie es benutzen. Und: Der zweite Witz, ist das mit dem Paging. Damit können sie die Leute ärgern - weil, wenn der Lehrer 100x mit seinen Papieren rein kommt - sie müssen Andrew S. Tanenbaum lesen, da kommt dann halt so eine graphische Abbildung vom Paging und das will halt nicht in den Kopf rein.
Der Witz ist nämlich, dass sie Mathematik können müssen. In der Mathematik gibt es Abbildungen
Code: Alles auswählen
f(m) = n
f:N->N
Code: Alles auswählen
0, 1, 2, 3, ...
Code: Alles auswählen
0 ... 11
0 ... 2047
0 ... 1023
Code: Alles auswählen
f (n) = 2*n
f (n) = 3*n
f (n) = n/2
f (n) = n+1
f (m) = 2*m
Code: Alles auswählen
f(3) = 2
f(2) = 0
f(1) = 1
f(0) = 3
Und so weiter. Es gibt auch die Funktion
Code: Alles auswählen
rand ()
das entspricht am Ehesten unserem Paging. Es gibt generell auf den ersten Blick, keine eindeutige Zuordnung zwischen dem Argument und dem Funktionswert. Und: Jetzt kommt der nächste Schritt. Wir haben es bei ganzen Zahlen, die möglicht diese Binär dar zu stellen, oder wir haben die Möglichkeit sie in unserem Dezimalsystem dar zu stellen.
Der Unterschied zwischen Dezimalsystem und Binärsystem ist gering. Also wir haben quasi die Zahlen
Code: Alles auswählen
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Code: Alles auswählen
f(000) = 010
f(100) = 001
f(010 ) = 011
...
Code: Alles auswählen
0000 0000
....
1001 0001
...
1111 1111
Code: Alles auswählen
000 01001
11 111100
1111 0010
Code: Alles auswählen
00 11 0100
1 001 0000
Das heisst
Code: Alles auswählen
0001 1000
1001 0101
Code: Alles auswählen
f(n) = m
f:N->N - aber binr
Code: Alles auswählen
n
Code: Alles auswählen
k
Code: Alles auswählen
f(n) = m
f(k) = k
Gut, Paging verstanden. Das ist der Teil - der erzeugt bei allen Grausen - das war ja der Gewinn des Linus Torvalds - bei seinem Betriebssystem das Paging ein zu führen. Damals kam der
Code: Alles auswählen
80386
Code: Alles auswählen
8086
Und na ja, das sind so zu sagen, die einen Teile des Betriebssystem. Das sind die Eingeweide. Gut, und dann sagt man den Leuten hundert Millionen mal, hallo: Linux ist ein Kernel - und: Dann kommt - aber, wie aber, das KDE ist so schön. Und ich sage so: Erstens: Ist KDE nicht von alleine. Es gibt in C++ Bibliotheken zur Erstellung von Fenster. Es gibt die nicht so freie Bibliothek, das ist
Code: Alles auswählen
Qt
Qt4
Code: Alles auswählen
gtk+
Code: Alles auswählen
KDE
Code: Alles auswählen
gnome
Code: Alles auswählen
x
Code: Alles auswählen
x
Code: Alles auswählen
kde
Code: Alles auswählen
#include <stdio.h>
Code: Alles auswählen
qt4
Code: Alles auswählen
dll
Code: Alles auswählen
KDE
Code: Alles auswählen
Qt4
Code: Alles auswählen
#include <stdio.h>
Code: Alles auswählen
c++
Code: Alles auswählen
C
Jetzt erst Mal, Henkessoft ist nicht zu vernachlässigen. Es weisst sie darauf, was zu tun ist, damit sie ihr OS in den Arbeitsspeicher kriegen. Wenn sie das nicht wissen, dann geht nichts. Also, das ist so rum der bessere Weg.
Trotzdem ist das kein Betriebssystem. Und das ist der entscheidene Punkt. Sie müssen wissen, was es tut. Aber auch das ist nicht optimal. Die Strategie - sie müssen das Minix selber kennen, den Code.
Das ist der Weg. Gut. Und jetzt kommt ein Teil im Betriebssystem. Der ist unangenehm. Weil, dass das Betriebssystem tut ist klar. Jetzt ist die Frage, woher kommen unsere Prozesse - die Antwort lautet, wir haben viele Prozesse. Dazu gehören.
Code: Alles auswählen
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.
gut, wer macht das? Ein unsauberes Betriebssystem, startet alle Prozesse selber. Ein sauberes Betriebssystem - vrefügt über einen Prozess, der heisst
Code: Alles auswählen
init
Code: Alles auswählen
0
Code: Alles auswählen
1
Code: Alles auswählen
init
Zu
Code: Alles auswählen
init
Code: Alles auswählen
sysvinit
Code: Alles auswählen
systemd
Code: Alles auswählen
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
Code: Alles auswählen
/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.
Und das ist das entscheidende, das werden sie verstehen oder nicht. Das entscheide, ist zunächst, sie müssen ihren Service starten. Das geht mit
Code: Alles auswählen
service myservice start
service myservice stop
Code: Alles auswählen
PATH="$PATH:/usr/sbin"
Code: Alles auswählen
/usr/sbin
Code: Alles auswählen
service
viewtopic.php?t=85
viewtopic.php?t=84&start=4
Ohne Bash werden sie nicht weiter kommen. Keine Chance - darum gehen die Skripte. Wenn sie:
Code: Alles auswählen
service myservice start
service myservice stop
Code: Alles auswählen
/etc/init.d
Code: Alles auswählen
/etc/init.d/mydaemon1
/etc/init.d/myserver2
Code: Alles auswählen
#include <stdio.h>
int main (void) {
printf ("Hallo Welt");
return 0;
}
Code: Alles auswählen
gcc hallo.c -o hallo
Code: Alles auswählen
/home/user/hallo
Code: Alles auswählen
/etc/init.d
Code: Alles auswählen
systemd
Code: Alles auswählen
bash
Code: Alles auswählen
#!/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
Code: Alles auswählen
#!/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
case "$1" in
start)
;;
stop)
;;
restart|reload)
;;
esac
Code: Alles auswählen
switch-case
Code: Alles auswählen
if-then-else
Code: Alles auswählen
switch (varname) {
case 1:
case 2:
...
}
Code: Alles auswählen
case
Code: Alles auswählen
switch
Code: Alles auswählen
start
Code: Alles auswählen
stop
Code: Alles auswählen
restart
Code: Alles auswählen
;;
Code: Alles auswählen
init