A ネットワーク・インストール設定の作成

ネットワーク・インストールは、特に、OSを複数のシステムにインストールする必要がある場合に便利です。

ブートISOまたはPreboot eXecution Environment (PXE)を使用してOSを複数のシステムにインストールする場合は、次の要素からなるネットワーク・インストール構成を設定できます。

  • IPおよびネットワーク構成、PXE構成ファイル、カーネル・イメージとブート・イメージ、およびカーネル・ブート・ディレクティブを提供するネットワーク・インストール・サーバー。この例では、dnsmasqを使用してこれらのサービスを提供します。

  • NFSやHTTPなどのプロトコルを介した、ネットワーク・アクセス可能なファイル・システム・サーバー。ここには、パッケージ、Kickstartファイルおよびその他の必要な構成ファイルが格納される可能性があります。このドキュメントでは、そのファイル・システムとしてNFSを使用しています。なお、ご使用のシステムからインターネットに直接アクセスできる場合は、Oracle Linux yumサーバー上の直接使用可能なBaseOSおよびAppStreamリポジトリをパッケージ・インストール用に使用するように、Kickstartインストールを構成できます。インターネットに直接アクセスできないシステムがパッケージの完全なセットにアクセスできるように、Oracle Linux: Oracle Linuxでのソフトウェアの管理の説明に従って、これらのリポジトリのyumミラーを作成することもできます。ただし、システムのブート時にそれにKickstartファイルを提供するためのメカニズムは、指定する必要があります。

これら2つのコンポーネントは別々のシステムに配置できます。また、それらで最新のOracle Linuxバージョンが実行されている必要はありません。以前のリリースで十分です。便宜上、この例のシナリオでは、2つのコンポーネントが1つのシステムでホストされていると想定しています。また、Kickstartインストールが使用されていると想定しています。

ネットワーク・サーバーの設定

ネットワーク・インストール用のサーバーの準備は、次の一般的なタスクからなります。

NFSの構成方法

既存のNFSサーバーがある場合は、このサービスを使用して、ISOの展開後のコンテンツ、およびKickstart構成ファイルをホストできます。エクスポートした共有ディレクトリが、PXEブート・ホスト用に指定したIP範囲からアクセス可能であることを確認します。

使用可能なNFSサーバーがない場合は、次の手順を使用して、ネットワーク・インストールが可能になるようにそのサービスをインストールし構成します。

ノート:

次に示すNFS構成手順は、ネットワーク・インストールに関連する内容のみに限定されています。NFSの構成の詳細は、適切なOracle Linuxシステム管理ガイドを参照してください。

  1. nfs-utilsパッケージをインストールします。

    sudo dnf install nfs-utils -y
  2. ファイアウォール・サービスを実行している場合は、次のfirewallコマンドを入力します。

    sudo firewall-cmd --add-service nfs --permanent

    代替ファイアウォール・サービスを使用している場合、または外部ファイアウォール・デバイスがある場合は、必ず、PXEブート・ホストにこのシステム上のNFSサービスへのアクセス権を付与するための、ルールを構成してください。

  3. ISOイメージを格納するディレクトリを作成します。次に例を示します。

    sudo mkdir /var/nfs-exports/ISOs
  4. NFS共有ディレクトリをエクスポートします。

    sudo exportfs -i -o ro [subnet]:/var/nfs-exports/ISOs

    この構文は、そのNFS共有への読取り専用権限でのワールド・アクセスを許可します。subnet (192.0.2.0/24:/var/nsf-exports/ISOsなど)を追加すると、アクセスがそのサブネットのクライアントのみに限定されます。

    または、/etc/exportsファイル内に、その共有ディレクトリをエクスポートするためのエントリを追加することもできます。次に例を示します。

    /var/nsf-exports/ISOs   192.0.2.0/24(ro)

    その後、次のように、/etc/exportsをリロードしてそのエントリを実装します。

    sudo exportfs -ra

    詳細は、exportfs(8)exports(5)およびshowmount(8)の各マニュアル・ページを参照してください。

  5. nfs-serverサービスを開始し、システムのリブートのたびに自動的に開始されるようにそれを構成します。

    sudo systemctl start nfs-server
    sudo systemctl enable nfs-server
  6. 次のように、ダウンロードしたISOイメージをNFS共有ディレクトリのサブディレクトリに展開します。

    sudo cp -a T path-to-download-image /var/nfs-exports/ISOs/ol9
  7. Kickstartを使用する場合は、NFS共有ディレクトリのサブディレクトリにもKickstartファイルを配置します(/var/nfs-exports/ISOs/ksfilesなど)。

  8. (オプション)別のシステムから、そのNFS共有ディレクトリにアクセスできることを確認します。次に例を示します。

    sudo mount -t nfs NFS-server-ip:/var/nfs-exports/ISOs /mnt

dnsmasqの構成方法

dnsmasqルーター通知サーバーは、DNSフォワーダ、DHCPサーバーおよびTFTPサーバーとして機能するように設計されています。dnsmasqは、ほとんどのネットワーク・インストール・シナリオに適用できるため、DHCPサービスとTFTPサービスを別々に構成する必要がない、便利な手段です。

dnsmasqの詳細は、dnsmasq(8)マニュアル・ページ、/usr/share/doc/dnsmasq-versionファイルおよびhttps://thekelleys.org.uk/dnsmasq/doc.htmlを参照してください。

  1. dnsmasqパッケージをインストールします。

    sudo dnf install dnsmasq -y
  2. /etc/dnsmasq.confファイル内のパラメータを構成します。

    • 少なくとも、enable-TFTPエントリと、tftp-rootの定義済TFTPサーバー・ディレクトリが必要です。次の例で太字で示しているエントリを参照してください。

      interface=em1
      dhcp-range=10.0.0.101,10.0.0.200,6h
      dhcp-host=80:00:27:c6:a1:16,10.0.0.253,svr1,infinite
      dhcp-boot=pxelinux/pxelinux.0
      dhcp-match=set:efi-x86_64,option:client-arch,8
      dhcp-boot=tag:efi-x86_64,shim.efi
      enable-tftp
      tftp-root=/var/lib/tftpboot

      ノート:

      ご使用のシステムでSELinuxがenforcingモードで有効になっているときに、/var/lib/tftpboot以外のTFTPサーバー・ディレクトリを構成した場合は、次のコマンドを実行できるようにpolicycoreutils-pythonおよびpolicycoreutilsパッケージもインストールする必要があります。

      sudo /usr/sbin/semanage fcontext -a -t tftpdir_t "/var/tftpboot(/.*)?"
      sudo /sbin/restorecon -R -v /var/tftpboot

      これらのコマンドにより、TFTPサーバー・ディレクトリ階層のデフォルトのファイル・タイプをtftpdir_tとして定義し、そのファイル・タイプをそのディレクトリ階層全体に適用します。

      次のリストでは、/etc/dnsmasq.confファイル内のその他のパラメータについて説明します。

      interface

      着信クライアント・リクエストを監視するインタフェースを指定します。

      dhcp-range

      使用可能なIPアドレスの範囲を特定します。上の例では、6hという設定により、アドレスのリースが6時間に指定されています。

      リース時間無制限で静的アドレスを構成するには、プールではなく、静的ネットワーク・アドレスを指定し、staticおよびinfiniteキーワードを使用します。次に例を示します。

      dhcp-range=10.0.0.253,static,infinite
      dhcp-host

      クライアント・システム用に予約されているIPアドレスを指定します。このシステムはその名前とMACアドレスで特定します。

      dhcp-boot

      クライアントのブート・ローダー・ファイルの場所を指定します。BIOSベースのクライアントの場合は、pxelinux/pxelinux.0のようにします。UEFIベースのクライアントの場合は、ブート・ローダーを指定する前に設定にtag:efi-x86_64キーワードを含めます。次に例を示します。

      dhcp-boot=tag:efi-x86_64,shim.efi

      BIOSベースのクライアント用とUEFIベースのクライアント用に別個のエントリを作成する必要があります。

    • 次のように、このファイル内のtftp-no-blocksize行をコメント解除します。
      # This option stops dnsmasq from negotiating a larger blocksize for TFTP
      # transfers. It will slow things down, but may rescue some broken TFTP
      # clients.
      tftp-no-blocksize
  3. (オプション) dnsmasqをキャッシュ専用ネーム・サーバーとして使用するには、次の手順を実行します。

    1. /etc/resolv.confファイル内で、他のネーム・サーバー・エントリより前に、127.0.0.1のネーム・サーバー・エントリを構成します。次に例を示します。

      nameserver 127.0.0.1
      nameserver 10.0.0.8
      nameserver 10.0.0.4

      dnsmasqサーバーは、127.0.0.1エントリを無視して、DNS問合せをリスト内の他のネーム・サーバーに転送します。

    2. DNSリクエストを受け入れるようにファイアウォールを構成します。

      sudo firewall-cmd --add-service=dns --permanent
  4. dnsmasqサービスを開始し、システムのリブートのたびに自動的に開始されるようにそれを構成します。

    sudo systemctl start dnsmasq
    sudo systemctl enable dnsmasq

PXEブート・ロードの構成

PXEブート・ローダーを構成する手順は、ブート・サーバー用に使用されるシステムのタイプによって異なります。

重要:

サポートする予定のインストールには、正しいカーネルおよびRAMディスク・イメージを使用する必要があります。たとえば、Btrfs rootパーティションを持つシステムをインストールする場合は、UEK Boot ISOを使用して、システムがBtrfsサポートでインストールできるように適切なカーネルおよびイメージを取得する必要があります。

BIOSベースのPXEクライアント用に構成する方法

  1. pxelinux.0ブート・ローダーを含むsyslinuxパッケージをインストールします。

    sudo dnf install syslinux -y
  2. TFTPサーバー・ディレクトリの下にpxelinux/pxelinux.cfgディレクトリを作成します。

    sudo mkdir -p /var/lib/tftpboot/pxelinux/pxelinux.cfg
  3. ブート・ローダー・ファイルをpxelinuxサブディレクトリにコピーします。

    sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux
  4. NFS共有ディレクトリから、インストール・カーネル(vmlinuz)およびRAMディスク・イメージ・ファイル(initrd.img)をpxelinuxサブディレクトリにコピーします。

    sudo cp /var/nfs-exports/ISOs/ol9/vmlinuz /var/lib/tftpboot/pxelinux/vmlinuz
    sudo cp /var/nfs-exports/ISOs/ol9/initrd.img /var/lib/tftpboot/pxelinux/initrd.img
  5. ブート・ローダーをメニューとして表示するためのモジュールを、ブート・ローダー・ディレクトリにコピーします。

    sudo cp /usr/share/syslinux/*.c32 /var/lib/tftpboot/pxelinux
  6. pxelinux.cfgサブディレクトリで、エントリを作成してからブート構成ファイルに追加します。

    このファイルには、pxe.confなどの任意の名前を割り当てることができます。次の例では、このファイル内の標準的なエントリを示します。

    DEFAULT menu.c32
    TIMEOUT 400
    ONTIMEOUT BootLocal
    PROMPT 0
    MENU INCLUDE pxelinux.cfg/pxe.conf
    NOESCAPE 1
    LABEL BootLocal
        localboot 0
        TEXT HELP
        Boot to local hard disk
        ENDTEXT
    
    LABEL OL9
        MENU LABEL OL9 
        kernel vmlinuz
        append initrd=initrd.img inst.repo=/var/nfs-exports/ISOs/ol9/ \
        inst.ks.sendmac inst.ks=/var/nfs-exports/ISOs/ksfiles/kstart-file
        TEXT HELP
        Install Oracle Linux 9   
        ENDTEXT

    ブート・ローダーは、これらのエントリに基づいて、TIMEOUT期間中にユーザーの介入がなかった場合に自動的にローカル・ドライブからブートを試みます。OSがインストールされていない場合、ブート・ローダーはネットワークからブートし、インストール・プロセスを開始します。

    このリストでは、構成ファイル内で使用されるディレクティブの一部を説明します。

    • DEFAULTにより、ブート・ローダー・メニューを表示するために使用するモジュールを特定します。

      基本的なテキスト表示の場合は、menu.c32モジュールで十分です。ただし、画像や色などのグラフィカル表示用のディレクティブを追加するには、かわりにvesamenu.c32モジュールを指定します。

    • TIMEOUTにより、ブート・ローダーが後続のディレクティブに従ってクライアントをブートするまでの期間をtimeout/10秒単位で指定します。次のディレクティブ(ontimeout)により、待機期間を過ぎたときのアクションを指定します。

    • PROMPTにより、デフォルトでboot:プロンプトを表示するかどうかを決定します。PROMPTが1に設定されている場合は、boot:プロンプトが表示されます。PROMPTが0に設定されている場合は、ユーザーがコンソールで[Shift]または[Alt]キーを押さないかぎり、boot:プロンプトは表示されません。

    • MENU INCLUDEにより、作成したブート構成を特定します。

    • kernelにより、カーネル実行可能ファイルの名前を定義します。

    • appendにより、カーネルのロード時に追加する必要があるパラメータ(RAMディスク・イメージの名前やファイルの場所など)を定義します。なお、ご使用のシステムからインターネットにアクセスできる場合は、Oracle Linux yumサーバーにあるBaseOSリポジトリを指すようにinst.repo変数を設定できます。たとえば、x86_64プラットフォーム・システムの場合は、inst.repohttps://yum.oracle.com/repo/OracleLinux/OL9/baseos/latest/x86_64に設定できます。

      重要:

      カーネルとRAMディスク・イメージのファイルのパスは、ブート・ローダーが含まれるサブディレクトリ(pxelinuxなど)からの相対パスであるとみなされます。pxelinux/OL9などのサブディレクトリにvmlinuzおよびinitrd.imgファイルを配置する場合は、必ず正しい相対パスを指定してください。

UEFIベースのPXEクライアント用に構成する方法

  1. 次のパッケージをインストールします。

    • grubx64.efiブート・ローダーを含むgrub2-efi

    • 第1段階ブート・ローダーshim.efiを含むshim

      このパッケージは、UEFIクライアントでセキュア・ブートをサポートするために必要ですが、パススルー・ブート・ローダーとしてすべてのUEFIクライアントに使用する必要があります。

  2. パッケージの場所に移動し、その内容を展開します。

    次のコマンドを実行します:

    sudo cd /tempdir
    sudo rpm2cpio grub2-efi-version.rpm | cpio -idmv 
    sudo rpm2cpio shim-version.rpm | cpio -idmv
  3. TFTPサーバー・ディレクトリの下に、efiなどのサブディレクトリを作成します。

    sudo mkdir -p /var/lib/tftpboot/efi
  4. ブート・ローダーおよびその他の関連ファイルをefiサブディレクトリにコピーします。

    次のコマンドを実行します:

    sudo cp /tempdir/boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/efi
    sudo cp /tempdir/boot/efi/EFI/redhat/shim.efi /var/lib/tftpboot/efi
    sudo cp /tempdir/boot/efi/EFI/redhat/MokManager.efi /var/lib/tftpboot/efi

    ノート:

    クライアントでセキュア・ブートをサポートする必要がある場合は、shim.efiファイルとMokManager.efiファイルが必要です。MokManager.efiには、EFIバイナリへの署名に使用するキーを管理するためのユーティリティが備えられています。その後、/etc/dnsmasq.confファイル内でUEFIベースのクライアント用にdhcp-bootを設定するときに、パススルー・ブート・ローダーとして、shim.efiを指定します。dnsmasqの構成方法を参照してください。

  5. NFS共有ディレクトリから、インストール・カーネル(vmlinuz)およびRAMディスク・イメージ・ファイル(initrd.img)をefiサブディレクトリにコピーします。

    sudo cp /var/nfs-exports/ISOs/ol9/vmlinuz -O /var/lib/tftpboot/efi/vmlinuz
    sudo cp /var/nfs-exports/ISOs/ol9/initrd.img /var/lib/tftpboot/efi/initrd.img
  6. efiサブディレクトリで、エントリを作成してから、それをgrub.cfgブート・ローダー構成ファイルに追加します。

    この構成ファイルには、ネットワークからのブートのみでなく、ローカルでブートするためのオプションも必要です。クライアントが、ネットワークからブートされてインストール・プロセスを開始します。その後、インストール終了時にクライアントが再起動されると、システムがローカル・ドライブからブートされます。

    次の例では、このファイル内の標準的なエントリを示します。

    set default 0
    set timeout=10
    
    menuentry 'ol9 localboot' {
    echo "Booting from local disk"
    set root=(hd0,gpt1)
    chainloader efi/shim.efi
    boot
    }
    
    menuentry 'ol9' {
      echo "Loading vmlinuz"
      linuxefi vmlinuz inst.repo=/var/nfs-exports/ISOs/ol9/ inst.ks.sendmac \
      inst.ks=/var/nfs-exports/ISOs/ksfiles/kstart-file
      echo "Loading /initrd.img"
      initrdefi initrd.img
      echo "Booting installation kernel"
    }

    注意:

    ブート・ローダー構成は、UEFIベースのシステム間で共通ではありません。ディスク・レイアウトが異なるなどの違いがあるため、特定のブート・ローダー設定がすべてのシステムに共通に適用されるわけではありません。前述の例では、ブート・ローダーを構成する方法を1つのみ示しています。ご使用のシステムに適したブート・ローダー構成を作成する必要があります。

    • linuxefiにより、カーネル実行可能ファイルの名前を定義し、カーネルのロード時に追加する必要があるパラメータ(インストール・パッケージの場所やファイルの場所など)を定義します。

    • initrdefiにより、RAMディスク・イメージの名前を定義します。

    重要:

    カーネルとRAMディスク・イメージのファイルのパスは、ブート・ローダーが含まれるサブディレクトリ(efiなど)からの相対パスであるとみなされます。efi/OL9などのサブディレクトリにvmlinuzおよびinitrd.imgファイルを配置する場合は、必ず正しい相対パスを指定してください。

様々な種類のクライアントのサポート

様々なタイプのクライアントをサポートするために、次の条件に基づいて名前を付けて、構成ファイルを作成できます。

  • クライアントのUUID (例: a8943708-c6f6-51b9-611e-74e6ac80b93d)

    ノート:

    UUIDベースのファイル名は、BIOSベースのクライアントの場合のみ有効です。UEFIベースのクライアントの場合は適用しないでください。

  • イーサネットのARPハードウェア・タイプを表す01-の後にクライアントのMACアドレスを付けて、コロンではなくダッシュを使用して各バイト値を区切った名前(例: 01-80-00-27-c6-a1-16)

    MACアドレスを入力するときは、小文字を使用してください。

  • 16進表記の、先頭に0xのない、クライアントのIPアドレス(たとえば、0A0000FDはIPアドレス10.0.0.253を表す)

    構成ファイルの数を減らすには、クライアントをIPアドレス範囲別にグループ化します。たとえば、0A0000Eは、10.0.0.224から10.0.0.239までのIPアドレス範囲を表します。

両方のタイプのクライアントを扱っている場合は、それらのファイル名が互いに異なることを確認してください。たとえば、BIOSベースのクライアントでのこの構成ファイルがA000FCの場合、UEFIベースのクライアントでのそれに相当するファイルはgrub.cfg-A000FCになります。

BIOSベースのクライアントの場合はpxelinux/pxelinux.cfg、UEFIベースのクライアントの場合はefiサブディレクトリなど、構成ファイルをそれぞれのブート・ローダー・サブディレクトリに配置します。

ブート・ローダーは、一致するファイル名が見つかるまで、次の順序で構成ファイルを検索します。

  • UUID (たとえば、a8943708-c6f6-51b9-611e-74e6ac80b93d)

  • 01-MAC_address (例: [grub2-cfg-]01-80-00-27-c6-a1-16)

  • IPアドレスの完全32ビット(例: [grub.cfg-]0A0000FD)

  • IPアドレスの最上位28ビット(例: [grub.cfg-]0A0000F)

  • IPアドレスの最上位24ビット(例: [grub.cfg-]0A0000)

  • IPアドレスの最上位20ビット(例: [grub.cfg-]0A000)

  • IPアドレスの最上位16ビット(例: [grub.cfg-]0A00)

  • IPアドレスの最上位12ビット(例: [grub.cfg-]0A0)

  • IPアドレスの最上位8ビット(例: [grub.cfg-]0A)

  • IPアドレスの最上位4ビット(例: [grub.cfg-]0)

  • デフォルトの構成ファイル(BIOSベースのクライアントの場合はdefault、UEFIベースのクライアントの場合はgrub.cfg)。

1つのクライアント・タイプ用の複数の構成ファイルに同一の内容が含まれている場合は、lnコマンドを使用してそれらのファイルをプライマリ・コピーにリンクできます。次に例を示します。

sudo ln primary-ol-verson [grub.cfg-]0A0000FC
sudo ln primary-ol-verson [grub.cfg-]0A0000FD
sudo ln primary-ol-verson [grub.cfg-]0A0000FE

pxelinuxの詳細は、https://wiki.syslinux.org/wiki/index.php?title=PXELINUXを参照してください。

GRUB 2の詳細は、info grubコマンドを実行してGRUB 2マニュアルにアクセスしてください。