Debian7.7でPXEサーバを構築してDebianのインストーラとかClonezillaを起動したメモ


- PXE
	- サーバからDHCPでIPアドレスを貰ってTFTPで起動イメージを貰って起動したりできる仕組みらしい。
- PXEサーバからネットワーク経由でイメージを提供するのでCDとかUSBとかを使わなくてもよく良くなる。
- Wake-on-LANとかで一斉にマシンを起動させるだけでバックアップやリストアとかできる。
	- 大量の物理マシンのバックアップやリストアの手間を何とかできる。
- 大掛かりにパッケージングされたソリューションよりも自分でやった方がたぶんトラブルシュート＆カスタムしやすい。
	- たぶん。
- 公式情報
	- [第4章 システムインストールメディアの入手 4.5. TFTP ネットブート用ファイルの準備](https://www.debian.org/releases/stable/i386/ch04s05.html.ja)
	- [Clonezilla Live on PXE Server](http://clonezilla.org/livepxe.php)


サーバ側の準備の流れとしては以下のとおり。

1. PXEな設定をしたDHCPサーバを準備する。
2. TFTPサーバを準備する。
3. 決められたとおりのディレクトリ階層で各種ファイルを配置する。

## DHCPサーバ

インストールする。

```bash
aptitude install isc-dhcp-server
```

設定ファイルは以下のとおり。

```/etc/dhcp/dhcpd.conf
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.2 192.168.100.254;
  host node-002 { hardware ethernet 00:00:00:00:00:02; fixed-address 192.168.100.2; }
  host node-003 { hardware ethernet 00:00:00:00:00:03; fixed-address 192.168.100.3; }
  filename "pxelinux.0";
}
```

- メモ
	- 192.168.100.0の中でノードを管理する。
	- MACアドレスとIPアドレスを紐付けるようにしている。
		- マシン構成
			- 192.168.100.001: 親サーバ（node-001）
			- 192.168.100.002: 子サーバ（node-002）
			- 192.168.100.003: 子サーバ（node-003）
			- [...]
			- 192.168.100.254: 子サーバ（node-254）

再起動する。

```bash
service isc-dhcp-server restart
```

- メモ
	- この段階で子ノードからIPアドレスのリースとping/pongの確認をしておく。
		- `dhclient -r`: IPアドレスのリリース
		- ifdown eth0
		- ifup eth0
		- ifconfig
	- 要するに`filename "pxelinux.0";`を書くだけ？


## TFTPサーバ

インストールする。

```bash
aptitude install tftpd-hpa
```

設定ファイルは以下のとおり。デフォルトのまま。楽。

```/etc/default/tftpd-hpa
FTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp/"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
```

- メモ
	- Debianのデフォルト設定のまま使っている。


再起動する。

```bash
service tftpd-hpa restart
```

## イメージの配置

### Debian

Debianのネットワークブートイメージと関連ファイルをダウンロードしてそれを雛形につかう。[Installing Debian via the Internet](https://www.debian.org/distrib/netinst)の左下からたどって、`netboot`の中の`netboot.tar.gz`をダウンロードする。

```bash
wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/netboot.tar.gz
```

圧縮ファイルを展開して`/srv/tftp/`へ移動させる。

```bash
tar xzf netboot.tar.gz
mv pxelinux.0 /srv/tftp/
mv pxelinux.cfg /srv/tftp/
mv debian-installer /srv/tftp/
mv version.info /srv/tftp/
```
    
ここで子ノード（クライアント）を起動して、DHCPでIPアドレスを貰って、TFTPで`pxelinux.0`と`pxelinux.cfg/default`を読み込んで、起動するかを確認。Debianのインストーラが起動すればOK。

### Clonezilla

Debianのインストーラが起動するのを確認したら、後はフォルダ構成の問題。最終的にできたフォルダ構成は以下のとおり。

```bash
tree /srv/tftp/ -L 3
/srv/tftp/
├── images
│   ├── clonezilla
│   │   ├── filesystem.squashfs
│   │   ├── initrd.img
│   │   └── vmlinuz
│   └── debian
│       ├── debian-installer
│       ├── pxelinux.0 -> debian-installer/i386/pxelinux.0
│       ├── pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
│       └── version.info
├── pxelinux.0 -> images/debian/debian-installer/i386/pxelinux.0
└── pxelinux.cfg
    └── default
```

これをするには、まず、Debianのイメージを`/srv/tftp/images/debian/`へ移動させる。

```bash
# イメージごとにディレクトリを作る
mkdir -p /srv/tftp/images/clonezilla/
# Debianのイメージと関連ファイル一式を移動
mv -r /srv/tftp/pxelinux.0       /srv/tftp/images/debian/
mv -r /srv/tftp/pxelinux.cfg     /srv/tftp/images/debian/
mv -r /srv/tftp/debian-installer /srv/tftp/images/debian/
mv -r /srv/tftp/version.info     /srv/tftp/images/debian/
```

次に、移動したイメージへのシンボリックリンクをはる。

```bash
# シンボリックリンクをはる。ただし、/srv/tftp/pxelinux.cfg/defaultだけはあとで自分で書く。
ln -s /srv/tftp/images/debian/pxelinux.0 /srv/tftp/pxelinux.0
mkdir /srv/tftp/pxelinux.cfg/
touch /srv/tftp/pxelinux.cfg/default
```

Clonezillaのイメージをダウンロードして展開する。基本的には[Clonezilla Live on PXE Server](http://clonezilla.org/livepxe.php)の通りにすれば良い。

以下のフォルダに展開した。

```bash
/srv/tftp/images/clonezilla/
```

`/srv/tftp/pxelinux.cfg/default`の内容は以下のとおり。各所に書かれているパスに注意する。

```/srv/tftp/pxelinux.cfg/default
default images/debian/debian-installer/i386/boot-screens/vesamenu.c32

prompt 1
timeout 120
menu title - Boot Menu -

label Debian-7.7
menu label Debian 7.7
kernel images/debian/debian-installer/i386/linux
append priority=critical vga=788 initrd=images/debian/debian-installer/i386/initrd.gz

label Clonezilla-Live
menu LABEL Clonezilla Live
kernel images/clonezilla/vmlinuz
append initrd=images/clonezilla/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts="" ocs_live_batch="no" locales="" vga=788 nosplash noprompt fetch=tftp://192.168.100.1/images/clonezilla/filesystem.squashfs
```