Am Sonntag, 16. Mai 2021, 11:00:54 CEST schrieb Tobias Crefeld:
Am Wed, 12 May 2021 09:24:07 +0200
schrieb Mathias Homann :
...das war beides VOR systemd so. Ist also gefühlt ca. 10 Jahre her.
Das mit dem bootparameter stimmt zwar noch, aber der heisst jetzt
"rd.break" und die Prozedur zum zurücksetzen ist ein wenig anders...
und mit dem editor in /etc/shadow rumpusseln tut echt nicht not.
Hm, wenn ich so nachdenke, war die Prozedur tatsächlich nur nötig bei
Systemen, die so alt waren, dass niemand mehr das root-Passwort wusste.
Der Zusammenhang mit der Frage systemd vs. init.d erschließt sich mir
allerdings grad nicht. Schließlich handelt es sich um einen
Kernel-Parameter, der einen Start im Single-User-Mode bewirkt und
runlevel gibt es ja auch unter systemd noch!?
nein, runlevel gibt es unter systemd (eigentlich) nicht.
Unter Systemd gibt es sogenannte "targets". Ein Target ist eine
Zusammenfassung von Diensten die zusammengehören.
Es können mehrere Targets zur gleichen Zeit aktiv sein.
Es gibt beim Bootvorgang ein "default target", da will man sozusagen hin. Über
die Abhängigkeiten werden dann beliebig viele andere Targets dazugeholt.
Ein Desktopsystem hat z.b. üblicherweise als default target "graphical.target"
eingestellt, das zieht dann über abhängigkeiten erst mal das "multi-
user.target" an, das wiederum braucht network.target, und so weiter, und so
fort.
Mit dem systemctl-befehl kann man diesen Abhängigkeitsbaum gut sehen:
systemctl list-dependencies graphical.target
Von einem target zum anderen umschalten tut man nicht: man "isoliert" ein
target. Das geht nur bei Targets die auch als default target funktionieren
würden, also z.b. dem graphical.target, dem multi-user.target oder den zwei
notfalltargets emergency.target und rescue.target.
Nun gibt es aber "alte hasen" überall, auch in der Unix-Welt, und für die gibt
es systemd targets die runlevelX.target heissen. Und dazu dann einen runlevel
befehl der bei aufruf von "runlevel 3" in wirklichkeit nix anderes tut als
unter der Haube "systemctl isolate runlevel2.target" aufzurufen.
Wichtigste Neuerung hier: auch die zwei Wartungstargets "emergency.target" und
"rescue.target" brauchen die eingabe des root passwortes.
Wenn man das nicht hat: kernelparameter rd.break verwenden, dran denken dass
das root filesystem noch RO ist - mount -o remount,rw /sysroot, chroot /
sysroot, und passwd befehl. Und VORSICHT bei systemen mit selinux, also red
hat verwante und Tumbleweed: in der rd-break-shell ist SELinux noch nicht
aktiv, es werden also KEINE LABEL AKTUALISIERT. Wenn man den befehl "touch
/.autorelabel" in der chroot umgebung vergisst bootet das system nicht mehr...
</mode>
Wem das jetzt zu lang war: warum hast du dann bis hier gelesen? XD
Sorry, ich hab den Kram 5 Jahre lang unterrichtet.
Cheers
MH
--
Mathias Homann
Mathias.Homann@openSUSE.org
Jabber (XMPP): lemmy@tuxonline.tech
IRC: [Lemmy] on freenode and ircnet (bouncer active)
telegram: https://telegram.me/lemmy98
keybase: https://keybase.io/lemmy
gpg key fingerprint: 8029 2240 F4DD 7776 E7D2 C042 6B8E 029E 13F2 C102