18 Configuration d'un serveur de démarrage HTTP UEFI #
Ce chapitre décrit comment installer et configurer un serveur de démarrage HTTP UEFI.
18.1 Introduction #
Le démarrage HTTP associe DHCP, DNS et HTTP pour permettre l'amorçage et le déploiement de systèmes via le réseau. Le démarrage HTTP peut être utilisé comme solution de remplacement haute performance pour PXE. Le démarrage HTTP permet d'amorcer un serveur à partir d'un URI via HTTP, en transférant rapidement des fichiers volumineux, tels que le kernel Linux et le système de fichiers racine à partir de serveurs situés en dehors de votre réseau local.
18.1.1 Configuration de la machine cliente #
L'activation du démarrage HTTP sur une machine cliente physique dépend de votre matériel. Pour plus d'informations sur l'activation du démarrage HTTP sur votre machine, consultez la documentation.
18.1.2 Préparation #
La configuration décrite ici utilise les sous-réseaux IP 192.168.111.0/24 (IPv4) et 2001:db8:f00f:cafe::/64 (Ipv6) et les adresses IP serveur sont 192.168.111.1 (IPv4) et 2001:db8:f00f:cafe::1/64 (IPv6), à titre d'exemple. Ajustez ces valeurs en fonction de votre configuration spécifique.
Installez les paquetages suivants sur la machine que vous envisagez d'utiliser comme serveur de démarrage HTTP : dhcp-server, apache2 (ou lighttpd) et dnsmasq.
18.2 Configuration du serveur #
18.2.1 Serveur DNS #
Bien que la configuration du serveur DNS soit facultative, elle vous permet d'assigner un nom convivial au serveur de démarrage HTTP. Pour configurer le serveur DNS, ajoutez ce qui suit au fichier /etc/dnsmasq.conf
:
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
Assignez un nom de domaine aux adresses IP dans le fichier /etc/dnsmasq.d/hosts.conf
:
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
Démarrez le serveur DNS.
systemctl start dnsmasq
En raison d'un changement dans UEFI 2.7, nous vous recommandons d'utiliser un chargeur d'amorçage de module d'interface à partir de SLE 15 ou version plus récente, pour éviter des erreurs potentielles causées par le noeud DNS supplémentaire.
18.2.1.1 Configuration du serveur DHCPv4 #
Avant de configurer les serveurs DHCP, spécifiez leur interface réseau dans /etc/sysconfig/dhcpd
:
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
De cette façon, les serveurs DHCP fournissent le service sur l'interface eth0
uniquement.
Pour configurer un serveur DHCPv4 en vue du démarrage PXE et HTTP, ajoutez la configuration suivante au fichier /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"; } }
Notez que le serveur DHCPv4 doit utiliser le paramètre HTTPClient
pour l'ID de classe du fournisseur, car le client l'utilise pour identifier une offre de démarrage HTTP.
Démarrez le daemon DHCP :
systemctl start dhcpd
18.2.1.2 Configuration du serveur DHCPv6 #
Pour configurer le serveur DHCPv6, ajoutez la configuration suivante au fichier /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"; }
Cette configuration définit le type de l'URL de démarrage, la classe du fournisseur et les autres options requises. Comme pour les paramètres DHCPv4, il est nécessaire de fournir l'URL de démarrage, qui doit présenter une adresse IPv6. Il est également nécessaire de spécifier l'option de classe du fournisseur. Dans DHCPv6, il se compose du numéro d'entreprise et des données de classe du fournisseur (longueur et contenu). Étant donné que le pilote de démarrage HTTP ignore le numéro d'entreprise, vous pouvez le définir sur 0
. Le contenu des données de classe du fournisseur doit être HTTPClient
, sinon, le client ignore l'offre.
L'ancienne implémentation du démarrage HTTP, qui ne respecte pas la norme RFC 3315, nécessite une configuration différente :
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"; }
Démarrez le daemon dhcpv6
.
systemctl start dhcpd6
18.2.1.2.1 Configuration du serveur DHCPv6 pour le démarrage PXE et HTTP #
À l'aide de la configuration suivante, il est possible de configurer le serveur DHCPv6 pour le démarrage PXE et 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"; } }
Il est également possible de faire correspondre la classe du fournisseur à une architecture spécifique, comme suit :
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"; }
Dans cet exemple, HTTPClient:Arch:00016
fait référence à un client de démarrage HTTP AMD64/Intel 64. Cette configuration permet au serveur de servir simultanément différentes architectures.
18.2.1.2.2 Configuration du pare-feu #
Si des paquets DHCPv6 sont abandonnés par le filtre RP dans le pare-feu, vérifiez son journal. S'il contient l'entrée rpfilter_DROP
, désactivez le filtre à l'aide de la configuration suivante dans le fichier /etc/firewalld/firewalld.conf
:
IPv6_rpfilter=no
18.2.1.3 Déploiement d'un serveur TFTP (facultatif) #
Pour prendre en charge le démarrage PXE et HTTP, déployez un serveur TFTP. Installez le paquetage tftp et démarrez le service :
systemctl start tftp.socket systemctl start tftp.service
Vous devez également installer un paquetage tftpboot-installation spécifique à utiliser avec le démarrage PXE. Exécutez la commande zypper se tftpboot
pour lister les paquetages tftp-installation disponibles, puis installez le paquetage pour la version système et l'architecture souhaitées, tel que tftpboot-installation-SLE-15-SP3-x86_64. Par exemple, tftpboot-installation-SLE-VERSION-x86_64 (remplacez VERSION par la version réelle). Copiez le contenu du répertoire SLE-VERSION-x86_64
dans le répertoire racine du serveur TFTP.
Pour plus d'informations, reportez-vous au document /usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
.
18.2.1.4 Configuration du serveur HTTP #
Copiez tout le contenu de la première image ISO du système dans le répertoire /srv/www/htdocs/sle/
. Modifiez ensuite le fichier /srv/www/htdocs/sle/grub.cfg
. Utilisez l'exemple suivant comme référence :
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 Configuration de lighttpd #
Pour activer la prise en charge d'IPv4 et d'IPv6 dans lighttpd, modifiez /etc/lighttpd/lighttpd.conf
comme suit :
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
Démarrez le daemon lighttpd
:
systemctl start lighttpd
18.2.1.4.2 Configuration d'apache2 #
Apache ne nécessite aucune configuration supplémentaire. Démarrez le daemon apache2
:
systemctl start apache2
18.2.1.5 Activation de la prise en charge de SSL pour le serveur HTTP (facultatif) #
Pour utiliser le démarrage HTTPS, vous devez convertir un certificat de serveur existant au format DER
et l'enregistrer dans le microprogramme du client.
En supposant qu'un certificat soit déjà installé sur votre serveur, convertissez-le au format DER
pour l'utiliser avec le client à l'aide de la commande suivante :
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 Enregistrement du certificat de serveur dans le microprogramme client #
La procédure exacte d'enregistrement du certificat converti dépend de l'implémentation spécifique du microprogramme du client. Pour certains matériels, vous devez enregistrer le certificat manuellement, via l'interface utilisateur du microprogramme, à l'aide d'un périphérique de stockage externe sur lequel se trouve le certificat. Les machines prenant en charge Redfish peuvent enregistrer le certificat à distance. Consultez la documentation de votre matériel pour plus d'informations sur l'enregistrement de certificats.
18.2.1.5.2 Activation de la prise en charge de SSL dans lighttpd #
Étant donné que lighttpd a besoin de la clé privée et du certificat dans le même fichier, unifiez-les à l'aide de la commande suivante :
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
Copiez CERTIFICATE.pem
dans le répertoire /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
Assurez-vous que mod_openssl
est répertorié dans la section server.modules
du fichier /etc/lighttpd/modules.conf
, par exemple :
server.modules = ( "mod_access", "mod_openssl", )
Ajoutez les lignes suivantes à la section SSL Support
du fichier /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" }
Redémarrez lighttpd pour activer la prise en charge de SSL :
systemctl restart lighttpd
18.2.1.5.3 Activation de la prise en charge de SSL dans Apache #
Ouvrez le fichier /etc/sysconfig/apache2
et ajoutez le drapeau SSL comme suit :
APACHE_SERVER_FLAGS="SSL"
Assurez-vous que le module ssl
est répertorié dans APACHE_MODULES
, par exemple :
Ensuite, copiez la clé privée et le certificat dans le répertoire /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/
Créez la configuration ssl vhost.
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
Modifiez le fichier /etc/apache2/vhosts.d/vhost-ssl.conf
pour changer la clé privée et le certificat :
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Redémarrez apache pour activer la prise en charge SSL :
systemctl restart apache2
18.2.1.5.4 Modification de la configuration DHCP #
Remplacez le préfixe http://
par https://
dans le fichier dhcpd.conf/dhcpd6.conf
et redémarrez le serveur DHCP.
systemctl restart dhcpd systemctl restart dhcpd6
18.3 Amorçage du client via le démarrage HTTP #
Si le microprogramme prend déjà en charge le démarrage HTTP, branchez le câble et choisissez l'option d'amorçage appropriée.