Ich versuche zu setzensinitals init
für Linux (auf einem PC...). Mein Ziel ist im Moment einfach, eine einzelne tty/bash
davon auszuführen. Es ist keine spezielle Einbindung erforderlich, da der Kernel bereits eine root=/dev/sda2
für eine erhält cmdline
.
Ich habe sinit
eine Binärdatei als meine /sbin/init
und bin mir nicht sicher, was ich als nächstes tun soll. Ich weiß, dass einige Skripte platziert werden müssen, aber ich verstehe nicht, wie sinit
ich sie ausführen oder mit verknüpfen kann bash
.
Antwort1
Die enthaltene Manualpage sinit.8 sowie README sind für mich sehr aufschlussreich. Hier jedoch eine kurze Einführung für Sie, während ich mir den Quellcode ansehe:
- sinit Haupt-Programmdatei,
/sbin/init
wird vom Kernel als PID 1 gestartet - Es bereitet die Ausgangsumgebung vor, um
/bin/rc.init
das Skript als separaten untergeordneten Prozess auszuführen. - Es läuft
/bin/rc.init
als separater Prozess und enthält daher/bin/rc.init
Befehle zur Initialisierung des Systems über diesen Punkt hinaus - Es tritt in eine Endlosschleife ein, in der es alle zombifizierten Prozesse abfängt und ihre Exit-Codes ins Nirgendwo liest
- während es sich in einer Endlosschleife befindet, kann es jedoch durch Signale unterbrochen werden. Die Signale, die es zum Abhören definiert, sind SIGUSR1 und SIGINT. SIGUSR1 zwingt init,
/bin/rc.shutdown
alspoweroff
Skriptname zu laufen, während SIGINT init zwingt, dasselbe Skript mitreboot
Namen auszuführen, um die Betriebsarten innerhalb des Skripts zu unterscheiden. Beachten Sie, dass diese beiden Signale die einzigen sind, auf die init hört, alles,einschließlichSIGKILL und SIGSTOP werden ignoriert. Und nur der Superuser darf Signale an init senden. SIGINT wird vom Kernel generiert, wenn Sie Strg-Alt-Entf drücken, aber nur, wenn Sie dazu aufgefordert werden (es gibt einen speziellen Systemaufruf, den der init-Prozess normalerweise ausführt, um das Senden von SIGINT an cad zu ermöglichen).
Also, daraus, sinitbietet keine:
- Init-Skripte (Sie müssen Ihre eigenen schreiben oder die in Ihrer Distribution bereitgestellten anpassen)
- Möglichkeiten der Steuerung (wie Runlevels), nur zwei einfache Befehle
Sinit ist jedoch ein nettes kleines Init, das funktioniert. Ich wette, es funktioniert sowohl auf eingebetteten Systemen als auch auf einfachen Desktop-Systemen ohne den Aufwand moderner Desktop-Umgebungen sehr gut.
Antwort2
Es stellte sich heraus, der Linux-KernelanalysiertDieScharlachrotvon selbst.
Daher kann jedes „Shebanged“-Skript (mit vollständigem Pfad für Binärdateien) dafür verwendet werden sinit
.