19 Configurando um servidor de boot HTTP UEFI #
Este capítulo descreve como instalar e configurar um servidor de Boot HTTP UEFI.
19.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.
19.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.
19.1.2 Preparação #
A configuração descrita aqui usa sub-redes 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.
19.2 Configurando o servidor #
19.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.
19.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;
class "pxeclients" {
  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
  option vendor-class-identifier "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";
}
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;
}
          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
19.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. Em DHCPv6, isso consiste nos dados de número da empresa e de 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
19.2.1.2.1 Configurando o servidor DHCPv6 para boot PXE e HTTP #
Usando a seguinte configuração, é possível configurar 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.
          
19.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
19.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 do sistema e a arquitetura desejadas, por exemplo, tftpboot-installation-SLE-15-SP3-x86_64 e tftpboot-installation-SLE-VERSION-x86_64 (substitua VERSION 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 a /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
19.2.1.4 Configurando o servidor HTTP #
          Crie o diretório sle/ abaixo do diretório /srv/www/htdocs/ e copie todo o conteúdo da primeira imagem ISO do sistema para o diretório /srv/www/htdocs/sle/. Em seguida, edite o arquivo /srv/www/htdocs/sle/EFI/BOOT/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 ...'
    linux /sle/boot/x86_64/loader/linux install=http://www.httpboot.local/sle
    echo 'Loading initial ramdisk ...'
    initrd /sle/boot/x86_64/loader/initrd
}
menuentry 'Installation IPv6' --class opensuse --class gnu-linux --class gnu --class os {
    set gfxpayload=keep
    echo 'Loading kernel ...'
    linux /sle/boot/x86_64/loader/linux install=install=http://www.httpboot.local/sle ipv6only=1 ifcfg=*=dhcp6,DHCLIENT6_MODE=managed
    echo 'Loading initial ramdisk ...'
    initrd /sle/boot/x86_64/loader/initrd
}19.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
19.2.1.4.2 Configurando o apache2 #
            O Apache não requer configuração adicional. Inicie o daemon apache2:
          
systemctl start apache2
19.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á-lo 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
19.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.
19.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
19.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
19.2.1.5.4 Modificar a configuração do DHCP #
            Substitua o prefixo http:// por https:// em dhcpd.conf/dhcpd6.conf e reinicie o servidor DHCP.
          
systemctl restart dhcpd systemctl restart dhcpd6
19.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.