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

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

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.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
18.2.1.5.3 ApacheでSSLサポートを有効化する

/etc/sysconfig/apache2ファイルを開き、次のようにSSLフラグを追加します。

APACHE_SERVER_FLAGS="SSL"

APACHE_MODULESsslモジュールが一覧表示されていることを確認してください。たとえば、次のようになります。

次に、/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.confhttp://プレフィックスをhttps://で置き換え、DHCPサーバを再起動してください。

systemctl restart dhcpd
systemctl restart dhcpd6

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

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