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 os pacotes tftp e inicie o serviço:
systemctl start tftp.socket systemctl start tftp.service
     Também é necessário instalar um pacote específico
     tftpboot-installation para uso com o 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 arquitetura desejadas do sistema, por exemplo,
     tftpboot-installation-SLE-15-SP3-x86_64. Por exemplo,
     tftpboot-installation-SLE-VERSÃO-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.