[Linux]
PXEネットワークブートでLinuxをインストールする
この記事は以下のサイトの翻訳です
もしあなたが多くのシステムを復旧もしくはインストールする方法を探していた場合、PXEネットワークブートは理想的な選択でしょう。PXEはシステムをブートさせ、DHCPにより自動的にIPアドレスを取得させ、そしてネットワーク越しにカーネルのブートを開始させる。PXE自体は"Pre-boot eXecution Environment"を意味する。それはクライアント側の機器が伝統的な方法でブートされていないという意味を表している。
PXEを使用するためには、あなたはクライアントのシステムに以下を提供するブート用のサーバを必要とする:
- IPアドレスの要求(DHCP)
- カーネルのダウンロード(TFTP)
これらのサービスの両方があり、PXEネットワークブートをサポートする(あなたはもしかするとBIOSでそれを有効にする必要があるかもしれない)システムは必ずIPアドレスを取得できるでしょうし、カーネルを受信できる、そしてインストール済みのOSなしにブートする。(これは伝統的な方法でブートできないシステムにとって理想的である。例えば、あなたの新しいAMD-64のシステムにCD/DVDドライブがついてない場合!)
準備
この記事の対象となる環境は以下を想定している:
- サーバは192.168.1.0/24の小さなネットワークで動いている
- 196.168.1.70-192.168.1.100の範囲でDHCPを使ってIPアドレスを割り振って、すべてのローカルのマシンをブートさせる
- "ブートサーバ"は192.168.1.50のIPアドレスを割り振った、"itchy"とする
- すべてのホストに同じカーネルを渡す
この例では、リモートのシステムにDebian Etchのインストーラーを走らせるPXEサーバを設定する、しかしここに書かれることはそれに限定したことではない。PXEは任意のカーネル(そしてRAMディスク)をブートするためのシステムを設定できる。正しい設定をすればあなたはクライアントにNFSを通じてリモートのファイルシステムをマウントさせ、ディスクレスのシンクライアントシステムを作ることさえ可能だ
TFTP のセットアップ
TFTPはとても単純なファイル転送プロトコルです。それはFTPとよく似ていますが、認証処理のたぐいがありません。もしまだTFTPをサーバで動作させていないのならば、以下のようにしてインストールします:
[email protected]:~# apt-get install tftpd-hpa
インストールしたならば /etc/init.d/tftpd-hpa を編集してそれを有効化する必要があります。RUN_DAEMON を yes に設定し、以下のようにします:
#Defaults for tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot"
無ければルートディレクトリを作りましょう、そしてサーバを以下のように起動させます:
[email protected]:~# mkdir -p /var/lib/tftpboot [email protected]:~# /etc/init.d/tftpd-hpa start Starting HPA's tftpd: in.tftpd.
これで、システムがDHCPを通じてIPアドレスを取得した場合、システムは /var/lib/tftpboot のルートディレクトリの下からファイルを要求するようになります。後でまたこのディレクトリに戻ってきます。
DHCPサーバのセットアップ
もしあなたがDHCPサーバの設定をLAN上で行っていないならば、インストールする必要があります。もしあなたが小さな家庭用ルータを使用しているならば、ローカルのDHCPサーバを提供するためにまずそれを無効化しなくてはならない。(というのは、我々はDHCPサーバにいくつかの追加の機能を設定せねばならないからです、これは多くのルータは決して使用できない)
DHCPサーバのインストール方法についてすべて記載するのはこの紹介の範囲を超える、しかし我々がやろうとしていることはとても単純だ。このセットアップにおけるDHCPサーバの目標は以下:
- 当然クライアント側のPCにIPアドレスを要求/取得させたい
- IPアドレスを要求するクライアント側のPCへのDHCPの"応答"に以下の追加の情報を与えたい:
- TFTPサーバのIPアドレス
- TFTPサーバから要求するための初期ファイル名
多くのDHCPサーバは dhcp-server のパッケージを使用する、そしてそれを以下のように実行するだろう:
[email protected]:~# apt-get install dhcp3-server
一度パッケージがインストールされると /etc/dhcp3/dhcpd.conf に設定が書き込まれる、そして多くの利用可能なオプションがそこに記述される。我々の例としては以下の設定だ:
option domain-name-servers 62.31.64.39, 62.31.112.39; default-lease-time 86400; max-lease-time 604800; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.70 192.168.1.100; filename "pxelinux.0"; next-server 192.168.1.50; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.1; }
これでサーバは"192.168.1.70-100"の範囲からIPアドレスを割り振る設定ができあがった、デフォルトゲートウェイは"192.168.1.1"に設定し、ISPのネームサーバを使用しよう。同様にして"next-server"の設定には我々が使用するTFTPサーバを指し示している(これはDHCPサーバと同じホストであるが必要ないでしょう)。また、要求を行っているクライアントをブートさせるためのファイル名として"pxelinux.0"をデフォルト名とした。
dnsmasqを代わりに使用する
私は個人的にDHCPサービスをLANに提供するために dnsmasq を使用している。というのは、これが小さく単純に便利な機能を提供するからで、dnsmasqを使用してPXEブートを使用するには、以下のような項目を /etc/dnsmasq.conf に追加するのみです:
dhcp-boot=pxelinux.0,itchy,192.168.1.50
(繰り返しになるが、これでファイル名とその名前、そしてTFTPサーバのIPアドレスを設定した、この場合はサーバは"itchy"という名前で"192.168.1.50"に配置されている。変更後にそのサーバを再起動するには、以下のようにする:)
[email protected]:~# /etc/init.d/dnsmasq restart Restarting DNS forwarder and DHCP server: dnsmasq.
PXEの設定
これでTFTPとDHCPサーバは設定されたので、我々は最初に戻ってその設定を完了させる必要がある。デフォルトでは、クライアントがブートするときは読み込むためのコンフィグファイルを指定するためにMACアドレスを使用する - しかしながら、いくつかの機能を試してみるとデフォルトのファイルを要求するようになる
そのようにするには、ブート可能なカーネルのリストを含んだファイルを作成する必要があり、そしてディレクトリ内にそれを持っていく必要がある:
[email protected]:~# mkdir /var/lib/tftpboot/pxelinux.cfg
次に、以下を /var/lib/tftpboot/pxelinux.cfg/default として保存する:
DISPLAY boot.txt DEFAULT etch_i386_install LABEL etch_i386_install kernel debian/etch/i386/linux append vga=normal initrd=debian/etch/i386/initrd.gz -- LABEL etch_i386_linux kernel debian/etch/i386/linux append vga=normal initrd=debian/etch/i386/initrd.gz -- LABEL etch_i386_expert kernel debian/etch/i386/linux append priority=low vga=normal initrd=debian/etch/i386/initrd.gz -- LABEL etch_i386_rescue kernel debian/etch/i386/linux append vga=normal initrd=debian/etch/i386/initrd.gz rescue/enable=true -- PROMPT 1 TIMEOUT 0
このファイルはクライアント側のPCにboot.txtのファイルの内容を表示させるように指示する、ですので同じようにファイルを作成します:
- Boot Menu - ============= etch_i386_install etch_i386_linux etch_i386_expert etch_i386_rescue
残りの作業は公式のEtchのカーネルインストーラと関連するファイルをダウンロードし、我々が作成した"default"のファイルにそれを保存することだ:
[email protected]:~# cd /var/lib/tftpboot/ [email protected]:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/pxelinux.0 [email protected]:~# mkdir -p /var/lib/tftpboot/debian/etch/i386 [email protected]:~# cd /var/lib/tftpboot/debian/etch/i386 [email protected]:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/linux [email protected]:~# wget http://ftp.uk.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz
コマンドを実行すると、以下のような構造になっている:
[email protected]:~# tree /var/lib/tftpboot/ /var/lib/tftpboot/ |-- boot.txt |-- debian | `-- etch | `-- i386 | |-- initrd.gz | `-- linux |-- pxelinux.0 `-- pxelinux.cfg `-- default 4 directories, 5 files
(我々がこの例ではdebian/etchを使用したが、将来的にはほかのインストーラを推奨したい。望むのであればディレクトリにすべてのものを入れられる、ただ "pxelinux.cfg/default"が一致していればよい。)さあ、これで準備が完了した。我々がインストールした"pxelinux.0"というファイルはブート中のクライアントに"pxelinux.cfg/default"のファイルを支持する。これはブートオプションのリストを利用可能にする、それは我々が作ったブートメニューファイルにより表示される。ブートに使用されたファイルはTFTPルートディレクトリの下に保管される、そしてブートしているクライアントはそれにアクセスできる。