PXEネットワークブートでLinuxをインストールする
もういちいちインストールごとにCDにLinuxのイメージ焼きたくないでござる!
じゃあPXEブートやろうぜ
何ができるの?
・CDにLinuxを焼かずにインストールできる
・CD/DVDドライブがないマシンにLinuxがインストールできる
要件
・WANにつながったネットワーク(HUBがあると楽)
・tftpd、dnsmasq、apache2を動かすホストマシン(インストール仕掛ける:192.168.1.2)
・PXEブート対応のBIOSを保持するゲストマシン(インストール対象)
・この事例ではDebian sidを使用して、Fedora20をインストールしている
手順
tftpd
TFTPはとても単純なファイル転送プロトコルです。それはFTPとよく似ていますが、認証処理がありません。
// パッケージインストール # apt-get install tftpd-hpa // 設定ファイル書き換え $ cat /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" -TFTP_DIRECTORY="/srv/tftp" +TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS="0.0.0.0:69" -TFTP_OPTIONS="--secure" +TFTP_OPTIONS="-l -s /var/lib/tftpboot" // tftpdの起動 # mkdir -p /var/lib/tftpboot # systemctl start tftpd-hpa
dnsmasq
DHCPサービスをLANに提供するために dnsmasq を使用している。家庭用ルータが起動していてDHCPを実行していても、特に問題なくターゲットのマシンにIPアドレスを配布できた(なんでだろう?)
// パッケージインストール # apt-get install dnsmasq // 一部修正 # vim /etc/dnsmasq.conf dhcp-boot=pxelinux.0,cowgirl,192.168.1.2 // dnsmasqの起動 # systemctl start dnsmasq
PXEの設定
これでTFTPとDHCPサーバは設定されたので、ブート可能なカーネルのリストを含んだファイルを作成する。
# mkdir -p /var/lib/tftpboot/pxelinux.cfg
DVDのマウント
DVDマウント
Fedora20のDVDイメージファイルをマウントします。イメージファイルを適当なところに置き、/var/www/html/fedora20 にマウント先を作成後、マウントする。これを行わないと、dracutの実行が終わらず、インストールできない。HTTPで接続して、isoの中身が見えていれば成功です。ここではサーバが192.168.1.2のIPアドレスを持つものとします。
# cd /var/lib/tftpboot/fedora/heisenbug/x86_64/linux/ # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/20/Fedora/x86_64/iso/Fedora-20-x86_64-DVD.iso # mkdir /var/www/html/fedora20 # mount -t iso9660 -o loop /var/lib/tftpboot/fedora/heisenbug/x86_64/linux/Fedora-20-x86_64-DVD.iso /var/www/html/fedora20 // apache2の起動 # systemctl start apache2
次に、以下を /var/lib/tftpboot/pxelinux.cfg/default として保存する
DISPLAY boot.txt DEFAULT heisenbug_x86_64_install LABEL heisenbug_x86_64_install kernel fedora/heisenbug/x86_64/linux/vmlinuz append vga=normal initrd=fedora/heisenbug/x86_64/linux/initrd.img inst.repo=http://192.168.1.2/fedora20/ -- LABEL heisenbug_x86_64_linux kernel fedora/heisenbug/x86_64/linux/vmlinuz append vga=normal initrd=fedora/heisenbug/x86_64/linux/initrd.img inst.repo=http://192.168.1.2/fedora20/ -- LABEL heisenbug_x86_64_expert kernel fedora/heisenbug/x86_64/linux/vmlinuz append priority=low vga=normal initrd=fedora/heisenbug/x86_64/linux/initrd.img inst.repo=http://192.168.1.2/fedora20/ -- LABEL heisenbug_x86_64_rescue kernel fedora/heisenbug/x86_64/linux/vmlinuz append vga=normal initrd=fedora/heisenbug/x86_64/linux/initrd.img rescue/enable=true inst.repo=http://192.168.1.2/fedora20/ -- PROMPT 1 TIMEOUT 0
boot.txtはクライアント側のPCにファイルの内容を表示させるように指示する
# cat /var/lib/tftpboot/boot.txt - Boot Menu - ============= heisenbug_x86_64_install heisenbug_x86_64_linux heisenbug_x86_64_expert heisenbug_x86_64_rescue
カーネルインストーラと関連するファイルをダウンロードし、作成した"default"のディレクトリにそれを保存する。
# cd /var/lib/tftpboot/ # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/20/Fedora/x86_64/os/Packages/s/syslinux-4.05-7.fc20.x86_64.rpm # rpm2cpio syslinux-4.05-7.fc20.x86_64.rpm | cpio -id // pxelinux.0, vesamenu.c32を取り出してコピー # cp {pxelinux.0, vesamenu.c32} /var/lib/tftpboot/ # mkdir -p /var/lib/tftpboot/fedora/heisenbug/x86_64 # cd /var/lib/tftpboot/fedora/heisenbug/x86_64 # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/20/Fedora/x86_64/os/images/pxeboot/initrd.img # wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/20/Fedora/x86_64/os/images/pxeboot/vmlinuz
構成
cowgirl:/var/lib/tftpboot# pwd /var/lib/tftpboot cowgirl:/var/lib/tftpboot# tree . ├── boot.txt ├── fedora │ └── heisenbug │ └── x86_64 │ └── linux │ ├── Fedora-20-x86_64-DVD.iso │ ├── initrd.img │ └── vmlinuz ├── pxelinux.0 ├── pxelinux.cfg │ ├── default │ └── default~ └── vesamenu.c32 5 directories, 8 files
実行
ターゲットのマシン起動中にF11とか押してBIOSに入る。
→ PXEブートを実行するメニューがあるので実行。
→ うまく行くと以下のような画面へ
感想
・クラウドのが楽
・ひょっとすると実務で役立つかもしれない