ネットワークBOOT

2022-08

TOP


       プログラミング雑学の部屋



  • 本日のテーマ:ネットワーク・ブートって、どうすれば使える?


  • (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に入っている。