Conclusões
- 2992
- 152
- Enrique Crist
PXE (ambiente de execução de pré-boot) é um ambiente cliente-servidor que possibilita a inicialização e instalação de sistemas operacionais sem a necessidade de mídia física. A ideia principal é bastante simples: em um estágio muito inicial, um cliente recebe um endereço IP de um servidor DHCP e baixa os arquivos necessários para executar o processo de inicialização via tftp Protocolo (FTP trivial). Neste tutorial, usaremos o Dnsmasq
Aplicação: pode ser usado como um servidor DHCP primário ou em Proxy DHCP modo se houver outro servidor DHCP na rede; Ele também fornece o serviço TFTP usado para transferir arquivos.
Neste tutorial, você aprenderá:
- Como configurar o pxelinux e criar um menu de inicialização
- Como extrair arquivos de um ISO e configurar a estrutura de arquivo apropriada
- Como configurar o dnsmasq como um servidor DHCP padrão ou proxy
- Como configurar o servidor TFTP incorporado em dnsmasq
- Como permitir o tráfego através das portas necessárias usando UFW
Requisitos de software e convenções usadas
Categoria | Requisitos, convenções ou versão de software usada |
---|---|
Sistema | Raspberry Pi OS (anteriormente conhecido como Raspbian) |
Programas | Dnsmasq, pxelinux, syslinux-efi |
Outro | Permissões de raiz |
Convenções | # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular |
Instalando pacotes
A primeira coisa que devemos fazer é instalar alguns pacotes essenciais:
- Dnsmasq
- pxelinux
- Syslinux-Efi
Dnsmasq fornece o DHCP e o tftp Serviços; Pxelinux é um membro do carregador de inicialização do SysLinux família, e é projetada especificamente para o ambiente PXE; O pacote syslinux-efi_ contém bibliotecas necessárias para apoiar Efi clientes. Para instalar os pacotes no Raspberry Pi OS, podemos executar:
$ sudo apt-get update && sudo apt-get install dnsmasq pxelinux syslinux-efi
Estrutura de arquivo
Depois que os pacotes necessários forem instalados, podemos prosseguir e configurar a estrutura do arquivo. Para o bem deste tutorial, a raiz de toda a configuração será o /mnt/data/netboot
diretório, que também será usado como o tftp root (definido dentro do arquivo de configuração DNSmasq); Todos os arquivos necessários serão armazenados dentro dele.
Arquivos e módulos SysLinux
Queremos poder apoiar a inicialização dos clientes em BIOS e Efi Modo, portanto, a primeira coisa que precisamos fazer é criar dois diretórios com o nome das arquiteturas dentro /mnt/data/netboot
:
$ mkdir/mnt/data/netboot/bios, efi64
Cada arquitetura precisa de algumas bibliotecas específicas do SysLinux para funcionar. Nós os copiamos nos diretórios apropriados:
$ cp \/usr/lib/syslinux/modules/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/libs/syslinux/modules/efi64/ldlinux.e64 \/usr/lib/syslinux/modules/efi64/vesamenu, libcom32, libutil.C32 \/usr/lib/syslinux.EFI/EFI64/SYSLINUX.efi \/mnt/data/netboot/efi64
Arquivos de distribuição
Neste ponto, precisamos criar o diretório que hospedará as distribuições que queremos disponibilizar em nosso menu de inicialização. Vamos chamá -lo bota
:
$ mkdir/mnt/data/netboot/bota
Neste tutorial, exatamente como exemplo, trabalharemos com uma imagem do Debian Netinstall. Por conveniência, suponho que um ISO verificado anteriormente (dê uma olhada em nosso artigo sobre como verificar a integridade e a assinatura de uma imagem de distribuição com GPG se quiser saber como verificar a integridade e a assinatura de uma imagem de distribuição) para estar disponível no sistema de arquivos RPI no /mnt/dados/isos
diretório.
Criamos o caminho apropriado dentro /mnt/data/netboot/bota
, Nomeação de diretórios após a arquitetura, nome e versão do sistema que queremos fornecer em nosso menu (neste caso AMD64 - Debian 10):
$ mkdir -p/mnt/data/netboot/boot/amd64/debian/10
Essa escolha de caminho é arbitrária, então fique à vontade para criar o seu próprio. Neste ponto, devemos montar o ISO de distribuição e copiar os arquivos no diretório de destino. Para montar o ISO que corremos:
$ sudo monte -o loop -t iso9660/mnt/data/isoS/Debian -10.4.0-AMD64-NETINST.iso /mídia
Depois que o ISO estiver montado, seus arquivos estarão acessíveis em /meios de comunicação
. Eu gosto de usar rsync Para copiá -los:
$ sudo rsync -av/mídia//mnt/data/netboot/boot/amd64/debian/10
Depois que os arquivos são copiados, podemos desmontar o ISO:
$ sudo umount /mídia
Na próxima etapa, veremos como criar um menu de inicialização usando a sintaxe syslinux.
Criando o menu de inicialização
Agora que temos os arquivos de distribuição, podemos criar o menu de inicialização. dentro do nosso TFTP Root, (/mnt/data/netboot
no nosso caso), criamos o pxelinux.cfg
diretório:
$ mkdir/mnt/data/netboot/pxelinux.cfg
Dentro de pxelinux.cfg
diretório, criamos um arquivo chamado padrão
e cole a seguinte configuração dentro dela:
Menu Título PXE Boot Menu Vesamenu padrão.C32 Label Local Rótulo Bot de gravadora da unidade local Localboot 0xffff Menu Comece a Amd64 Título do menu AMD64 BEGN DEBIAN MENU Título Debian Label Stret.AMD/VMLINUZ APENDE VGA = 788 initrd = :: boot/amd64/debian/10/install.AMD/GTK/Initrd.GZ --- Rótulo silencioso Rótulo do menu Instalar ^Instalar kernel :: boot/amd64/debian/10/instalar.AMD/VMLINUZ APENDE VGA = 788 initrd = :: boot/amd64/debian/10/install.AMD/initrd.GZ --- Menu de término tranquilo final do menu
A configuração acima gerará um menu aninhado construído seguindo o caminho do diretório que criamos dentro do bota
diretório. Novamente, o acima é apenas um exemplo. Você pode criar e estruturar o menu como desejar; Tudo o que você precisa fazer é usar a sintaxe apropriada, conforme explicado na página dedicada do Wiki SysLinux.
O menu contém uma entrada para deixar o usuário inicializar do disco rígido local, um submenu com o AMD64 etiqueta e duas entradas para a distribuição Debian, installgui e instalar. O primeiro lança o instalador de distribuição no modo gráfico, o último em um modo textual que parece usar ncurses Bibliotecas.
Como podemos saber os parâmetros exatos a serem usados no NÚCLEO e ACRESCENTAR linhas? Podemos dar uma olhada na configuração do menu que existe dentro do conteúdo de distribuição que extraímos do ISO. No nosso caso, por exemplo, /mnt/data/netboot/boot/amd64/debian/10/isolinux/menu.cfg
. Infelizmente, nem todas as distribuições usam a mesma sintaxe; portanto, devemos prestar atenção e adaptar a configuração conforme necessário.
Uma coisa que tivemos que nos adaptar da configuração original é o caminho do vmlluz
e initrd.gz
arquivos. Lembre -se de que estamos acessando esses arquivos via tftp!
Normalmente, o caminho dos arquivos é interpretado como relativo para o diretório raiz do TFTP, mas na configuração acima, como você pode observar, usamos o ::
sintaxe (por exemplo, escrevemos :: boot/amd64/debian/10/install.AMD/VMLINUZ
para referir a imagem do kernel). Por que fizemos isso?
Desde que criamos dois diretórios que mantêm as bibliotecas que fornecem suporte para BIOS e efi64 modo e queremos usar a mesma configuração de menu para ambos, precisamos vincular o pxelinux.cfg
diretório em ambos, portanto, precisamos referir o tftp raiz de uma maneira "absoluta". O ::
O símbolo nos permite fazer exatamente isso: é uma maneira de fazer referência ao caminho absoluto para a raiz tftp.
Supondo que nosso diretório de trabalho atual seja /mnt/data/netboot
, Para vincular a configuração do menu nos diretórios mencionados acima, podemos emitir o seguinte comando:
$ ln -rs pxelinux.CFG BIOS && ln -rs pxelinux.CFG EFI64
Aqui usamos o -r
opção do ln
comando para criar relativo Links simbólicos. Neste ponto, nossa árvore de diretório deve ficar assim:
/mnt/data/netboot ├── BIOS │ ├── LDLINUX.C32 │ ├── Libcom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.0 │ ├── Pxelinux.CFG ->… /pxelinux.cfg │ └── Vesamenu.C32 ├── bota │ └── amd64 │ └── debian │ └─— 10 ├── efi64 │ ├── ldlinux.e64 │ ├── Libcom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.CFG ->… /pxelinux.cfg │ ├── syslinux.efi │ └── Vesamenu.C32 └── Pxelinux.CFG └── Padrão
Agora podemos configurar o dnsmasq.
Configure o dnsmasq
O arquivo de configuração do dnsmasq é /etc/dnsmasq.conf
. Alguns dos parâmetros que podem ser definidos dentro dele são comentados; Mais informações sobre eles podem ser encontradas consultando o Dnsmasq manual. Vamos considerar apenas os necessários para a nossa configuração.
Desativando a funcionalidade DNS
A primeira coisa que queremos fazer é desativar o serviço DNS incorporado em Dnsmasq: precisamos apenas das funcionalidades DHCP e TFTP oferecidas pelo aplicativo. Para atingir nosso objetivo, podemos usar o porta
Opção: é usado para determinar qual porta deve ser usada para DNS; definindo seu valor para 0
desativa o serviço. Podemos anexar a instrução no final do arquivo de configuração.
porta = 0
Especifique a interface de rede para solicitações de DHCP
A segunda coisa que queremos fazer é especificar a interface de rede que será usada para ouvir para solicitações DHCP. No nosso caso, a interface é eth0
, Então, escrevemos:
interface = eth0
Se não queremos usar uma interface específica, podemos especificar um endereço IP, usando o Ouça-se-address
opção em vez disso.
Especificando o intervalo IP/modo de proxy
Esta etapa de configuração é muito importante e as mudanças, dependendo da configuração da nossa rede.
Se o serviço DHCP fornecido por Dnsmasq for o único Na rede, nesta etapa, devemos simplesmente configurar o intervalo de endereços IP que serão atribuídos aos clientes e, opcionalmente, um tempo de arrendamento por exemplo:
DHCP-RANGE = 192.168.0.100.192.168.0.200,12h
Na linha acima, o intervalo de endereços IP disponíveis é definido separando os limites inferiores e mais altos por uma vírgula. Nesse caso, definimos um intervalo que vai de 192.168.0.100
para 192.168.200
; nós também definimos um tempo de arrendamento de 12h
.
O segundo caso é provavelmente o mais comum em uma configuração padrão/residencial, onde geralmente o serviço DHCP é fornecido por um roteador. Se for esse o caso, o dnsmasq deve ser definido para ser executado no modo proxy para evitar conflitos. Nesses casos, podemos escrever:
DHCP-RANGE = 192.168.0.0, proxy
Entramos em dois elementos separados por uma vírgula: o primeiro é o endereço da sub -rede (192.168.0.0
), o segundo é a palavra -chave "proxy".
Permitindo o servidor TFTP
Neste ponto, precisamos ativar o Dnsmasq Servidor TFTP incorporado: nós o usaremos para servir os arquivos necessários para os clientes inicializar. Tudo o que precisamos fazer para realizar esta tarefa é anexar a seguinte linha ao arquivo de configuração:
Ativar-tftp
Também devemos definir o diretório que deve ser usado como o TFTP Root. Este diretório, como já discutimos, hospedará os arquivos compartilhados. No nosso caso, este diretório é /mnt/data/netboot
(o padrão é /var/ftpd
):
tftp-root =/mnt/data/netboot
Defina o arquivo de inicialização com base na arquitetura do cliente
O pxelinux O BootLoader é capaz de trabalhar no modo EFI e BIOS, por isso temos que encontrar uma maneira de servir o arquivo apropriado, dependendo do modo usado pelo cliente. A questão é: como o cliente comunica essas informações?
O DHCP usa uma série de opções para troca de informações: opção 93
(Client-Arch) é usado para passar informações sobre a arquitetura do cliente. A tabela abaixo exibe os valores de opção numérica e string e as arquiteturas que eles fazem referência:
Valor da opção | Valor da string | Arquitetura |
---|---|---|
0 | x86pc | Intel x86pc |
1 | PC98 | NEC/PC98 |
2 | IA64_EFI | Efi Itanium |
3 | Alfa | DEC Alpha |
4 | ARC_X86 | Arco x86 |
5 | Intel_LEAN_CLIENT | Intel Lean Client |
6 | IA32_EFI | EFI IA32 |
7 | BC_EFI | Efi BC |
8 | Xscale_efi | EFI XSCALE |
9 | X86-64_EFI | EFI X86-64 |
Para especificar qual arquivo deve ser fornecido para o modo apropriado usado pelo cliente, podemos usar o PXE-Service
opção. Para x86pc Podemos entrar na seguinte linha:
PXE-Service = X86pc, "Pxelinux (BIOS)", BIOS/PXELinux
Fornecemos três valores separados por uma vírgula para a opção: o primeiro é o tipo de sistema do cliente (x86pc), o segundo é o Texto do menu e o terceiro é o arquivo que será baixado pelo cliente para executar a inicialização. O caminho do arquivo é em relação à raiz tftp. Nesse caso, é encontrado dentro do BIOS
diretório que criamos antes e é chamado pxelinux.0
: o nome deve ser relatado sem o .0
extensão, como você pode ver acima.
Para o EFI X86-64 modo, em vez disso, adicionamos:
PXE-Service = x86-64_EFI, "pxelinux (efi)", efi64/syslinux.efi
Configuração de log
Outra coisa que é útil para ativar é Dnsmasq registro, para acompanhar a atividade DHCP e TFTP. Para realizar esta tarefa, adicionamos o quadros de log
instrução para nossa configuração e defina o arquivo que deve ser usado para armazenar as mensagens com o Facilidade de log
instrução:
Log-Queries Log-Facility =/var/log/dnsmasq.registro
Salve a configuração e o reinício do serviço
Neste ponto, nossa configuração deve ficar assim:
porta = 0 interface = eth0 dhcp-fange = 192.168.0.0,proxy enable-tftp tftp-root=/mnt/data/netboot pxe-service=x86PC,"PXELINUX (BIOS)",bios/pxelinux pxe-service=x86-64_EFI,"PXELINUX (EFI)",efi64/syslinux.EFI Log-Queries Log-Facility =/var/log/dnsmasq.registro
Podemos salvar as mudanças que fizemos no /etc/dnsmasq.conf
arquivar e finalmente reiniciar o Dnsmasq
serviço:
$ sudo systemctl reiniciar dnsmasq
Configuração do firewall
Para que nossa configuração funcione corretamente, também devemos permitir o tráfego de entrada através do nosso firewall por meio de algumas portas específicas. Neste tutorial, assumirei o uso do ufw front-end. As portas pelas quais devemos permitir o tráfego de entrada são:
- 67/UDP
- 69/UDP
- 4011/UDP
Para permitir o tráfego, podemos executar o seguinte comando:
$ sudo ufw permitir 67/udp $ sudo ufw permitir 69/udp $ sudo ufw permitir 4011/udp
Inicialização
Neste ponto, se a máquina cliente estiver conectada à rede via Ethernet e a opção de inicialização PXE for escolhida como inicialização "fonte" (verifique se a funcionalidade está ativada!), devemos poder ver o menu de inicialização do PXE:
O menu de inicialização do PXEDepois de selecionarmos AMD64 -> Debian -> Instalação gráfica
Os arquivos apropriados serão baixados e o instalador do Debian deve aparecer:
Agora é possível prosseguir com a instalação.
Conclusões
Neste tutorial, vimos como executar as etapas necessárias para transformar um Raspberry Pi em um servidor de inicialização PXE: vimos como instalar e configurar o DNSmasq e o pxelinux bootloader; Também aprendemos a criar um menu SysLinux e a estrutura de arquivo apropriada; Finalmente, vimos quais portas abrirem para a configuração funcionar. Dúvidas? Questões? Sinta -se à vontade para comentar e pedir ajuda!
Tutoriais do Linux relacionados:
- Como se conectar a um servidor FTP usando o Python
- Configurar servidor FTP no Linux
- Lista de clientes FTP e instalação no Ubuntu 22.04 Linux…
- Lista de clientes FTP e instalação no Ubuntu 20.04 Linux…
- Como configurar o servidor e o cliente FTP/SFTP no Almalinux
- OpenLitesPeed como proxy reverso
- Tutorial de configuração de proxy de lula no Linux
- Como executar o Raspberry Pi OS em uma máquina virtual com…
- Coisas para instalar no Ubuntu 20.04
- Instale o proxy no Ubuntu 20.04 Linux