ネットワークBOOT
プログラミング雑学の部屋†
- 本日のテーマ:ネットワーク・ブートって、どうすれば使える?
- (1)マザーボードのBIOSでLAN BOOT ROM(PXE boot)をONにする。
- ストレージは繋がないでよい。繋がっている場合はブート優先順位を下げておく
- (2)自分のネットワーク内に既に1台 Ubuntuが存在していること。
- そして、DHCPサーバーになっていること。
- (3)DHCPに設定を追加して、ブートするtftpサーバーのファイル名を記述する/ tftpサーバーを用意して、ネットワークブート環境を整える
- (4)ライブLinuxを動かしたい場合は、nfsサーバーも用意しておく。
では、やってみよう。†
- (1)は、各自適当なパソコンを用意する。
(2) DHCPサーバーの設定追記 (isc-dhcp-server)†
- /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option domain-name-servers 192.168.1.1; option domain-name "example.com"; option routers 192.168.1.1; option broadcast-address 192.168.1.255; filename "/pxelinux.0"; <===これを追記する。 }
- filename行以外は既存のままで良い。上記は一例に過ぎない。
(3)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="/var/lib/tftpboot/" # 変更 TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure -vvv" # /var/log/syslog にログを吐き出す RUN_DAEMON="yes"
tftpd 用のディレクトリを作成する。$ mkdir /var/lib/tftpboot
設定を反映するために tftpd を再起動する。$ sudo service tftpd-hpa restart
- /var/lib/tftpboot/ 以下に、ブートファイルを配置する。†
$ wget -q http://ftp.riken.jp/Linux/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/netboot.tar.gz -O ubuntu-16.04-netboot.tar.gz $ sudo tar zxf ubuntu-16.04-netboot.tar.gz -C /var/lib/tftpboot
- /var/lib/tftpboot/ 以下はこんな感じ
ldlinux.c32 -> ubuntu-installer/amd64/boot-screens/ldlinux.c32 pxelinux.0 -> ubuntu-installer/amd64/pxelinux.0 pxelinux.cfg -> ubuntu-installer/amd64/pxelinux.cfg ubuntu-installer/ version.info
- 一応ここまでで、PXEbootを試せる。
(4)nfsサーバーの用意†
# apt-get install nfs-kernel-server
- Ubuntu-16.04のイメージを/opt/nfsにマウントする。
# mount -t iso9660 -o loop ubuntu-16.04-desktop-amd64.iso /opt/nfs
- ubuntu-16.04-desktop-amd64.isoは、あらかじめ入手してあると仮定
- あとで/etc/fstabに入れるようにする。
- /etc/exportsファイルに以下を追記する。
/opt/nfs 192.168.1.1/24(ro,sync,no_subtree_check,no_root_squash)
- nfsサーバーを再起動
# /etc/init.d/nfs-kernel-server restart
(5)設定ファイルを書き換える。†
- /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg
default live label live menu label ^Livelinux menu default kernel ubuntu-installer/amd64/linux append root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.1.12 vga=788 initrd=ubuntu-installer/amd64/initrd.lz quiet splash --- label install menu label ^Install kernel ubuntu-installer/amd64/linux append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet label cli menu label ^Command-line install kernel ubuntu-installer/amd64/linux append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet label memtest menu label ^Memtest kernel install/mt86plus
(6)足りないファイルを補完する。†
- memtest86カーネルと、LiveLinux用のinitrd。
/var/lib/tftpboot/install/mt86plus /var/lib/tftpboot/ubuntu-installer/amd64/initrd.lz
この2つは、ubuntu-16.04-desktop-amd64.isoに入っている。