SUSE Linux Enterprise Server 16.0でのPXEブートサーバの設定
- 概要
UEFIセキュアブートとAgama インストーラをサポートするPXEブートサーバを設定します。
- 目的
ネットワーク経由で複数の SUSE Linux Enterprise Server 16.0システムのインストールを自動化し、効率化します。
- 所要時間
システム管理者やネットワーク管理者の場合、この記事の理解に通常30~45分ほどを要します。
- 目標
複数のアーキテクチャをAgamaインストーラで起動できる、機能するPXEサーバの構築。
- 要件
管理者特権を持つSUSE Linux Enterprise Server 16.0システム
ISOイメージを取得するためのインターネット接続
PXEサーバの静的IP設定
1 SUSE Linux Enterprise Server 16.0におけるPXEブートの概要 #
PXEブートにより、ローカルストレージなしで、マシンをネットワーク経由でインストールまたはランタイム環境にブートできます。このセクションでは SUSE Linux Enterprise Server 16.0 AgamaとライブインストーライメージにおけるPXEの仕組みについて、GRUB 2に焦点を当てて説明します。
1.1 PXEブートとは #
PXE (Preboot Execution Environment)は、DHCPおよびTFTPまたはHTTPを使用して、システムがネットワークサーバからブートローダとOSインストーラを取得できるようにする方法です。物理メディアやプリインストールされたオペレーティングシステムがないマシンのプロビジョニングに広く使用されています。
1.2 PXEブートの利点 #
PXEブートは、ローカルインストールメディアや手動セットアップの必要性をなくし、プロビジョニングを簡素化します。PXEブートにより、以下が可能になります。
ネットワークを介した多数のシステムの無人インストール
インストーラのバージョンとブート設定の集中管理
UEFIセキュアブートを含む、多様なアーキテクチャとファームウェアタイプのサポート
GRUB 2メニューを使用したインストーラまたはインストールパラメータの動的選択
1.3 SUSE Linux Enterprise Server 16.0におけるPXEブートの仕組み #
SUSE Linux Enterprise Server 16.0のPXEブートは、ブートローダとしてGRUB 2を使用し、インストールインタフェースとしてAgamaインストーラを使用します。ブートローダとインストーラファイルは、HTTPまたはTFTPを使用してネットワーク経由で提供され、GRUB 2がカーネル、initrd、ライブイメージを取得します。PXEクライアントは、AMD64/Intel64、AArch64、ppc64le、s390xなどのアーキテクチャに応じて、さまざまなファームウェア(BIOSやUEFIなどの最も一般的なものを含む)、ブートローダ実行ファイル、またはイメージ形式を使用できます。さらに、IPv4とIPv6の両方のネットワークで動作する必要があります。
ブートローダは、root=live:などのカーネルパラメータを渡し、ライブISOイメージからsquashfsベースのルートファイルシステムをロードし、AgamaインタフェースをローカルでまたはリモートWeb UI用のWeb サービスとして起動します。
1.3.1 SLES 15.xとの後方互換性 #
この記事の情報は、主に SUSE Linux Enterprise Server 16.0以降に適用されます。Agamaインストーラと統合し、ライブインストールイメージに依存するPXEブートワークフローに焦点を当てています。この記事の文脈と範囲において、 SLES 16.0以降のバージョンはSLES 15.xとは以下の点で異なります。
- インストーラ
linuxrcとYaSTの代わりにdracutとAgamaを使用します。- DHCPサーバ
ISC DHCPの使用は廃止されました(EOL 2022)。DHCPサーバには、代わりにKeaまたはdnsmasqを使用します。
- ブートパラメータ
root=live:パラメータを使用してagamaインストーライメージをロードし、install=パラメータの代わりに、オプションのinst.install_url=を使用してデフォルト以外のインストールリポジトリを指定します。
ブートローダの選択(GRUB 2、pxelinuxなど)は柔軟性を保ち、バージョンに依存しません。
1.3.2 さまざまなセットアップと手順 #
この記事は、必須のセットアップ手順と、オプションまたは代替の設定で構成されています。自身の展開に関連するセクションにのみ従い、展開に該当しない代替セクションはスキップしてください。
- 必須
コンポーネントのインストール、インストーライメージの準備、GRUB 2の設定、サーバの検証などのタスクは、すべてのセットアップで完了する必要があります。
- ファイル配信方法
nginxなどのHTTPサーバ(Agamaで推奨)、および/またはtftpやdnsmasqなどのTFTPサーバ。- DHCPサーバ
Keaまたはdnsmasqのいずれかを選択します。
注記: 選択した方法の制限事項と機能ISC DHCPの最新の代替として、ISCの新しいDHCPサーバであるKeaを使用します。Keaの詳細については、https://www.isc.org/kea/を参照してください。ISC DHCP EOL通知については、https://www.isc.org/dhcp/を参照してください。KeaはDHCPサーバであり、別途TFTPサーバソフトウェアが必要です。Kea DHCPサーバは、IPv4およびIPv6経由のTFTP/PXEブートと、IPv4経由のHTTPブートのオプションをサポートしています。IPv6経由のHTTPブートでは、DHCPv6サーバが、「クライアントがベンダを識別するために」使用すると想定される
Vendor Class Option(RFC3315, Section 22.16を参照)をクライアントに返送できることが必要ですが、これは現在サポートされていません。DNSサーバ、DHCPサーバ、TFTPサーバの組み合わせであるdnsmasqを使用します。dnsmasqは、ブートローダ、カーネル、initrd (およびその他のファイル)をTFTP経由で提供するために使用できます。dnsmasqの詳細については、https://thekelleys.org.uk/dnsmasq/doc.htmlを参照してください。dnsmasq DHCPサーバは、IPv4およびIPv6経由のTFTP/PXEブートと、IPv4経由のHTTPブートのオプションをサポートしています。IPv6経由のHTTPブートでは、DHCPv6サーバが、「クライアントがベンダを識別するために」使用すると想定される
Vendor Class Option(RFC3315, Section 22.16を参照)をクライアントに返送できることが必要ですが、これは現在サポートされていません。
2 PXEブートサービス用のネットワークの準備 #
このモジュールでは、PXEブートサービスをSUSE Linux Enterprise Server 16.0上で展開するためのネットワークインフラストラクチャ要件について説明します。
2.1 概要 #
PXEサーバは、アドレスとブートファイル(ブートローダ)の場所を提供するDHCPサーバと、ファイルを取得するためのTFTPサーバおよび/またはHTTPサーバの3つのサーバで構成されています。さらに、DNSサーバ、NTPサーバ、IPv6をサポートするルータが存在する場合もあります。通常、運用ネットワークではこれらはPXEサーバとは別個に存在します。SUSE Linux Enterprise Server 16.0を実行するPXEサーバでは、特定のネットワークインタフェースの設定、ファイアウォールへの特定の永続ルールの追加、およびSELinuxでのいくつかの権限が必要になる場合もあります。このセクションでは、適切なIP範囲と、ファイアウォールとSELinuxに必要なルールを持つサンプルネットワークを示します。
2.2 前提条件とサンプルネットワーク設定 #
この記事では以下のように仮定しています。
PXEサーバは、以下のネットワーク設定で、
eno1ネットワークインタフェース上で実行されています。表 1: サンプルPXEネットワーク設定 #IPv4 IPv6 DNS名 PXEネットワーク 192.168.1.0/24 2001:db8:0:1::/64 example.net PXEサーバ 192.168.1.200 2001:db8:0:1::200 pxe.example.net PXEゲートウェイ 192.168.1.1 2001:db8:0:1::1 DNSサーバ 192.168.1.200 2001:db8:0:1::200 NTPサーバ 192.168.1.1 2001:db8:0:1::1 デフォルトでは、ルータ、NTP、DNSサーバは外部にあり、別のマシンで実行されています。この記事では、いくつかのヒントを提供しますが、完全な設定をカバーするものではありません。
2.3 PXEサービス用のネットワークインタフェース、ファイアウォール、SELinuxの設定 #
PXEサーバが必要とするネットワークサービスを許可するように、ネットワークインタフェースとファイアウォールを設定します。SELinux設定を調整して、インストールテストを有効にし、永続的なローカルポリシーを定義します。
PXEネットワークインタフェースを確認し、適切なfirewalldゾーンに割り当てます。
現在アクティブなゾーンと割り当てられたインタフェースを確認します。
>sudofirewall-cmd --get-active-zonespublicゾーンにeno1が割り当てられていない場合は、割り当てます。>sudofirewall-cmd --zone=public --change-interface=eno1インタフェースの割り当てを、再起動しても永続化するようにします。
>sudofirewall-cmd --permanent --zone=public --add-interface=eno1
DNSサービスへのアクセス用にファイアウォールを設定します。
現在のセッションでDNSサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=dns変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=dns
NTPサービスへのアクセス用にファイアウォールを設定します。
現在のセッションでNTPサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=ntp変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=ntp
DHCP (IPv4)サービスへのアクセス用にファイアウォールを設定します。
現在のセッションでDHCPサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=dhcp変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=dhcp
DHCPv6サービスへのアクセス用にファイアウォールを設定します。
現在のセッションでDHCPv6サービスを許可します。
>sudofirewall-cmd --zone=public --add-service=dhcpv6変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=dhcpv6
TFTPサービスへのアクセス用にファイアウォールを設定します。
現在のセッションでTFTPサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=tftp変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=tftp
HTTPサービスへのアクセス用にファイアウォールを設定します。
現在のセッションでHTTPサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=http変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=http
HTTPSサービスへのアクセス用にファイアウォールを設定します。
現在のセッションでHTTPSサービスを許可します。
>sudofirewall-cmd --zone=public --add-service=https変更を永続化します。
>sudofirewall-cmd --permanent --zone=public --add-service=https
セットアップテストのため、
SELinuxを一時的に無効にします。SELinuxを許容モードに設定します。>sudosetenforce 0SELinuxステータスをチェックします。>sudosestatus
PXE関連サービス用のローカル
SELinuxポリシーモジュールを生成し、インストールします。nginx用のモジュールを作成し、インストールします。>sudoif test `ausearch -c 'nginx' --raw | wc -l` -gt 0 ; then>sudoausearch -c 'nginx' --raw | audit2allow -a -M local-nginx>sudosemodule -i local-nginx.pp>sudofidnsmasq用のモジュールを作成し、インストールします。>sudoif test `ausearch -c 'dnsmasq' --raw | wc -l` -gt 0 ; then>sudoausearch -c 'dnsmasq' --raw | audit2allow -a -M local-dnsmasq>sudosemodule -i local-dnsmasq.pp>sudofiin.tftpd用のモジュールを作成し、インストールします。>sudoif test `ausearch -c 'in.tftpd' --raw | wc -l` -gt 0 ; then>sudoausearch -c 'in.tftpd' --raw | audit2allow -a -M local-tftpd>sudosemodule -i local-tftpd.pp>sudofi
SELinux強制モードを再度有効化します。SELinuxを強制モードに設定します。>sudosetenforce 1SELinuxのステータスを確認します。>sudosestatus
2.4 まとめ #
この手順により、PXEサーバのネットワークインタフェース、ファイアウォール、およびSELinuxポリシーが、安全かつ機能的に動作するように正しく設定されていることが確認されました。
PXEサービングインタフェース(この例では
eno1)を確認し、publicfirewalldゾーンに割り当てました。dns、ntp、dhcp、dhcpv6、tftp、http、httpsを含む、PXE操作に必要なファイアウォールサービスを開きました。サービステストを容易にし、AVC拒否のログを記録するため、
SELinuxを一時的にpermissiveモードに設定しました。ausearchとaudit2allowを使用して、nginx、dnsmasq、in.tftpdなどのサービス用のカスタムSELinuxポリシーモジュールを生成し、インストールしました。SELinuxをenforcingモードに復元し、運用システムの安全を確保しました。
これらの手順が完了すると、PXEサーバは安全に設定され、IPv4またはIPv6を使用してネットワーク経由でクライアントマシンにサービスを提供する準備が整います。
3 必要なPXEサーバコンポーネントのインストール #
このセクションでは、SUSE Linux Enterprise Server 16.0で、PXEブートをサポートするために必要なパッケージ(GRUB 2、DHCP、TFTP、および/またはHTTPコンポーネントを含む)をインストールする方法について説明します。
3.1 概要 #
SUSE Linux Enterprise Server 16.0でPXEブートサーバを設定するには、いくつかのサービスとツールをインストールする必要があります。セットアップによっては、以下のものが必要になる場合があります。
dnsmasqパッケージは、DNSサーバ、TFTPサーバ、DHCPサーバ(DHCPv4およびDHCPv6)の組み合わせを提供し、IPv6ルータ広告(RA)を限定的にサポートします。以下のものを提供します。
dnsmasq DHCPサーバ:以下の要求とクライアントのアーキテクチャに応じて、DHCPオプションの条件付き配信をサポートします。
DHCPv4およびDHCPv6を使用したPXEブート要求
DHCPv4を使用したHTTPブート要求
注記: DHCPv6経由のHTTPブートにおけるdnsmasqの制限事項現在、dnsmasqは必要な
vendor-classDHCPv6オプションの送信をサポートしていません。
dnsmasq TFTPサーバ:PXEブート中にTFTP経由でブートローダファイル、カーネル、initrdを配信します。
dnsmasq DNSサーバ:インストーラ/OS内のクライアントファームウェアと
/etc/resolv.confのドメイン名とIPアドレスの再帰的解決を提供します。dnsmasq IPv6 RA:PXEサーバがルータとしても動作している場合、IPv6 RAの送信をサポートします(設定可能なのは「一般的なRAパターン」に制限されます)。
keaパッケージはDHCPサーバで、ISC DHCPサーバの後継です。以下の要求とクライアントのアーキテクチャに応じて、DHCPオプションの条件付き配信をサポートします。
DHCPv4およびDHCPv6を使用したPXEブート要求
DHCPv4を使用したHTTPブート要求
注記: DHCPv6経由のHTTPブートにおけるKeaの制限事項現在、Keaは必要な
vendor-classDHCPv6オプションの送信をサポートしていません。詳細については、https://kea.readthedocs.io/en/latest/arm/dhcp6-srv.html#id4を参照してください。
TFTPサーバは、ブートローダファイル、カーネル、およびinitrdをTFTP経由で配信します。一方、keaによるPXEブートはtftpパッケージで提供され、HTTPブートには必要ありません。dnsmasq を使用している場合、tftpパッケージは必要ありません。
HTTP経由でインストーライメージを提供するためのnginxパッケージのような Webサーバ。
注記: HTTPサーバの必要性nginxのようなHTTP/HTTPSサーバはほぼ常に必要です。その用途はHTTPブートだけにとどまりません。特に、以下のようなシナリオで必要になることがあります。
HTTPブートの基本要件です。
squashfs.imgを提供するために推奨されます。ブートコマンドラインでroot=live:tftp://.../squashfs.imgを使用できます。また、
SLES-16.0-Full-*.inline.isoのinst.install_url=http://.../install/ブートコマンドラインパラメータで、無人インストール用のインストールプロファイルやその他のファイルとともにRPMを Agamaに提供する場合にも推奨されます。
GRUB 2ブートローダパッケージは、サポートされているアーキテクチャと方法でネットワークブートを提供します。たとえば、AMD64/Intel 64アーキテクチャは、ネットワークブートに2つの方法を提供しています。BIOSとUEFI。さらに、UEFIは通常、PXE (TFTP)とHTTPブートをサポートしています。pxelinuxのような他のブートローダはUEFIとHTTPブートをサポートしていません。
オプションで、IPv6用のルータ広告デーモン(radvdパッケージなど)。これは、 SLESがインストーラネットワークのルータとしても動作する場合に、以下を実行する場合に必要です。
PXEまたはHTTPブートクライアントのネットワーク上でルーティングを設定する。
PXEまたはHTTPブートクライアントのネットワーク上でDHCPv6の使用を有効にする。
3.2 要件 #
SUSE Linux Enterprise Server 16.0を管理者特権で実行し、SUSEカスタマーセンターに登録され、SUSEConnectを使用して適切なオンラインリポジトリにアクセスできるように設定されているシステム。
有効なSLEモジュール:Server Applications Module、レガシモジュール、およびBase System Module。
ネットワークサービスおよびブートローダ用SLEモジュールリポジトリへのアクセス。
パッケージを取得するための機能しているインターネット接続。
3.3 パッケージのインストール #
以下の手順で、PXEブートサーバに必要なコアパッケージをインストールします。
共通の要件として、GRUB 2ブートローダとnginx HTTPサーバをインストールします。
>sudozypper install grub2 nginx以下のいずれかのコマンドを実行して、ご使用のアプローチに不可欠なパッケージをインストールします。
DHCPサーバの場合は kea、TFTPサーバの場合はtftp
>sudozypper install kea tftpDHCP、DNS、およびTFTPサーバの共通プロバイダとしてdnsmasq
>sudozypper install dnsmasq
注記: Keaとdnsmasqが提供するDHCPサーバの制限事項IPv6経由のHTTPブートは、keaとdnsmasqパッケージが提供するDHCPサーバでは現在サポートされていません。UEFI仕様で要求されているように、HTTPクライアントに
vendor-classオプションを返送することもサポートされていません。オプションで、他のプラットフォームをサポートする予定であれば、追加のアーキテクチャ固有のGRUB 2ターゲットをインストールします。
AMD64/Intel 64アーキテクチャの場合:
>sudozypper install grub2-x86_64-efi grub2-i386-pcAArch64アーキテクチャの場合:
>sudozypper install grub2-aarch64-efippc64leアーキテクチャの場合:
>sudozypper install grub2-ppc64le-ieee1275
注記: PXEサーバがサーバマシンのアーキテクチャとは異なるクライアントにGRUB 2パッケージを配信する方法GRUB 2のアーキテクチャ固有のnoarch.rpmパッケージは、PXEサーバが設定されているマシンのアーキテクチャに関係なく、インストールメディア/リポジトリの
noarchサブディレクトリに含まれています。つまり、他のアーキテクチャのクライアントをサポートするために、AMD64/Intel64マシンで動作するPXEサーバにgrub2-arm64-efi パッケージとgrub2-powerpc-ieee1275パッケージをインストールすることができます。AMD64/Intel 64またはAArch64用のUEFIセキュアブートが必要で、インストールメディアISOのファイルを使用しない場合は、オプションでshimパッケージをインストールできます。
>sudozypper install shimオプションで、PXEサーバをルータとして使用する場合は、ルータ広告デーモンradvdをインストールします(運用ネットワークでは推奨されません)。
>sudozypper install radvdISOとディレクトリツリーを簡単にコピーまたは同期できるように、rsyncユーティリティをインストールします。
>sudozypper install rsyncサービスがインストールされているが、まだ開始されていないことを確認します。設定については以降のセクションで説明します。
4 PXEサーバ用のGRUB 2 NetBootディレクトリの作成 #
このセクションでは、grub2-mknetdirを使用して、PXEサーバ用のGRUB 2 NetBootディレクトリを作成する方法について説明します。このコマンドは、AMD64/Intel 64 (UEFIとBIOS)、 AArch64、およびppc64leシステム用のアーキテクチャ固有のディレクトリを生成します。UEFIセキュアブートをサポートするには、管理者はインストールメディアから署名付きEFIファイルをコピーするか、shimパッケージを使用してデフォルトの署名なしブートローダファイルを置き換える必要があります。
4.1 概要 #
このセクションでは、複数のアーキテクチャでPXEサーバを展開するためにGRUB 2 NetBootディレクトリを設定する方法について説明します。grub2-mknetdirコマンドは、プラットフォームごとに/srv/tftpboot/boot/grub2/の下に、アーキテクチャ固有のディレクトリを作成します。たとえば、AMD64/Intel 64システムは、UEFI (x86_64-efi)とレガシBIOS (i386-pc)の両方のディレクトリを生成し、AArch64とppc64leシステムはそれぞれのUEFIディレクトリ (arm64-efiとpowerpc-ieee1275)を作成します。
デフォルトの署名なしのcore.efiファイルでは提供されないUEFIセキュアブートをサポートするには、管理者は、インストールメディアから署名付きEFIファイルをコピーするか、shimパッケージをインストールして、必要なブートローダファイル (shim.efi、grub.efi、MokManager.efi)を適切なアーキテクチャディレクトリに手動でコピーします。これにより、適切なシンボリックリンク解決が確保され、すべてのファイルをTFTPルートディレクトリ内に保持することができます。
4.2 要件 #
次のパッケージ(grub2、tftp)、および他のアーキテクチャ固有のGRUB 2 パッケージ(grub2-x86_64-efiやgrub2-i386-pcなど)がインストールされていることを確認します。
インストールメディア(ISO)がマウント可能であるか、shimパッケージがシステムにインストールされていることを確認します。ターゲットアーキテクチャ用のインストールメディア(ISO)は、SUSEカスタマーセンターからダウンロードできます。
4.3 NetBootディレクトリとUEFIセキュアブートの準備 #
この手順では、PXEネットワークブートに必要なGRUB 2ディレクトリ構造を作成し、オプションで複数のアーキテクチャにわたる UEFIセキュアブートのサポートを設定します。
GRUB 2 NetBootディレクトリ構造を作成します。
>sudogrub2-mknetdir --net-directory=/srv/tftpboot --subdir=/boot/grub2これにより、アーキテクチャ固有のディレクトリが作成されます。
AMD64/Intel 64:
/srv/tftpboot/boot/grub2/x86_64-efiと/srv/tftpboot/boot/grub2/i386-pcAArch64:
/srv/tftpboot/boot/grub2/arm64-efippc64le:
/srv/tftpboot/boot/grub2/powerpc-ieee1275
警告grub2-mknetdirによって作成されたgrub.cfgファイルを手動で上書きしないでください。/srv/tftpboot/boot/grub2/ディレクトリの下にあるfonts/やlocale/など、その他のアーキテクチャに依存しないディレクトリをTFTPサーバにコピーします。AMD64/Intel 64またはAArch64アーキテクチャでは、
grub2-mknetdirコマンドでインストールされた/srv/tftpboot/boot/grub2/ARCH-efi/core.efiファイルをUEFI PXEにも使用できます。ただし、これらは署名されておらず、UEFIセキュアブートをサポートしていません。サポートされているAMD64/Intel 64およびAArch64アーキテクチャで、UEFIセキュアブートをオプションで有効にするには、以下の手順のいずれかを実行します。インストールメディアISOから必要なファイルをコピーします。
ISOイメージをマウントします。
>sudomount -o loop /PATH/TO/SLES.ISO /mntEFIファイルをコピーします。
>sudocp -v /mnt/EFI/BOOT/*.efi /srv/tftpboot/boot/grub2/ARCH-efi/1ARCH-efiをx86_64-efiまたはarm64-efi(UEFIセキュアブートでサポートされているアーキテクチャ)に置き換えます。インストールメディアISOをアンマウントします。
>sudoumount /mnt
インストールメディアISOのファイルを使用しない場合は、shimパッケージを使用します。
まだインストールしていない場合は、shimパッケージをインストールします。
>sudozypper install shim必要なアーキテクチャの署名済みブートローダファイルをコピーします。
shim.efiファイルをコピーします。AMD64/Intel 64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/x86_64/shim.efi /srv/tftpboot/boot/grub2/x86_64-efi/bootx64.efiAArch64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/aarch64/shim.efi /srv/tftpboot/boot/grub2/arm64-efi/bootaa64.efi
grub.efiファイルをコピーします。AMD64/Intel 64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/x86_64/grub.efi /srv/tftpboot/boot/grub2/x86_64-efi/AArch64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/aarch64/grub.efi /srv/tftpboot/boot/grub2/arm64-efi/
MokManager.efiファイルをコピーします。AMD64/Intel 64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/x86_64/MokManager.efi /srv/tftpboot/boot/grub2/x86_64-efi/AArch64アーキテクチャの場合:
>sudocp -v -p -L /usr/share/efi/aarch64/MokManager.efi /srv/tftpboot/boot/grub2/arm64-efi/
注記-Lフラグは、シンボリックリンクを解決して、ファイルがTFTPルート内に留まるようにします。
5 インストーライメージコンテンツの準備 #
このセクションでは、PXEブート環境用にSUSE Linux Enterprise Server 16.0インストールメディアからインストーラファイルを抽出して整理する方法を説明します。このセクションは、.install.isoイメージとRPMパッケージの両方をカバーし、異なるアーキテクチャやインストールタイプに関する具体的な手順を示します。
5.1 概要 #
SUSE Linux Enterprise Server 16.0は、さまざまなPXEブートシナリオをサポートする複数の形式のインストーラファイルを提供します。Agamaインストーラは、カーネルイメージ(linux)、初期RAMディスク(initrd)、圧縮されたルートファイルシステム(squashfs.img)の3つの必須ファイルを必要とします。これらのファイルは、インストールメディアから抽出し、TFTPやHTTP経由でアクセス可能なディレクトリ構造に整理する必要があります。
このセクションでは、.install.isoイメージとRPMパッケージの両方の準備方法について説明し、SUSE Linux Enterprise Server 16.0でサポートされるさまざまなアーキテクチャとインストールタイプとの互換性を確保します。
5.2 要件 #
SUSEカスタマーセンターで入手可能なSUSE Linux Enterprise Server 16.0インストールメディア。以下の項目を選択することができます。
オンラインISO:ネットワークインストール用のインストーラのみ(
SLES-16.0-Online-ARCH-BUILD.install.iso)フルISO:インストールリポジトリ付きのインストーラ(
SLES-16.0-Full-ARCH-BUILD.install.iso)RPMパッケージ: tftpboot-agama-installer-SUSE_SLE_16_PXE-ARCH
一時的なマウントポイント(
/mntなど)選択したインストール方法に応じて、
/srv/tftpbootおよび/srv/installの下の十分なディスク容量ディレクトリの作成やファイルのコピーのための管理者特権。
5.3 ISOイメージからのインストーラファイルの準備 #
ISOイメージは、インストーラファイルを抽出するための簡単な方法を提供します。以下の手順は、異なるアーキテクチャのオンラインとフルISOタイプの両方をカバーします。
5.3.1 オンラインISOイメージの使用 #
オンラインISOイメージにはインストーラコンポーネントのみが含まれており、システムインストール時にインストールリポジトリへのネットワークアクセスが必要です。これはGRUBのSLES-16.0 Online Installationブートメニューエントリに対応しています。
インストールファイルのディレクトリ構造を作成します。
>sudomkdir -p /srv/tftpboot/boot/images/SLES-16.0/ARCH/オンラインISOイメージをマウントします。
>sudomount -oro,loop /srv/install/iso/SLES-16.0-Online-ARCH-BUILD.install.iso /mntカーネルファイルとInitrdファイルをコピーします。
>sudocp /mnt/boot/ARCH/loader/linux /srv/tftpboot/boot/images/SLES-16.0/ARCH/>sudocp /mnt/boot/ARCH/loader/initrd /srv/tftpboot/boot/images/SLES-16.0/ARCH/圧縮されたルートファイルシステムをコピーします。
>sudocp /mnt/LiveOS/squashfs.img /srv/tftpboot/boot/images/SLES-16.0/ARCH/ISOイメージをアンマウントします。
>sudoumount /mnt
次のディレクトリ構造を作成します。
>sudomkdir -p /srv/tftpboot/boot/images/SLES-16.0/ppc64le/ISOイメージをマウントします。
>sudomount -oro,loop /srv/install/iso/SLES-16.0-Online-ppc64le-BUILD.install.iso /mntカーネルファイルとinitrdファイルをコピーします(ppc64leの場合、パス構造が異なることに注意してください)。
>sudocp /mnt/boot/ppc64le/linux /srv/tftpboot/boot/images/SLES-16.0/ppc64le/>sudocp /mnt/boot/ppc64le/initrd /srv/tftpboot/boot/images/SLES-16.0/ppc64le/圧縮されたルートファイルシステムをコピーします。
>sudocp /mnt/LiveOS/squashfs.img /srv/tftpboot/boot/images/SLES-16.0/ppc64le/ISOイメージをアンマウントします。
>sudoumount /mnt
5.3.2 フルISOイメージの使用 #
フルISOイメージには、インストーラとインストールリポジトリの両方が含まれており、外部ネットワークに依存することなくローカルにインストー ルすることができます。これは、inst.install_url=http://pxe.example.net/install/SLES-16.0/${arch}パラメータが追加されたgrubのSLES-16.0 Local Installationブートメニューエントリに対応します。
インストーラファイルとインストールリポジトリの両方のディレクトリを作成します。
>sudomkdir -p /srv/tftpboot/boot/images/SLES-16.0/ARCH/>sudomkdir -p /srv/install/SLES-16.0フルISOイメージをマウントします。
>sudomount -oro,loop /srv/install/iso/SLES-16.0-Full-ARCH-BUILD.install.iso /mntカーネルファイルとinitrdファイルをコピーします(前の手順で示したようにppc64le用にパスを調整してください)。
>sudocp /mnt/boot/ARCH/loader/linux /srv/tftpboot/boot/images/SLES-16.0/ARCH/>sudocp /mnt/boot/ARCH/loader/initrd /srv/tftpboot/boot/images/SLES-16.0/ARCH/圧縮されたルートファイルシステムをコピーします。
>sudocp /mnt/LiveOS/squashfs.img /srv/tftpboot/boot/images/SLES-16.0/ARCH/ローカルHTTPサーバアクセス用のインストールリポジトリをコピーします。
>sudorsync -avP /mnt/install/ /srv/install/SLES-16.0/ARCH/ISOイメージをアンマウントします。
>sudoumount /mnt
5.4 RPMパッケージからのインストーラファイルの準備 #
RPMパッケージは、オンラインインストーラファイルを入手するための代替方法を提供します。
必要なパッケージをインストールします。
>sudozypper in tftpboot-agama-installer-SUSE_SLE_16-ARCHlinux、initrd、squashfs.imgを tftpbootにコピーします。
>sudomkdir -p /srv/tftpboot/boot/images/SLES-16.0/ARCH>sudocd /srv/tftpboot/boot/images/SLES-16.0/ARCH>sudocp -v /usr/share/tftpboot-installation/agama-installer-SUSE_SLE_16/ARCH/loader/linux .>sudocp -v /usr/share/tftpboot-installation/agama-installer-SUSE_SLE_16/ARCH/loader/initrd .>sudocp -v /usr/share/tftpboot-installation/agama-installer-SUSE_SLE_16/ARCH/loader/squashfs.img .
5.5 推奨ディレクトリ構造 #
抽出したファイルは、一貫性と保守の容易さを確保するために、以下のディレクトリレイアウトに従って整理します。この構造は、複数のアーキテクチャとインストールタイプをサポートします。
/srv/tftpboot/ ├── boot/ │ ├── grub2/ │ │ ├── x86_64-efi/ │ │ │ ├── bootx64.efi │ │ │ └── grub.cfg │ │ ├── i386-pc/ │ │ │ └── core.0 │ │ ├── arm64-efi/ │ │ │ └── bootaa64.efi │ │ └── powerpc-ieee1275/ │ │ └── core.elf │ └── images/ │ └── SLES-16.0/ │ ├── x86_64/ │ │ ├── linux 1 │ │ ├── initrd 2 │ │ └── squashfs.img 3 │ ├── aarch64/ │ └── ppc64le/ /srv/install/ └── SLES-16.0/ ├── x86_64/ 4 ├── aarch64/ └── ppc64le/
5.6 インストールの検証 #
インストーラファイルを抽出して整理した後、必要なコンポーネントがすべて存在し、アクセス可能であることを検証します。
必要なファイルがあるか確認します。
>ls -la /srv/tftpboot/boot/images/SLES-16.0/ARCH/*適切なファイルアクセス権があることを確認します。
>sudofind /srv/tftpboot/boot/images/ -type d -exec chmod 0755 {} \;>sudofind /srv/tftpboot/boot/images/ -type f -exec chmod 0644 {} \;
抽出されたすべてのファイルが、TFTPおよびHTTPサービスで読み取り可能であることを確認します。ファイルは、ブートプロセス中にPXEクライアントによってアクセスされるため、適切な権限とサービス設定が、展開を成功させるために不可欠です。
5.7 次のステップ #
インストーラファイルが適切に準備され、整理されていれば、以下の手順に進むことができます。
これらのファイルを参照するメニューエントリを使用したPXEブート用GRUB 2の設定
抽出したコンテンツを提供するためのHTTPとTFTPサービスの設定
PXEクライアントを適切なブートローダに誘導するためのDHCPの設定
抽出されたファイルは、root=live:http://pxe.example.net/boot/images/SLES-16.0/ARCH/squashfs.imgのようなパスを使用してGRUB 2設定で参照されます。
6 PXEブート用のGRUB 2の設定 #
このセクションでは、SUSE Linux Enterprise Server 16.0でPXEベースのブート用にGRUB 2ブートローダを設定する方法について説明します。ネットワークブートディレクトリ構造の作成、アーキテクチャ固有のブートローダの設定、複数のアーキテクチャとインストールシナリオをサポートする柔軟な設定システムの実装について説明します。
6.1 概要 #
GRUB 2はPXEクライアントのネットワークブートローダとして機能し、カーネルファイルとinitrdファイルをロードしてAgamaインストーラを起動します。このセクションでは、クライアントアーキテクチャを自動的に検出し、ネットワークインタフェースの選択を管理し、複数のインストールタイプとターゲットアーキテクチャをサポートする統合ブートメニューを提供する、洗練されたGRUB 2設定を作成する方法を示します。
設定アプローチは、アーキテクチャの検出、変数定義、ブートメニューエントリのための個別のファイルを持つモジュラー設計を使用しています。これにより、異なるハードウェアプラットフォーム間で一貫性を維持しながら、マシン固有の設定や自動インストールプロファイルのサポートが可能になります。
6.2 要件 #
前のセクションで説明したように、GRUB 2のネットワークブートディレクトリ構造が整っていることを確認します。
前のセクションで説明したように、インストーラファイルが適切に整理されていることを確認します。
すべてのターゲットアーキテクチャ用のGRUB 2パッケージ(grub2-x86_64-efi、grub2-i386-pc、grub2-aarch64-efi、および grub2-ppc64le-ieee1275)をインストールする必要があります。
UEFIセキュアブートサポート用のshimパッケージ(オプション)。
/srv/tftpbootまたは同等のPXEルートへの管理アクセス。
6.3 GRUB 2設定の作成 #
GRUB 2設定ファイルは、クライアントのアーキテクチャの検出、ネットワークインタフェースの管理、他の設定ファイルのロードという3つの主要なタスクを処理します。このモジュラー方式は、さまざまな展開シナリオに柔軟に対応できます。
grub.cfgファイルの設定 #メインのGRUB 2設定ファイルを
/srv/tftpboot/boot/grub2/grub.cfgに作成します。>sudocat > /srv/tftpboot/boot/grub2/grub.cfg << 'EOF'# Architecture detection and mapping if [ "$grub_cpu" == "i386" ]; then set arch='x86_64' elif [ "$grub_cpu" == "x86_64" ]; then set arch='x86_64' elif [ "$grub_cpu" == "arm64" ]; then set arch='aarch64' elif [ "$grub_cpu" == "powerpc" ]; then set arch='ppc64le' fi if [ "X$arch" == "X" ]; then echo "ERROR: No architecture found for ${grub_cpu}" exit else echo "Running on $arch CPU architecture" fi export arch # Network interface configuration for PXE-selected NIC # - dracut based images on SLE-16: set ipcfg="ifname=pxe0:${net_default_mac} ip=pxe0:dhcp" export ipcfg # - linuxrc installer on SLE-15: set ifcfg="ifcfg=${net_default_mac}=dhcp" export ifcfg # Define typical serial console kernel parameter #set sconsole="console=tty0 console=ttyS0,115200n8" #export sconsole # Load machine-specific configuration if available if [ -s "${config}/${net_default_mac}/grub.cfg" ]; then ## Source a host specific configuration of grub menu: source "${config}/${net_default_mac}/grub.cfg" else ## Source default grub boot menu: source "${prefix}/menu.cfg" fi EOF
- アーキテクチャの検出
GRUB 2のCPUタイプをディストリビューションアーキテクチャにマッピングし、異なるハードウェアプラットフォームで動作する統合メニューエントリを可能にします。
- ネットワークインタフェース管理
pxe0というPXEブートインタフェース上でのみdhcpを有効にするために、 grub2変数${net_default_mac}を使用して${ipcfg}変数を定義し、 マルチインタフェースシステムでのネットワークプロービングの問題を回避します。- ユーティリティ定義
シリアルコンソールパラメータを指定して、一般的な
${sconsole}変数を定義します。- マシン固有の設定
MACアドレスに基づいてオプションのマシンごとの設定ファイルをロードし、カスタマイズされたマシンごとのブートパラメータと自動インストールプロファイルを可能にします。
6.5 マシン固有の設定 #
高度な展開では、デフォルト設定を上書きしたり、自動化されたインストールパラメータを提供するマシン固有の設定ファイルを作成できます。
マシン固有の設定用のディレクトリを作成します。
>sudomkdir -p /srv/tftpboot/boot/configMACアドレスが
aa:bb:cc:dd:ee:ffのマシンの場合、固有の設定を作成します。>sudomkdir -p /srv/tftpboot/boot/config/aa:bb:cc:dd:ee:ffマシン固有の
grub.cfgを作成します。>sudocat > /srv/tftpboot/boot/config/aa:bb:cc:dd:ee:ff/grub.cfg << 'EOF'# Machine-specific configuration for aa:bb:cc:dd:ee:ff set default='SLES-16.0 Full Installation' # Activate the menu-entry after 5sec timeout set timeout=5 # Use know predictable network interface name set ipcfg="ip=eno1:dhcp" # Set the autoinstall variable for this machine set autoinstall="inst.auto=http://pxe.example.net/install/profiles/aa:bb:cc:dd:ee:ff/sles16.json" export autoinstall # Load the default menu source "/boot/grub2/menu.cfg" EOFまたは、ホスト固有の
grub.cfgに独自のメニューエントリを提供します(例: 特定のブート試行用に生成)。>sudocat > /srv/tftpboot/boot/config/aa:bb:cc:dd:ee:ff/grub.cfg << 'EOF'set default='SLES-16.0 Auto-Installation' set timeout=5 menuentry 'SLES-16.0 Auto-Installation' { linux /boot/images/SLES-16.0/${arch}/linux showopts root=live:http://pxe.example.net/boot/images/SLES-16.0/${arch}/squashfs.img inst.install_url=http://pxe.example.net/install/SLES-16.0/${arch} inst.auto=http://pxe.example.net/install/profiles/${net_default_mac}/sles16.json ip=eno1:dhcp initrd /boot/images/SLES-16.0/${arch}/initrd } EOF
-
default 自動的にブートするメニューエントリを指定します
-
timeout ブートタイムアウトを秒単位で設定します
-
ipcfg 特定のハードウェアのネットワークインタフェース設定を上書きします
-
autoinstall マシン固有の自動インストールプロファイルのURLを提供します。
6.6 GRUB 2設定の検証 #
設定ファイルを作成したら、セットアップが正しく、必要なファイルがすべて揃っていることを検証します。
GRUB 2のディレクトリ構造を確認します。
>find /srv/tftpboot/boot/grub2 -type f -name "*.cfg" -o -name "*.efi" -o -name "core.*"GRUB 2ツールでテストして、設定ファイルの構文を確認します。
>grub2-script-check /srv/tftpboot/boot/grub2/grub.cfg>grub2-script-check /srv/tftpboot/boot/grub2/menu.cfg適切なファイルアクセス権があることを確認します。
>sudochmod -R 644 /srv/tftpboot/boot/grub2/*.cfg>sudofind /srv/tftpboot/boot/grub2 -type d -exec chmod 0755 {} \;
実際のPXEクライアントでGRUB 2設定をテストし、適切なアーキテクチャ検出とメニュー機能を確認します。${net_default_mac}変数は、実際のネットワークブートシナリオでのみ使用可能です。
6.7 GRUB 2設定のトラブルシューティング #
GRUB 2 PXE設定で発生するよくある問題とその解決策。それぞれの問題には、問題を解決するための診断手順と具体的なコマンドが記載されています。
6.7.1 アーキテクチャの検出の失敗 #
GRUB 2が正しいアーキテクチャを検出できない場合、クライアントは正しくないバイナリで起動したり、完全にロードに失敗したりすることがあります。
GRUB 2設定にデバッグ出力を追加して、検出された値を確認します。
>sudocat >> /srv/tftpboot/boot/grub2/grub.cfg << 'EOF'# Debug architecture detection echo "Detected grub_cpu: ${grub_cpu}" echo "Mapped arch: ${arch}" sleep 3 EOF設定構文をテストします。
>grub2-script-check /srv/tftpboot/boot/grub2/grub.cfgアーキテクチャのマッピングが不完全な場合は、検出ロジックを拡張します。
>sudosed -i '/elif \[ "$grub_cpu" == "powerpc" \]/a\\nelif [ "$grub_cpu" == "riscv64" ]; then\n set arch='\''riscv64'\''\\' /srv/tftpboot/boot/grub2/grub.cfgアーキテクチャ固有のディレクトリが存在することを確認します。
>ls -la /srv/tftpboot/boot/grub2/
6.7.2 ネットワークインタフェースが見つからない #
ファームウェアの実装によっては、${net_default_mac}変数が正しく設定されず、ネットワーク設定に失敗することがあります。
ネットワーク変数をチェックするためのデバッグ出力を追加します。
>sudosed -i '/set ipcfg=/i\\necho "Default MAC: ${net_default_mac}"\necho "Network variables set"\nsleep 2' /srv/tftpboot/boot/grub2/grub.cfgフォールバックネットワーク設定を作成します。
>sudocat >> /srv/tftpboot/boot/grub2/grub.cfg << 'EOF'# Fallback network configuration if net_default_mac is empty if [ "X${net_default_mac}" == "X" ]; then set ipcfg="ip=dhcp" set ifcfg="ifcfg=*=dhcp" echo "WARNING: Using fallback network configuration" sleep 2 fi EOF特定のインタフェースでネットワーク設定をテストします。
>sudoecho 'set ipcfg="ip=eno1:dhcp"' > /srv/tftpboot/boot/config/test-network.cfgターゲットシステムのネットワークインタフェース名を確認します。
>ip link show
6.7.3 ファイルパスが見つからない #
ファイルパスが正しくないと、GRUB 2がカーネルファイルとinitrdファイルをロードできず、ブートに失敗します。
インストーラファイルが想定される場所に存在するかどうかを確認します。
>find /srv/tftpboot/boot/images -name "linux" -o -name "initrd" -o -name "squashfs.img"ブートファイルへのTFTPアクセスを確認します。
>tftp localhost -c get /boot/grub2/grub.cfg /tmp/test-grub.cfgインストーラファイルへのHTTPアクセスをテストします。
>curl -I http://localhost/boot/images/SLES-16.0/x86_64/linuxファイルアクセス権と所有権を確認します。
>ls -la /srv/tftpboot/boot/images/SLES-16.0/*/必要に応じて権限を修正します。
>sudochmod -R 644 /srv/tftpboot/boot/images/>sudofind /srv/tftpboot/boot/images/ -type d -exec chmod 755 {} \;シンボリックリンクが壊れていないことを確認します。
>find /srv/tftpboot/boot/images/ -type l -exec ls -la {} \;
6.7.4 EFIブートの失敗 #
EFIおよびセキュアブートの問題により、ブートローダが正しく初期化されなかったり、認証に失敗したりすることがあります。
セキュアブートファイルが存在することを確認します。
>ls -la /srv/tftpboot/boot/grub2/x86_64-efi/*.efishim (bootx64.efiまたはshim.efi)、grub.efi、MokManager.efiファイルが正しくコピーされていることを確認します。
>file /srv/tftpboot/boot/grub2/x86_64-efi/bootx64.efiEFIファイルの整合性を確認します。
>sha256sum /srv/tftpboot/boot/grub2/x86_64-efi/*.efiファイルがTFTP経由でアクセス可能かどうかをテストします。
>tftp localhost -c get /boot/grub2/x86_64-efi/bootx64.efi /tmp/test-shim.efiaarch64システムの場合、ARM64 EFIファイルを確認します。
>ls -la /srv/tftpboot/boot/grub2/arm64-efi/*.efiDHCP設定で正しいブートローダのパスが提供されていることを確認します。
>grep -n "bootx64.efi\|shim.efi\|bootaa64.efi" /etc/dnsmasq.d/dhcp.conf /etc/kea/kea-dhcp?.conf /etc/dhcpd?.confファイルがない場合は、/mntにマウントされたISOまたはshimパッケージファイルから再度コピーします。
>sudocp -v /mnt/EFI/BOOT/*.efi /srv/tftpboot/boot/grub2/x86_64-efi/>sudocp -pL /usr/share/efi/x86_64/*.efi /srv/tftpboot/boot/grub2/x86_64-efi/
6.7.6 詳細ログの有効化 #
永続的な問題については、包括的なログを有効にして、ブートプロセスに関する詳細な情報を取得します。
メイン設定のデバッグバージョンを作成します。
>sudocp /srv/tftpboot/boot/grub2/grub.cfg /srv/tftpboot/boot/grub2/grub.cfg.backup包括的なデバッグ出力を追加します。
>sudocat > /srv/tftpboot/boot/grub2/debug.cfg << 'EOF'# Debug configuration for GRUB troubleshooting set debug=all set pager=1 echo "=== GRUB Debug Information ===" echo "grub_cpu: ${grub_cpu}" echo "grub_platform: ${grub_platform}" echo "net_default_mac: ${net_default_mac}" echo "net_default_server: ${net_default_server}" echo "=============================" sleep 5 EOFデバッグ設定をメインファイルに含めます。
>sudosed -i '1i\source "${prefix}/debug.cfg"' /srv/tftpboot/boot/grub2/grub.cfgブート試行中のTFTPログを監視します。
>sudo journalctl -f -u tftp.socketDHCPログでPXE要求を監視します。
>sudo journalctl -f -u dhcpdトラブルシューティングの後、デバッグモードを無効にします。
>sudosed -i '/source "${prefix}\/debug.cfg"/d' /srv/tftpboot/boot/grub2/grub.cfg
6.8 次のステップ #
GRUB 2を適切に設定したら、以下の手順に進むことができます。
ブートファイルとインストーラコンテンツを提供するためのHTTPとTFTPサービスの設定
PXEクライアントを適切なブートローダに誘導するためのDHCPサービスの設定
ターゲットハードウェア上での完全なPXEブートプロセスのテスト
柔軟なGRUB 2設定システムは、洗練されたPXE展開シナリオの基盤を提供し、統一されたインタフェースを通じて複数のアーキテクチャとインストールタイプをサポートします。
7 PXEブート用TFTPの設定 #
このセクションでは、SUSE Linux Enterprise Server 16.0インストール向けにGRUB 2ブートローダとPXEブートコンテンツを提供するようにTFTPサービスを設定する方法を説明します。従来のin.tftpdサーバと、dnsmasqが提供する統合TFTP機能について説明します。
7.1 概要 #
TFTPは、ネットワークブートプロセス中にPXEクライアントにブートローダファイルを提供します。SUSE Linux Enterprise Server 16.0は、tftpパッケージに含まれる従来のin.tftpdサーバと、dnsmasqに統合されたTFTP機能の2つのTFTPサーバ実装をサポートしています。
7.2 要件 #
インストール済みのtftpパッケージまたはdnsmasqパッケージのいずれか
/srv/tftpboot下に整理されたPXEブートファイルサービスを設定するための管理者特権
7.3 in.tftpdサーバの設定 #
in.tftpdサーバは、設定ファイル/etc/sysconfig/tftpを使用して、TFTPルートディレクトリおよびサーバオプションを定義します。
オプションで、TFTPオプションを設定して詳細ログを有効にします。
>sudosed -i 's/^TFTP_OPTIONS=.*/TFTP_OPTIONS="-v"/' /etc/sysconfig/tftp-vオプションを使用すると、TFTP経由で取得されたファイル名を確認するための詳細ログが有効になります。TFTPサービスを有効にして開始します。
>sudosystemctl enable --now tftp.service
7.4 dnsmasq TFTPサーバの設定 #
dnsmasqは、/srv/tftpbootディレクトリを使用するように有効化および設定できる、組み込みのTFTPサーバを提供します。
TFTP設定ファイルを作成します。
>sudocat > /etc/dnsmasq.d/tftp.conf << 'EOF'enable-tftp tftp-root=/srv/tftpboot EOFdnsmasqサービスを有効にして開始します。
>sudosystemctl enable --now dnsmasq
7.5 TFTP設定の検証 #
TFTPサーバの機能をテストし、PXEクライアントにファイルを提供できることを確認します。
テストファイルを作成します。
>echo "test file" | sudo tee /srv/tftpboot/test.txtTFTP経由でテストファイルを取得します。
>tftp localhost -c get test.txt /tmp/tftp-test.txtファイルが正常に取得されたことを確認します。
>cat /tmp/tftp-test.txtテストファイルをクリーンアップします。
>sudorm /srv/tftpboot/test.txt /tmp/tftp-test.txt
7.6 TFTP設定のトラブルシューティング #
PXEブート環境でTFTPサービスを設定する際によくある問題。
7.6.1 ポート69でのサービスの競合 #
in.tftpdとdnsmasqの両方がTFTPサービスにUDPポート69を使用するため、同時に実行できません。
実行中のサービスを確認します。
>systemctl status tftp.service dnsmasqポート69を使用しているサービスを確認します。
>ss -ulnp | grep :69競合するサービスを停止します(dnsmasqの例)。
>sudosystemctl stop dnsmasq優先するTFTPサービスを開始します。
>sudosystemctl start tftp.service
7.6.2 TFTPディレクトリの問題 #
TFTPルートディレクトリへのアクセスに問題があると、ファイル提供が妨げられることがあります。
in.tftpdのTFTPディレクトリ設定を確認します。
>grep TFTP_DIRECTORY /etc/sysconfig/tftpdnsmasqのTFTPディレクトリ設定を確認します。
>grep tftp-root /etc/dnsmasq.d/tftp.confディレクトリが存在するかどうかを確認します。
>ls -la /srv/tftpboot/ディレクトリが存在しない場合は、ディレクトリを作成します。
>sudomkdir -p /srv/tftpboot
7.6.3 TFTPログの有効化 #
詳細ログは、TFTP転送でのファイルアクセスの問題を特定するのに役立ちます。
現在のTFTPオプションを確認します。
>grep TFTP_OPTIONS /etc/sysconfig/tftp詳細ログを有効にします。
>sudosed -i 's/^TFTP_OPTIONS=.*/TFTP_OPTIONS="-v"/' /etc/sysconfig/tftpTFTPサービスを再起動します。
>sudosystemctl restart tftp.serviceTFTPログを監視します。
>journalctl -u tftp.service -f
7.7 次のステップ #
TFTPを設定したら、インストーラファイルを提供するHTTPサービスと、PXEクライアントを適切なブートローダに誘導するためのDHCPサービスの設定に進むことができます。
8 HTTP配信用のnginxの設定 #
このセクションでは、PXEブートコンテンツをHTTP経由で提供するようにnginxを設定して、クライアントがカーネル、initrd、squashfsイメージなどのインストーラファイルを中央の場所からロードできるようにする方法を説明します。HTTP配信は、大きなファイルの場合に、TFTPよりも優れたパフォーマンスを提供し、SUSE Linux Enterprise Server 16.0 Agamaのインストールに必要です。
8.1 概要 #
nginxはPXEブート環境のHTTPサーバとして機能し、Webベースの配信を通じてインストーラファイルへのアクセスを提供します。HTTPサーバはTFTPブートディレクトリとインストールリポジトリを公開し、PXEクライアントがカーネルイメージ、initrdファイル、Agamaインストーラコンポーネントを低速のTFTPプロトコルではなくHTTP経由でダウンロードできるようにします。
8.2 要件 #
インストール済みのnginxパッケージ
/srv/tftpboot/boot下に整理されたPXEブートファイル/srv/installで利用可能なインストールリポジトリnginxの設定を変更するための管理者特権
8.3 PXEブート用のnginxの設定 #
nginx設定は、HTTP URL経由で TFTPブートディレクトリとインストールリポジトリを公開するロケーションエイリアスを定義します。
nginx設定ファイルを編集します。
>sudovim /etc/nginx/nginx.confhttpセクションで、HTTPサーバブロックを設定します。>sudocat > /etc/nginx/nginx.conf << 'EOF'http { include mime.types; default_type application/octet-stream; charset utf-8; sendfile on; keepalive_timeout 65; server { listen 80 default_server; listen [::]:80 default_server; location / { root /srv/www/htdocs/; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /srv/www/htdocs/; } # Expose TFTP boot directory for HTTP boot location /boot { alias /srv/tftpboot/boot; autoindex on; } # Expose installation repositories and profiles location /install { alias /srv/install; autoindex on; } } } events { worker_connections 1024; } EOFnginx設定構文をテストします。
>sudonginx -tnginxサービスを有効にして開始します。
>sudosystemctl enable --now nginx.service
8.4 nginxx設定の検証 #
HTTPサーバの機能をテストし、PXEブートファイルとインストールコンテンツをクライアントに提供できることを確認します。
ブートファイルへのHTTPアクセスをテストします。
>curl -I http://localhost/boot/インストールディレクトリへのアクセスをテストします。
>curl -I http://localhost/install/特定のインストーラファイルにアクセスできることを確認します。
>curl -I http://localhost/boot/images/SLES-16.0/x86_64/liveiso/LiveOS/squashfs.img
8.5 nginx設定のトラブルシューティング #
PXEブートHTTP配信用にnginxを設定する際によくある問題。
8.5.1 設定構文エラー #
nginxの設定構文が正しくないため、サービスが正しく開始または再ロードされません。
設定構文をテストします。
>sudonginx -t起動に失敗した場合は、nginxサービスのステータスを確認します。
>systemctl status nginx.service詳細なエラーログを表示します。
>journalctl -u nginx.service -fnginxのエラーログファイルを確認します。
>tail -f /var/log/nginx/error.log
8.5.2 ファイルアクセスと権限の問題 #
nginxは権限が正しくないか、ディレクトリが見つからないためにファイルの提供に失敗することがあります。
ブートディレクトリが存在し、アクセス可能かどうかを確認します。
>ls -la /srv/tftpboot/boot/インストールディレクトリが存在するかどうかを確認します。
>ls -la /srv/install/nginxがディレクトリを読み込めることを確認します。
>sudo -u nginx ls /srv/tftpboot/boot/必要であれば、不足しているディレクトリを作成します。
>sudomkdir -p /srv/install適切な権限を設定します。
>sudochmod -R 755 /srv/tftpboot/boot /srv/install
8.5.3 ポートバインディングの競合 #
他のサービスがポート80を使用している場合、nginxの起動に失敗することがあります。
ポート80を使用しているサービスを確認します。
>ss -tlnp | grep :80必要であれば、競合するサービスを停止します。
>sudosystemctl stop apache2nginxサービスを開始します。
>sudosystemctl start nginx.servicenginxがポート80でリスンしていることを確認します。
>ss -tlnp | grep :80
8.6 次のステップ #
nginxをHTTP配信用に設定したら、PXEクライアントを適切なブートローダとHTTPリソースに誘導するためのDHCP サービスの設定に進むことができます。
9 dnsmasqを使用したDNSサーバの設定 #
このセクションでは、SUSE Linux Enterprise Server 16.0インストールリソースにアクセスするPXEクライアントにホスト名解決を提供するために、dnsmasqを使用してDNSサービスを設定する方法を説明します。DNS設定により、クライアントはブートURLやDHCP設定でIPアドレスの代わりにホスト名を使用できるようになります。
9.1 概要 #
DNSサービスにより、PXEクライアントはブートURLやインストールソース内のホスト名を解決できます。DNSサーバの完全な設定はこのドキュメントの範囲外ですが、このセクションでは、クライアントがPXEサーバのホスト名(PXE.EXAMPLE.NET)をIPアドレスに解決できるようにする、dnsmasqを使用した基本的なDNS設定について説明します。
DNS設定がない場合、ブートURLはhttp://192.168.1.200/やhttp://[2001:db8:0:1::200]/のようなIPアドレスを直接使用する必要があります。BIOS/UEFIファームウェアの実装によっては、DHCP TFTP URLのホスト名をサポートしておらず、tftp://[2001:db8:0:1::200]/のようなIPアドレスを必要とするものもあります。
9.2 要件 #
インストール済みのdnsmasqパッケージ
PXEサーバ用に設定された静的IPアドレス
DNSサービスを設定するための管理者特権
9.3 dnsmasq DNSサービスの設定 #
dnsmasq DNS設定はローカルホストの名前解決を提供し、外部クエリにはアップストリームネームサーバを使用します。
dnsmasq用のDNS設定ファイルを作成します。
>sudocat > /etc/dnsmasq.d/dns.conf << 'EOF'# DNS configuration file for dnsmasq # Log DNS queries log-queries # DNS cache behavior cache-size=10000 local-ttl=60 neg-ttl=10 # Never forward A or AAAA queries for plain names to upstream name servers domain-needed # Add local domain to simple names in /etc/hosts and DHCP expand-hosts # Specifies DNS domain and networks including local forward and reverse declarations domain=EXAMPLE.NET,192.168.1.0/24,local domain=EXAMPLE.NET,2001:db8:0:1::/64,local EOFシステムのhostsファイルにホスト名のエントリを追加します。
>sudocat >> /etc/hosts << 'EOF'192.168.1.200 PXE.EXAMPLE.NET 2001:db8:0:1::200 PXE.EXAMPLE.NET EOFdnsmasqの設定をテストします。
>sudodnsmasq --testdnsmasqサービスを有効にして開始します。
>sudosystemctl enable --now dnsmasq
デフォルトでは、dnsmasqは/etc/resolv.confのネームサーバをフォワーダとして使用し、/etc/hostsからレコードを提供します。これにより、PXEサーバは、外部ホスト名を解決しながら、PXE関連サービスにローカル解決を提供できます。
9.4 DNS設定の検証 #
DNSサーバの機能をテストし、PXEクライアントのホスト名解決が機能することを確認します。
IPv4ホスト名解決をテストします。
>nslookup PXE.EXAMPLE.NET localhostIPv6ホスト名解決をテストします。
>nslookup PXE.EXAMPLE.NET localhost | grep 2001:db8IPv4のDNS逆引きをテストします。
>nslookup 192.168.1.200 localhost外部DNS転送がまだ機能していることを確認します。
>nslookup google.com localhost
9.5 DNS設定のトラブルシューティング #
PXE環境でDNSサービス用にdnsmasqを設定する際によくある問題。
9.5.1 設定とサービスの問題 #
dnsmasqは、設定エラーやポートの競合が原因で起動に失敗することがあります。
dnsmasq設定構文をテストします。
>sudodnsmasq --testdnsmasqサービスの状態を確認します。
>systemctl status dnsmasqDNSポート53を使用しているサービスを確認します。
>ss -ulnp | grep :53dnsmasqのログでエラーを確認します。
>journalctl -u dnsmasq -f必要であれば、競合するDNSサービスを停止します。
>sudosystemctl stop systemd-resolved
9.5.2 ホスト名解決の失敗 #
DNSクエリは、誤った設定やホスト名エントリの欠落が原因で失敗することがあります。
hostsファイルにホスト名のエントリが存在するかどうかを確認します。
>grep PXE.EXAMPLE.NET /etc/hostsdnsmasqでドメイン設定を確認します。
>grep domain= /etc/dnsmasq.d/dns.conf詳細出力でDNSクエリをテストします。
>dig @localhost PXE.EXAMPLE.NETdnsmasqのクエリログを監視します。
>journalctl -u dnsmasq | grep "query"dnsmasqを再起動して設定を再ロードします。
>sudosystemctl restart dnsmasq
9.5.3 DNS転送の問題 #
アップストリームネームサーバの設定が正しくない場合、外部DNSクエリが失敗することがあります。
アップストリームネームサーバの設定を確認します。
>cat /etc/resolv.confアップストリームネームサーバへの直接クエリをテストします。
>nslookup google.com 8.8.8.8dnsmasqの転送設定を確認します。
>grep -E "server=|no-resolv" /etc/dnsmasq.d/dns.conf必要に応じて、特定のアップストリームネームサーバを追加します。
>sudoecho "server=8.8.8.8" >> /etc/dnsmasq.d/dns.confdnsmasqサービスを再起動します。
>sudosystemctl restart dnsmasq
9.6 次のステップ #
DNSサービスが設定されたので、PXEクライアントはブートURLやインストールソース内のホスト名を解決できるようになりました。クライアント設定のためにDNSサーバを参照するDHCPサービスの設定に進むことができます。
10 chronyを使用したNTPサーバの設定 #
このセクションでは、 SUSE Linux Enterprise Server 16.0のインストール中にPXEクライアントに正確な時刻同期を提供するために、chronyを使用してNTPサービスを設定する方法を説明します。適切な時刻同期は、ネットワークベースのインストール時の証明書の検証とシステムログに不可欠です。
10.1 概要 #
NTPサービスは、ネットワークインフラストラクチャ全体の正確な時刻同期を保証します。PXEブート環境では、HTTPS接続時の証明書の検証、適切なログのタイムスタンプ、および調整されたシステム操作のために、時刻の同期は極めて重要です。このセクションでは、chronyを使用した基本的なNTPサーバの設定について説明します。
10.2 要件 #
インストール済みのchronyパッケージ
>sudozypper install chronyアップストリームNTPサーバへのネットワーク接続
NTPサービスを設定するための管理者特権
10.3 chrony NTPサービスの設定 #
chronyサービスは、アップストリームサーバへの自動時刻同期と、ネットワーククライアントへのローカル時刻提供機能を備えたNTP機能を提供します。
chrony NTPサーバの設定 #chronyサービスを有効にして開始します。>sudosystemctl enable --now chronyd.service
10.4 NTP設定の検証 #
NTPサービスの機能をテストし、時刻同期が正しく機能することを確認します。
chronyサービスの状態を確認します。>systemctl status chronyd.service現在の時刻同期ステータスを表示します。
>chronyc tracking設定されたNTPソースを一覧表示します。
>chronyc sourcesNTPサーバ統計情報を確認します。
>chronyc sourcestats
10.5 NTP設定のトラブルシューティング #
PXE環境でNTPサービス用にchronyを設定する際によくある問題。
10.5.1 サービスの起動の問題 #
chronyサービスが設定エラーやネットワーク接続の問題により起動できないことがあります。
chronyサービスの状態とログを確認します。>systemctl status chronyd.service詳細なサービスログを表示します。
>journalctl -u chronyd.service -fchrony設定をテストします。>sudochronyd -Q必要に応じてサービスを再起動します。
>sudosystemctl restart chronyd.service
10.5.2 時刻同期の失敗 #
ネットワークの問題やサーバの設定が正しくないために、時刻同期に失敗することがあります。
現在の時刻同期ステータスを確認します。
>chronyc trackingNTPソースの接続性を表示します。
>chronyc sources -v即時同期を強制実行します。
>sudochronyc makestepシステムの時刻をハードウェアクロックと照合します。
>timedatectl statusNTPサーバへのネットワーク接続を確認します。
>chronyc activity
10.5.3 ファイアウォールとネットワークの問題 #
NTPトラフィックがファイアウォールルールによってブロックされ、時刻同期が妨げられることがあります。
ファイアウォールでNTPポートが開いているか確認します。
>firewall-cmd --list-services | grep ntp必要に応じてNTPサービスをファイアウォールに追加します。
>sudofirewall-cmd --permanent --add-service=ntpファイアウォール設定を再ロードします。
>sudofirewall-cmd --reloadNTP接続を手動でテストします。
>ntpdate -q pool.ntp.orgchronyポートの使用状況を確認します。>ss -ulnp | grep :123
10.6 次のステップ #
NTPサービスが設定されたら、PXEサーバとクライアントは正確な時刻同期を維持します。これにより、ネットワークベースのインストール時に、適切な証明書の検証および調整されたシステム運用が確保されます。
11 IPv6ルータ広告の設定 #
このセクションでは、PXEクライアントに適切なルータ広告を提供するために、IPv6ルータ広告機能を設定する方法について説明します。IPv6 RAは、SUSE Linux Enterprise Server 16.0インストールにおいて、IPv6ルーティング設定とステートフルDHCPv6アドレスの自動設定を可能にします。
11.1 概要 #
IPv6ルータ広告(RA)は、IPv6ルーティングやDHCPv6アドレス自動設定など、PXEクライアントに不可欠なネットワーク設定情報を提供します。このセクションでは、IPv6ルータが、ネットワークとデフォルトルートへのIPv6ルーティングを設定するための適切なルータ広告を提供し、AdvManagedFlag onを使用してステートフルDHCPv6アドレス自動設定を有効にするように設定されていることを前提としています。
11.2 要件 #
インストール済みのradvdパッケージ
サーバインタフェースのIPv6ネットワーク設定
ルータ広告サービスを設定するための管理者特権
11.3 IPv6ルータ広告のためのradvdの設定 #
radvdサービスは、/etc/radvd.confで定義された設定を使用してIPv6ルータ広告機能を提供します。
radvd IPv6ルータ広告の設定 #radvdサービスを設定します。>sudocat > /etc/radvd.conf << 'EOF'interface eno1 { # radvd options IgnoreIfMissing on; # Do not fail and exit when interface is missed AdvSendAdvert on; # Sending RAs on the interface is not disabled # Configuration settings AdvManagedFlag on; # Request IPv6 address and dns options via DHCPv6 AdvOtherConfigFlag off; # Request only dns info via DHCPv6, IP via SLAAC AdvDefaultLifetime 1800; # Add default route via this router for 1800sec prefix 2001:db8:0:1::/64 # Add direct route for this local network/prefix { AdvAutonomous off; # Assign IPv6 address via SLAAC AdvValidLifetime 7200; AdvPreferredLifetime 3600; }; }; EOFradvdサービスを有効にして開始します。>sudosystemctl enable --now radvd
11.4 IPv6ルータ広告の確認 #
IPv6 RAの機能をテストし、適切な設定と動作を確認します。
radvdサービスの状態を確認します。>systemctl status radvdravdumpを使用してIPv6 RA設定を確認します。>radvdumpradvdumpユーティリティは、数分ごとにIPv6ルータから送信されるIPv6 RA設定を表示します。
11.5 ルータ機能のためのIP転送の設定 #
PXEサーバがルータとしても機能する場合は、システムがルータの役割で機能できるように、IP転送を有効にする必要があります。
ネットワーク設定ファイルを作成します。
>sudocat > /etc/sysctl.d/90-network.conf << 'EOF'# This machine is a router net.ipv4.conf.all.forwarding = 1 net.ipv6.conf.all.forwarding = 1 # Accept host autoconf on router uplink net.ipv6.conf.uplink.accept_ra = 2 EOFネットワーク設定を適用します。
>sudosysctl -p /etc/sysctl.d/90-network.conf
ルータはデフォルトで、ホスト自動設定のためのIPv6 RAを処理しません。ルータのアップリンクインタフェースでIPv6 RAを受け入れるには、accept_ra = 2 sysctl設定が必要です。ファイアウォールの調整やその他の必要な手順など、ルータ設定の詳細については、『管理ガイド』の「ネットワーク設定」セクションを参照してください。
11.6 IPv6ルータ広告のトラブルシューティング #
PXE環境でIPv6ルータ広告を設定する際によくある問題。
11.6.1 radvdサービスの問題 #
設定エラーやインタフェースの問題により、radvdサービスが開始できないことがあります。
radvdサービスの問題の解決 #radvdサービスの状態とログを確認します。>systemctl status radvd詳細なサービスログを表示します。
>journalctl -u radvd -fradvd設定の構文をテストします。>sudoradvd -C /etc/radvd.conf指定されたインタフェースが存在するかどうかを確認します。
>ip link show eno1設定を修正した後、サービスを再起動します。
>sudosystemctl restart radvd
11.6.2 IP転送設定の問題 #
IP転送設定が正しくないと、ルータが正しく機能しなくなることがあります。
現在のIP転送ステータスを確認します。
>sysctl net.ipv4.conf.all.forwardingIPv6の転送ステータスを確認します。
>sysctl net.ipv6.conf.all.forwardingsysctl設定ファイルを確認します。
>cat /etc/sysctl.d/90-network.conf値が正しくない場合は設定を適用します。
>sudosysctl -p /etc/sysctl.d/90-network.confアップリンクインタフェースのaccept_ra設定を確認します。
>sysctl net.ipv6.conf.uplink.accept_ra
11.6.3 ルータ広告の受信に関する問題 #
クライアントがIPv6ルータ広告を正しく受信または処理できない場合があります。
ravdumpを使用してルータ広告を監視します。>radvdump -dクライアントのIPv6インタフェースの設定を確認します。
>ip -6 addr showクライアントのIPv6ルーティングテーブルを確認します。
>ip -6 route showルータへのIPv6接続をテストします。
>ping6 2001:db8:0:1::1ICMPv6のファイアウォールルールを確認します。
>firewall-cmd --list-protocols | grep ipv6-icmp
11.7 次のステップ #
IPv6ルータ広告が設定されると、PXEクライアントは適切なIPv6ネットワーク設定を受け取ることができます。これにより、ネットワークベースのインストールでDHCPv6機能とIPv6接続が有効になります。
12 dnsmasqを使用したDHCPサーバの設定 #
このセクションでは、SUSE Linux Enterprise Server 16.0インストールにネットワーク設定とPXEブート情報を提供するために、dnsmasqを使用してDHCPサービスを設定する方法を説明します。dnsmasq DHCPサーバは、タグベースの設定を使用して、UEFIとBIOSブート機能を持つIPv4とIPv6の両方のPXEクライアントをサポートします。
12.1 概要 #
dnsmasq DHCPサーバは、タグベースのシステムを使用してPXEクライアントにネットワーク設定とブートファイル情報を提供し、クライアントのタイプを照合し、適切なブートローダを提供します。この設定は、DHCPv4とDHCPv6で動作するPXEClientとHTTPClientの両方の一致をサポートし、複数のアーキテクチャにわたるUEFIとBIOSシステム経由でのブートを可能にします。
dnsmasqバージョン2.90以前では、HTTPClient設定のDHCPv6クライアントへのvendor-class option6:16の返送をサポートしていません。HTTPClientを完全にサポートするには、KeaまたはISC DHCPサーバの使用を検討してください。
12.2 要件 #
インストール済みのdnsmasqパッケージ
/srv/tftpboot下に適切に整理されたPXEブートファイルDHCPサービス用に設定されたネットワークインタフェース
DHCPサービスを設定するための管理者特権
12.3 dnsmasq DHCPサービスの設定 #
dnsmasq DHCP設定には、IPv4とIPv6の両方のネットワークに対するクライアントタイプの一致、ネットワーク範囲、ブートファイルの割り当てが含まれます。
dnsmasq用のDHCP設定ファイルを作成します。
>sudocat > /etc/dnsmasq.d/dhcp.conf << 'EOF'# DHCP configuration file for dnsmasq # Log DHCP processing log-dhcp # This is the only DHCP server, don't ignore unknown clients/send NAK dhcp-authoritative # Disable re-use of the DHCPv4 servername and filename fields as extra # option space, which may confuse old or broken clients dhcp-no-override # IPv4 PXE/HTTP boot client matches (no enterprise number) # Match client type in PXEClient:Arch and map to a tag dhcp-vendorclass=set:tftp_bios_x86_pc,PXEClient:Arch:00000 dhcp-vendorclass=set:tftp_uefi_x86_64,PXEClient:Arch:00007 dhcp-vendorclass=set:tftp_ieee_ppc_64,PXEClient:Arch:0000e dhcp-vendorclass=set:tftp_uefi_arm_64,PXEClient:Arch:00011 # Match client type in HTTPClient:Arch and map to a tag dhcp-vendorclass=set:http_uefi_x86_64,HTTPClient:Arch:00016 dhcp-vendorclass=set:http_uefi_arm_64,HTTPClient:Arch:00019 # IPv6 PXE/HTTP boot client matches (enterprise:343 intel) # Match client type in PXEClient:Arch and map to a tag dhcp-vendorclass=set:tftp_bios_x86_pc,enterprise:343,PXEClient:Arch:00000 dhcp-vendorclass=set:tftp_uefi_x86_64,enterprise:343,PXEClient:Arch:00007 dhcp-vendorclass=set:tftp_ieee_ppc_64,enterprise:343,PXEClient:Arch:0000e dhcp-vendorclass=set:tftp_uefi_arm_64,enterprise:343,PXEClient:Arch:00011 # Match client type in HTTPClient:Arch and map to a tag dhcp-vendorclass=set:http_uefi_x86_64,enterprise:343,HTTPClient:Arch:00016 dhcp-vendorclass=set:http_uefi_arm_64,enterprise:343,HTTPClient:Arch:00019 EOFIPv4 DHCPの範囲とオプションを設定します。
>sudocat >> /etc/dnsmasq.d/dhcp.conf << 'EOF'# IPv4 range and options dhcp-range=set:net0v4,192.168.1.100,192.168.1.199,255.255.255.0,1h dhcp-option=tag:net0v4,option:domain-search,example.net dhcp-option=tag:net0v4,option:dns-server,192.168.1.200 dhcp-option=tag:net0v4,option:ntp-server,192.168.1.1 dhcp-option=tag:net0v4,option:router,192.168.1.1 EOFIPv4 PXEブートオプションを設定します。
>sudocat >> /etc/dnsmasq.d/dhcp.conf << 'EOF'# IPv4 PXEClient boot dhcp-boot=tag:net0v4,tag:tftp_bios_x86_pc,/boot/grub2/i386-pc/core.0,192.168.1.200 dhcp-boot=tag:net0v4,tag:tftp_uefi_x86_64,/boot/grub2/x86_64-efi/bootx64.efi,192.168.1.200 dhcp-boot=tag:net0v4,tag:tftp_ieee_ppc_64,/boot/grub2/powerpc-ieee1275/core.elf,192.168.1.200 dhcp-boot=tag:net0v4,tag:tftp_uefi_arm_64,/boot/grub2/arm64-efi/bootaa64.efi,192.168.1.200 # IPv4 HTTPClient boot dhcp-option-force=tag:net0v4,tag:http_uefi_x86_64,option:vendor-class,HTTPClient dhcp-boot=tag:net0v4,tag:http_uefi_x86_64,http://192.168.1.200/boot/grub2/x86_64-efi/bootx64.efi dhcp-option-force=tag:net0v4,tag:http_uefi_arm_64,option:vendor-class,HTTPClient dhcp-boot=tag:net0v4,tag:http_uefi_arm_64,http://192.168.1.200/boot/grub2/arm64-efi/bootaa64.efi EOFIPv6 DHCPの範囲とオプションを設定します。
>sudocat >> /etc/dnsmasq.d/dhcp.conf << 'EOF'# IPv6 range and options dhcp-range=set:net0v6,2001:db8:0:1:d::,2001:db8:0:1:d::ffff,64,1h dhcp-option=tag:net0v6,option6:domain-search,example.net dhcp-option=tag:net0v6,option6:dns-server,[2001:db8:0:1::200] dhcp-option=tag:net0v6,option6:sntp-server,[2001:db8:0:1::1] EOFIPv6 PXEブートオプションを設定します。
>sudocat >> /etc/dnsmasq.d/dhcp.conf << 'EOF'# IPv6 PXEClient boot dhcp-option=tag:net0v6,tag:tftp_bios_x86_pc,option6:bootfile-url,tftp://[2001:db8:0:1::200]/boot/grub2/i386-pc/core.0 dhcp-option=tag:net0v6,tag:tftp_uefi_x86_64,option6:bootfile-url,tftp://[2001:db8:0:1::200]/boot/grub2/x86_64-efi/bootx64.efi dhcp-option=tag:net0v6,tag:tftp_ieee_ppc_64,option6:bootfile-url,tftp://[2001:db8:0:1::200]/boot/grub2/powerpc-ieee1275/core.elf dhcp-option=tag:net0v6,tag:tftp_uefi_arm_64,option6:bootfile-url,tftp://[2001:db8:0:1::200]/boot/grub2/arm64-efi/bootaa64.efi # IPv6 HTTPClient boot # Note: dnsmasq <= 2.90 does not support sending vendor-class option6:16 back to client EOFdnsmasqの設定をテストします。
>sudodnsmasq --testdnsmasqサービスを有効にして開始します。
>sudosystemctl enable --now dnsmasq
12.4 DHCP設定の検証 #
DHCPサーバの機能をテストし、適切なネットワーク設定とPXEクライアントへのブートファイル配信を確認します。
dnsmasqサービスの状態を確認します。
>systemctl status dnsmasqDHCPポートバインディングを確認します。
>ss -ulnp | grep :67DHCPリースの割り当てを監視します。
>journalctl -u dnsmasq -fアクティブなDHCPリースを確認します。
>cat /var/lib/dhcp/dhcpd.leases
12.5 dnsmasq DHCP設定のトラブルシューティング #
PXE環境でDHCPサービス用にdnsmasqを設定する際によくある問題。
12.5.1 サービスの起動と設定に関する問題 #
dnsmasqは、設定エラーや他のDHCPサービスとのポートの競合が原因で起動に失敗することがあります。
dnsmasq設定構文をテストします。
>sudodnsmasq --testDHCPポートの競合を確認します。
>ss -ulnp | grep :67競合するDHCPサービスを停止します。
>sudosystemctl stop dhcpd詳細なサービスログを表示します。
>journalctl -u dnsmasq -f競合の解決後にdnsmasqを再起動します。
>sudosystemctl restart dnsmasq
12.5.2 DHCPリース割り当ての問題 #
クライアントは、範囲設定やネットワーク接続の問題により、IPアドレスを受信できないことがあります。
DHCP範囲設定を確認します。
>grep dhcp-range /etc/dnsmasq.d/dhcp.confDHCP要求をリアルタイムで監視します。
>journalctl -u dnsmasq -f | grep DHCPネットワークインタフェースのステータスを確認します。
>ip addr showDHCP権限設定を確認します。
>grep dhcp-authoritative /etc/dnsmasq.d/dhcp.confdhcpingでDHCP応答をテストします。
>dhcping -s 192.168.1.200
12.5.3 PXEブートファイルの配信に関する問題 #
PXEクライアントは、ブートファイルの設定が正しくないか、クライアントタイプの一致に問題があるため、IPアドレスを受信できてもブートに失敗することがあります。
クライアントのベンダクラスの一致を確認します。
>grep dhcp-vendorclass /etc/dnsmasq.d/dhcp.confブートファイルのパスを確認します。
>grep dhcp-boot /etc/dnsmasq.d/dhcp.confブートファイルへのTFTPアクセスをテストします。
>tftp 192.168.1.200 -c get /boot/grub2/x86_64-efi/bootx64.efiPXE固有のDHCPログを監視します。
>journalctl -u dnsmasq | grep -E "PXE|HTTP"ログでタグの割り当てを確認します。
>journalctl -u dnsmasq | grep "tags:"
12.5.4 IPv6 DHCP設定の問題 #
IPv6 DHCPクライアントは適切なルータ広告設定を必要とし、IPv4とは異なるアドレス指定要件がある場合があります。
IPv6 DHCP範囲設定を確認します。
>grep "2001:db8" /etc/dnsmasq.d/dhcp.confIPv6ルータ広告ステータスを確認します。
>systemctl status radvdDHCPv6要求を監視します。
>journalctl -u dnsmasq | grep "DHCPv6"IPv6接続をテストします。
>ping6 2001:db8:0:1::200IPv6オプションの設定を確認します。
>grep option6 /etc/dnsmasq.d/dhcp.conf
12.6 次のステップ #
dnsmasq DHCPサービスを設定すると、PXEクライアントはIPv4とIPv6の両方の環境のネットワーク設定とブートファイル情報を受信できます。タグベースのシステムは、クライアントのアーキテクチャとブート方法の要件に基づき、柔軟なブートファイル割り当てを提供します。
13 Keaを使用したDHCPサーバの設定 #
このセクションでは、SUSE Linux Enterprise Server 16.0インストールにネットワーク設定とPXEブート情報を提供するために、Keaを使用してDHCPサービスを設定する方法を説明します。Keaは、PXEおよびHTTPブートシナリオにおいて、クライアントクラス一致機能を備え、IPv4とIPv6の両方をサポートする最新のDHCPサーバです。
13.1 概要 #
Keaは、レガシISC DHCPサーバの後継としてISCが開発した最新のDHCPサーバです。クライアントのアーキテクチャとブート方法に基づいて適切なブートファイルの配信を可能にするクライアント分類機能を備え、DHCPv4とDHCPv6の両方を堅牢にサポートします。KeaはJSONベースの設定ファイルを使用し、HTTPブートのベンダクラス識別のような高度な機能をサポートしています。
13.2 要件 #
インストールされたKea DHCPパッケージ(kea-dhcp4と kea-dhcp6)
/srv/tftpboot下に適切に整理されたPXEブートファイルDHCPサービス用に設定されたネットワークインタフェース
DHCPサービスを設定するための管理者特権
13.3 Kea DHCPv4サーバの設定 #
Kea DHCPv4設定は、クライアントクラスを使用してPXEとHTTPクライアントのタイプを照合し、さまざまなアーキテクチャに適したブートファイルを提供します。
Kea DHCPv4サーバを設定します。
>sudocat > /etc/kea/kea-dhcp4.conf << 'EOF'{ "Dhcp4": { "interfaces-config": { "interfaces": [ "eno1" ] }, "control-socket": { "socket-type": "unix", "socket-name": "/tmp/kea4-ctrl-socket" }, "lease-database": { "type": "memfile", "persist": true, "name": "/var/lib/kea/dhcp4.leases", "lfc-interval": 3600 }, "expired-leases-processing": { "reclaim-timer-wait-time": 10, "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600, "max-reclaim-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, "renew-timer": 1800, "rebind-timer": 3150, "valid-lifetime": 3600, "option-data": [], "client-classes": [ { "name": "pxeclients#00000", "test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:00000'", "next-server": "192.168.1.200", "boot-file-name": "/boot/grub2/i386-pc/core.0" }, { "name": "pxeclients#00007", "test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:00007'", "next-server": "192.168.1.200", "boot-file-name": "/boot/grub2/x86_64-efi/bootx64.efi" }, { "name": "pxeclients#0000e", "test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:0000e'", "next-server": "192.168.1.200", "boot-file-name": "/boot/grub2/powerpc-ieee1275/core.elf" }, { "name": "pxeclients#00011", "test": "substring(option[60].hex,0,20) == 'PXEClient:Arch:00011'", "next-server": "192.168.1.200", "boot-file-name": "/boot/grub2/arm64-efi/bootaa64.efi" }, { "name": "httpclients#00016", "test": "substring(option[60].hex,0,21) == 'HTTPClient:Arch:00016'", "boot-file-name": "http://192.168.1.200/boot/grub2/x86_64-efi/bootx64.efi", "option-data": [ { "name": "vendor-class-identifier", "data": "HTTPClient" } ] }, { "name": "httpclients#00019", "test": "substring(option[60].hex,0,21) == 'HTTPClient:Arch:00019'", "boot-file-name": "http://192.168.1.200/boot/grub2/arm64-efi/bootaa64.efi", "option-data": [ { "name": "vendor-class-identifier", "data": "HTTPClient" } ] } ], "subnet4": [ { "id": 1, "subnet": "192.168.1.0/24", "pools": [ { "pool": "192.168.1.100 - 192.168.1.199" } ], "option-data": [ { "name": "routers", "data": "192.168.1.1" }, { "name": "ntp-servers", "data": "192.168.1.1" }, { "name": "domain-name-servers", "data": "192.168.1.200" }, { "name": "domain-search", "data": "example.net" } ], "reservations": [] } ], "loggers": [ { "name": "kea-dhcp4", "output-options": [ { "output": "/var/log/kea/dhcp4.log" } ], "severity": "INFO", "debuglevel": 0 } ] } } EOFKeaログディレクトリを作成します。
>sudomkdir -p /var/log/keaKea DHCPv4設定をテストします。
>sudokea-dhcp4 -t /etc/kea/kea-dhcp4.confKea DHCPv4サービスを有効にして開始します。
>sudosystemctl enable --now kea-dhcp4
13.4 Kea DHCPv6サーバの設定 #
Kea DHCPv6設定は、異なるクライアントアーキテクチャのベンダクラスの一致を使用して、IPv6アドレス割り当てと、ブートファイル情報を提供します。
Kea DHCPv6サーバを設定します。
>sudocat > /etc/kea/kea-dhcp6.conf << 'EOF'{ "Dhcp6": { "interfaces-config": { "interfaces": [ "eno1" ] }, "control-socket": { "socket-type": "unix", "socket-name": "/tmp/kea6-ctrl-socket" }, "lease-database": { "type": "memfile", "persist": true, "name": "/var/lib/kea/dhcp6.leases", "lfc-interval": 3600 }, "expired-leases-processing": { "reclaim-timer-wait-time": 10, "flush-reclaimed-timer-wait-time": 25, "hold-reclaimed-time": 3600, "max-reclaim-leases": 100, "max-reclaim-time": 250, "unwarned-reclaim-cycles": 5 }, "renew-timer": 1800, "rebind-timer": 2880, "preferred-lifetime": 3600, "valid-lifetime": 7200, "option-data": [], "option-def": [], "client-classes": [ { "name": "pxeclients#00000", "test": "substring(option[16].hex,6,20) == 'PXEClient:Arch:00000'", "option-data": [ { "name": "bootfile-url", "data": "tftp://[2001:db8:0:1::200]/boot/grub2/i386-pc/core.0" } ] }, { "name": "pxeclients#00007", "test": "substring(option[16].hex,6,20) == 'PXEClient:Arch:00007'", "option-data": [ { "name": "bootfile-url", "data": "tftp://[2001:db8:0:1::200]/boot/grub2/x86_64-efi/bootx64.efi" } ] }, { "name": "pxeclients#0000e", "test": "substring(option[16].hex,6,20) == 'PXEClient:Arch:0000e'", "option-data": [ { "name": "bootfile-url", "data": "tftp://[2001:db8:0:1::200]/boot/grub2/powerpc-ieee1275/core.elf" } ] }, { "name": "pxeclients#00011", "test": "substring(option[16].hex,6,20) == 'PXEClient:Arch:00011'", "option-data": [ { "name": "bootfile-url", "data": "tftp://[2001:db8:0:1::200]/boot/grub2/arm64-efi/bootaa64.efi" } ] } ], "subnet6": [ { "id": 1, "subnet": "2001:db8:0:1::/64", "interface": "eno1", "pools": [ { "pool": "2001:db8:0:1:d::/112" } ], "option-data": [ { "name": "sntp-servers", "data": "2001:db8:0:1::1" }, { "name": "dns-servers", "data": "2001:db8:0:1::200" }, { "name": "domain-search", "data": "example.net" } ], "reservations": [] } ], "loggers": [ { "name": "kea-dhcp6", "output-options": [ { "output": "/var/log/kea/dhcp6.log" } ], "severity": "INFO", "debuglevel": 0 } ] } } EOFKea DHCPv6設定をテストします。
>sudokea-dhcp6 -t /etc/kea/kea-dhcp6.confKea DHCPv6サービスを有効にして開始します。
>sudosystemctl enable --now kea-dhcp6
13.5 Kea DHCP設定の検証 #
Kea DHCPサーバの機能をテストし、適切なネットワーク設定とPXEクライアントへのブートファイル配信を確認します。
Kea DHCPv4サービスの状態を確認します。
>systemctl status kea-dhcp4Kea DHCPv6サービスの状態を確認します。
>systemctl status kea-dhcp6DHCPポートバインディングを確認します。
>ss -ulnp | grep -E ":67|:547"DHCPv4のログを監視します。
>tail -f /var/log/kea/dhcp4.logDHCPv6のログを監視します。
>tail -f /var/log/kea/dhcp6.logアクティブなDHCPリースを確認します。
>cat /var/lib/kea/dhcp4.leases
13.6 Kea DHCP設定のトラブルシューティング #
PXEブート環境でKea DHCPサーバを設定する際によくある問題。
13.6.1 設定とサービスの問題 #
JSON設定エラーやネットワークインタフェースの問題により、Keaサービスが開始できないことがあります。
DHCPv4設定構文をテストします。
>sudokea-dhcp4 -t /etc/kea/kea-dhcp4.confDHCPv6設定構文をテストします。
>sudokea-dhcp6 -t /etc/kea/kea-dhcp6.confJSONの構文エラーを確認します。
>python3 -m json.tool /etc/kea/kea-dhcp4.confネットワークインタフェースの設定を確認します。
>ip addr show eno1Keaサービスログを確認します。
>journalctl -u kea-dhcp4 -f
13.6.2 DHCPリース割り当ての問題 #
クライアントは、サブネット設定やプール枯渇の問題により、IPアドレスを受信できないことがあります。
サブネットとプールの設定を確認します。
>grep -A 10 "subnet4\|pools" /etc/kea/kea-dhcp4.confリースの割り当てをリアルタイムで監視します。
>tail -f /var/log/kea/dhcp4.log | grep -E "ALLOC|DISCOVER"リースデータベースの競合を確認します。
>cat /var/lib/kea/dhcp4.leases | tail -20インタフェースバインディングを確認します。
>grep interfaces /etc/kea/kea-dhcp4.conf必要に応じてリースデータベースをクリアします。
>sudosystemctl stop kea-dhcp4>sudomv /var/lib/kea/dhcp4.leases /var/lib/kea/dhcp4.leases.backup>sudosystemctl start kea-dhcp4
13.6.3 PXEクライアントクラスの一致の問題 #
PXEクライアントは、クライアントクラスの設定の問題により、IPアドレスを受信できても正しいブートファイルを取得できないことがあります。
クライアントクラスの定義を確認します。
>grep -A 5 "client-classes" /etc/kea/kea-dhcp4.confクライアントクラスの一致をログで監視します。
>tail -f /var/log/kea/dhcp4.log | grep -i classベンダクラス識別子のパターンを確認します。
>grep "PXEClient\|HTTPClient" /etc/kea/kea-dhcp4.confブートファイルのアクセシビリティをテストします。
>curl -I http://192.168.1.200/boot/grub2/x86_64-efi/bootx64.efi詳細なクライアント分析のためにデバッグログを有効にします。
>sudosed -i 's/"debuglevel": 0/"debuglevel": 99/' /etc/kea/kea-dhcp4.conf>sudosystemctl restart kea-dhcp4
13.6.4 DHCPv6固有の問題 #
IPv6 DHCPクライアントは適切なルータ広告設定を必要とし、IPv4とは異なるベンダクラスオプション処理を行います。
DHCPv6サブネット設定を確認します。
>grep -A 10 "subnet6" /etc/kea/kea-dhcp6.confIPv6ルータ広告ステータスを確認します。
>systemctl status radvdDHCPv6ベンダクラスの一致を監視します。
>tail -f /var/log/kea/dhcp6.log | grep "option\[16\]"IPv6 bootfile-urlオプションの形式を確認します。
>grep "bootfile-url" /etc/kea/kea-dhcp6.confブートサーバへのIPv6接続をテストします。
>ping6 2001:db8:0:1::200
13.7 次のステップ #
Kea DHCPサービスを設定すると、PXEクライアントはIPv4とIPv6の両方の環境の包括的なネットワーク設定とブートファイル情報を受信できます。クライアント分類システムは、クライアントアーキテクチャに基づいた正確なブートファイル割り当てを提供し、従来のPXEブート方法と最新のHTTPブート方法の両方をサポートします。
14 ISC DHCPを使用したDHCPサーバの設定 #
このセクションでは、SUSE Linux Enterprise Server 15インストールにネットワーク設定とPXEブート情報を提供するために、ISC DHCPサーバを設定する方法を説明します。ISC dhcp-serverパッケージは、SUSE Linux Enterprise Server 16.0では利用できなくなりました。ISC DHCPはクラスとサブクラスの一致を使用して、異なるクライアントアーキテクチャのPXEとHTTPブートシナリオをサポートします。
14.1 概要 #
ISC DHCPは、従来のDHCPサーバで、クラスとサブクラスのシステムを使用して、PXEクライアントにネットワーク設定とブートファイル情報を提供します。ISCは2022年時点でこのサーバのサービス終了を宣言していますが、既存の展開では依然として広く使用されており、ベンダクラス識別によるPXEおよびHTTPブートシナリオに対する堅牢なサポートを提供しています。
ISC DHCPは、ISCによって2022年にサービス終了が宣言されています。新規展開の場合は、代わりにKeaまたはdnsmasqの使用を検討してください。この設定は、既存のISC DHCPインストール環境との互換性のために提供されています。
14.2 要件 #
インストールされたISC DHCPパッケージ(dhcp-server)
/srv/tftpboot下に適切に整理されたPXEブートファイルDHCPサービス用に設定されたネットワークインタフェース
DHCPサービスを設定するための管理者特権
14.3 ISC DHCPv4サーバの設定 #
ISC DHCPv4設定は、クラスとサブクラス宣言を使用してPXEとHTTPクライアントのタイプを照合し、さまざまなアーキテクチャに適したブートファイルを提供します。
ISC DHCPv4サーバを設定します。
>sudocat > /etc/dhcpd.conf << 'EOF'# /etc/dhcpd.conf # # Sample configuration file for ISC dhcpd # # *** PLEASE CONFIGURE IT FIRST *** # # Don't forget to set the DHCPD_INTERFACE in the # /etc/sysconfig/dhcpd file. # # if you want to use dynamical DNS updates, you should first read # read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt # ddns-updates off; # Use this to enable / disable dynamic dns updates globally. ddns-update-style none; # default lease time default-lease-time 3600; max-lease-time 7200; ## ## PXE / HTTP boot option declarations ## class "pxeclients" { # PXEClient:Arch:00000:UNDI:002001 match substring (option vendor-class-identifier, 0, 20); } class "httpclients" { # HTTPClient:Arch:00016:UNDI:003001 match substring (option vendor-class-identifier, 0, 21); } ## ## PXE / HTTP boot subclass request matches ## subclass "pxeclients" "PXEClient:Arch:00000" { next-server 192.168.1.200; filename "/boot/grub2/i386-pc/core.0"; } subclass "pxeclients" "PXEClient:Arch:00007" { next-server 192.168.1.200; filename "/boot/grub2/x86_64-efi/bootx64.efi"; } subclass "pxeclients" "PXEClient:Arch:0000e" { next-server 192.168.1.200; filename "/boot/grub2/powerpc-ieee1275/core.elf"; } subclass "pxeclients" "PXEClient:Arch:00011" { next-server 192.168.1.200; filename "/boot/grub2/arm64-efi/bootaa64.efi"; } subclass "httpclients" "HTTPClient:Arch:00016" { option vendor-class-identifier "HTTPClient"; filename "http://192.168.1.200/boot/grub2/x86_64-efi/bootx64.efi"; } subclass "httpclients" "HTTPClient:Arch:00019" { option vendor-class-identifier "HTTPClient"; filename "http://192.168.1.200/boot/grub2/arm64-efi/bootaa64.efi"; } ## ## Subnet declaration for the pxe network ## subnet 192.168.1.0 netmask 255.255.255.0 { authoritative; range dynamic-bootp 192.168.1.100 192.168.1.199; option subnet-mask 255.255.255.0; option routers 192.168.1.1; option ntp-servers 192.168.1.1; option domain-name-servers 192.168.1.200; option domain-name "example.net"; option domain-search "example.net"; } EOFsysconfigでDHCPインタフェースを設定します。
>sudoecho 'DHCPD_INTERFACE="eno1"' > /etc/sysconfig/dhcpdDHCPv4設定をテストします。
>sudodhcpd -t -cf /etc/dhcpd.confISC DHCPv4サービスを有効にして開始します。
>sudosystemctl enable --now dhcpd
14.4 ISC DHCPv6サーバの設定 #
ISC DHCPv6設定は、ベンダクラスの一致と適切なDHCPv6オプション処理を使用して、IPv6アドレス割り当てと、ブートファイル情報を提供します。
ISC DHCPv6サーバを設定します。
>sudocat > /etc/dhcpd6.conf << 'EOF'# /etc/dhcpd6.conf # # Sample DHCPv6 configuration file for ISC dhcpd # # *** PLEASE CONFIGURE IT FIRST *** # # Don't forget to set the DHCPD6_INTERFACE in the # /etc/sysconfig/dhcpd file. # # if you want to use dynamical DNS updates, you should first # read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt ddns-updates off; # Use this to enable / disable dynamic dns updates globally. ddns-update-style none; # IPv6 address valid lifetime # (at the end the address is no longer usable by the client) # (set to 30 days, the usual IPv6 default) default-lease-time 7200; # IPv6 address preferred lifetime # (at the end the address is deprecated, i.e., the client should use # other addresses for new connections) # (set to 7 days, the usual IPv6 default) preferred-lifetime 3600; ## ## PXE / HTTP boot option declarations ## # The dhcp6 option 16 is in fact an: # { uint32 enterprise-number, array of { uint16 len, string tag} vendor-class-data } # this declaration is using the whole option data as string for substring match: option dhcp6.vendor-class-as-string code 16 = string; # this declaration is using the enterprise-number with 1st tag length and string: option dhcp6.vendor-class-en-len-tag code 16 = {integer 32, integer 16, string}; class "pxeclients" { # PXEClient:Arch:00000:UNDI:002001 # note: +6 to skip the enterprise-number+len until the PXEClient string match substring (option dhcp6.vendor-class-as-string, 6, 20); } class "httpclients" { # HTTPClient:Arch:00016:UNDI:003001 # note: +6 to skip the enterprise-number+len until the HTTPClient string match substring (option dhcp6.vendor-class-as-string, 6, 21); } ## ## PXE / HTTP boot subclass request matches ## subclass "pxeclients" "PXEClient:Arch:00000" { option dhcp6.bootfile-url "tftp://[2001:db8:0:1::200]/boot/grub2/i386-pc/core.0"; } subclass "pxeclients" "PXEClient:Arch:00007" { option dhcp6.bootfile-url "tftp://[2001:db8:0:1::200]/boot/grub2/x86_64-efi/bootx64.efi"; } subclass "pxeclients" "PXEClient:Arch:0000e" { option dhcp6.bootfile-url "tftp://[2001:db8:0:1::200]/boot/grub2/powerpc-ieee1275/core.elf"; } subclass "pxeclients" "PXEClient:Arch:00011" { option dhcp6.bootfile-url "tftp://[2001:db8:0:1::200]/boot/grub2/arm64-efi/bootaa64.efi"; } subclass "httpclients" "HTTPClient:Arch:00016" { option dhcp6.vendor-class-en-len-tag 343 10 "HTTPClient"; option dhcp6.bootfile-url "http://[2001:db8:0:1::200]/boot/grub2/x86_64-efi/bootx64.efi"; } subclass "httpclients" "HTTPClient:Arch:00019" { option dhcp6.vendor-class-en-len-tag 343 10 "HTTPClient"; option dhcp6.bootfile-url "http://[2001:db8:0:1::200]/boot/grub2/arm64-efi/bootaa64.efi"; } ## ## Subnet declaration for the pxe network ## subnet6 2001:db8:0:1::/64 { authoritative; range6 2001:db8:0:1:d:: 2001:db8:0:1:d::ffff; option dhcp6.sntp-servers 2001:db8:0:1::1; option dhcp6.name-servers 2001:db8:0:1::200; option dhcp6.domain-search "example.net"; } EOFsysconfigでDHCPv6インタフェースを設定します。
>sudoecho 'DHCPD6_INTERFACE="eno1"' >> /etc/sysconfig/dhcpdDHCPv6設定をテストします。
>sudodhcpd -6 -t -cf /etc/dhcpd6.confISC DHCPv6サービスを有効にして開始します。
>sudosystemctl enable --now dhcpd6
14.5 ISC DHCP設定の検証 #
ISC DHCPサーバの機能をテストし、適切なネットワーク設定とPXEクライアントへのブートファイル配信を確認します。
ISC DHCPv4サービスの状態を確認します。
>systemctl status dhcpdISC DHCPv6サービスの状態を確認します。
>systemctl status dhcpd6DHCPポートバインディングを確認します。
>ss -ulnp | grep -E ":67|:547"DHCPログを監視します。
>journalctl -u dhcpd -fアクティブなDHCPリースを確認します。
>cat /var/lib/dhcp/dhcpd.leasesDHCPv6アクティビティを監視します。
>journalctl -u dhcpd6 -f
14.6 ISC DHCP設定のトラブルシューティング #
PXEブート環境でISC DHCPサーバを設定する際によくある問題。
14.6.1 設定とサービスの問題 #
設定構文エラーやインタフェースバインディングの問題により、ISC DHCPサービスが開始できないことがあります。
DHCPv4設定構文をテストします。
>sudodhcpd -t -cf /etc/dhcpd.confDHCPv6設定構文をテストします。
>sudodhcpd -6 -t -cf /etc/dhcpd6.confインタフェースの設定を確認します。
>cat /etc/sysconfig/dhcpdネットワークインタフェースのステータスを確認します。
>ip addr show eno1ポートの競合を確認します。
>ss -ulnp | grep :67詳細なサービスログを表示します。
>journalctl -u dhcpd -xe
14.6.2 DHCPリース割り当ての問題 #
クライアントは、サブネット設定や認証の問題により、IPアドレスを受信できないことがあります。
サブネットと範囲の設定を確認します。
>grep -A 10 "subnet\|range" /etc/dhcpd.conf権限設定を確認します。
>grep authoritative /etc/dhcpd.confリースの割り当てをリアルタイムで監視します。
>tail -f /var/log/messages | grep dhcpdリースデータベースにエラーがないか確認します。
>tail -20 /var/lib/dhcp/dhcpd.leasesDHCP応答を手動でテストします。
>dhcping -s 192.168.1.200 -h aa:bb:cc:dd:ee:ff
14.6.3 クラスとサブクラスの一致に関する問題 #
PXEクライアントは、クラス一致設定の問題により、IPアドレスを受信できても正しいブートファイルを取得できないことがあります。
クラス定義を確認します。
>grep -A 3 "class.*clients" /etc/dhcpd.confサブクラスのエントリを確認します。
>grep -A 5 "subclass" /etc/dhcpd.confベンダのクラス識別を監視します。
>tail -f /var/log/messages | grep -E "PXEClient|HTTPClient"ブートファイルのアクセシビリティをテストします。
>tftp 192.168.1.200 -c get /boot/grub2/x86_64-efi/bootx64.efi詳細ログを有効にします。
>sudosed -i '1i\log-facility local7;' /etc/dhcpd.conf>sudosystemctl restart dhcpd
14.6.4 DHCPv6ベンダクラスオプションの問題 #
IPv6 DHCPクライアントには複雑なベンダクラスオプションの処理があり、適切なPXEブートサポートのために特別な設定が必要になる場合があります。
DHCPv6オプション定義を確認します。
>grep -A 3 "option dhcp6" /etc/dhcpd6.confベンダクラスの文字列解析を確認します。
>grep "substring.*6.*20\|21" /etc/dhcpd6.confDHCPv6ベンダクラスの一致を監視します。
>journalctl -u dhcpd6 | grep -i vendorIPv6 bootfile-url形式を確認します。
>grep "bootfile-url" /etc/dhcpd6.confルータ広告の依存関係を確認します。
>systemctl status radvdIPv6接続をテストします。
>ping6 2001:db8:0:1::200
14.7 次のステップ #
ISC DHCPサービスを設定すると、PXEクライアントは、従来のクラスとサブクラスシステムを使用して、ネットワーク設定とブートファイル情報を受信できます。ISC DHCPはサポート終了となりましたが、この設定は、複数のクライアントアーキテクチャにわたってPXEおよびHTTPブート機能を必要とする既存の展開環境との互換性を提供します。
15 PXEサーバのセットアップの検証 #
このセクションでは、SUSE Linux Enterprise Server 16.0ネットワークインストールで、すべてのコンポーネントが正しく動作していることを確認するために、PXEサーバセットアップ全体を検証し、テストする方法を説明します。サービス検証、ネットワーク接続性テスト、エンドツーエンドのPXEブート検証をカバーしています。
15.1 概要 #
TFTP、HTTP、DNS、DHCP、GRUB 2ブートローダサービスなど、すべてのPXEサーバコンポーネントを設定した後、システム全体が正しく機能することを検証することが重要です。この検証により、PXEクライアントがAgamaインストーラで正常に起動し、 SUSE Linux Enterprise Server 16.0のネットワークベースのインストールを実行できることが保証されます。
15.2 要件 #
すべてのPXEサーバコンポーネントが設定され、実行されていること
PXEブート可能なテストクライアントシステム
PXEサーバとクライアント間のネットワーク接続
サーバサービスを監視するための管理アクセス権
15.3 PXEサーバサービスの検証 #
PXEクライアントでテストする前に、すべての必須PXEサーバサービスが実行され、適切に設定されていることを確認します。
TFTPサービスの状態を確認します。
>systemctl status tftp.socket予想される結果:サービスはアクティブで、ポート69でリスンしている必要があります。
nginx HTTPサービスを確認します。
>systemctl status nginx予想される結果:サービスはアクティブで、ポート80でリスンしている必要があります。
DNSサービスを確認します(dnsmasqを使用している場合)。
>systemctl status dnsmasq予想される結果:サービスはアクティブで、ポート53でリスンしている必要があります。
DHCPサービスの状態を確認します(適切なサービスを選択してください)。
>systemctl status dhcpddnsmasq DHCPの場合:
>systemctl status dnsmasqKea DHCPの場合:
>systemctl status kea-dhcp4 kea-dhcp6予想される結果:DHCPサービスはアクティブで、適切なポートでリスンしている必要があります。
IPv6ルータ広告を確認します(設定されている場合)。
>systemctl status radvd予想される結果:IPv6環境でサービスがアクティブである必要があります。
NTPサービスを確認します。
>systemctl status chronyd予想される結果:サービスはアクティブで、同期されている必要があります。
15.4 ネットワーク接続およびファイルアクセスのテスト #
PXEクライアントが、TFTPとHTTPの両方のプロトコルを使用して、ネットワーク経由でブートファイルとインストールコンテンツにアクセスできることを検証します。
ブートローダファイルへのTFTPアクセスをテストします。
>tftp localhost -c get /boot/grub2/x86_64-efi/bootx64.efi /tmp/test-bootx64.efiファイルが取得されたことを確認します。
>file /tmp/test-bootx64.efiテストファイルをクリーンアップします。
>rm /tmp/test-bootx64.efiGRUB 2設定へのHTTPアクセスをテストします。
>curl -I http://localhost/boot/grub2/grub.cfg予想される結果:HTTP 200 OK応答。
インストーラファイルへのHTTPアクセスを確認します。
>curl -I http://localhost/boot/images/SLES-16.0/x86_64/liveiso/LiveOS/squashfs.img予想される結果:適切なコンテンツ長を持つHTTP 200 OK応答。
DNS解決をテストします(ローカルDNSが設定されている場合)。
>nslookup pxe.example.net localhost予想される結果:適切なAレコードとAAAAレコードの解決。
自動インデックスの場所のディレクトリ参照を確認します。
>curl http://localhost/boot/予想される結果:ブートファイルを表示するディレクトリ一覧。
15.5 DHCP機能の検証 #
DHCPサーバの応答をテストし、さまざまなクライアントタイプに適したブート情報が提供されていることを確認します。
DHCPポートバインディングを確認します。
>ss -ulnp | grep -E ":67|:547"予想される結果:DHCPサービスがポート67 (IPv4)および547 (IPv6)でリスンしています。
DHCP要求をリアルタイムで監視します。
>journalctl -u dhcpd -fまたはdnsmasqの場合:
>journalctl -u dnsmasq -fテスト中にDHCPアクティビティを監視するために、このコマンドを実行したままにしておきます。
dhcpingを使用してDHCP応答をテストします(利用可能な場合)。
>dhcping -s 192.168.1.200予想される結果:サーバからのDHCP応答に成功します。
アクティブなDHCPリースを確認します。
>cat /var/lib/dhcp/dhcpd.leasesまたは、Keaの場合:
>cat /var/lib/kea/dhcp4.leases予想される結果:テストクライアントのリースエントリ。
15.6 エンドツーエンドのPXEブートテスト #
実際のクライアントシステムで完全なPXEブートテストを行い、DHCPからAgamaインストーラ起動までのブートプロセス全体を検証します。
テストクライアントシステムを準備します。
BIOS/UEFIを設定してネットワークブートを有効にする
ネットワークブートを最初のブート優先度として設定する
クライアントをPXEサーバと同じネットワークに接続する
クライアントのブート中にPXEサーバのログを監視します。
>journalctl -f | grep -E "dhcp|tftp|nginx"テストクライアントを起動し、以下のシーケンスを確認します。
クライアントはDHCP経由でIPアドレスを受信する
クライアントはTFTP経由でブートローダをダウンロードする
GRUB 2のメニューが表示され、インストールオプションが表示される
カーネルとinitrdがHTTP経由でロードされる
Agamaインストーラが正常に起動する
さまざまなクライアントタイプをテストして、クライアントアーキテクチャの検出を確認します。
レガシBIOS x86_64システム(core.0を取得する必要があります)
UEFI x86_64システム(bootx64.efiを取得する必要があります)
UEFI aarch64システム(bootaa64.efiを取得する必要があります)
IPv6 PXEブートをテストします(IPv6が設定されている場合)。
テストクライアントでIPv6のみのネットワーク設定を有効にする
DHCPv6アドレス割り当てを確認する
IPv6 bootfile-urlの配信を確認する
15.7 Agamaインストーラの機能の検証 #
Agamaインストーラが正しく起動し、 SUSE Linux Enterprise Server 16.0のインストールを完了するためにインストールソースにアクセスできることを確認します。
Agama Webインタフェースのアクセシビリティを確認します。
クライアントのブート中に、割り当てられたIPアドレスをメモして、アクセスします。
http://CLIENT_IP_ADDRESS
予想される結果:Agama Webインタフェースが正常にロードされるはずです。
クライアントのAgamaインストーラのログを確認します。
コンソールに切り替え(Alt+F2)、次のコマンドを実行します。
#journalctl -u agama-web-server -f予想される結果:Agamaの起動時に致命的なエラーはありません。
インストールソースへのアクセシビリティを確認します。
フルISOインストールの場合は、リポジトリへのアクセスを確認します。
#curl -I http://192.168.1.200/install/SLES-16.0/x86_64/予想される結果:ディレクトリ一覧を含むHTTP 200 OK応答。
パッケージインストール機能をテストします。
Agamaインタフェースで次のことを確認します。
システムが利用可能なディスクを検出できること
ネットワーク設定が保持されていること
パッケージリポジトリにアクセスできること
インストールを完了まで進められること
15.8 検証失敗のトラブルシューティング #
PXEサーバの検証中によくある問題とその解決手順。
15.8.1 DHCP割り当ての失敗 #
PXEブート中にクライアントがIPアドレスを受信できません。
DHCPサービスの競合を確認します。
>ss -ulnp | grep :67ネットワークインタフェースが起動していることを確認します。
>ip addr show eno1DHCP範囲の可用性を確認します。
>nmap -sn 192.168.1.100-199DHCPログでエラーを監視します。
>journalctl -u dhcpd | tail -50
15.8.2 ブートファイルの配信失敗 #
クライアントはIPアドレスを受信するが、ブートファイルのダウンロードに失敗します。
TFTPサービスへのアクセシビリティを確認します。
>tftp 192.168.1.200 -c get /boot/grub2/x86_64-efi/bootx64.efiファイルアクセス権を確認します。
>ls -la /srv/tftpboot/boot/grub2/x86_64-efi/TFTPアクセスログを監視します。
>journalctl -u tftp.socket -fクライアントアーキテクチャの検出を確認します。
>grep -E "PXEClient|HTTPClient" /var/log/messages
15.8.3 Agamaインストーラの起動失敗 #
ブートファイルは正常にロードされますが、Agamaインストーラが起動に失敗します。
インストーラファイルへのHTTPアクセスを確認します。
>curl -I http://192.168.1.200/boot/images/SLES-16.0/x86_64/liveiso/LiveOS/squashfs.imgGRUB 2設定のカーネルパラメータ構文を確認します。
>grep "root=live:" /srv/tftpboot/boot/grub2/menu.cfgクライアントのブートプロセスを監視します。
>journalctl -f | grep -E "kernel|initrd|agama"ネットワーク設定の永続性を確認します。
#ip addr show
15.9 PXEサーバ検証チェックリスト #
このチェックリストを使用して、PXEサーバ設定のあらゆる側面を体系的に検証してください。
| コンポーネント | 検証手順 | Status |
|---|---|---|
| TFTP Service | サービスがアクティブ、ポート69がリスン中、ファイルにアクセス可能 | ☐ |
| HTTPサービス | nginxがアクティブ、ポート80がリスン中、インストーラファイルにアクセス可能 | ☐ |
| DNSサービス | ホスト名解決が機能している、ポート53がリスン中 | ☐ |
| DHCPサービス | IP割り当てが機能している、ブートオプションが配信されている | ☐ |
| GRUB 2設定 | メニューがロードされている、アーキテクチャ検出が機能している | ☐ |
| IPv6のサポート | ルータ広告がアクティブ、DHCPv6が機能している | ☐ |
| PXEブート | クライアントが正常に起動し、正しいブートローダを受信 | ☐ |
| Agamaインストーラ | インストーラが起動、Webインタフェースにアクセスできる | ☐ |
| インストールソース | リポジトリにアクセスできる、パッケージがインストール可能 | ☐ |
| ネットワークの永続性 | インストール時にネットワーク設定が維持される | ☐ |
15.10 検証の結論 #
適切に検証されたPXEサーバは、クライアントのネットワークブートからAgamaインストーラの起動まで、エンドツーエンドで正常に機能することを実証する必要があります。すべてのサービスがエラーなく動作し、クライアントがネットワーク経由でSUSE Linux Enterprise Server 16.0のインストールを完了できる必要があります。定期的な検証テストにより、自動展開用のPXEインフラストラクチャの継続的な信頼性が確保されます。
16 法的事項 #
Copyright© 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNU Free Documentation Licenseのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNU Free Documentation License」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。