Fehlersuche im Alpine-Boot-Prozess

Wie in meinem Bericht vorheriger BeitragAlpine Linux durchläuft beim Booten mehrere Phasen.

Direkt nach dem Einbinden des Bootmediums und dem Scannen nach apkovl's (mit nlplug-findfs), gibt es eine Option, um eine Konsole zu erhalten, indem man $SINGLEMODE auf yes setzt.

Die Einstellung von SINGLEMODE auf ja ist einfach, fügen Sie einfach das Wort "einzeln"in die Datei cmdline.txt einfügen (falls auf dem Raspberry Pi) / Ihre Kernelparameter (falls nicht auf dem Raspberry Pi):

module=schleife,squashfs,sd-mod,usb-storage einzeln noquiet dwc_otg.lpm_enable=0 console=tty1

Beachten Sie, dass ich dem Wort "quiet" ein "no" vorangestellt habe, um es effektiv zu deaktivieren - Sie erhalten dann mehr Ausgaben während des Bootens. (Anm.: Dies ist eigentlich die Art und Weise, wie dies im Init-Skript definiert ist)

Sobald Sie booten, werden Sie in eine Shell-Sitzung (mit ash, der eingebauten Shell von busybox) versetzt.

Hinweis: Wenn Sie den Root-Kernel-Parameter gesetzt haben, um ein Root-Dateisystem anzugeben, von dem gebootet werden soll, wird Ihre Konsole gemountet vor die Root-Partition gemountet ist - wahrscheinlich, damit Sie es selbst besser debuggen können.

Dieser Einzelmodus ist sehr nützlich, um Boot-Konfigurationen auszuprobieren, Boot-Probleme zu beheben und mit dem System und seinen Fähigkeiten zu experimentieren (die mit vollständig aus dem initramfs und dem Kernel).

kann nicht auf tty zugreifen Fehler

Der folgende Fehler wird ausgelöst, wenn der Einzelmodus aktiviert ist:

sh: kann nicht auf tty zugreifen: Jobkontrolle ausgeschaltet

Es scheint mit den Fähigkeiten von sh zusammenzuhängen und damit, wie es ausgeführt wird - kein Grund zur Beunruhigung.

USB-Tastatur funktioniert nicht

Zuerst funktionierte die USB-Tastatur bei mir nicht; ich bin mir nicht sicher, was der Grund dafür ist. Nach mehreren Einschaltvorgängen funktionierte sie dann. Vielleicht lässt sie sich nicht über KVM einschalten.

Versuchen Sie es auf jeden Fall weiter, es sollte funktionieren. Versuchen Sie, sofort zu tippen, wenn die sh-Warnung kommt ...

Auf dem Pi 3B+ funktioniert die Tastatur nicht; sie funktioniert nur auf einem Pi 3A+. Ich vermute, dass dies auf den zusätzlichen internen USB-Hub des Pi 3B+ zurückzuführen ist - bitte versuchen Sie, einen Pi 3A+ zum Debuggen im Einzelmodus zu verwenden. (Ich weiß, nicht ideal für Netzwerk-Setups).

Gibt es einen kürzeren Weg, um den Einzelmodus zu aktivieren? Ich bin faul

Dies sind Ihre Möglichkeiten:

s|einzeln|1

Sie sollten also in der Lage sein, in den Einzelmodus zu gelangen, indem Sie ein "s" oder eine "1" in der cmdline.txt hinzufügen. Von mir nicht getestet.

 

Wie kann ich Singlemode beenden?

Typ

Ausgang

 

Was geschieht nach der Prüfung des Einzelmodus?

Unsere Antwort bezieht sich auf nur zum RAM ("diskless") Boot-Modus von Alpine Linux.

Die folgenden Vorgänge werden erst nach der Prüfung im Einzelmodus durchgeführt, so dass Sie sie gegebenenfalls manuell ausführen müssen:

  • ein tmpfs wird in /sysroot eingehängt ($sysroot)
  • der apkovl-Speicherort ist eingerichtet - wenn Sie den apkovl-Kernel-Parameter nicht angegeben haben, hat nlplug-findfs standardmäßig versucht, ihn für Sie auf Ihrem Boot-Medium zu finden
    • Es gibt, wie bereits erwähnt, auch die Möglichkeit, sie über http usw. zu erhalten.
  • der Kernel-Parameter pkgs wird geparst - Sie können hier zusätzliche Pakete angeben, die das System installieren soll
    • dieser Parameter ist nützlich in Verbindung mit alpine_repo - er erlaubt es Ihnen, zusätzliche Pakete in Alpine zu injizieren
  • das apkovl wird entpackt
  • Wenn die Datei /sysroot/etc/.default_boot_services existiert oder der apkovl-Speicherort keine Datei ist, werden die Standard-Boot-Dienste eingerichtet und die Datei wird entfernt (so dass sie nicht in der apkovl-Datei erhalten bleibt, wenn Sie lbu commit durchführen)

if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; then
# fügt standardmäßig einige Boot-Dienste hinzu
rc_add devfs sysinit
rc_add dmesg sysinit
rc_add mdev sysinit
rc_add hwdrivers sysinit
rc_add modloop sysinit

rc_add hwclock boot
rc_add Module booten
rc_add sysctl boot
rc_add hostname boot
rc_add bootmisc boot
rc_add syslog boot

rc_add mount-ro shutdown
rc_add killprocs Herunterfahren
rc_add savecache abschalten

rc_add firstboot standard

rm -f "$sysroot/etc/.default_boot_services"
fi

  • Code zum Ausführen eines Splash-Screens wird ausgeführt
  • es wird geprüft, ob /sysroot/etc/fstab existiert, und abhängig davon wird relocate_mount ausgeführt
  • alpine-base ist immer in den Paketen enthalten, die installiert werden sollen
  • apk ist vorbereitet
    • optional wird das Netzwerk konfiguriert, damit apk die Pakete über das Netzwerk beziehen kann
    • wird ihm auch mitgeteilt, dass die Pakete im Modus -initramfs-diskless-boot installiert werden, und es wird angewiesen, -progress anzuzeigen
    • wenn quiet gesetzt ist, dann wird apk angewiesen, -quiet zu bleiben
  • Pakete werden in das Root-Dateisystem installiert
  • wenn die Kerneloption ssh_key angegeben ist, wird openssh zu den Paketen und als Dienst hinzugefügt
    • Bitte beachten Sie, dass Sie den Schlüssel noch übergeben müssen - dies geschieht entweder über eine Datei in Ihrer apkovl oder eine andere Methode
    • Die Option ssh_key kann also eine Art Rückfall sein, wenn man ssh ausgeschaltet hat und es wieder haben möchte.
  • schließlich wird die Wurzel in das neue System geschaltet, das aus den Paketen und dem apkovl erstellt wird

 

Hinweis für alle, die sich fragen, was der Kernelparameter keep_apk_new bewirken soll:

if [ "$KOPT_keep_apk_new" != yes ]; then
apkflags="$apkflags -clean-protected"
[ -n "$ovlfiles" ] && apkflags="$apkflags -overlay-from-stdin"
fi

Weitere Einzelheiten entnehmen Sie bitte der init-Datei im initramfs.

 

Referenzen:

 

Wir sind zu mieten

Wenn Sie Ihr Alpine-Linux-Problem lösen möchten und Beratung wünschen wir sind zu mieten.