PXE ブートで Ubuntu をインストールする

スポンサーリンク

自宅用に新しくサーバ機を調達したが、毎回 OS インストール用の DVD や USB メモリを用意するのが面倒なので、PXE (Preboot eXecution Environment) ブートによるネットワークインストールを試してみることにした。

ネットワーク図

ネットワーク図


前提

今回は以下のような条件の下で進める。

  • ネットワーク上で既に DHCP サーバが動いている
  • PXE サーバ (DHCP, TFTP) は Mac の上に Vagrant で構築する
  • Mac は有線 LAN でつながっている
    (Wi-Fi だとうまくいかなかった)
  • インストールするパッケージは、Ubuntu の Web サーバからダウンロードする
    (ISO の中身を http で配信しようとしたがうまくいかなかった)

仮想マシンの用意

まずはじめに、Vagrant を用いて Mac の上に PXE サーバを構築する。

Vagrant で Ubuntu 12.04 LTS Server 64bit の仮想マシンを作成する。

$ mkdir ~/pxe-server
$ cd ~/pxe-server
$ vagrant init ubuntu/precise64

ホスト (Mac) の NIC (en0) にブリッジ接続するように、設定を書き換える。

$ vi Vagrantfile
  # 下の1行を追記
  config.vm.network :public_network, :bridge => "en0"

作成した仮想マシンを起動し、コンソールに接続する。

$ vagrant up
$ vagrant ssh

※ うまく起動しない場合は下記のページが参考になる。

Proxy DHCP サーバの構築

ブートローダの情報をサーバ機に通知するために DHCP サーバを構築する。いくつか方法があるが、今回はネットワーク上で既に稼働中の DHCP 環境に影響を与えずに PXE ブートを実現するため、Proxy DHCP にする。デーモンは pxe-pdhcp を使用させていただく。

先ほど Vagrant で作成した仮想マシンに、まず Subversion をインストールする。

$ sudo apt-get install -y git

pxe-pdhcp のソースコードをもらってきて make する。

$ cd
$ git clone https://github.com/frsyuki/pxe-pdhcp.git
$ cd pxe-pdhcp
$ make

pxe-pdhcp を起動する。${PXE_IPADDR} の部分には、仮想マシンのブリッジ接続側の IP アドレス ($ ifconfig eth1 で確認) を指定する。

$ sudo ~/pxe-pdhcp/pxe-pdhcp -l 0.0.0.0 -b 255.255.255.255 -t ${PXE_IPADDR} -d pxelinux.0 &

TFTP サーバの構築

ブートローダ (pxelinux.0) などをサーバ機に転送するため、TFTP サーバを仮想マシン上に構築する。

tftpd-hpa をインストールする。

$ sudo apt-get install -y inetutils-inetd tftpd-hpa

設定ファイルを以下のように書き換える。

$ sudo vi /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/vagrant/tftp/" # 変更
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -vvv" # /var/log/syslog にログを吐き出す
RUN_DAEMON="yes"

tftpd 用のディレクトリを作成する。

$ mkdir ~/tftp

設定を反映するために tftpd を再起動する。

$ sudo service tftpd-hpa restart

ディスクイメージの用意

ブートローダなどのファイル群を TFTP サーバ上に配置する。

仮想マシン上に Ubuntu の ISO イメージを保存する。

$ mkdir ~/iso
$ wget -P ~/iso http://www.ftp.ne.jp/Linux/packages/ubuntu/releases-cd/trusty/ubuntu-14.04.2-server-amd64.iso

保存した ISO イメージをマウントする。

$ sudo mkdir /mnt/iso
$ sudo mount -r -t iso9660 -o loop ~/iso/ubuntu-14.04.2-server-amd64.iso /mnt/iso

ファイルを TFTP サーバのディレクトリにコピーする。

$ sudo cp -r /mnt/iso/install/netboot/* ~/tftp/

以上で PXE サーバの準備が整った。

OS のインストール

OS をインストールするマシンの電源を入れ、ネットワークインストールを選択すると、DHCP で IP アドレスが振られたあと自動的にブートローダが転送される。そのとき仮想マシンの pxe-pdhcp を起動したコンソールに、

Aug 26 15:39:02: DEBUG: pxe-pdhcp.c: got a non-DHCPDISCOVER dhcp packet
Aug 26 15:41:25: DEBUG: pxe-pdhcp.c: dhcp_reply start
Aug 26 15:41:25: DEBUG: pxe-pdhcp.c: got a DHCPDISCOVER on dhcp
Aug 26 15:41:25: DEBUG: pxe-pdhcp.c: dhcp_reply end

のように出力があれば、ブートローダの転送ができている。その後インストール画面が表示されるので、あとはいつも通りインストールを進めれば良い。

なお、OS をインストールする側も VirtualBox で試すなら、新たに仮想マシンを作成してブリッジアダプターを設定し、起動画面で F12 のあとに l キーを押せば PXE ブートできる。

また機会があれば、オリジナルのインストールイメージを作って、全自動インストールを実現してみたい。

参考ページ

コメント

タイトルとURLをコピーしました