Depuração do processo de boot alpino

Como discutido no meu cargo anteriorO Linux Alpino passa por várias fases quando arranca.

Logo após montar a mídia de inicialização, e escaneá-la para apkovl (com nlplug-findfs), há uma opção para você obter uma console, definindo $SINGLEMODE para sim.

Definir SINGLEMODE para sim é fácil, você simplesmente acrescenta a palavra "único" para o cmdline.txt (se no Raspberry Pi) / seus parâmetros de kernel (se não no Raspberry Pi):

módulos=loop,squashfs,sd-mod,usb-storage único noquiet dwc_otg.lpm_enable=0 consola=tty1

Note que eu também prefiro a palavra "quiet" (silêncio) sem a desativar efetivamente - você terá mais saída durante o boot. (NB: esta é realmente a forma como isto deve ser feito, como definido no init script)

Uma vez iniciado, isto irá deixá-lo em uma sessão de shell (com ash, a shell embutida da busybox).

Nota: se você definiu o parâmetro do kernel raiz, para especificar um sistema de arquivos raiz a partir do qual você inicializa, seu console é montado antes de a partição raiz está montada - provavelmente para que você possa melhor depurá-la você mesmo.

Este modo único é muito útil para tentar configurações de inicialização e depuração de problemas de inicialização, e experimentar com o sistema e suas capacidades (que vêm inteiramente do initramfs e do kernel).

não pode acessar o erro tty

O seguinte erro é lançado quando o modo Simples é activado:

sh: não pode acessar o tty: o controle de trabalho está desligado

Parece estar relacionado com as capacidades da sh, e como ela é executada - não há necessidade de se alarmar.

O teclado USB não funciona

No início, o teclado USB não funcionava para mim; não tenho a certeza de qual é a razão para isto. Depois de vários ciclos de energia ele começou a funcionar. Talvez não possa ser ligado via KVM.

Em qualquer caso, continue tentando, deve funcionar. Tente digitar imediatamente quando chegar o aviso de sh...

No Pi 3B+ o teclado não funciona; ele só funciona em um Pi 3A+. Eu suspeito que isso se deve ao hub USB interno adicional no Pi 3B+ - por favor tente usar um Pi 3A+ para depurar em modo simples. (Eu sei, não é ideal para configurações de rede).

Existe uma forma mais curta de activar o modo único? Eu sou preguiçoso.

Estas são as suas opções:

s|single|1

Portanto, você deve ser capaz de entrar no modo single adicionando um "s" ou um "1" ao cmdline.txt. Não testado por mim.

 

Como posso sair de modo único?

Tipo

saída

 

O que acontece depois da verificação de modo único?

A nossa resposta refere-se somente para o modo de inicialização RAM ("diskless") do Linux Alpino.

As seguintes operações são feitas somente após a verificação do modo único, portanto você terá que executá-las manualmente se quiser:

  • um tmpfs é montado em /sysroot ($sysroot)
  • a localização do apkovl está configurada - por padrão, se você não especificou o parâmetro do kernel apkovl, o nlplug-findfs terá tentado localizá-lo para você em sua mídia de boot
    • há, como discutido anteriormente, também a opção de você obtê-lo via http, etc.
  • o parâmetro do kernel pkgs é analisado - você pode especificar pacotes adicionais aqui, que o sistema deve instalar
    • este parâmetro é útil na coloboração com o alpine_repo - permitindo-lhe injectar pacotes adicionais no Alpine
  • o apkovl é desempacotado
  • se o arquivo /sysroot/etc/.default_boot_services existir ou a localização do apkovl não for um arquivo, então os serviços de inicialização padrão serão configurados, e o arquivo será removido (para que não persista no apkovl quando você fizer commit do lbu)

se [ -f "$sysroot/etc/.default_boot_services" -o ! -f "$ovl" ]; então
# adiciona alguns serviços de inicialização por padrão
rc_add devfs sysinit
rc_add dmesg sysinit
rc_add mdev sysinit
rc_add hwdrivers sysinit
rc_add modloop sysinit

rc_add hwclock boot
inicialização dos módulos rc_add
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

  • código para executar uma tela de respingo é executado
  • é verificado se o /sysroot/etc/fstab existe, e condicionalmente nesse relocate_mount é executado
  • A base alpina está sempre incluída nos pacotes que vão ser instalados
  • apk está preparado
    • opcionalmente a rede é configurada para que o apk possa puxar os pacotes através da rede
    • também é dito que os pacotes estão sendo instalados no modo -initramfs-diskless-boot, e dito para exibir -progress
    • se o sossego estiver pronto, então o apk é aconselhado a ficar -sossegado
  • Os pacotes são instalados no sistema de arquivos raiz
  • se a opção ssh_key do kernel for dada, o openssh é adicionado aos pacotes e como um serviço
    • por favor note que você ainda precisa passar na chave - isso acontecerá através de um arquivo em seu apkovl ou algum outro método
    • como tal, a opção ssh_key pode ser uma espécie de recuo se você tiver desligado o ssh e o quiser de volta.
  • finalmente a raiz é mudada para o novo sistema que é construído a partir dos pacotes e do apkovl

 

Nota, para quem estiver se perguntando o que o parâmetro keep_apk_new kernel deve fazer:

se [ "$KOPT_keep_apk_new" != sim ]; então
apkflags="$apkflags -clean-protected"
[ -n "$ovlfiles" ] && apkflags="$apkflags -overlay-from-stdin"
fi

Consulte o arquivo initramfs para obter mais detalhes.

 

Referências:

 

Estamos para alugar

Se você está procurando resolver seu problema com o Linux Alpino, e quer consultoria estamos para alugar.