SDB:PXE ブートによるインストール

移動先: 案内, 検索
この記事では、 Preboot eXecution Environment (PXE) を利用したネットワークインストールを説明しています。

概要

Preboot eXecution Environment (PXE) とはフロッピィディスクやハードディスク, CD-ROM などを使用せずにコンピュータを起動する方法で、 PXE と呼ばれるプロトコルを利用して、 BIOS からネットワークにアクセスして起動の処理を行ないます。 PXE を動作させるには、ネットワーク内にサーバを用意して、 OS の設定を行なう必要があります。また、インストール作業を行なうクライアントでは、 LAN カード (NIC) に対して PXE を動作させるように設定を行なう必要もあります。新しいメインボードの搭載されたコンピュータであれば、標準の BIOS イメージ内に PXE 用のモジュールが含まれていますが、 NIC を拡張ボードとして接続しているような場合 (たとえば ISA/PCI などのスロットに接続して使用している場合) は、 BootROM と呼ばれるハードウエアモジュール (NIC 上に ROM ソケットがある場合) を接続する必要がある場合があるほか、 BIOS イメージ内に最初から用意されている場合もあります (AMIFLASH などのイメージツールで設定できる場合もあります) 。


準備

ネットワーク経由のインストールを実施するには、下記のものを用意する必要があります:

  • openSUSE がインストールされたマシン (dhcpd, tftpd を動作させます。 'zypper in atftp dhcp-server' でインストールすることができます)
  • インターネット接続 (広帯域な環境がお勧めです)
  • PXE ブートに対応したシステム (インストール先のマシン)

設定

dhcpd の設定

PXE ブートでは、 BOOTP サーバを利用してネットワーク周りに必要な情報を受け渡します。 BOOTP は、ネットワークでよく用いられ、 openSUSE のディストリビューションにも含まれている DHCP サーバで賄うことができます。下記は設定例になります (設定ファイルは /etc/dhcpd.conf です):

host target_host {
     hardware ethernet xx:xx:xx:yy:yy:yy;
     fixed-address 192.168.1.10;
     server-name "192.168.1.1";
     next-server 192.168.1.1;
     filename "pxelinux.0";
}

PXE 用に 3 行ほど特殊な設定を追加しています。追加した設定は TFTP ブートサーバの IP アドレスを指定するもの (server-name, next-server) と、 PXE ブートストラップと呼ばれるファイルのファイル名を指定するもの (filename) があります。 また、 "hardware ethernet" 以下には、対象のマシンの MAC アドレスを入力してください。

設定が完了したら、下記のようにして DHCP サーバを再起動します:

 # rcdhcpd restart

注意: 使用する TFTP サーバや chroot 環境を使用するかどうかによって、 "filename" でディレクトリを指定すべきかどうかが変わります。 openSUSE に標準で用意されている tftp サーバや RedHat ベースのサーバを使用する場合、 "filename" は下記のように (ディレクトリを指定せずに) 設定する必要があります:

filename "pxelinux.0";

ISC DHCP サーバのバージョン 3 (openSUSE に同梱されているバージョン) では、起動要求にのみ答えるように DHCP サーバを構成し、それ以外の要求は他の (元からある) DHCP サーバを利用するようにすることができます。これは特に、既存の DHCP サーバで起動用のサーバや起動用のファイル名を指定することができないような場合 (多くの DSL ルータがそれに当てはまります) に有用です。 これは、 PXE クライアントが、起動用のサーバやファイル名の含まれていない DHCP offer パケットを無視するようになっているためです。下記は、このような用途での完全な設定例です:

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none; ddns-updates off;
allow booting;
 
option domain-name "my.domain";
option domain-name-servers my.dnsserver;
option routers my.router;
   
# PXE および Etherboot クライアントからの DHCP 要求を識別するためのルール設定
class "pxe" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}
class "etherboot" {
    match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
}
   
subnet 192.168.1.0 netmask 255.255.255.0 {
    option broadcast-address 192.168.1.255;
    pool {
         default-lease-time 180; # 起動用には長い貸与時間は不要であるため
         max-lease-time 360;     # 起動後は通常の DHCP 要求でアドレスを取り直すため
         server-name "mybootserver";
         next-server mybootserver.; # お使いのローカルの DNS サーバが FQDN を
                                    # 処理しない場合、 '.' を末尾に付けておいてください
         filename "pxelinux.0";
         allow members of "pxe";
         allow members of "etherboot"; # Etherboot についても許可する
         range 192.168.1.201 192.168.1.211;
     }
}

atftpd の設定

atftp は TFTP 関連のすべての RFC に準拠している唯一のフリー TFTP サーバであることから、 atftp をお使いになることをお勧めします。インストールを行なったあとは、 /etc/sysconfig/atftpd ファイル内に書かれている設定をご確認ください。また、 tftp というユーザが作成されているかどうかについてもご確認ください。ユーザが存在しないと、デーモンの起動時にエラーになってしまい、読み込めなくなってしまうためです。下記は設定例です:

ATFTPD_OPTIONS="--daemon --user tftp -v"
ATFTPD_USE_INETD="no"
ATFTPD_DIRECTORY="/srv/tftp/tftpboot"

上記の例では、 TFTP のルートディレクトリは /srv/tftp/tftpboot になっています。 TFTP サーバを再起動するには、下記のようにして行ないます:

 # rcatftpd restart

注意: RedHat Enterprise Linux に標準で添付されている tftp サーバでも、問題なく動作します。こちらの場合は、特に追加の設定は必要ありません。単純に下記のコマンドでサービスを起動するように設定するだけです:

chkconfig tftp on

tftpd-hpa の設定

tftpd-hpa は H. Peter Anvin 氏が開発している tftp サーバで、 openSUSE では "tftpd" パッケージとして用意されています。既定のセットアップでは、 tftpd-hpa は xinetd 経由で起動し、 /etc/xinetd.d/tftp で指定されているディレクトリ (通常は /tftpboot) に chroot されるようになっています。 /etc/xinetd.d/tftp を設定することで、サーバを非特権ユーザで動作させることもできます。


PXE ブート環境の設定

ファイルの準備

PXE 環境を構築する前に、 syslinux パッケージをインストールする必要があります。このパッケージには、下記の非常に有用なファイルが含まれています:

 /usr/share/syslinux/pxelinux.0

syslinux をインストールできない環境の場合は、 こちら からダウンロードすることもできます。

PXE ブートの設定

ここまでくれば、 PXE のブート環境の準備は終わっています。次に TFTP のルートディレクトリ内にディレクトリ構造を作成します:

 # mkdir -p /srv/tftp/tftpboot/pxelinux.cfg

さらに PXE のブートストラップファイルを tftpboot ディレクトリ内にコピーします:

 # cp /usr/share/syslinux/pxelinux.0 /srv/tftp/tftpboot

続いて /srv/tftp/tftpboot/pxelinux.cfg/default という PXE の設定ファイルを作成します。これは syslinux.cfg ファイルとほぼ同じ構造です。下記に設定例を示します:

default install
prompt   1
timeout  30
  
# i386 Linux のインストール
label install
  kernel linux
  append initrd=initrd splash=silent vga=0x314 showopts install=http://download.opensuse.org/factory/repo/oss/

# x86_64 Linux のインストール
label install64
  kernel linux64
  append initrd=initrd64 splash=silent vga=0x314 showopts install=http://download.opensuse.org/factory/repo/oss/ 


注意: RedHat ベースのサーバをお使いの場合、 "append" で始まる各行に下記の内容を追加する必要があります:

append root=/dev/ram0 load_ramdisk=1 initrd=initrd splash=silent showopts ramdisk_size=4096 init=linuxrc

上記の設定ファイルでは、 2 つの重要なファイルを参照しています。それぞれ linuxinitrd というファイル名で、インターネット上にある openSUSE のインストールリポジトリ (またはそのミラーサイト) からダウンロードすることができます。なお、お使いのアーキテクチャ (i386, x86_64) によって URL が異なることに注意してください:

# cd /srv/tftp/tftpboot
# wget http://download.opensuse.org/factory/repo/oss/boot/i386/loader/linux
# wget http://download.opensuse.org/factory/repo/oss/boot/i386/loader/initrd
# wget -O initrd64 http://download.opensuse.org/factory/repo/oss/boot/x86_64/loader/initrd
# wget -O linux64 http://download.opensuse.org/factory/repo/oss/boot/x86_64/loader/linux

注意: RedHat ベースのサーバをお使いの場合、 TFTP サーバのディレクトリ構造は下記のようになっています:

 /tftpboot 
 /tftpboot/pxelinux.0 
 /tftpboot/initrd.img 
 /tftpboot/vmlinuz 
 /tftpboot/pxelinux.cfg 
 /tftpboot/pxelinux.cfg/default

上記の設定を使用した場合、 boot: プロンプトで "install" または "install64" と入力することで、インストールを開始することができます。

また、 syslinux と isolinux が使用するブートメッセージファイルを作成することもできます。このブートメッセージファイルは、 boot: プロンプトの前に表示されます。ブートメッセージファイルは /srv/tftp/tftpboot/f1.txt というファイル名になっていますので、たとえば下記のように内容を入力します:

boot options:
  install   - install 32 bit i386 openSUSE
  install64 - install 64 bit x86_64 openSUSE

あとは /srv/tftp/tftpboot/pxelinux.cfg/default ファイルを編集し、冒頭部に下記を追加します:

 DISPLAY f1.txt
 F1 f1.txt

上記のようにブートメッセージファイルと設定ファイルを設定すると、 boot: だけでなく下記のようにメッセージが表示されるようになります:

boot options:
  install   - install 32 bit i386 openSUSE
  install64 - install 64 bit x86_64 openSUSE
 
boot:
Process-stop.png
警告!
ブートメッセージファイルの表示は、システムの起動直後となりますので、仕様上の制限から、日本語を表示させることができません。英数字でメッセージを作成してください。



PXE からの起動

インストール作業を実施するマシンで PXE が有効になっていることを確認したら、あとは PXE で起動してインストールを実行するだけです。


一般的な問題

PXELINUX の起動が遅い

PXELINUX が読み込まれる際、下記のようなメッセージが表示されたあと、時間がかかってしまう場合があります:

 pxelinux.cfg/01-88-99-aa-bb-cc-dd
 pxelinux.cfg/C000025B
 pxelinux.cfg/C000025
 pxelinux.cfg/C00002
 pxelinux.cfg/C0000
 pxelinux.cfg/C000
 pxelinux.cfg/C00
 pxelinux.cfg/C0
 pxelinux.cfg/C
 pxelinux.cfg/default

このような場合は、 /etc/dhcpd.conf ファイル内の next-server の設定を確認し、正しい TFTP サーバが指定されているかどうかをご確認ください。例にも示してあるとおり、ここではホスト名による指定はできません。下記のように IP アドレスで指定してください:

 next-server 192.168.77.254;

上記以外にも、お使いのネットワーク内に IP アドレスの付与されたルータが存在する場合は、 next-server にルータのアドレスを指定することもできます:

 next-server 192.168.0.1

オプション設定が有効にならない

このような場合は、 /var/log/messages 内に下記のような警告メッセージが出力されているかどうかをご確認ください:

in.tftpd: tftp: client does not accept options

上記は異常を示すものではなく、仕様上の制限により発生する問題です。これは PXELINUX 側の仕様により、すべてのオプションが利用できるわけではないためによるものです。起動には特に支障はありません。

in.tftpd の実行時にソケットエラーが発生する

下記のようなエラーが発生した場合は、 /etc/xinet.d/tftp 内で設定しているオプションが間違っている可能性があります:

in.tftpd: cannot bind to local socket: Address already in use

オプション類の指定を再度ご確認ください。


グラフィカルなインストールシステムの起動

PXE の動作後はインストールシステムが読み込まれ、通常と同じインストールシステムが起動します。 あとは通常のインストールと同じ手順でインストールを行なってください。

トラブルシューティング

グラフィカルなインストールシステムが起動しない

お使いのネットワーク環境に DHCP サーバが存在しない場合や、 DHCP サーバが正しい設定になっていない場合は、 Please make sure your installation medium is available のように表示され、インストールシステムが起動しない場合があります。このような場合は、下記のように進めていってください:

  1. まずは Please make sure your installation medium is available. Retry? では、 No を選択します (TAB またはカーソルキーでカーソルを移動し、Enterキーで選択します。以下同じ) 。
  2. 次に Select the language では、インストールに使用する言語を選択します (日本語の場合、 Japanese を選んでください。カーソルキーの下を繰り返し押すことで、スクロールすることができます) 。
  3. Choose a keyboard map では、キーボードマップを選択します (日本語の場合、 Japanese を選んでください) 。
  4. Main Menu では、 Start Installation を選択します。
  5. Start Installation では、 Installation を選択します。
  6. Choose the source medium では、 Network を選択します。
  7. Choose the network protocol では、ダウンロードに使用するプロトコルを選択します。 openSUSE の公式サイトからダウンロードしてインストールする場合は、 HTTP を選択します。
  8. Automatic configuration via DHCP? では、 DHCP サーバを使用するかどうかを選択します。ここでは No を選択します。
  9. Enter your IP address with network prefix. では、そのマシンに設定する IP アドレスとサブネットマスクを aa.bb.cc.dd/nn で指定します。サブネットマスクは CIDR 値 (たとえばサブネットマスクが 255.255.255.0 であれば 24) で指定することに注意してください。
  10. Enter your gateway IP address. では、デフォルトゲートウェイの IP アドレスを入力します。デフォルトゲートウェイがない場合は、何も入力しないでください。
  11. Enter your name server IP address. では、ネーム (DNS) サーバの IP アドレスを入力します。ネームサーバがない場合は、何も入力しないでください。
  12. Enter your search domains では、ネットワークのドメイン名を入力します。ドメイン名がない場合は、何も入力しないでください。
  13. Enter the name of the xxx server では、ダウンロードを行なうサイトを指定します。 openSUSE の公式サイトを利用する場合は、 download.opensuse.org と入力します (既定で入力されているはずです) 。
  14. Enter the directory on the server では、サイトのディレクトリパスを指定します。 openSUSE の公式サイトを利用する場合は、 distribution/(バージョン)/repo/oss/ と入力します (既定で入力されているはずです) 。
  15. Do you need a username and password to access the xxx server? では、インストールシステムのダウンロードに認証が必要であるかどうかを指定します。 openSUSE の公式サイトでは、認証は不要 (つまり No) です。
    1. 上記で Yes を選択した場合は、 Enter the user name.. および Enter the password.. でそれぞれユーザ名とパスワードを入力します。
  16. Use a xxx proxy? では、プロキシサーバを使用するかどうかを選択します。こちらはお使いのネットワーク環境に合わせて指定してください。
    1. 上記で Yes を選択した場合は、 Enter the name of the xxx proxy, Enter the port of the xxx proxy でそれぞれプロキシサーバのアドレスとポートを入力します。
    2. また、 Do you need a username and password to access the proxy? では、プロキシサーバへのアクセスに認証が必要かどうかを指定します。こちらもお使いのネットワーク環境に合わせて指定してください。
      1. 上記で Yes を選択した場合は、 Enter the user name.. および Enter the password.. でそれぞれユーザ名とパスワードを入力します。

あとは Loading Installation System と表示され、インストールシステムがダウンロードされて起動されます。

グラフィック表示がおかしくなる、もしくは X サーバが起動せず、テキストベースの YaST が起動してしまう

このような場合は、 /srv/tftp/tftpboot/pxelinux.cfg/default ファイルの append 行にある vga= 以下の値を変更してみてください (参考: VESA BIOS Extensions) 。なお、 16 進数で指定する場合は頭に 0x を指定し、 10 進数で指定する場合 (左記の値を含む) は頭に何も指定しないでください。


参照


外部リンク