UbuntuでLTSPサーバを作ってみた

クライアントをLinuxでネットワークブートする環境として、LTSP(Linux Terminal Server Project)を見つけた。
クライアントとしてはまだまだWindowsを使わざるを得ないけど、メンテナンスフリーなクライアントとして、用途によっては使えるかもしれない。
…ということで、評価してみた。

ちなみにこれは、LTSPサーバにXDMで接続するためのクライアント環境をネットワークブートする。ユーザーがLTSPクライアント画面からログインすると、(ネットワークしたLTSPクライアントの環境ではなく)LTSPサーバの環境を使うことになる。
WindowsのArdenceのように、ネットワークブートしたクライアント環境にログインしてそのまま使うというものではない。(←これが希望だったのに残念)
ただし、LTSPクライアントのブートイメージをカスタマイズすれば、クライアント環境にログインすることもできた。

さてさて評価には、サーバ・クライアント共に、VirtualPCを使ってみた。これなら、1台のPCでどちらも動かせる。ただし、クライアントの起動はすんなりいかずハマった。

#以降、サーバとはLTSPサーバ、クライアントとはLTSPクライアントを意味する。

参考情報

Virtual PC 2007でサーバ用バーチャルマシンを作成

  • とりあえず、↓で作成
    • メモリ256MB
    • ディスク10GB

Ubuntu 8.04.1 desktopをインストール

% md5sum ubuntu-ja-8.04.1-desktop-i386.iso
bad97b6b6249cebd3b51dd8e776c116f  ubuntu-ja-8.04.1-desktop-i386.iso
  • Virtual PCを起動して、[CD]→[ISOイメージのキャプチャ...]を選択
  • ubuntu-ja-8.04.1-desktop-i386.iso を開く
  • …とubuntuのインストールCDでVirtual PCを起動すると「回復できないプロセッサエラーが発生しました」というエラーが発生。
  • これを回避しても、その後のX Windowの起動が画面が乱れてしまう。
  • これらを回避するためには、起動時のメニューで[F6]キーを押して、カーネルオプションに次のオプションを追加する。
noreplace-paravirt xforcevesa

LTSPサーバの構築

  • LTSPサーバをインストール
$ sudo apt-get install ltsp-server-standalone openssh-server
  • クライアント用のディスクイメージを作成
$ sudo ltsp-build-client
    • PCのスペックにもよるけど、今回のケース(Intel Core 2 Duo 1.83GHz/メモリ1.25GB)では約50分かかった。

DHCPサーバの構築

  • ネットワークブートするためには、DHCPサーバも必要。
    • ちなみに、ここで設定するDHCPサーバがLTSP用のDHCPサーバになるので、同一ネットワーク内には他のDHCPサーバがない方がいい。
    • LTSP用のDHCPサーバではPXEブート用ファイルの情報も配布しているので、クライアントが別のDHCPサーバから設定を受け取るとPXEブートできなくなる。
  • サーバのネットワーク設定を手動で設定*1
  • /etc/ltsp/dhcpd.confの内容を、接続しているネットワーク構成に合わせて編集。
$ sudo vi /etc/ltsp/dhcpd.conf
  • DHCPサーバをを起動。
    • 状況によっては再起動(restart)
$ sudo /etc/init.d/dhcp3-server start
 * Starting DHCP server dhcp3                                           [ OK ]
    • [fail]になった場合は、/var/log/syslogを見て原因を探りましょう。*2

Virtual PC 2007でクライアント用バーチャルマシンを作成

  • とりあえず、↓で作成
    • メモリ256MB
    • ディスク4GB*3

LTSPクライアントの起動

  • クライアントに普通のPCを使うなら、ここでネットワークブートすればよい。
  • クライアントにVirtual PCを使う場合、バーチャルマシンの起動時には通常のPCと同じように起動デバイスが検索され、その中にネットワークブートが含まれているので、そのままの状態でネットワークブート可能。
    • 起動デバイスの順番を確認したい場合は、Virtual PCの起動時に[DEL]キーを押してBIOS設定画面で確認。
  • ただし、ネットワークブートができるようになっても、このままでは2つ問題がある。
    • (問題1)Virtual PCUbuntuをインストールする際に発生した問題、「回復できないプロセッサエラーが発生しました」が発生する。
    • (問題2)X Windowの画面が乱れてしまい正常に表示されない。
  • これらを回避するために、次の設定を行う。
  • (問題1の回避方法)起動時のカーネルオプションにnoreplace-paravirtを追加
    • /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/defaultを編集して、末尾に"noreplace-paravirt"を追加する。
uname@ubuntu-desktop:/var/lib/tftpboot/ltsp/i386/pxelinux.cfg$ more default 
DEFAULT vmlinuz ro initrd=initrd.img quiet splash noreplace-paravirt
    • ついでに、vga=788というオプションも追加しておくと、「いいこと」があるかも。
    • (おまけ)defaultファイルに記述するとデフォルトで使用されてしまうので、このオプションの追加をVirtual PCのマシンのみにしたい場合は、MACアドレスまたは16進数表記のIPアドレスをファイル名とする設定ファイルを用意する。どういうファイル名にすればよいかは、ネットワークブートしたクライアントの起動画面を見れば分かるはず。
  • (問題2の回避方法)X Windowをデフォルトの色数を16bitに変更
    • /var/lib/tftpboot/ltsp/i386/内にlts.confというファイルを作成し、次のような記述をする。
uname@ubuntu-desktop:/var/lib/tftpboot/ltsp/i386$ more lts.conf
[default]
    X_COLOR_DEPTH=16
    • これにより、ネットワークブートしたクライアントのX Windowが16bitで起動するようになり、Virtual PCで正常に表示される。
  • 以上で準備OK。クライアントをネットワークブートできる。
  • クライアントが起動したら、サーバに登録済みのアカウントでログイン。
    • ネットワークブートしたクライアントは、XDMCPでサーバにログインする仕様になっている。
    • ここでログイン時に、"This workstation isn't authorized to connect to server"と表示されてログインできない場合、クライアントのディスクイメージを作成した後に、サーバのIPアドレスを変更したはず。その場合はディスクイメージを作り直す必要があるけど、その方法は別の日記で。

以上、ってなもんだ。
小規模な勉強会では、十分使えそうだな。

*1:コレ重要

*2:今回のケースでは、単純なミスで[fail]になった。orz その時のことは、別の日記に書こうかな…。

*3:ディスクはとりあえず割り当てたけど、ネットワークブートさせるので後からなしにすることも可能。でも、ディスクが割当たってないと、バーチャルマシンの起動時に警告が表示される。