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 sysinitrc_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 bootrc_add mount-ro shutdown
rc_add killprocs shutdown
rc_add savecache shutdownrc_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:
- https://ss64.com/bash/test.html Página útil para entender melhor o arquivo init (scripting em ash / bash)
Estamos para alugar
Se você está procurando resolver seu problema com o Linux Alpino, e quer consultoria estamos para alugar.