HTTP-FUSE-KNOPPIX でシンクライアント

ふとシンクライアントが話題に上がったので試してみた。PXE で Fedora をインストールできることは知ってたけど、それじゃいまいちシンクライアントっぽくないよね。ってことで、HTTP-FUSE-KNOPPIX でシン Linux デスクトップを作ってみる。マシンがないので VMware で。

想定環境

クライアントは 192.168.201.0/24 なネットワークにつながってて、192.168.201.1 がゲートウェイかつブートサーバー。VMwareDHCP サーバーが邪魔なのでセグメントを分けました。そうするとルーターがいるので、Linux ルーターも一緒に作っちゃいます。こいつの WAN 側アドレスは 192.168.108.126。サーバーの OS は Fedora 7 デス。

Linux ルーター

まずはルーターを作る。これがないと外につなげないから HTTP-FUSE-KNOPPIX のルートファイルシステムがダウンロードできない。手順は簡単。Fedora 7 をインストールして、iptables で IP マスカレードの設定をするだけ。なので Fedora のインストールは割愛、好きなようにして。あー、NIC 2 枚挿し状態にして、片方を別の LAN セグメントか、ホストオンリーにすることをお忘れなく。

で、肝心の IP マスカレードの設定。面倒なので最低限 娑婆と通信できるような設定しかしてません。ホントならローカルアドレスはルーティングしないルールとかあるんで、そこんとこヨロシク。ちなみに、サーバーは eth0 で WAN につながってます。

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
service iptables save

オシマイ。

Preboot eXecution Environment

PXE では、ブートローダーにあたる Network Bootstrap Program (NBP) の受信に Trivial FTP (TFTP) っていう UDP ベースのプロトコルを使用する。Cisco な人にはおなじみでしょうか。パッケージは tftp-server で、xinetd 経由で起動します。69/udp を開放するのをお忘れなく。

yum -y install tftp-server
perl -pi -e 's/(disable\s*=\s*)yes/$1no/' /etc/xinetd.d/tftp
chkconfig xinetd on
service xinetd start

つぎに、syslinux に含まれる NBP (pxelinux) を使って PXE を構築する。tftp-server をインストールすると作成される /tftpboot がすべての起点になる。なので HTTP-FUSE-KNOPPIX のディスクイメージから取り出した initrd とかもこの下に置いておく。

wget http://unit.aist.go.jp/itri/knoppix/http-fuse/httpfuse-trusted_20061101.iso -P ~
mkdir -p /mnt/iso
mount -o loop,ro ~/httpfuse-trusted_20061101.iso /mnt/iso
yum -y install syslinux
cd /tftpboot
cp /usr/lib/syslinux/pxelinux.0 .
cp -a /mnt/iso/boot/isolinux knoppix
mv knoppix/memtest

pxelinux.cfg というディレクトリを作ってブートメニューに関する設定ファイルを置く。設定ファイルの書式は syslinux のドキュメントにあると思います。

mkdir pxelinux.cfg
cat << 'HERE' > pxelinux.cfg/default
prompt 1
timeout 60
default knoppix

label memtest
    kernel memtest

label knoppix
    kernel knoppix/linux
    append ramdisk_size=100000 init=/etc/init lang=ja apm=power-off vga=791 initrd=knoppix/minirt.gz nomce quiet BOOT_IMAGE=knoppix
HERE

MAC アドレスが 00:11:22:33:44:55 で、IP アドレスが 192.168.201.254 ( = 0xC0A8C9FE) のとき、pxelinux は以下の順で設定ファイルを探しにくる。なのでマシン別に設定を変えることも可能。

  1. 01-00-11-22-33-44-55
  2. C0A8C9FE
  3. C0A8C9F
  4. C0A8C9
  5. C0A8C
  6. C0A8
  7. C0A
  8. C0
  9. C
  10. default

DNS

今回はいい加減なルーターのおかげで別のセグメントにある VMwareDNS にアクセスできるから必要ないけど、本番環境とかで必要なら用意してください。

DHCP

PXE では、DHCP を使って IP アドレスと一緒に NBP に関する情報を受け取るようになってる。設定は簡単で、dhcpd.conf にちょっと追加するだけ。

subnet 192.168.201.0 netmask 255.255.255.0 {
	# snip . . .

    filename "pxelinux.0";
    next-server 192.168.201.1;

	# snip . . .
}

filename で NBP のファイル名を指定、next-server で NBP を持っているサーバーを指定する。next-server はなくてもいいはずだけど、これがないと一部の BIOS では 0.0.0.0 に対して TFTP のリクエストを送ってしまうのでブートに失敗するらしい。VMware でもそうなってハマった。設定したら dhcpd を再起動して準備完了!

起動してみる

別の VM を作ってちゃんと動くか試してみる。クライアントの NIC は、サーバーの LAN 側の NIC と同じ設定にすること。ハードディスクを外しとくとそれっぽくていいかも。

最後に

HTTP-FUSE なので、どうしても外部アクセスが必要になる。たぶんブロックファイルをダウンロードしてきて、設定ファイルでそのブロックファイルを決め打ちすればいいんだろうと思う。
それと、クライアントも Fedora にしたい。明日はその方法探すかな。。。