Déboguer le processus de démarrage d'Alpine

Comme indiqué dans mon poste précédentAlpine Linux passe par plusieurs étapes lorsqu'il démarre.

Juste après avoir monté le média de démarrage, et l'avoir analysé pour les apkovl (avec nlplug-findfs), il y a une option pour obtenir une console, en mettant $SINGLEMODE à yes.

Il est facile de régler SINGLEMODE sur oui, vous ajoutez simplement le mot "simple"dans le fichier cmdline.txt (si sur Raspberry Pi) / les paramètres de votre noyau (si pas sur Raspberry Pi) :

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

Notez que j'ai également fait précéder le mot quiet d'un non pour le désactiver efficacement - vous obtiendrez plus d'informations pendant le démarrage. (NB : c'est en fait la façon dont cela doit être fait, comme défini dans le script init).

Une fois que vous avez démarré, vous vous retrouverez dans une session shell (avec ash, le shell intégré de busybox).

Remarque : si vous avez défini le paramètre root kernel, pour spécifier un système de fichiers racine à partir duquel démarrer, votre console est montée. avant la partition racine est montée - probablement pour que vous puissiez mieux la déboguer vous-même.

Ce mode unique est très utile pour essayer les configurations de démarrage et déboguer les problèmes de démarrage, et pour expérimenter avec le système et ses capacités (qui sont fournies par le système de gestion de la sécurité). entièrement de l'initramfs et du noyau).

erreur "can't access tty

L'erreur suivante est déclenchée lorsque le mode simple est activé :

sh : can't access tty : job control turned off

Il semble que cela soit lié aux capacités de sh, et à la façon dont il est exécuté - il n'y a pas lieu de s'alarmer.

Le clavier USB ne fonctionne pas

Au début, le clavier USB n'a pas fonctionné pour moi ; je ne suis pas sûr de la raison de cette situation. Après plusieurs cycles d'alimentation, il a commencé à fonctionner. Peut-être qu'il ne peut pas être connecté via KVM.

Dans tous les cas, continuez à essayer, ça devrait marcher. Essayez de taper immédiatement lorsque l'avertissement sh apparaît ...

Sur le Pi 3B+, le clavier ne fonctionne pas ; il ne fonctionne que sur un Pi 3A+. Je pense que cela est dû au Hub USB interne supplémentaire sur le Pi 3B+ - essayez d'utiliser un Pi 3A+ pour déboguer en mode simple. (Je sais, ce n'est pas idéal pour les configurations de réseau).

Existe-t-il un moyen plus court d'activer le mode unique ? Je suis paresseux

Voici vos options :

s|simple|1

Vous devriez donc pouvoir passer en mode unique en ajoutant un "s" ou un "1" à cmdline.txt. Non testé par moi.

 

Comment puis-je sortir du monomode ?

Type

quitter

 

Que se passe-t-il après la vérification du mode unique ?

Notre réponse fait référence uniquement au mode de démarrage RAM ("sans disque") d'Alpine Linux.

Les opérations suivantes ne sont effectuées qu'après la vérification du mode unique, vous devrez donc les exécuter manuellement si vous le souhaitez :

  • un tmpfs est monté sur /sysroot ($sysroot)
  • l'emplacement d'apkovl est configuré - par défaut, si vous n'avez pas spécifié le paramètre noyau apkovl, nlplug-findfs aura essayé de le localiser pour vous sur votre support de démarrage.
    • Comme nous l'avons vu précédemment, vous avez également la possibilité de l'obtenir via http, etc.
  • le paramètre pkgs du noyau est analysé - vous pouvez spécifier des paquets supplémentaires ici, que le système doit installer.
    • ce paramètre est utile en colloboration avec alpine_repo - vous permettant d'injecter des paquets supplémentaires dans Alpine.
  • l'apkovl est déballé
  • si le fichier /sysroot/etc/.default_boot_services existe ou si l'emplacement dans apkovl n'est pas un fichier, alors les services de démarrage par défaut seront mis en place, et le fichier sera supprimé (il ne sera donc pas persistant dans apkovl lorsque vous ferez lbu commit)

if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ] ; then
# ajoute certains services de démarrage par défaut
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

  • le code pour l'exécution d'un écran d'accueil est exécuté
  • il est vérifié si /sysroot/etc/fstab existe, et conditionnellement à cela relocate_mount est exécuté
  • alpine-base est toujours inclus dans les paquets qui vont être installés.
  • apk est préparé
    • optionnellement, le réseau est configuré pour que apk puisse tirer les paquets à travers le réseau.
    • il est également informé que les paquets sont en cours d'installation en mode -initramfs-diskless-boot, et il lui est demandé d'afficher -progress
    • si quiet est défini, alors l'apk est prié de rester -quiet
  • les paquets sont installés sur le système de fichiers racine
  • si l'option kernel ssh_key est donnée, openssh est ajouté aux paquets et comme service
    • veuillez noter que vous devez toujours passer la clé - cela se fera soit par un fichier dans votre apkovl ou par une autre méthode.
    • En tant que telle, l'option ssh_key peut être une sorte de solution de repli si vous avez désactivé ssh et que vous souhaitez le récupérer.
  • Enfin, la racine est basculée dans le nouveau système qui est construit à partir des paquets et de l'apkovl.

 

Note, pour tous ceux qui se demandent ce que le paramètre noyau keep_apk_new est censé faire :

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

Veuillez vous référer au fichier init dans l'initramfs pour plus de détails.

 

Références :

 

Nous sommes à louer

Si vous cherchez à résoudre votre problème avec Alpine Linux, et que vous voulez consulter nous sommes à louer.