Depuración del proceso de arranque de Alpine

Como ya he comentado en mi entrada anteriorEl sistema Alpine Linux pasa por varias etapas cuando se inicia.

Justo después de montar el medio de arranque, y escanearlo en busca de apkovl's (con nlplug-findfs), hay una opción para que obtengas una consola, poniendo $SINGLEMODE en yes.

Establecer el modo único en sí es fácil, sólo tiene que añadir la palabra "solo" al cmdline.txt (si está en Raspberry Pi) / sus parámetros del kernel (si no está en Raspberry Pi):

módulos=loop,squashfs,sd-mod,usb-storage solo noquiet dwc_otg.lpm_enable=0 console=tty1

Tenga en cuenta que también he antepuesto la palabra "quiet" con "no" para deshabilitarla efectivamente - obtendrá más salida durante el arranque. (NB: esta es la forma en que se supone que debe hacerse, como se define en el script de inicio)

Una vez que arranca, esto lo llevará a una sesión de shell (con ash, el shell incorporado de busybox).

Nota: si ha establecido el parámetro de kernel raíz, para especificar un sistema de archivos raíz desde el que arrancar, su consola se monta antes de la partición raíz está montada - probablemente para que puedas depurar mejor.

Este modo único es muy útil para probar configuraciones de arranque y depurar problemas de arranque, y experimentar con el sistema y sus capacidades (que vienen totalmente del initramfs y del kernel).

no se puede acceder a tty error

El siguiente error se produce cuando se activa el modo individual:

sh: no se puede acceder a tty: control de trabajo desactivado

Parece estar relacionado con las capacidades de sh, y la forma en que se ejecuta - no hay necesidad de alarmarse.

El teclado USB no funciona

Al principio, el teclado USB no me funcionaba; no estoy seguro de cuál es el motivo. Después de varios ciclos de encendido empezó a funcionar. Tal vez no se puede conectar a través de KVM.

En cualquier caso, sigue probando, debería funcionar. Trate de escribir inmediatamente cuando la advertencia sh viene ...

En la Pi 3B+ el teclado no funciona; sólo funciona en una Pi 3A+. Sospecho que esto se debe al Hub USB interno adicional de la Pi 3B+ - por favor, intenta usar una Pi 3A+ para depurar en modo simple. (Lo sé, no es ideal para las configuraciones de red).

¿Hay una forma más corta de activar el modo individual? Me da pereza

Estas son sus opciones:

s|simple|1

Así que usted debe ser capaz de entrar en el modo individual mediante la adición de una "s" o un "1" a la cmdline.txt. No lo he probado.

 

¿Cómo puedo salir del modo único?

Tipo

salir

 

¿Qué ocurre después de la comprobación del modo único?

Nuestra respuesta se refiere a sólo al modo de arranque RAM ("sin disco") de Alpine Linux.

Las siguientes operaciones se realizan sólo después de la comprobación del modo único, por lo que tendrá que ejecutarlas manualmente si lo desea:

  • se monta un tmpfs en /sysroot ($sysroot)
  • la ubicación de apkovl está configurada - por defecto, si no ha especificado el parámetro de kernel apkovl, nlplug-findfs habrá intentado localizarlo por usted en su medio de arranque
    • existe, como se ha comentado anteriormente, también la opción de obtenerlo vía http, etc.
  • se analiza el parámetro del núcleo pkgs - puede especificar aquí paquetes adicionales que el sistema debería instalar
    • este parámetro es útil en colaboración con alpine_repo - permitiendo inyectar paquetes adicionales en Alpine
  • el apkovl está desempaquetado
  • si el archivo /sysroot/etc/.default_boot_services existe o la ubicación del apkovl no es un archivo, entonces los servicios de arranque por defecto serán configurados, y el archivo será eliminado (por lo que no se mantendrá en el apkovl cuando se haga lbu commit)

if [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; then
# añade algunos servicios de arranque por defecto
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

  • el código para ejecutar una pantalla de bienvenida se ejecuta
  • se comprueba si /sysroot/etc/fstab existe, y condicionado a ello se ejecuta relocate_mount
  • alpine-base se incluye siempre en los paquetes que se van a instalar
  • apk está preparado
    • opcionalmente se configura la red para que apk pueda sacar los paquetes a través de la red
    • también se le indica que los paquetes se están instalando en modo -initramfs-diskless-boot, y se le indica que muestre -progress
    • si se establece quiet, entonces se le dice a apk que permanezca -quiet
  • los paquetes se instalan en el sistema de archivos raíz
  • si se da la opción del kernel ssh_key, openssh se añade a los paquetes y como servicio
    • Tenga en cuenta que todavía tiene que pasar en la clave - esto sucederá ya sea a través de un archivo en su apkovl o algún otro método
    • como tal, la opción ssh_key podría ser una especie de recurso si has desactivado ssh y quieres volver a tenerlo.
  • finalmente la raíz se cambia al nuevo sistema que se construye a partir de los paquetes y el apkovl

 

Nota, para cualquiera que se pregunte qué se supone que hace el parámetro del kernel keep_apk_new:

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

Por favor, consulte el archivo init en el initramfs para más detalles.

 

Referencias:

 

Estamos de alquiler

Si quieres solucionar tu problema con Alpine Linux, y quieres asesoramiento estamos en alquiler.