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をサポートしている場合は、ケーブルを接続して、適当なブートオプションを選択してください。