AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 789898
Accepted
Gabriel
Gabriel
Asked: 2025-01-21 03:55:26 +0800 CST2025-01-21 03:55:26 +0800 CST 2025-01-21 03:55:26 +0800 CST

Inicializando imagem Linux funcional UEFI / PXE / GRUB

  • 772

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)insira a descrição da imagem aqui

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. insira a descrição da imagem aqui

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. insira a descrição da imagem aqui

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.

grub2
  • 2 2 respostas
  • 71 Views

2 respostas

  • Voted
  1. telcoM
    2025-01-23T22:47:29+08:002025-01-23T22:47:29+08:00

    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:

    root=/dev/nfs nfsroot=192.168.20.1:openSUSE-Leap-15.5-x86_64/rootfs
    

    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

    mount 192.168.20.1:openSUSE-Leap-15.5-x86_64/rootfs /mnt
    

    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/exportsno 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/systemdapós alternar para o sistema de arquivos raiz real, que no seu caso seria o compartilhamento NFS. Então, se você executou o mountcomando 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/exportsprecisaria ter uma entrada como:

    /srv/tftpboot/openSUSE-XXX/rootfs    *(rw,no_root_squash)
    

    Você teria que correr exportfs -apara torná-lo eficaz.

    Então, sua nfsroot=opção deve ser:

    nfsroot=192.168.20.1:/srv/tftpboot/openSUSE-XXX/rootfs
    

    e o comando test mount, respectivamente:

    mount 192.168.20.1:/srv/tftpboot/openSUSE-XXX/rootfs /mnt
    

    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.

    • 0
  2. Best Answer
    Gabriel
    2025-02-21T06:18:36+08:002025-02-21T06:18:36+08:00

    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:

    • Servidor DHCP: opção 93 , opções next-server e filename em dhcpd.conf (além de todos os requisitos mínimos para configurar um servidor DHCP).
    • Servidor TFTP: Para baixar arquivos do carregador de boot. No meu caso, bootx64.efi e grub.cfg . Kernel, initrd e sistema de arquivos root TAMBÉM SÃO carregados do servidor TFTP - pelo menos com minha configuração -. Há uma opção para carregar o sistema de arquivos via ATA sobre Ethernet, mas eu não a usei.

    Boa sorte e boas (longas) leituras :)

    • 0

relate perguntas

  • Não é possível inicializar o USB de inicialização múltipla ao vivo do Linux em UEFI

  • grub2-mkconfig não está gerando caminhos de montagem corretos (e também como faço para me livrar de kernels extras que não uso mais?)

  • Como encontrar o logon do kernel panic no debian

  • Ctrl + C não funciona no modo de usuário único no Linux

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve