Estou tentando configurar um servidor para inicializar o opensuse-15.5 via PXE em um ambiente UEFI e GRUB2. Encontrei este tutorial para Suse que funcionou muito bem. Tenho um cliente obtendo um endereço IP, baixando alguns arquivos do TFTP na mesma máquina e também tenho um servidor NFS configurado.
O problema é que todo tutorial que encontrei parece focar na instalação de um novo SO no cliente, e não é disso que preciso. O que preciso é que um SO bem básico e minimalista seja carregado para poder executar alguns comandos do terminal. Nada mais. Não preciso carregar uma imagem Live ou executar um instalador.
Seguindo as instruções do tutorial, cheguei ao ponto em que o cliente falha ao conectar-se aos repositórios para iniciar a instalação do SO. O que fiz depois disso foi substituir as imagens initrd e linux por aquelas que obtive de uma instalação do SO no mesmo cliente que estou tentando inicializar. Além disso, fiz uma imagem do sistema de arquivos raiz no cliente (a mesma instalação) e a coloquei no servidor, para torná-la acessível por NFS. Depois disso, o resultado foi que o cliente carregou initrd , depois linux , mas parou antes de terminar em um ponto em que (provavelmente) está tentando configurar a placa de vídeo. A linha menciona drm e i915 (Desculpas, não tenho o cliente na minha frente agora, mas atualizarei com a mensagem correta amanhã).
Não tenho certeza nem da imagem do Linux que preciso carregar e dos parâmetros que preciso passar para o GRUB para fazer tudo funcionar. Tenho tentado entender no manual do GRUB e em outras fontes, mas tenho mais perguntas do que certezas. Alguém pode me dizer...: quais comandos devo adicionar ao grub.cfg (e quais devo me livrar)? qual imagem do Linux devo usar? e provavelmente qualquer fonte de informação que venha à mente?
Muito obrigado pelo seu tempo.
Olá.
EDIT: O ponto de travamento não tinha nada a ver com graphics/drm/i915. A última mensagem exibida (por cerca de um minuto) mostraria graphics/drm/i915, mas o problema seria imediatamente depois disso, no hook dracut initqueue . Pelo que entendi, ele de alguma forma começaria a procurar por um memory stick que foi montado e incluído no fstab no momento de fazer a imagem da partição raiz com dd .
Depois de refazer a imagem (e enviá-la ao servidor via NFS desta vez), posso ver que o problema foi resolvido (veja a imagem)
O problema agora, como visto na próxima imagem, está no estágio de raiz do switch . O que eu realmente não sei o significado, mas vou pesquisar um pouco sobre.
A próxima imagem é net/grub.cfg . Eu editei esse arquivo e me livrei dos comandos install e instsys porque pensei que eles eram irrelevantes (já que não estou tentando instalar um SO). Eu também tentei esse grub.cfg sem os comandos root e nfsroot que (de acordo com meu entendimento) usariam o sistema de arquivos no disco rígido, em vez do do servidor, e toda a configuração parece funcionar. É somente quando ele precisa obter o sistema de arquivos raiz do servidor NFS que eu tenho o erro na segunda imagem. Desculpas, a terceira imagem está borrada.
Neste ponto, imagino que haja algo errado com o sistema de arquivos. Fiz a imagem com dd , movi-a para o servidor e montei-a com mount -o loop /image /srv/tftpboot/openSUSE-XXX/rootfs . Li que não é a mesma coisa criar uma imagem de uma partição do que criar uma imagem de um disco inteiro. Além disso, o btrfs é de alguma forma especial em relação à criação de imagens. Existe uma maneira específica de fazer isso? Desculpas pela demora para atualizar. Obrigado novamente por sua ajuda e tempo para comentar.
O kernel do Linux está instalado e funcionando, então o trabalho do GRUB está feito. O próximo passo é para o kernel e quaisquer ferramentas e scripts incluídos no arquivo initrd/initramfs montar o sistema de arquivos raiz real e fazer a transição do kernel para usá-lo.
Você especificou parâmetros de inicialização do kernel para a raiz NFS:
Isso significaria que o sistema 192.168.20.1 teria que ter uma estrutura de diretório raiz válida exportada para compartilhamento por NFS. Se estiver usando NFSv4, provavelmente teria que estar em
/srv
, por exemplo, em/srv/openSuSE-Leap-15.5-x86_64/rootfs/
, a menos que você tenha configurado o compartilhamento NFSv4 de uma forma não padrão. Com NFSv3, teria que estar literalmente em/openSuSE-Leap-15.5-x86_64/rootfs/
e exportado como tal em/etc/exports
.Basicamente, você deve ser capaz de montá-lo para teste/verificação com
de qualquer Linux ou outro computador unix-like moderno que tenha permissão para montar esse compartilhamento NFS (conforme ditado pelas opções em
/etc/exports
no host 192.168.20.1). Após executar esse comando com sucesso, você deve ver diretórios como/mnt/bin/
,/mnt/lib/
,/mnt/sbin/
,/mnt/usr/
e/mnt/var/
com o conteúdo esperado. Também deve haver diretórios vazios em/mnt/dev/
,/mnt/proc/
e/mnt/sys/
, prontos para atuar como pontos de montagem para sistemas de arquivos virtuais devtmpfs, procfs e sysfs, respectivamente.Se você tiver desmontado a árvore de diretórios, o initramfs/initrd padrão do SuSE tentaria executar
/usr/lib/systemd/systemd
após alternar para o sistema de arquivos raiz real, que no seu caso seria o compartilhamento NFS. Então, se você executou omount
comando de teste listado acima,/mnt/usr/lib/systemd/systemd
é melhor estar lá, ou então a transição para o sistema de arquivos raiz montado no NFS falharia exatamente como está acontecendo para você agora.Mas você realmente montou a imagem do sistema de arquivos em
/srv/tftpboot/openSUSE-XXX/rootfs
, então você/etc/exports
precisaria ter uma entrada como:Você teria que correr
exportfs -a
para torná-lo eficaz.Então, sua
nfsroot=
opção deve ser:e o comando test mount, respectivamente:
Como o sistema de arquivos raiz será acessado pela rede usando o protocolo NFS, o tipo do sistema de arquivos subjacente real (btrfs ou qualquer outro) no servidor NFS é essencialmente irrelevante, desde que ele suporte permissões e propriedades de arquivo no estilo Unix.
A propósito, por favor, não poste fotos de texto quando puder evitar. Com suas duas primeiras fotos, é um tanto desculpável, pois capturar a saída de inicialização em forma de texto pode ser difícil, a menos que você já esteja familiarizado com consoles seriais. Mas com sua terceira foto, essa desculpa não se aplica.
Temos aqui várias pessoas muito bem informadas com problemas de visão que tornam as imagens de texto difíceis de ler ou completamente inúteis para elas. Ao postar imagens de texto, você opta por não receber os conselhos delas e torna sua postagem menos útil para outros leitores com problemas de visão.
Não vou entrar em detalhes porque há coisas que realmente não consigo entender. Mas tentarei explicar o que fiz para que funcionasse e provavelmente fornecer alguma orientação para qualquer um que esteja enfrentando o mesmo problema.
Em primeiro lugar, é importante estabelecer se será PXE sobre BIOS ou UEFI. Até onde eu entendo, - e estritamente falando -, o último não existe realmente ou é realmente chamado de forma diferente. Para uma pessoa sem conhecimento, artigos na internet podem ser enganosos a esse respeito. No meu caso, o carregador de boot é GRUB. E dependendo se você está realmente em BIOS ou UEFI, não apenas os arquivos que o GRUB precisa são diferentes, mas também são as estruturas de diretório, nomes e extensões de arquivos.
O SUSE/OpenSUSE tem alguns tutoriais e pacotes que tornam a configuração do servidor bem direta. O problema surge quando você precisa decidir que tipo de inicialização precisa. A maioria dos tutoriais que encontrei são focados na inicialização para fins de instalação de um SO, mas se o que você precisa é apenas inicializar uma máquina sem disco - provavelmente apenas para executar alguns comandos - você não estará interessado no sistema executando um instalador depois que ele terminar de carregar o SO. Este foi o meu caso.
Depois que você conseguir chamar o GRUB, as partes complicadas serão duas:
Primeiro, você precisa encontrar uma imagem de kernel, initrd e sistema de arquivos raiz que funcionem juntos . Meu erro foi acreditar que simplesmente copiar os dois primeiros de uma instalação funcional e fazer uma imagem do sistema de arquivos raiz (na mesma instalação) para ser montado via NFS, deveria ser o suficiente para inicializar via rede. Não foi.
Segundo, quais parâmetros precisam ser passados para o kernel quando carregado do GRUB.
Solução: Como mencionei antes, decidir exatamente que tipo de sistema você quer inicializar é primordial. Entender as diferenças entre as diferentes opções é essencial. No site de documentação da SUSE, o KIWI-NG é um software que torna a criação da imagem do kernel, initrd e sistema de arquivos raiz bem fácil em apenas algumas etapas. Ele usa um arquivo XML para configurar o processo de construção. Os documentos são muito bem explicados e atualizados. A partir daí, é bem fácil descobrir exatamente o tipo de sistema que você precisa e como criá-lo. Há também alguns exemplos já configurados e prontos para serem construídos. O resultado do processo de construção é um sistema de arquivos do tipo escolhido, contendo tudo o que você precisa para inicializar via rede. Kernel e initrd incluídos. Como o KIWI-NG usa o Dracut para criar o initrd, há alguns parâmetros da linha de comando do dracut a serem adicionados à linha do kernel no GRUB. Isso depende do tipo de sistema que você está tentando inicializar. Aconselho ler um pouco do Dracut, mas não tê-lo como referência. As opções que eu precisava encontrei em um fórum, pois achei difícil entender a documentação do Dracut.
Minha configuração final é a seguinte:
Boa sorte e boas (longas) leituras :)