I. Kernel panic - not syncing: VFS: Unable do mount root fs on unknown-block(1,0)
No filesystem could mount root, tryed: reiserfs ext3 cramfs vfat romfs iso9660
Kernel panic - not syncing: VFS: Unable do mount root fs on unknown-block(1,0)
Provavelmente o initramfs está completamente vazio, sem uma estrutura de diretórios mínima para funcionar. A chance maior é que não exista uma pasta initramfs no mesmo diretório do build_initramfs do LBE. O mesmo até avisa que não existe a pasta, mas continua seu trabalho mesmo assim, gerando o arquivo que posteriormente vai dar nessa mensagem de erro.
II. Kernel panic - not syncing: No init found. Try passing init= option to kernel.
Failed do execute /init
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
Neste ponto, significa que a estrutura do initramfs está de acordo, mas o sistema não conseguiu executar o /init porque provavemente não foi encontrado uma forma de executá-lo. Você pode abrir o seu initramfs.gz que está dentro de /tftpboot/lts/<kernel> e verificar se o busybox está corretamente instalado dentro dele.
Para abrir o initramfs:
# cp initramfs.gz initramfs.tmp.gz
# gunzip initramfs.tmp.gz
# mkdir tmp
# cd tmp
# cpio -id < ../initramfs.tmp
# cd bin
# ls
Se não houverem arquivos nessa pasta, provavelmente o busybox não está instalado nessa estrutura. Instale o busybox ou utilize a estrutura de um kernel 2.6 como descrito anteriormente.
A estrutura básica, porém vazia (sem busybox), pode ser criada à partir da execução do script install.sh dentro de /lbe/initramfs-src/initramfs_tree/initramfs_tree.
III. Kernel panic - not syncing: Attempted do kill init!
Running /linuxrc
Mounting /proc
ERROR! Could not automatically detect the network card.
PCI cards should be detected automatically...
Kernel panic - not syncing: Attempted do kill init!
Este erro diz que não foi possível encontrar a sua placa de rede. É simples de se revolver.
A explicação é que até esse momento quem tinha o IP da máquina era o PXE da própria BIOS. Daqui em diante, o Sistema Operacional vai fazer uma nova consulta no DHCP utilizando os próprios drivers do kernel.
Acontece que mesmo compilando alguns drivers diretamente no kernel, o sistema não reconhece automaticamente algumas placas (principalmente as baseadas no chipset Realtek 8169, muito comuns hoje em dia). Então, é interessante ter o driver r8169 compilado como módulo e subindo manualmente para a sua máquina.
Para que isto ocorra, basta que avisemos ao PXE para subir este módulo para esta placa de rede durante o boot.
Primeiramente anote o MAC desta placa de rede. Suponhamos que ele seja 00:1f:d0:f2:fa:06.
# cd /tftpboot/lts/<kernel>/pxelinux.cfg
# cp default 01-00-1f-d0-f2-fa-06
# vim 01-00-1f-d0-f2-fa-06
Adicione NIC=r8169 (ou o driver que achar melhor) à linha do append. Os drivers de placas de rede disponíveis no seu kernel (desde que compilados como módulos) podem ser encontrados em /lib/modules/<versão do kernel>/drivers/net.
# append rw root=/dev/ram0 initrd=initramfs.gz NIC=r8169
IV. sh: line 1: /etc/rc.early_sysinit: No such file or directory
SwitchRoot v.0.1 - Copyright © 2005
Linux Based Systems Design
Freeing ram used by initramfs
sh: line 1: /etc/rc.early_sysinit: No such file or directory
Este talvez tenha sido o erro mais difícil de resolver. Os kernels do LSTP versão 2.4 utilizavam no seu initrd o programa pivot_root. Seu papel básico é passar da estrutura do ramdisk para a estrutura do LTSP em si. Depois que o LTSP adotou os kernels 2.6, ele passou a utilizar o programa switchroot, que está dentro da estrutura do initramfs, na pasta sbin.
# cd <caminho_do_build_initramfs_do_LBE>/initramfs/sbin
# strings switchroot
Podemos ver que é ele quem chama o arquivo rc.early_sysinit, inexistente nas estruturas do LTSP 4.2 e LTSP 5 do Ubuntu.
Depois de muito tempo pude encontrar o conteúdo desse arquivo, dentro do site do próprio LTSP. O problema é que nesse documento, ele faz referência ao arquivo rc.earlysysinit, ao invés de rc.early_sysinit. Isso dificulta muito encontrar o arquivo.
Seu conteúdo original pode ser encontrado na página:
É necessário criar ou atualizar os arquivos rc.early_sysinit e rc.sysinit em /<caminho_do_ltsp>/i386/etc. Esses arquivos podem ser encontrados no Anexo I.
V. Unrecognized option: vttty1
Fatal server error:
Unrecognized option: vttty1
Esse erro ocorre no carregamento do X, que não consegue identificar o display onde ele deve ser carregado. Existem duas formas de resolver: forçando o parâmetro vt em 1 e display em :0.0 ou fazendo uma alteração na variável TTY dentro do startx.
# cd /<diretório do ltsp>/i386/etc/screen.d
# vim startx
Alterar a variável:
# TTY=`/usr/bin/basename \`/usr/bin/tty\``
para:
# TTY=`/usr/bin/basename \`/usr/bin/tty\` | sed s/tty//`
O sed retira esse "tty" a mais, fazendo com o parâmetro vt carregue adequadamente a variável do display.
# /usr/X11R6/bin/${XBINARY} ${ACC_CTRL} \
# ${XF_ARGS} \
# -xf86config ${XFCFG} \
# vt${TTY} ${DISP} >/dev/null 2>&1
Pode-se, alternativamente, substituir vt${TTY} ${DISP} por vt1 :0.0, forçando o parâmetro.