Ubuntu14.04ネットワークブート(pxe-pdhcp環境構築)

既にDHCPサーバがある環境で、DHCPとは独立したPXE Bootサーバを立てることができるpxe-pdhcpというソフトウェアがあります。今回はpxe-pdhcpで、Ubuntu14.04をディスクレスで起動させるまでの備忘録です。

PXE Bootによるネットワークブート環境を持っておくと、HDDを乗せないディスクレスクライアントを用意したり、ディスクドライブ無しでUbuntuなどのインストールができて便利です。



なお、ネットワークブート環境を構築したのは、10インチノートPCであるN10Jcを、Ubuntu14.04-32bitで動作確認するためです。
(N10Jcは、EeePC的ノートPCでありながら、nVidiaのGPUを搭載している珍しい機体です。
一方で搭載CPUが比較的初期のAtom N270であり、32bit版OSしか動作しないため、他PCを64bit環境で統一していると、現在では運用が少しめんどうな機体でもあります。)
こちらが、PXEでディスクレス起動するゲストPCになります。

PXEサーバとなるホストPCは、普通の64bitシステムです。(Ubuntu15.04-amd64)


こちらのブログのSadayuki Furuhashi氏が書いたpxe-pdhcpを使用します。
http://frsyuki.hatenablog.com/entry/20070926/p1

基本の手順は、11.04での設定・手順を紹介しているこちらから。
http://kimamahitori.blog.shinobi.jp/Entry/317/
UbuntuディスクISOのマウントなどはこちらを参考にしました。
http://blog.akagi.jp/archives/3391.html
なお、こちらで紹介されているのはサーバUbuntu版で、今回ネットワークブートさせたデスクトップ版とはディスク内の構成が違う模様です。
今回はデスクトップ版(LiveCD)の設定・起動方法を扱います。

ネットワークブートの設定手順

tftp

最初にpxeのディレクトリを作成します。
書き込み権限を付けておいたほうが、あとの作業が楽です。
mkdir /pxe
sudo chmod a+rw /pxe

ftpサーバを導入します。
sudo apt-get install -y inetutils-inetd tftpd-hpa -y


設定ファイルを編集します。
sudo vim /etc/default/tftpd-hpa

以下の内容に書き換え。
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/pxe"
#TFTP_ADDRESS="[::]:69"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -vvv"
RUN_DAEMON="yes"


再起動して設定を反映します。
sudo service tftpd-hpa restart

nfs

nfsサーバを導入します。
sudo apt-get install nfs-kernel-server -y

設定ファイルを書き換えます。
sudo vim /etc/exports
以下の内容を追記(設定はひとつにつき一行に書いて折り返さない)。
/pxe/images/ubuntu-14.04-amd64  *(no_root_squash,ro,async,insecure)
/pxe/images/ubuntu-14.04-i386  *(no_root_squash,ro,async,insecure)


nfsサーバを再起動して設定を反映します
sudo service nfs-kernel-server restart

Ubuntu Disc Image

ftpでブートメニューが読まれた後に要求される、
起動したいUbuntu(Linux) のディスクイメージを、nfs上に展開します。
下記の空ディレクトリを作成します。
mkdir -p /pxe/images/ubuntu-14.04-amd64
mkdir -p /pxe/images/ubuntu-14.04-i386

ディレクトリにマウントします。
sudo mount -r -t iso9660 -o loop ~/ubuntu-14.04.1-desktop-i386.iso /pxe/images/ubuntu-14.04-i386/
sudo mount -r -t iso9660 -o loop ~/ubuntu-14.04-desktop-amd64.iso /pxe/images/ubuntu-14.04-amd64/

pxelinux.cfg/default (bootmenu)

クライアントPCがPXE機能で読み込む、ブートメニューや必要なバイナリを、ftp上に展開します。



ネットワークブート・メニュー表示に必要なバイナリを、以下から取得・配置します。
バイナリを取得
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.04.tar.gz
解凍し、中のファイルを以下のパスに配置します。
/pxe/menu.c32
/pxe/pxelinux.0

ネットワークブートのブートメニューを以下に設定ファイルとして配置します。
vim /pxe/pxelinux.cfg/default

設定ファイルの内容は以下 (IPアドレスは環境により適切に読み替えます。)
# /pxe/pxelinux.cfg/default
DEFAULT menu.c32
PROMPT 1
NOESCAPE 0
ALLOWOPTIONS 0
TIMEOUT 100

MENU TITLE PXE Boot Menu

LABEL Ubuntu 14.04 amd64
kernel images/ubuntu-14.04-amd64/casper/vmlinuz.efi
append boot=casper netboot=nfs nfsroot=192.168.1.21:/pxe/images/ubuntu-14.04-amd64 initrd=images/ubuntu-14.04-amd64/casper/initrd.lz -- splashd

LABEL Ubuntu 14.04 i386
kernel images/ubuntu-14.04-i386/casper/vmlinuz
append boot=casper netboot=nfs nfsroot=192.168.1.21:/pxe/images/ubuntu-14.04-i386 initrd=images/ubuntu-14.04-i386/casper/initrd.lz -- splashd

LABEL Ubuntu 14.04 amd64(non splash)
kernel images/ubuntu-14.04-amd64/casper/vmlinuz.efi
append boot=casper netboot=nfs nfsroot=192.168.1.21:/pxe/images/ubuntu-14.04-amd64 initrd=images/ubuntu-14.04-amd64/casper/initrd.lz


pxe-pdhcp

Sadayuki Furuhashi氏が作成したpxe-pdhcpをソースで取得し、ビルドして使用します。
今回はroot直下に/pxe-pdhcpディレクトリとしてソースとバイナリを展開しました。
sudo make  /pxe-pdhcp
chmod a+rw /pxe-pdhcp
cd /pxe-pdhcp
git clone https://github.com/frsyuki/pxe-pdhcp
なお、いくつかのブログでバッファオーバーフロー警告に対するコード修正が紹介されていますが、今回はしなくても動作したので、とりあえずコードを書き換えていません。

ビルドします。
make
実行します。(IPアドレスは環境により適切に読み替えます。)
sudo /pxe-pdhcp/pxe-pdhcp -l 0.0.0.0 -b 255.255.255.255 -t 192.168.1.21 -d pxelinux.0

クライアントPCからネットワークブートを実行

PXEサーバ(pxe-pdhcp)が起動している状態でクライアントPCからネットワークブート操作を行うことで、ネットワークブート可能です。



クライアントPCのネットワークブート方法は、マシンにより異なるので、サイト・マニュアル・グーグル検索を活用してください。
BIOS/EFIの設定画面で、PXEを有効にする必要があるかと思います。
とりあえず、一般的にはBIOS/EFI設定画面に行くなら、起動画面でDeleteキー押下かと思います。

また、ESC/F2キーなどでブートセレクタを呼び出せるPCもあります。
ブートセレクタにPXE(Network boot)が無い場合、BIOS/EFIの設定でPXEが無効になっているかもしれません。

ちなみに今回クライアントPCとして使用したN10Jcの場合は、
F2:BIOS設定
ESC:ブートメニュー
でした。

その他

手順中に、2箇所ほど、PXEサーバのIPアドレスを指定する個所があります。
(特にネットワークブートメニューのnfsroot設定)
そのため、PXEサーバマシンはIPアドレスを固定設定にすると、今後の利用が楽になります。

Ubuntuのディスク内容をNFS上に置く必要がありますが、毎度ISOファイルをマウントするのが面倒であれば、コピーして配置してしまうと楽になります。

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...