Debianの仮想マシン作るのに、いちいちUSBメモリのBootableディスクを用意するのも・・な
インストールをPXEブートで行う。
起動する順序はこんな感じ。
図にするとこんな感じ。
実際に設定する。
今回使用したのは、以下のとおり
dhcpd の設定。
コレは簡単 PXE - DD-WRT Wiki を参考にして
Services-> DNSMasq -> Additional DNSMasq Options に次を追加
dhcp-boot=pxelinux.0,atom,192.168.20.110
DHCP で使えるオプションは OpenWRT/ dd-wrt の場合は、dnsmasq に定義されていて。次のコマンドで確認できる。
$ dnsmasq --help dhcp
実際に実行すると、以下のように、様々なオプションが見て取れる。 dhcp-optionsでDNSMasqへ与えた設定は、66 tftp-server や 67 bootfile-nameとしてクライアントに通知される
$ dnsmasq --help dhcp Known DHCP options: 1 netmask 2 time-offset 3 router 6 dns-server (...) 16 swap-server 17 root-path 18 extension-path 19 ip-forward-enable (...) 26 mtu (...) 40 nis-domain 41 nis-server 42 ntp-server 66 tftp-server 67 bootfile-name 69 smtp-server 70 pop3-server 71 nntp-server 119 domain-search
tftpd の設定
今回使用したのは、debian squeeze の atftpd
tfptd のインストール
sudo aptitude install atftpd
tftpd の設定
/etc/rlinetd.d/tftp_udp
# This file was automatically generated by inetd2rlinetd
# Generated from: tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/tftp
service "tftp_udp" {
enabled yes;
protocol udp;
family ipv4;
port "tftp";
user "nobody";
exec "/usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /var/tftpd";
server "/usr/sbin/tcpd";
wait yes;
}
この exec のところをで、tftpd が使うディレクリを指定する
sudo mkdir -p /var/tftpd sudo chmod g+rwx /var/tfptd cd /var/tftpd/
設定できたらinet.dを再起動
sudo service rlinetd restart
今使ってるsqueezeは inetd に rlinetdが使われていた。
あとは、Mac のクライアントから、tftpd をチェックする
takuya@mac_osx:~/Desktop$ tftp 192.168.xxx.xxx tftp> put a.jpg Sent 14448 bytes in 0.1 seconds tftp> get a.jpg Received 14448 bytes in 0.1 seconds tftp>
ファイルが正しくput/get できたら、tftpdの準備完了
debian のpxeboot イメージの準備
今回は squeeze の pxeboot イメージを用意した
rikenのサーバーからdebian を取得する、ターゲットはここ。
ftp://ftp.riken.jp/14/debian/debian/dists/squeeze/main/installer-i386/current/images/netboot/
tftpd のフォルダに入って
cd /var/tftpd/ wget ftp://ftp.riken.jp/14/debian/debian/dists/squeeze/main/installer-i386/current/images/netboot/netboot.tar.gz tar zxvf netboot.tar.gz
展開するとこんな感じ。
takuya@debian01:/var/tftpd$ tree -L 1 . ├── a.jpg ├── debian-installer ├── netboot.tar.gz ├── pxelinux.0 -> debian-installer/i386/pxelinux.0 ├── pxelinux.cfg -> debian-installer/i386/pxelinux.cfg └── version.info
このファイルが設定通りに問題なくtfptd経由で読み出せるか、mac からチェック
takuya@mac_osx:~/Desktop$ tftp 192.168.2.9 tftp> get pxelinux.0 Received 27202 bytes in 0.1 seconds tftp>
準備完了。
あとは仮想マシンで実験。マシンをPXEブートで起動するように設定して
起動する。
やったね、PXEで起動したよ!
これでインストールが楽ちんですね。
USBブートディスクを作らずに済みそうです。
liveCD とかも起動したい。
installler だけじゃ、物足りなくなる。だったらLiveCDもシンクライアントで起動したくなるよね。
LiveCDもパパっと選べたら楽しくなりそう。我が家にはPCが山ほどあるのでちょっとした実験にOSを入れなおすのは手間なんですよね。
LiveCD を動かすのも、ほとんど同じ
LiveCDを動かすのもnetboot install を動かすのも大差ない。
LiveCDやOSをディスクレスで起動するなら、ディスクをネットワーク上に用意する必要がある。今回はtftpd上のLiveCDを、そのままをNFS-server に共有してNFSをマウントしてファイルシステムを使う。
tftpd と nfs-server がそれぞれが/var/tfpd/debian-live/ディレクトリを共有しているように設定した。
基本要素の準備
takuya@atom:/var/tftpd$ tree -L 2 .
.
├── debian-live
├── pxelinux.0
└── pxelinux.cfg
├── debian-live.cfg
└── default -> debian-live.
- pxelinux.0 これは、debian のPXEブートイメージを
- pxelinux.cfg は mkdir で作成
- pxelinux.cfg/default は今回作成する。
- debian-live/ はここにDebianのLiveCDの中身を置く
準備するもの
nfs サーバーは、PXEブート後にLiveCDの中身にアクセスにNFSを使ったNFSブートをするので、必要
debian live cd はその中身を丸コピーして利用する
Live CD の準備
Gnome Desktop のLive CD をDebian Liveのプロジェクトからもらってくる。
wget http://cdimage.debian.org/debian-cd/current-live/i386/iso-hybrid/debian-live-7.6.0-i386-gnome-desktop.iso
ディスクの中身を取り出す。
マウントして、cp (rsync)で取り出す
sudo mount debian-live-7.6.0-i386-gnome-desktop.iso /mnt rsync -av --progress --partial /mnt/ /var/tftpd/debian-live chmod -R u+rw /var/tftpd/debian-live
Live CDの中身を確認する
takuya@atom:/var/tftpd/debian-live$ tree -L 2 . . (略 ├── isolinux │ ├── advanced.cfg │ ├── boot.cat │ ├── hdt.c32 │ ├── install.cfg │ ├── isolinux.bin │ ├── isolinux.cfg │ ├── live.cfg │ ├── menu.cfg │ ├── splash.png │ ├── stdmenu.cfg │ └── vesamenu.c32 ├── live │ ├── filesystem.packages │ ├── filesystem.packages-remove │ ├── filesystem.squashfs │ ├── initrd1.img │ ├── initrd2.img │ ├── memtest │ ├── vmlinuz1 │ └── vmlinuz2 (略) 11 directories, 30 files
今回使うのは、PXEブート後に、起動するLinuxカーネル isolinux/ と ライブCDの本体 live/の2つ
LiveCD のブート手順を確認する
takuya@atom:/var/tftpd/debian-live$ cat isolinux/live.cfg
label live-486
menu label ^Live (486)
menu default
linux /live/vmlinuz1
initrd /live/initrd1.img
append boot=live config quiet splash
(略)
いくつかあるけれど、ブートメニューに関しては後で考えるので、まずはdefault の起動設定を確認しておく
debian のLive CD は
- /live/vmlinuz1
- /live/initrd1.img
の2つを使うことがわかる。
pxe boot の起動設定を作る
ここまで、確認したディレクトリをtftpd から見えるPathで作っておく。
pxelinux.cfg/default
default live
label live
linux /debian-live/live/vmlinuz1
initrd /debian-live/live/initrd1.img
append # 次で作る
/var/tftpdのルートを確認
takuya@atom:/var/tftpd$ tree -L 1 . . ├── debian-installer ├── debian-live ├── netboot.tar.gz ├── pxelinux.0 └── pxelinux.cfg
ここが tftpd のroot になるので、 /debian-live/live/vmlinuz1, /debian-live/live/initrd1.imgで大丈夫だとわかる。
nfs の準備
ファイルシステムはNFS でマウントさせる必要があるので。nfs を準備する
NFSのエクスポートは次のとおりに編集できる
sudo vim /etc/exports
/etc/exports の中身追加して、nfs 経由で debian-live ディレクトリにアクセス可能にする。
/var/tftpd/debian-live *(ro,insecure,no_root_squash,async,no_subtree_check)
設定を反映させる
sudo service nfs-kernel-server reload
NFS の設定反映を確認する
sudo mount -t nfs 192.168.20.19:/var/tftpd/debian-live /mnt ls /mnt/live sudo umount /mnt
これでNFSの準備が整った。
NFS の設定を起動設定 pxelinux.cfg/default に追記する
pxelinux.cfg/default
default live
label live
linux /debian-live/live/vmlinuz1
initrd /debian-live/live/initrd1.img
append boot=live config netboot=nfs nfsroot=192.168.20.19:/var/tftpd/debian-live quiet splash
これで準備完了
仮想マシンで確認する
無事起動する
拍子抜けするくらいに簡単。
順番を守って、ちゃんと設定すれば拍子抜けするくらいに簡単にLinuxは起動する。
こんなに簡単に実験環境を作れるなら、もっと使いやすくなると思う。
活用も色々
ディスクレスで起動するので、インストールが簡単になる。
メニューも作れば、memtestをすぐ起動したり、Live CDでリカバリできるし。USBブートディスク作るよりも楽ですね。
シンクライアントとして、完全なディスクレスのOSを作れば、Linuxをルータとして使っててもハードディスクが壊れた!っていう恐怖からも開放されます。NFSを冗長化しておけばいいわけですしね。
PXEは使えそう
LXCでコンテナで起動するってのもあるけれど、OSそのものを選んで起動できるってのはやっぱり便利だと思いました。
参考資料
http://www.debian.org/releases/stable/i386/ch04s05.html.ja
PXE-bootでDebian lennyをインストール - 絶品ゆどうふのタレ
ライブUbuntuをネットワークブートする − ディスクレスサーバ構築 - adsaria mood
http://cdimage.debian.org/debian-cd/current-live/i386/iso-hybrid/
http://www.debian-administration.org/article/478/Setting_up_a_server_for_PXE_network_booting.ja
How to convert a LiveCD into a vmlinuz and initrd to PXE Boot Load Slowly - Ask Ubuntu
macOS X Mount NFS Share / Set an NFS Client - nixCraft
Debian 6.0 Live イメージを PXE 経由でブート - daily dayflower






