iPXE でBitVisor をネットワークブートしよう
はじめに
BitVisor のブートは,ローカルディレクトリにイメージを置いて,Grub から起動する方法を取ることが多いかなと思うが,これは開発時には結構面倒.
なぜなら,トライアンドエラー中にBitVisor のイメージを差し替えるためだけに,BitVisor なしで一度ブートしないといけないから.
ネットワークブートなら,サーバーにおいてあるBitVisor のイメージを差し替えればいいので,楽.
というわけで,ネットワークブートの方が楽だよ,と先輩に教わった方法をここに書く.
恐らく,ブートするのがBitVisorだからと言って特別なことはあまりない.
Linux をiPXE でネットワークブートするのと設定はほぼ同じだと思う(Linux はやったことないけど.)
環境
- iPXEサーバーマシン: Raspberry Pi
- OS: Raspbian
必要なもの
- BitVisor を起動マシンするマシン(BIOS の設定でネットワークブートを有効にできるもの)
- Raspberry Pi
- GNU make が動くx86マシン(1. のマシンでもいい)
- iPXE のイメージとBitVisorのイメージを作るのに必要
- iPXE のイメージとBitVisorのイメージを作るのに必要
設定方法
TFTP のインストール & 設定
使うのはtftpd-hpa.
$ sudo apt-get install tftpd-hpa
$ sudo vi /etc/default/tftpd-hpa
$ sudo service tftpd-hpa start
設定ファイルの変更は以下の通り
4c4
< TFTP_DIRECTORY="/srv/tftp"
---
> TFTP_DIRECTORY="/var/lib/tftpboot/"
6c6
< TFTP_OPTIONS="--secure"
---
> TFTP_OPTIONS="--secure -4"
上記設定では,
/var/lib/tftpboot
にiPXE のイメージを置く設定./var/lib/tftpboot
がない状態でtftpd-hpa を起動しようとすると,失敗するらしい.オプションに
-4
をつけた理由.= オプション追加せずにtftpd-hpa を起動しようとしたら,Raspbian でIPv6 が無効になってて動かなかったから.
ちょっと jot: obs600 で 再度 debian squeeze - その 1
DHCP サーバーのインストールと設定
$ sudo apt-get install isc-dhcp-server
$ sudo vi /etc/dhcp/dhcpd.conf #設定ファイルの編集
$ sudo service isc-dhcp-server
設定ファイルの変更(というより追記)は以下の通り
107a108,118
>
> subnet 192.168.0.0 netmask 255.255.255.0 {
> deny unknown-clients; # 下記でMACアドレスが登録されてない起動マシンは無視.
> host deep-desktop {
> hardware ethernet 00:60:6E:EB:5A:D8; # 起動マシンのMACアドレス.
> fixed-address 192.168.0.20; # BitVisorを起動するマシンに割り振るIPアドレス
> option host-name "deep-desktop"; # host *** の部分と同じ.
> next-server 192.168.0.30; # tftp サーバのIPアドレス.
> filename "bitvisor-boot.kpxe"; # ipxe イメージのファイル名
> }
> }
これで,MACアドレス
00:60:6E:EB:5A:D8
から要求が来たら, TFTP で /var/lib/tftpboot/bitvisor-boot.kpxe
を送る.bitvisor-boot.kpxe
というのは,iPXE のイメージファイル.このファイルの作り方は後述.
iPXE をイメージを作成
iPXE はイメージファイルをtftp で起動マシンに投げて,起動マシンで実行される.
なので,起動マシンがx86 ならx86向けにビルドする.
というわけで,以下のイメージファイルの作成の操作はx86マシンでやる.
$ git clone git://git.ipxe.org/ipxe.git
$ cd ipxe/src
$ vi bitvisor-boot.ipxe
$ cat bitvisor-boot.ipxe
#!ipxe
dhcp
boot bitvisor.elf
$ make -j4 bin/undionly.kpxe EMBED=bitvisor-boot.ipxe
# scp bin/undionly.kpxe deep@raspberrypi:~
bitvisor-boot.ipxe
はiPXE でのブート処理を記述するファイル.上記の設定で,サーバーの
/var/lib/tftpboot/bitvisor.elf
をブートする.今回は書かないが,この設定をいじると,ブートするイメージを選択するメニューを出せたりもする.
make の結果,
bin/undionly.kpxe
が作成される.これが,iPXE のイメージファイル.
このファイルをRaspberry Pi 上に置く.
以下は,Raspberry Pi上で操作.
TFTP のディレクトリにiPXE のイメージを置く(ついでにファイル名も変える)
$ sudo cp undionly.kpxe /var/lib/tftpboot/bitvisor-boot.kpxe
BitVisor のビルド
これもx86マシンでやる.
$ wget http://sourceforge.net/projects/bitvisor/files/latest/download?source=files -o bitvisor-1.4.tar.gz
$ tar -zxvf bitvisor-1.4.tar.gz
$ cd bitvisor-1.4/
$ tar -zxvf bitvisor-1.4.tar.gz
$ cd bitvisor-1.4/
$ history | tail -n3
$ make config # 動かすだけならデフォルト設定で大丈夫だと思う(多分)
$ make -j4
$ scp bitvisor.elf deep@raspberrypi:~
Raspberry Pi でbitvior.elf をTFTP のディレクトリに配置.
$ cp bitvisor.elf /var/lib/tftpboot/bitvisor.elf
いざブート…の前にBIOS 設定
- ブートする前にBitVisor を起動するマシンのBIOS の設定を変更
- ネットワークブートを有効にする(大抵どこかにあると思うので探そう,これなかったら諦めて別のマシンを用意して)
- ネットワークブートを有効にする(大抵どこかにあると思うので探そう,これなかったら諦めて別のマシンを用意して)
- ブートの優先順位でネットワークブートを再優先にする
- 優先順位の選択にネットワークブートを出すには,ネットワークブートを有効化してから一時Save&Exit しないといけないので注意.
- 優先順位の選択にネットワークブートを出すには,ネットワークブートを有効化してから一時Save&Exit しないといけないので注意.
おわりに
今回はRaspberry Pi をサーバにしてみたが,VMでもいいからx86 マシンを用意できるからそっちの方が多分よい.
なぜなら,iPXE のイメージを差し替えるときにいちいち別のマシンでビルドしないといけないから…
雑な説明になってしまったので,質問や突っ込みがあれば,是非お願いします.
(TFTP とかiPXE の仕組みはたぶん3割くらいしかわかってないので,仕組みとかは質問されても答えられないと思うけど…)
--
My Emacs Files At GitHub
0 件のコメント:
コメントを投稿