Het opstartproces van de Alpine debuggen

Zoals besproken in mijn vorige postAlpine Linux doorloopt verschillende stadia wanneer het opstart.

Net na het mounten van de boot media, en het scannen ervan op apkovl's (met nlplug-findfs), is er een optie om een console te krijgen, door $SINGLEMODE op yes te zetten.

Het is gemakkelijk om ENKELEMODE op ja te zetten, voegt u gewoon het woord "single" naar de cmdline.txt (indien op Raspberry Pi) / uw kernel parameters (indien niet op Raspberry Pi):

modules=loop,squashfs,sd-mod,usb-storage single noquiet dwc_otg.lpm_enable=0 console=tty1

Merk op dat ik ook het woord quiet heb voorafgegaan door no om het effectief uit te schakelen - je krijgt meer output tijdens het booten. (NB: dit is eigenlijk de manier waarop dit hoort te gebeuren, zoals gedefinieerd in het init-script)

Zodra je opstart, zal dit je in een shell sessie droppen (met ash, de ingebouwde shell van busybox).

Opmerking: als u de parameter root kernel hebt ingesteld, om een rootbestandssysteem op te geven om van op te starten, is uw console aangekoppeld voor de root partitie is gemount - waarschijnlijk zodat je het zelf beter kunt debuggen.

Deze enkele modus is erg handig voor het uitproberen van bootconfiguraties en het debuggen van bootproblemen, en het experimenteren met het systeem en zijn mogelijkheden (die komen helemaal van de initramfs en de kernel).

can't access tty error

De volgende foutmelding wordt gegeven wanneer Single mode is ingeschakeld:

sh: kan geen toegang krijgen tot tty: job controle uitgeschakeld

Het lijkt te maken te hebben met de mogelijkheden van sh, en hoe het wordt uitgevoerd - geen reden om ongerust te zijn.

USB-toetsenbord werkt niet

In het begin werkte het USB-toetsenbord niet bij mij; ik weet niet zeker wat de reden hiervoor is. Na een aantal stroomcycli begon het te werken. Misschien kan het niet worden ingeschakeld via KVM.

In ieder geval, blijf proberen, het zou moeten werken. Probeer onmiddellijk te typen als de sh-waarschuwing komt...

Op de Pi 3B+ werkt het toetsenbord niet; het werkt alleen op een Pi 3A+. Ik vermoed dat dit komt door de extra interne USB-hub op de Pi 3B+ - probeer alstublieft een Pi 3A+ te gebruiken om in enkele modus te debuggen. (Ik weet het, niet ideaal voor netwerk setups).

Is er een kortere manier om de enkelvoudige modus te activeren? Ik ben lui.

Dit zijn je opties:

s|single|1

Dus je zou in single mode moeten kunnen komen door een "s" of een "1" toe te voegen aan de cmdline.txt. Niet door mij getest.

 

Hoe kom ik uit singlemode?

Type

exit

 

Wat gebeurt er na de single mode check?

Ons antwoord verwijst naar alleen naar de RAM ("diskless") boot mode van Alpine Linux.

De volgende bewerkingen worden pas uitgevoerd na de single mode check, dus u zult ze handmatig moeten uitvoeren als u dat wilt:

  • een tmpfs is gemount naar /sysroot ($sysroot)
  • de apkovl-locatie is ingesteld - standaard, als u de apkovl kernelparameter niet hebt opgegeven, zal nlplug-findfs hebben geprobeerd om deze voor u te lokaliseren op uw opstartmedia
    • er is, zoals eerder besproken, ook de mogelijkheid om het via http, enz. te verkrijgen.
  • de kernelparameter pkgs wordt verwerkt - u kunt hier aanvullende pakketten opgeven, die het systeem moet installeren
    • deze parameter is nuttig in samenwerking met alpine_repo - waardoor je extra pakketten in Alpine kunt injecteren
  • de apkovl is uitgepakt
  • als het bestand /sysroot/etc/.default_boot_services bestaat of de apkovl locatie is geen bestand, dan zullen default boot services worden opgezet, en het bestand zal worden verwijderd (dus het zal niet bewaard blijven in de apkovl wanneer je lbu commit doet)

if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; then
# voegt standaard enkele bootdiensten toe
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 modules boot
rc_add sysctl boot
rc_add hostname boot
rc_add bootmisc boot
rc_add syslog boot

rc_add mount-ro shutdown
rc_add killprocs shutdown
rc_add savecache shutdown

rc_add firstboot default

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

  • code voor het uitvoeren van een splash screen wordt uitgevoerd
  • er wordt gecontroleerd of /sysroot/etc/fstab bestaat, en conditioneel daarop wordt relocate_mount uitgevoerd
  • alpine-base is altijd inbegrepen in de pakketten die zullen worden geïnstalleerd
  • apk is voorbereid
    • optioneel wordt networking geconfigureerd zodat apk de pakketten via het netwerk kan ophalen
    • het wordt ook verteld dat de pakketten worden geïnstalleerd in -initramfs-diskless-boot modus, en verteld om -progress weer te geven
    • als quiet is ingesteld, dan wordt apk verteld om -quiet te blijven
  • pakketten worden geïnstalleerd op het root-bestandssysteem
  • als de kernel optie ssh_key is gegeven, wordt openssh toegevoegd aan de packages en als een service
    • let op dat je nog steeds de sleutel moet doorgeven - dit zal gebeuren via een bestand in je apkovl of een andere methode
    • als zodanig zou de optie ssh_key een soort fallback kunnen zijn als je ssh hebt uitgezet en het weer terug wilt.
  • tenslotte wordt de root overgeschakeld naar het nieuwe systeem dat is opgebouwd uit de packages en de apkovl

 

Opmerking, voor iedereen die zich afvraagt wat de keep_apk_new kernel parameter verondersteld wordt te doen:

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

Raadpleeg het init-bestand in de initramfs voor meer details.

 

Referenties:

 

We zijn te huur

Als u op zoek bent naar een oplossing voor uw Alpine Linux probleem, en u wilt advies wij zijn te huur.