18 Configurando um servidor de boot HTTP UEFI #
Este capítulo descreve como instalar e configurar um servidor de boot HTTP UEFI.
18.1 Introdução #
O Boot HTTP combina DHCP, DNS e HTTP para possibilitar a inicialização e a implantação de sistemas na rede. O Boot HTTP pode ser usado como um substituto de alto desempenho do PXE. O Boot HTTP permite inicializar um servidor de um URI por HTTP, transferindo rapidamente arquivos grandes, como o kernel do Linux e o sistema de arquivos raiz de servidores fora da rede local.
18.1.1 Configurando a máquina cliente #
A habilitação do Boot HTTP em uma máquina cliente física depende do seu hardware específico. Consulte a documentação para obter mais informações sobre como habilitar o Boot HTTP em sua máquina específica.
18.1.2 Preparação #
A configuração descrita aqui usa sub-redes com IP 192.168.111.0/24 (IPv4) e 2001:db8:f00f:cafe::/64 (IPv6), e os endereços IP de servidor são 192.168.111.1 (IPv4) e 2001:db8:f00f:cafe::1/64 (IPv6), como exemplos. Ajuste esses valores para corresponder à sua configuração específica.
Instale os seguintes pacotes na máquina que planeja usar como servidor de Boot HTTP: dhcp-server, apache2 (ou lighttpd) e dnsmasq.
18.2 Configurando o servidor #
18.2.1 Servidor DNS #
Embora a configuração do servidor DNS seja opcional, ela permite que você atribua um nome amigável ao servidor de Boot HTTP. Para configurar o servidor DNS, adicione o seguinte ao arquivo /etc/dnsmasq.conf:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Atribua um nome de domínio aos endereços IP no arquivo /etc/dnsmasq.d/hosts.conf:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Inicie o servidor DNS.
systemctl start dnsmasq
Devido a uma mudança no UEFI 2.7, recomendamos o uso de um carregador de boot shim do SLE 15 ou versão mais recente para evitar possíveis erros causados pelo nó DNS adicional.
18.2.1.1 Configurando o servidor DHCPv4 #
Antes de configurar os servidores DHCP, especifique a interface de rede para eles em /etc/sysconfig/dhcpd:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
Dessa forma, os servidores DHCP fornecem o serviço apenas na interface eth0.
Para configurar um servidor DHCPv4 para Boot PXE e Boot HTTP, adicione a seguinte configuração ao arquivo /etc/dhcpd.conf:
option domain-name-servers 192.168.111.1;
option routers 192.168.111.1;
default-lease-time 14400;
ddns-update-style none;
subnet 192.168.111.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.111.100 192.168.111.120;
default-lease-time 14400;
max-lease-time 172800;
class "pxeclients"{
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.111.1;
filename "/bootx64.efi";
}
class "httpclients" {
match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
option vendor-class-identifier "HTTPClient";
filename "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
}
}
Observe que o servidor DHCPv4 deve usar o parâmetro HTTPClient para o ID da classe do fornecedor, pois o cliente o utiliza para identificar uma oferta de Boot HTTP.
Inicie o daemon DHCP:
systemctl start dhcpd
18.2.1.2 Configurando o servidor DHCPv6 #
Para configurar o servidor DHCPv6, adicione a seguinte configuração a /etc/dhcpd6.conf:
option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
subnet6 2001:db8:f00f:cafe::/64 {
range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;
option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
option dhcp6.name-servers 2001:db8:f00f:cafe::1;
option dhcp6.vendor-class 0 10 "HTTPClient";
}
Essa configuração define o tipo de URL de boot, a classe do fornecedor e outras opções necessárias. Semelhante às configurações do DHCPv4, é necessário informar o URL de boot, que deve ter um endereço IPv6. Também é necessário especificar a opção de classe do fornecedor. No DHCPv6, ela consiste no número da empresa e nos dados da classe do fornecedor (tamanho e conteúdo). Como o driver de Boot HTTP ignora o número da empresa, você pode defini-lo como 0. O conteúdo dos dados da classe do fornecedor precisa ser HTTPClient; do contrário, o cliente ignorará a oferta.
A implementação do Boot HTTP mais antiga, que não segue o RFC 3315, requer uma configuração diferente:
option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = string;
subnet6 2001:db8:f00f:cafe::/64 {
range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;
option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi;
option dhcp6.name-servers 2001:db8:f00f:cafe::1;
option dhcp6.vendor-class "HTTPClient";
}
Inicie o daemon dhcpv6.
systemctl start dhcpd6
18.2.1.2.1 Configurando o servidor DHCPv6 para boot PXE e HTTP #
Usando a seguinte configuração, é possível definir o servidor DHCPv6 para Boot PXE e Boot HTTP:
option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
subnet6 2001:db8:f00f:cafe::/64 {
range6 2001:db8:f00f:cafe::42:10 2001:db8:f00f:cafe::42:99;
class "PXEClient" {
match substring (option dhcp6.vendor-class, 6, 9);
}
subclass "PXEClient" "PXEClient" {
option dhcp6.bootfile-url "tftp://[2001:db8:f00f:cafe::1]/bootloader.efi";
}
class "HTTPClient"; {
match substring (option dhcp6.vendor-class, 6, 10);
}
subclass "HTTPClient" "HTTPClient" {
option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
option dhcp6.name-servers 2001:db8:f00f:cafe::1;
option dhcp6.vendor-class 0 10 "HTTPClient";
}
}Também é possível corresponder a classe do fornecedor a uma arquitetura específica, conforme mostrado a seguir:
class "HTTPClient" {
match substring (option dhcp6.vendor-class, 6, 21);
}
subclass "HTTPClient" "HTTPClient":Arch:00016 {
option dhcp6.bootfile-url "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
option dhcp6.name-servers 2001:db8:f00f:cafe::1;
option dhcp6.vendor-class 0 10 "HTTPClient";
}
Nesse exemplo, HTTPClient:Arch:00016 refere-se a um cliente de Boot HTTP AMD64/Intel 64. Essa configuração permite que o servidor atenda a diferentes arquiteturas simultaneamente.
18.2.1.2.2 Configurando o firewall #
Se os pacotes DHCPv6 forem descartados pelo filtro RP no firewall, verifique o registro dele. Se ele incluir a entrada rpfilter_DROP, desabilite o filtro usando a seguinte configuração em /etc/firewalld/firewalld.conf:
IPv6_rpfilter=no
18.2.1.3 Implantando um servidor TFTP (opcional) #
Para oferecer suporte a Boot PXE e Boot HTTP, implante um servidor TFTP. Instale o tftp e inicie o serviço:
systemctl start tftp.socket systemctl start tftp.service
Também é necessário instalar um pacote tftpboot-installation específico para uso com Boot PXE. Execute o comando zypper se tftpboot para listar os pacotes tftp-installation disponíveis e, em seguida, instale o pacote para a versão e a arquitetura desejadas do sistema, por exemplo tftpboot-installation-SLE-15-SP3-x86_64 Por exemplo, tftpboot-installation-SLE-VERSION-x86_64 (substitua VERSÃO pela versão real). Copie o conteúdo do diretório SLE-VERSION-x86_64 para o diretório raiz do servidor TFTP:
Para obter mais informações, consulte /usr/share/tftpboot-installation/SLE-VERSÃO-x86_64/README
18.2.1.4 Configurando o servidor HTTP #
Copie todo o conteúdo da imagem ISO do primeiro sistema para o diretório /srv/www/htdocs/sle/. Edite o arquivo /srv/www/htdocs/sle/grub.cfg. Use o exemplo a seguir como referência:
timeout=60
default=1
menuentry 'Installation IPv4' --class opensuse --class gnu-linux --class gnu --class os {
set gfxpayload=keep
echo 'Loading kernel ...'
linuxefi /sle/boot/x86_64/loader/linux install=http://www.httpboot.local/sle
echo 'Loading initial ramdisk ...'
initrdefi /sle/boot/x86_64/loader/initrd
}
menuentry 'Installation IPv6' --class opensuse --class gnu-linux --class gnu --class os {
set gfxpayload=keep
echo 'Loading kernel ...'
linuxefi /sle/boot/x86_64/loader/linux install=install=http://www.httpboot.local/sle ipv6only=1 ifcfg=*=dhcp6,DHCLIENT6_MODE=managed
echo 'Loading initial ramdisk ...'
initrdefi /sle/boot/x86_64/loader/initrd
}18.2.1.4.1 Configurando o lighttpd #
Para habilitar o suporte a IPv4 e IPv6 no lighttpd, modifique /etc/lighttpd/lighttpd.conf da seguinte maneira:
##
## Use IPv6?
##
#server.use-ipv6 = "enable"
$SERVER["socket"] == "[::]:80" { }
Inicie o daemon lighttpd:
systemctl start lighttpd
18.2.1.4.2 Configurando o apache2 #
O Apache não requer configuração adicional. Inicie o daemon apache2:
systemctl start apache2
18.2.1.5 Habilitando o suporte SSL para o servidor HTTP (opcional) #
Para usar o Boot HTTPS, você precisa converter uma certificação do servidor existente no formato DER e registrá-la no firmware do cliente.
Supondo que você já tenha um certificado instalado no servidor, converta-o no formato DER para usá-lo com o cliente executando o seguinte comando:
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Registrar a certificação do servidor no firmware do cliente #
O procedimento exato de registro do certificado convertido depende da implementação específica do firmware do cliente. Para determinados hardwares, você precisa registrar o certificado manualmente pela IU do firmware usando um dispositivo de armazenamento externo que tenha o certificado. As máquinas com suporte ao Redfish podem registrar o certificado remotamente. Consulte a documentação do seu hardware específico para obter mais informações sobre o registro de certificados.
18.2.1.5.2 Habilitando o suporte a SSL no lighttpd #
Como o lighttpd precisa da chave privada e do certificado no mesmo arquivo, unifique-os usando o seguinte comando:
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Copie CERTIFICATE.pem para o diretório /etc/ssl/private/.
cp server-almighty.pem /etc/ssl/private/ chown -R root:lighttpd /etc/ssl/private/server-almighty.pem chmod 640 /etc/ssl/private/server-almighty.pem
Verifique se mod_openssl está listado na seção server.modules do arquivo /etc/lighttpd/modules.conf, por exemplo:
server.modules = ( "mod_access", "mod_openssl", )
Adicione as seguintes linhas à seção SSL Support em /etc/lighttpd/lighttpd.conf:
# IPv4
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/ssl/private/server-almighty.pem"
}
# IPv6
$SERVER["socket"] == "[::]:443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/ssl/private/server-almighty.pem"
}Reinicie o lighttpd para ativar o suporte a SSL:
systemctl restart lighttpd
18.2.1.5.3 Habilitando o suporte a SSL no Apache #
Abra o arquivo /etc/sysconfig/apache2 e adicione o flag SSL da seguinte maneira:
APACHE_SERVER_FLAGS="SSL"
Verifique se o módulo ssl está listado em APACHE_MODULES, por exemplo:
Em seguida, copie a chave privada e o certificado para o diretório /etc/apache2/.
cp server.key /etc/apache2/ssl.key/ chown wwwrun /etc/apache2/ssl.key/server.key chmod 600 /etc/apache2/ssl.key/server.key cp server.crt /etc/apache2/ssl.crt/
Crie a configuração ssl vhost.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Edite /etc/apache2/vhosts.d/vhost-ssl.conf para mudar a chave privada e o certificado:
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Reinicie o apache para ativar o suporte a SSL:
systemctl restart apache2
18.2.1.5.4 Modificar a configuração do DHCP #
Substitua o prefixo http:// por https:// no dhcpd.conf/dhcpd6.conf e reinicie o servidor DHCP.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Inicializando o cliente por boot HTTP #
Se o firmware já suporta o boot HTTP, conecte o cabo e escolha a opção de boot correta.