目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / 展開ガイド / インストールサーバのセットアップ / UEFI HTTP Bootサーバのセットアップ
適用項目 SUSE Linux Enterprise Server 15 SP6

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-serverapache2 (または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
注記
注記: shimブートローダの利用

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.confSSL 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"

sslAPACHE_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.confhttps://に置き換えて、DHCPサーバを再起動します。

systemctl restart dhcpd
systemctl restart dhcpd6

19.3 HTTP Bootを介してクライアントをブートする

ファームウェアがすでにHTTP Bootをサポートしている場合は、ケーブルを接続し、正しいブートオプションを選択します。