18 UEFI HTTP Bootサーバのセットアップ #
この章では、UEFI HTTP Bootサーバをセットアップおよび設定する方法を説明します。
18.1 概要 #
HTTP Bootは、DHCP、DNS、およびHTTPから構成され、ネットワークを通じたシステムのブートと展開を実現します。HTTP BootはPXEを代替でき、しかも高パフォーマンスです。HTTP Bootによって、HTTPを介してURIからサーバをブートし、Linuxカーネルやルートファイルシステムなど、サイズの大きいファイルを、ローカルネットワーク外にあるサーバから迅速に転送できます。
18.1.1 クライアントマシンの設定 #
HTTP Bootを物理クライアントマシン上で有効化する方法は、使用するハードウェアごとに違います。お使いのマシンでHTTP Bootを有効化する方法の詳細については、ドキュメントを確認してください。
18.1.2 準備作業 #
ここで説明するセットアップ例では、IPサブネットとして192.168.111.0/24 (IPv4)および、2001:db8:f00f:cafe::/64 (IPv6)を使用します。また、サーバIPアドレスとして、192.168.111.1(IPv4)および、2001:db8:f00f:cafe::1/64 (IPv6)を使用します。これらの値は、セットアップ環境に応じて調整してください。
HTTP Bootサーバとして使用する予定のマシンに、次のパッケージdhcp-server、apache2 (またはlighttpd)、およびdnsmasqをインストールします。
18.2 サーバの構成 #
18.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ブートローダを使用することをお勧めします。
18.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; 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"; } }
DHCPv4サーバはベンダークラスIDにHTTPClient
パラメータを使用する必要があることに注意してください。これは、クライアントがHTTP Boot提案を識別する際にこのパラメータを使用するためです。
DHCPデーモンを起動します。
systemctl start dhcpd
18.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
18.2.1.2.1 PXE BootとHTTP Boot用のDHCPv6サーバのセットアップ #
次の設定を使用して、DHCPv6サーバをPXE BootとHTTP Boot用に設定できます。
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クライアントを指します。この設定により、サーバは異なるアーキテクチャに対して同時にサービスを提供できます。
18.2.1.2.2 ファイアウォールの設定 #
ファイアウォールのRPフィルタによって、DHCPv6パケットがドロップする場合は、ログを確認します。ログにrpfilter_DROP
エントリが含まれる場合は、/etc/firewalld/firewalld.conf
で次の設定を使用してフィルタを無効化します。
IPv6_rpfilter=no
18.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
を参照してください。
18.2.1.4 HTTPサーバのセットアップ #
最初のシステムISOイメージの中身をすべて/srv/www/htdocs/sle/
ディレクトリにコピーします。その後、/srv/www/htdocs/sle/grub.cfg
ファイルを編集します。次の例を参考にしてください。
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 lighttpdの設定 #
lighttpdでIPv4とIPv6両方のサポートを有効にするには、/etc/lighttpd/lighttpd.conf
を次のように変更してください。
## ## Use IPv6? ## #server.use-ipv6 = "enable" $SERVER["socket"] == "[::]:80" { }
次のコマンドで、lighttpd
デーモンを起動します。
systemctl start lighttpd
18.2.1.4.2 apache2の設定 #
Apacheに追加設定は不要です。次のコマンドでapache2
デーモンを起動します。
systemctl start apache2
18.2.1.5 HTTPサーバのSSLサポートを有効化する(オプション) #
HTTPS Bootを使用するには、既存のサーバ証明書をDER
フォーマットに変換し、クライアントのファームウェアに登録する必要があります。
サーバに証明書がすでにインストールされている場合、次のコマンドを使用してクライアントで使用できるように証明書をDER
フォーマットに変換します。
openssl x509 -in CERTIFICATE.crt -outform der -out CERTIFICATE.der
18.2.1.5.1 サーバ証明書をクライアントのファームウェアに登録する #
変換された証明書を登録する正確な手順は、クライアントのファームウェアの個々の実装内容に依存します。特定のハードウェアについては、証明書を保存した外部ストレージデバイスを使用して、ファームウェアUIから手動で証明書を登録する必要があります。Redfishをサポートするマシンでは、リモートで証明書を登録できます。証明書の登録に関する詳細については、各ハードウェアのドキュメントを確認してください。
18.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
18.2.1.5.3 ApacheでSSLサポートを有効化する #
/etc/sysconfig/apache2
ファイルを開き、次のようにSSLフラグを追加します。
APACHE_SERVER_FLAGS="SSL"
APACHE_MODULES
にssl
モジュールが一覧表示されていることを確認してください。たとえば、次のようになります。
次に、/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
18.2.1.5.4 DHCP設定の変更 #
dhcpd.conf/dhcpd6.conf
のhttp://
プレフィックスをhttps://
で置き換え、DHCPサーバを再起動してください。
systemctl restart dhcpd systemctl restart dhcpd6
18.3 HTTP Bootを介してクライアントをブートする #
ファームウェアがすでにHTTP Bootをサポートしている場合は、ケーブルを接続して、適当なブートオプションを選択してください。