第15章 リモートディスクレスシステムの設定

次のセクションでは、ネットワーク環境にリモートディスクレスシステムをデプロイするのに必要な手順の概要を説明します。同じ設定で複数のクライアントが必要な場合は、このソリューションを実装すると便利です。また、クライアントの数だけハードドライブのコストを節約できます。Red Hat Enterprise Linux 8 オペレーティングシステムがインストールされていることを前提とします。

図15.1 リモートディスクレスシステム設定のダイアグラム

リモートディスクレスシステム設定のダイアグラム

ゲートウェイは別のサーバーに設定する可能性があることに注意してください。

15.1. リモートディスクレスシステム用環境の準備

この手順では、リモートディスクレスシステム用の環境の準備を説明します。

リモートディスクレスシステムを起動するには、tftp サービス (tftp-server が提供) および DHCP サービス (dhcp が提供) の両方が必要です。tftp サービスは、PXE ローダーを介してネットワーク経由でカーネルイメージと initrd を取得するために使用されます。

前提条件

  • 以下のパッケージをインストールしている。

    • tftp-server
    • xinetd
    • dhcp-server
    • syslinux
  • ネットワーク接続を設定している。

手順

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

    # yum install dracut-network
  2. dracut-network パッケージをインストールしたら、以下の行を /etc/dracut.conf に追加します。

    add_dracutmodules+="nfs"
重要

一部の RPM パッケージは、ファイル機能 (setcapgetcap など) を使用して開始しました。ただし、現在 NFS ではこれらの機能に対応していないため、ファイル機能を使用するパッケージのインストールまたは更新に失敗します。

この時点で、リモートディスクレスシステムの実装を続行する準備が整ったサーバーを用意できます。

15.2. ディスクレスクライアントの tftp サービスの設定

この手順では、ディスクレスクライアントの tftp サービスを設定する方法を説明します。

前提条件

tftp を設定するには、以下を行います。

  1. ネットワーク上での PXE ブートを有効にします。

    # systemctl enable --now tftp
  2. tftp root ディレクトリー (chroot) は /var/lib/tftpboot にあります。/usr/share/syslinux/pxelinux.0/var/lib/tftpboot/ にコピーします。

    # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
  3. /usr/share/syslinux/ldlinux.c32/var/lib/tftpboot/ にコピーします。

    # cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/
  4. tftp の root ディレクトリーに pxelinux.cfg ディレクトリーを作成します。

    # mkdir -p /var/lib/tftpboot/pxelinux.cfg/
  5. ディスクレスクライアントの tftp を設定した後に、DHCP、NFS、エクスポートしたファイルシステムを適宜設定します。

15.3. ディスクレスクライアントの DHCP サーバーの設定

この手順では、ディスクレスシステムに DHCP を設定する方法を説明します。

前提条件

手順

  1. 以下の設定を /etc/dhcp/dhcpd.conf に追加して、DHCP サーバーを設定し、PXE ブートを有効にします。

    allow booting;
    allow bootp;
    subnet 192.168.205.0 netmask 255.255.255.0 {
      pool
      {
        range 192.168.205.10 192.168.205.25;
      }
    
      option subnet-mask 255.255.255.0;
      option routers 192.168.205.1;
    }
    class "pxeclients" {
       match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
       next-server server-ip;
       filename "pxelinux.0";
    }

    この設定は UEFI からは起動しません。「UEFI ベースのクライアント向けに TFTP サーバーの設定」を参照してください。また、/etc/dhcp/dhcpd.conf はサンプルファイルであることに注意してください。

    注記

    libvirt 仮想マシンがディスクレスクライアントとして使用されると、libvirt は DHCP サービスを提供し、スタンドアロン DHCP サーバーは使用されません。このような状況では、libvirt ネットワーク設定 virsh net-editbootp file='filename' オプションで、ネットワークブートを有効にする必要があります。

  2. 次のコマンドを実行して、dhcpd.service を有効にします。

    # systemctl enable --now dhcpd.service

15.4. ディスクレスクライアントのエクスポートしたファイルシステムの設定

この手順では、ディスクレスクライアントのエクスポートしたファイルシステムを設定する方法を説明します。

前提条件

手順

  1. /etc/exports にその root ディレクトリーを追加して、root ディレクトリーをエクスポートするように NFS サーバーを設定します。手順は、「NFS サーバーの設定」を参照してください。
  2. ディスクレスクライアントに完全に対応できるようにするには、root ディレクトリーには Red Hat Enterprise Linux の完全なインストールが含まれている必要があります。新しいベースシステムをインストールするか、または既存のインストールのクローンを作成できます。

    • Red Hat Enterprise Linux をエクスポートした場所にインストールするには、--installroot オプションを指定して yum ユーティリティーを使用します。

      # yum install @Base kernel dracut-network nfs-utils \
            --installroot=exported-root-directory --releasever=/
    • 実行中のシステムで同期するには、rsync ユーティリティーを使用します。

      # rsync -a -e ssh --exclude='/proc/' --exclude='/sys/' \
             example.com:/  exported-root-directory
      • example.com は、rsync ユーティリティーで同期する実行中のシステムのホスト名に置き換えます。
      • exported-root-directory を、エクスポートしたファイルシステムへのパスに置き換えます。

        このオプションには、実行中の別のシステムが必要です。これは、このコマンドでサーバーにクローンを作成します。

エクスポートするファイルシステムは、ディスクレスクライアントが使用できるようにする前に追加で設定する必要があります。空き領域が足りない場合は、次の手順を実行します。

ファイルシステムの設定

  1. ディスクレスクライアントが使用するカーネル (vmlinuz-kernel-version) を選択し、tftp の boot ディレクトリーにコピーします。

    # cp /exported-root-directory/boot/vmlinuz-kernel-version /var/lib/tftpboot/
  2. NFS サポートで initrd (つまり initramfs-kernel-version.img) を作成します。

    # dracut --add nfs initramfs-kernel-version.img kernel-version
  3. 次のコマンドで initrd のファイル権限を 644 に変更します。

    # chmod 644 /exported-root-directory/boot/initramfs-<kernel-version>.img
    警告

    initrd のファイルパーミッションを変更しないと、pxelinux.0 ブートローダーが「file not found」エラーで失敗します。

  4. 作成した initramfs-kernel-version.imgtftp の boot ディレクトリーにコピーします。

    # cp /exported-root-directory/boot/initramfs-kernel-version.img /var/lib/tftpboot/
  5. /var/lib/tftpboot/ ディレクトリーに initrd とカーネルを使用するように、デフォルトのブート設定を編集します。この設定は、エクスポートしたファイルシステム (/exported-root-directory) を読み書きとしてマウントするよう、ディスクレスクライアントの root に指示を出します。/var/lib/tftpboot/pxelinux.cfg/default ファイルに以下の設定を追加します。

    default rhel8
    
    label rhel8
      kernel vmlinuz-kernel-version
      append initrd=initramfs-kernel-version.img root=nfs:server-ip:/exported-root-directory rw

    server-ip を、tftp サービスと DHCP サービスが置かれているホストマシンの IP アドレスに置き換えます。

  6. 必要に応じて、/var/lib/tftpboot/pxelinux.cfg/default ファイルで以下の設定を使用して、システムを 読み取り専用 形式でマウントできます。

    default rhel8
    
    label rhel8
      kernel vmlinuz-kernel-version
      append initrd=initramfs-kernel-version.img root=nfs:server-ip:/exported-root-directory ro
  7. NFS サーバーを再起動します。

これで、NFS 共有がディスクレスクライアントにエクスポートできるようになりました。これらのクライアントは、PXE 経由でネットワーク経由で起動できます。

15.5. リモートディスクレスシステムの再設定

場合によってはシステムの再設定が必要になる場合があります。以下の手順は、ユーザーがパスワードを変更する方法、システムにソフトウェアをインストールする方法、およびシステムを読み取り専用モードの /usr に分割する方法、読み取りと書き込みモードの /var に説明する方法を示しています。

前提条件

  • no_root_squash オプションは、エクスポートしたファイルシステムで有効にしている。

手順

  1. ユーザーパスワードを変更するには、以下の手順に従います。

    • コマンドラインを /exported/root/directory に変更します。

      # chroot /exported/root/directory /bin/bash
    • 必要なユーザーのパスワードを変更します。

      # passwd <username>

      <username> を、パスワードを変更する必要がある実際のユーザーに置き換えます。

    • コマンドラインを終了します。

      # exit
  2. リモートのディスクレスシステムにソフトウェアをインストールするには、次のコマンドを使用します。

    # yum install <package> --installroot=/exported/root/directory --releasever=/ --config /etc/dnf/dnf.conf --setopt=reposdir=/etc/yum.repos.d/

    <package> を、インストールする実際のパッケージに置き換えます。

  3. リモートディスクレスシステムを /usr および /var に分割し、別々のエクスポートを設定する必要があります。詳細は、「NFS サーバーの設定」を参照してください。

15.6. リモートディスクレスシステムの読み込みにおける最も一般的な問題

以下のセクションでは、ディスクレスクライアントでリモートディスクレスシステムの読み込み時の問題と、その解決可能な解決策を説明します。

15.6.1. クライアントが IP アドレスを取得しない

この問題のトラブルシューティングを行うには、次を行います。

  1. DHCP サービスがサーバーで有効になっているかどうかを確認します。

    • dhcp.service が実行しているかどうかを確認します。

      # systemctl status dhcpd.service
    • dhcp.service がアクティブでない場合は、有効にして起動する必要があります。

      # systemctl enable dhcpd.service
      # systemctl start dhcpd.service

      ディスクレスクライアントを再起動します。

  2. それでも問題が続く場合は、サーバーで DHCP 設定ファイル /etc/dhcp/dhcpd.conf を確認します。詳細は 「ディスクレスクライアントの DHCP サーバーの設定」 を参照してください。
  3. ファイアウォールポートが開いているかどうかを確認します。

    • tftp.service がアクティブなサービスに記載されているかどうかを確認します。

      # firewall-cmd --get-active-zones
      # firewall-cmd --info-zone=public
    • tftp.service がアクティブなサービスに記載されていない場合は、一覧に追加します。

      # firewall-cmd --add-service=tftp
    • nfs.service がアクティブなサービスに記載されているかどうかを確認します。

      # firewall-cmd --get-active-zones
      # firewall-cmd --info-zone=public
    • nfs.service がアクティブなサービスに記載されていない場合は、これを一覧に追加します。

      # firewall-cmd --add-service=nfs

15.6.2. リモートディスクレスシステムの起動時に、ファイルは使用できない

この問題を解決するには、以下を行います。

  1. ファイルが有効であるかどうかを確認します。サーバーの場所が /var/lib/tftpboot/ です。
  2. ファイルが導入される場合は、その権限を確認します。

    # chmod 644 pxelinux.0
  3. ファイアウォールポートが開いているかどうかを確認します。

15.6.3. カーネル/initrd の読み込み時に、システムの起動に失敗した

この問題を解決するには、以下を行います。

  1. サーバーで NFS サービスが有効になっているかどうかを確認します。

    • nfs.service が実行中かどうかを確認します。

      # systemctl status nfs.service
    • nfs.service が非アクティブの場合は、有効にして起動する必要があります。

      # systemctl enable nfs.service
      # systemctl start nfs.service
  2. pxelinux.cfg でパラメーターが正しいかどうかを確認します。詳細は 「ディスクレスクライアントのエクスポートしたファイルシステムの設定」 を参照してください。
  3. ファイアウォールポートが開いているかどうかを確認します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。