19 UEFI HTTP Bootサーバのセットアップ #
この章ではUEFI HTTP Bootサーバを設定する方法を説明します。
19.1 概要 #
HTTP Bootは、DHCP、DNS、およびHTTPから構成され、ネットワークを通じたシステムのブートと展開を実現します。HTTP BootはPXEを代替でき、しかもハイパフォーマンスです。HTTP Bootによって、HTTPを介してURIからサーバをブートし、Linuxカーネルやルートファイルシステムなど、サイズの大きいファイルを、ローカルネットワーク外にあるサーバから迅速に転送できます。
19.1.1 クライアントマシンの設定 #
HTTP Bootを物理クライアントマシン上で有効化する方法は、使用するハードウェアごとに違います。お使いのマシンでHTTP Bootを有効化する方法の詳細については、ドキュメントを確認してください。
19.1.2 準備作業 #
ここで説明するセットアップでは、192.168.111.0/24 (IPv4)と2001:db8:f00f:cafe::/64 (IPv6) IPサブネットを使用し、サーバIPアドレスは例として192.168.111.1(IPv4)と2001:db8:f00f:cafe::1/64 (IPv6)を使用します。これらの値は、セットアップ環境に応じて調整してください。
HTTP Bootサーバとして使用する予定のマシンに、次のパッケージ、dhcp-server、apache2 (またはlighttpd)、およびdnsmasqをインストールします。
19.2 サーバの構成 #
19.2.1 DNSサーバ #
DNSサーバの設定は必須ではありませんが、設定するとHTTP Bootサーバにわかりやすい名前を割り当てることができます。DNSサーバをセットアップするには、/etc/dnsmasq.conf
ファイルに次の内容を追加します。
interface=eth0 addn-hosts=/etc/dnsmasq.d/hosts.conf
/etc/dnsmasq.d/hosts.conf
ファイルで、IPアドレスに対応するドメイン名を割り当てます。
192.168.111.1 www.httpboot.local 2001:db8:f00f:cafe::1 www.httpboot.local
DNSサーバを起動します。
systemctl start dnsmasq
UEFI 2.7の変更内容により、追加されたDNSノードによって発生する可能性のあるエラーを回避するため、SLE 15以降のバージョンではshimブートローダを使用することをお勧めします。
19.2.1.1 DHCPv4サーバの設定 #
DHCPサーバをセットアップする前に、/etc/sysconfig/dhcpd
でDHCPサーバに使用するネットワークインタフェースを指定します。
DHCPD_INTERFACE="eth0" DHCPD6_INTERFACE="eth0"
この方法では、DHCPサーバはeth0
インタフェース上でのみサービスを提供します。
PXE BootとHTTP Bootの両方でDHCPv4サーバを設定するには、以下の設定を/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; }
DHCPv4サーバはベンダクラスIDにHTTPClient
パラメータを使用する必要があることに注意してください。これは、クライアントがHTTP Boot提案を識別する際にこのパラメータを使用するためです。
DHCPデーモンを起動します。
systemctl start dhcpd
19.2.1.2 DHCPv6サーバの設定 #
DHCPv6サーバをセットアップするには、/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"; }
この設定は、ブートURLのタイプ、ベンダクラス、およびその他の必要なオプションを定義します。DHCPv4の設定と同じように、ブートURLを指定する必要があります。このURLにはIPv6アドレスが必要です。また、ベンダクラスオプションも指定する必要があります。DHCPv6では、企業番号とベンダクラスデータ(長さと内容)から構成されます。HTTP Bootドライバは企業番号を無視するため、0
に設定してもかまいません。ベンダクラスデータの中身は、HTTPClient
でなければなりません。さもなければ、クライアントはHTTP Boot提案を無視します。
RFC 3315に準拠していないHTTP Bootの古い実装では、次のように別の設定が必要です。
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"; }
dhcpv6
デーモンを起動します。
systemctl start dhcpd6
19.2.1.2.1 PXE BootとHTTP Bootの両方でDHCPv6サーバを設定する #
以下の設定を使用すると、PXE BootとHTTP Bootの両方でDHCPv6サーバを設定できます。
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"; } }
次のように、ベンダクラスを特定のアーキテクチャに一致させることも可能です。
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"; }
この例では、HTTPClient:Arch:00016
はAMD64/Intel 64のHTTP Bootクライアントを指します。この設定により、サーバは異なるアーキテクチャに対して同時にサービスを提供できます。
19.2.1.2.2 ファイアウォールの設定 #
ファイアウォールのRPフィルタによって、DHCPv6パケットがドロップする場合は、ログを確認します。ログにrpfilter_DROP
エントリが含まれる場合は、/etc/firewalld/firewalld.conf
で次の設定を使用してフィルタを無効化します。
IPv6_rpfilter=no
19.2.1.3 TFTPサーバの展開(オプション) #
PXE BootとHTTP Bootの両方をサポートするには、TFTPサーバを配置します。tftpをインストールして、サービスを開始します。
systemctl start tftp.socket systemctl start tftp.service
また、PXEブートで使用する特定のtftpboot-installationパッケージをインストールする必要もあります。zypper se tftpboot
コマンドを実行すると、使用可能なtftp-installationパッケージのリストが表示されます。次に、目的のシステムバージョンとアーキテクチャのパッケージをインストールします。たとえばtftpboot-installation-SLE-15-SP3-x86_64です。たとえばtftpboot-installation-SLE-VERSION-x86_64 (VERSIONを実際のバージョンで置き換えます)です。SLE-VERSION-x86_64
ディレクトリの内容を、TFTPサーバのルートディレクトリにコピーします。
詳細については、/usr/share/tftpboot-installation/SLE-VERSION-x86_64/README
を参照してください。
19.2.1.4 HTTPサーバのセットアップ #
/srv/www/htdocs/
ディレクトリの下にsle/
ディレクトリを作成し、/srv/www/htdocs/sle/
ディレクトリに最初のシステムISOイメージのコンテンツ全体をコピーします。次に/srv/www/htdocs/sle/EFI/BOOT/grub.cfg
ファイルを編集します。次の例を参考にしてください。
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 lighttpdの設定 #
lighttpdでIPv4とIPv6の両方のサポートを有効にするには/etc/lighttpd/lighttpd.conf
を以下のように変更します。
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
次のコマンドで、lighttpd
デーモンを起動します。
systemctl start lighttpd
19.2.1.4.2 apache2の設定 #
Apacheに追加設定は不要です。次のコマンドで、apache2
デーモンを起動します。
systemctl start apache2
19.2.1.5 HTTPサーバのSSLサポートを有効化する(オプション) #
HTTPS Bootを使用するには、既存のサーバ証明書をDER
フォーマットに変換し、クライアントのファームウェアに登録する必要があります。
サーバに証明書がすでにインストールされている場合、次のコマンドを使用してクライアントで使用できるように証明書をDER
フォーマットに変換します。
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
19.2.1.5.1 サーバ証明書をクライアントのファームウェアに登録する #
変換された証明書を登録する正確な手順は、クライアントのファームウェアの個々の実装内容に依存します。特定のハードウェアについては、証明書を保存した外部ストレージデバイスを使用して、ファームウェアUIから手動で証明書を登録する必要があります。Redfishをサポートするマシンでは、リモートで証明書を登録できます。証明書の登録に関する詳細については、各ハードウェアのドキュメントを確認してください。
19.2.1.5.2 lighttpdでSSLサポートを有効化する #
lighttpdは秘密鍵と証明書を同じファイルにする必要があるため、次のコマンドで統一します。
cat CERTIFICATE.crt server.key > CERTIFICATE.pem
CERTIFICATE.pem
を/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
/etc/lighttpd/modules.conf
ファイルのserver.modules
セクションにmod_openssl
が一覧表示されていることを確認してください。たとえば、次のようになります。
server.modules = ( "mod_access", "mod_openssl", )
/etc/lighttpd/lighttpd.conf
のSSL Support
セクションに、次の行を追加します。
# 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" }
lighttpdを再起動して、SSLサポートを有効化します。
systemctl restart lighttpd
19.2.1.5.3 ApacheでSSLサポートを有効化する #
/etc/sysconfig/apache2
ファイルを開いて、次のようにSSLフラグを追加します。
APACHE_SERVER_FLAGS="SSL"
ssl
にAPACHE_MODULES
モジュールが一覧表示されていることを確認してください。たとえば、次のようになります。
次に秘密鍵と証明書を/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/
ssl vhost設定を作成します。
cd /etc/apache2/vhosts.d cp vhost-ssl.template vhost-ssl.conf
/etc/apache2/vhosts.d/vhost-ssl.conf
を編集し、秘密鍵と証明書を変更します。
SSLCertificateFile /etc/apache2/ssl.crt/server.crt SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
Apacheを再起動して、SSLサポートを有効化します。
systemctl restart apache2
19.2.1.5.4 DHCP設定の変更 #
http://
プレフィックスをdhcpd.conf/dhcpd6.conf
のhttps://
に置き換えて、DHCPサーバを再起動します。
systemctl restart dhcpd systemctl restart dhcpd6
19.3 HTTP Bootを介してクライアントをブートする #
ファームウェアがすでにHTTP Bootをサポートしている場合は、ケーブルを接続し、正しいブートオプションを選択します。