Messages in cipher reflected in the looking glass

http://blogs.sun.com/thaniwa/date/20070502 2007年 5月 02日 水曜日

(JA) Diskless Solaris (x86編) その1:ディスクレスクライアント構築

最近というわけでは無いですが、Sun RayのようなThin Clientとは別にDiskless PC環境というものが利用されていることがあります。
( Sun Ray, Diskless PC にはそれぞれ利点・欠点があるので、 ケースバイケースでしょう。)

Diskless PC(UNIX)環境では主に Linux が用いられていますが、Solarisではできないのか?という質問を受けることもあります。
Solaris における Diskless環境のサポートは、Solaris 8からはじまっています。
ということで、いろいろ実験してみたことをまとめておきたいと思います。
内容が非常に多いので数回にわけて行いたいと思います。 テスト環境での結果ですので、将来的には機能の変更・改善等が本体に行われるかもしれません。
対象は Solaris 10 11/06(サーバはRecommended Patch適用済み)。 サーバは x4200m2, クライアントは w1100z というホスト名にしています。

マニュアルは、docs.sun.com の
Solaris 10 System Administrator Collection - Japanese >> Solaris のシステム管理 (基本編)
第 7 章 ディスクレスクライアントの管理 (手順) : http://docs.sun.com/app/docs/doc/819-0378/6n2qdlvpi?a=view
の 「x86: GRUBベースの起動環境にディスクレスクライアントを追加するための準備方法」を参照しています。

0. 各種設定の確認

  • ディスクレスクライアントプラットフォーム = i386.i86pc.Solaris_10 (instruction-set.machine-class. Solaris-versionという形式になるらしい)
  • インストール用Solarisのイメージ : /export/install/sol_10_1106_x86 (要するにインストールサーバのセットアップ先)
  • ディスクレスクライアント用のOSイメージ(自動的に選択されるものもあります)
    • root(/) = /export/root
    • swap = /export/swap
    • /usr = /export/Solaris_10/usr_i386.all/usr (/export/exec/Solaris_10_i386.all/usr)
    • /opt = /export/Solaris_10/opt
  • ロケール = ja
1. インストールサーバのセットアップ

ここでは Solaris 10 11/06 DVDを利用してインストールサーバを構築します。 (ディスクレス環境のセットアップなどにインストールサーバ環境を利用するようです。)
インストールサーバの構築には DVD(CDでも可) に入っている setup_install_server コマンドを利用します。

# mkdir -p /export/install/sol_10_1106_x86
# cd /cdrom/sol_10_1106_x86/Solaris_10/Tools
# ./setup_install_server /export/install/sol_10_1106_x86
Verifying target directory...
Calculating the required disk space for the Solaris_10 product
Calculating space required for the installation boot image
Copying the CD image to disk...

という感じで進んでいきます。

2. ディスクレスクライアント用OSのインストール

次に先ほどセットアップしたインストールサーバを利用し、 ディスクレスクライアント用のOSイメージの作成を行います。

まず、/etc/default/init の LANG 設定を確認します。 通常、LANG=ja などのような日本語設定になっていると思いますが、 ディスクレスクライアント環境構築用のコマンドが LANG=ja では動きません。 そのため、LANG=C と変更し、再起動します。

LANG=C
#LANG=ja

ディスクレスクライアントの設定は /usr/sadm/bin/smosservice コマンドで行います。
このコマンドの実行前に JAVA_HOME, LD_LIBRARY_PATH を設定する必要があります。

# JAVA_HOME="/usr/j2se" ; export JAVA_HOME
# LD_LIBRARY_PATH="/usr/sadm/lib/wbem:/usr/snadm/lib" ; export LD_LIBRARY_PATH

環境変数の設定が済んだら、smosservice add を利用して OSイメージを作成します。
オプションは次の通りです。

  • -H host:port : SMC(Diskless Client情報)の管理ホスト。(ここでは x4200m2:898)
  • -o os_server :OSイメージのあるサーバ ( ここでは x4200m2 )
  • -x mediapath=path :インストール元のイメージ (ここでは /export/install/sol_10_1106_x86 )
  • -x platform=platform : インストールするアーキテクチャ (ここでは i386.i86pc.Solaris_10 )
  • -x cluster=cluster : インストールするパッケージグループ (SUNWCXallを必ず指定する)
  • -x locale=locale : 言語 (ここでは ja)

# /usr/sadm/bin/smosservice add -H x4200m2:898 -- -o x4200m2 -x \
mediapath=/export/install/sol_10_1106_x86 -x 
platform=i386.i86pc.Solaris_10 \ 
-x cluster=SUNWCXall -x locale=ja
Authenticating as user: root

Type /? for help, pressing  accepts the default denoted by [ ]
Please enter a string value for: password ::
Loading Tool: com.sun.admin.osservermgr.cli.OsServerMgrCli from x4200m2:898
Login to x4200m2 as user root was successful.
Download of com.sun.admin.osservermgr.cli.OsServerMgrCli from x4200m2:898 was successful.

メモ

OSイメージの削除も smosservice コマンドを利用して行います。 (オプションは delete )
その際、削除対象のプラットフォームを指定する必要がありますが、 プラットフォームの2つめの部分は i86pc ではなく all と指定します。

# /usr/sadm/bin/smosservice delete -H x4200m2:898 -- -x rmplatform=i386.all.Solaris_10

3. インストールされなかったパッケージの追加

smosservice add での OS インストールでは ARCH=all 指定のパッケージが インストールされないので、追加します。
マニュアルでは root(/) および /usr 以下の ARCH=all となっているパッケージが 追加されないと書いてありますが、 /opt 以下のもの(SUNWmlibk)も追加されていないようです。 これらも念のために追加しておきます。
ARCH=all のパッケージを調べるには次のようにします。

# cd /export/install/sol_10_1106_x86/Solaris_10/Product
# find ./ -name pkginfo -exec grep -w ARCH=all {} /dev/null \;
./SUNWjdmk-base/pkginfo:ARCH=all
./SUNWjhdem/pkginfo:ARCH=all
./SUNWjhdev/pkginfo:ARCH=all
./SUNWjhdoc/pkginfo:ARCH=all
./SUNWjhrt/pkginfo:ARCH=all
./SUNWmlibk/pkginfo:ARCH=all

パッケージのインストール先は SUNW_PKGTYPE, BASEDIR などで調べられます。 (マニュアルでは SUNW_PKGTYPE=root, SUNW_PKGTYPE=usr で調べています。 BASEDIRで調べた結果のようにSUNWmlibkのみ/optにインストールするパッケージのようです)

# grep -w SUNW_PKGTYPE ./SUNWjdmk-base/pkginfo \ 
./SUNWjhdem/pkginfo ./SUNWjhdev/pkginfo \
./SUNWjhdoc/pkginfo ./SUNWjhrt/pkginfo ./SUNWmlibk/pkginfo
./SUNWjdmk-base/pkginfo:SUNW_PKGTYPE=usr
./SUNWjhdem/pkginfo:SUNW_PKGTYPE=usr
./SUNWjhdev/pkginfo:SUNW_PKGTYPE=usr
./SUNWjhdoc/pkginfo:SUNW_PKGTYPE=usr
./SUNWjhrt/pkginfo:SUNW_PKGTYPE=usr

# grep -w BASEDIR ./SUNWjdmk-base/pkginfo \
./SUNWjhdem/pkginfo ./SUNWjhdev/pkginfo \ 
./SUNWjhdoc/pkginfo ./SUNWjhrt/pkginfo ./SUNWmlibk/pkginfo
./SUNWjdmk-base/pkginfo:BASEDIR=/usr
./SUNWjhdem/pkginfo:BASEDIR=/usr
./SUNWjhdev/pkginfo:BASEDIR=/usr
./SUNWjhdoc/pkginfo:BASEDIR=/usr
./SUNWjhrt/pkginfo:BASEDIR=/usr
./SUNWmlibk/pkginfo:BASEDIR=/opt

パッケージがインストールされていないことを確認します。

# pkginfo -R /export/Solaris_10 SUNWjdmk-base \
SUNWjhdem SUNWjhdev SUNWjhdoc SUNWjhrt SUNWmlibk
ERROR: information for "SUNWjdmk-base" was not found
ERROR: information for "SUNWjhdem" was not found
ERROR: information for "SUNWjhdev" was not found
ERROR: information for "SUNWjhdoc" was not found
ERROR: information for "SUNWjhrt" was not found
ERROR: information for "SUNWmlibk" was not found

/usr 以下にインストールされるパッケージの追加用にインストール管理ファイルの作成します。basedir がマニュアルとは違います(x86用に書き換えています)。

# cat >/tmp/admin_usr <<EOF
mail=
instance=unique
partial=nocheck
runlevel=nocheck
idepend=nocheck
rdepend=nocheck
space=nocheck
setuid=nocheck
conflict=nocheck
action=nocheck
basedir=/usr_i386.all
EOF

インストールは下記のように行います。

# pkgadd -R /export/Solaris_10 -a /tmp/admin_usr -d . SUNWjdmk-base

<SUNWjhrt> JavaHelp Runtime(all) 2.0,REV=2004.11.23
<SUNWjhdev> JavaHelp Development Utilities(all) 2.0,REV=2004.11.23
をインストールしようとすると、

No compatible version of Java is installed.
checkinstall script suspends

という警告が出てインストールされませんでしたので、JavaHelpパッケージ系はインストールせずに、SUNWjdmk-base のみインストールしています。

つづいてSUNWmlibkのインストールですが、/usrの時と同様に行います。 (インストール管理用ファイルの中身が多少異なります。

# cat >/tmp/admin_opt <<EOF
mail=
instance=unique
partial=nocheck
runlevel=nocheck
idepend=nocheck
rdepend=nocheck
space=nocheck
setuid=nocheck
conflict=nocheck
action=nocheck
basedir=/opt
EOF

# pkgadd -R /export/Solaris_10 -a /tmp/admin_opt -d . SUNWmlibk

4. ディスクレスクライアントの登録

ここまででOSイメージの作成まで済んだので、今度はクライアント情報の登録を行います。
/etc/hosts にクライアントのエントリを追加します。

192.168.0.100 w1100z 

ディスクレスクライアントの情報を登録します。

/usr/sadm/bin/smdiskless add -- -i 192.168.0.100 -e 01:02:03:04:05:06 \
-n w1100z -x os=i386.i86pc.Solaris_10 -x root=/export/root/w1100z \
-x swap=/export/swap/w1100z -x swapsize=512 -x tz=Japan -x locale=ja

オプションは下記の通りです。

  • -i : クライアントのIPアドレス
  • -e : クライアントのMACアドレス
  • -n : クライアントの名前
  • -x os=<ostype> : クライアントのOS種別(ここでは i386.i86pc.Solaris_10)
  • -x root=<dir> : root(/)ディレクトリ(サーバ上)
  • -x swap=<file> : スワップファイル(サーバ上)
  • -x swapsize=<int> : スワップファイルの大きさ(MBytes単位)
  • -x tz= : タイムゾーン
  • -x locale= : ロケール

5. tftpサーバの起動

x86系でディスクレスクライアントを利用するためには tftp サーバが必要となりますので、サービスの起動を行います。
tftpサーバから提供されるデータはディスクレスクライアントの登録時に自動的に設定されていますので特に追加作業等は必要ありません。

まず、/etc/inetd.conf ファイルの tftp 行を有効にします。 エントリが次のようになっているか確認します。 #でコメントアウトしてある場合は外します。

tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot

サービスの起動を行います。

# /usr/sbin/inetconv
inetconv: Notice: Service manifest for 100235/1 already generated as /var/svc/manifest/network/rpc/100235_1-rpc_ticotsord.xml, skipped
tftp -> /var/svc/manifest/network/tftp-udp6.xml
Importing tftp-udp6.xml ...Done

in.tftpd が正しく動作しているか確認します。

# svcs network/tftp/udp6
STATE          STIME    FMRI
online         17:48:28 svc:/network/tftp/udp6:default

6. DHCPサーバの起動

x86環境でのディスクレスブートにはDHCPサーバが必要になります。 そのため、DHCPサーバの設定および起動を行う必要があります。 Solaris では DHCP マネージャというGUIベースの設定ツールがありますので、 これを利用して DHCP の設定を行うのが一番簡単でしょう。
DHCPマネージャの起動は以下のように行います。

# /usr/sadm/admin/bin/dhcpmgr

IPアドレスやホスト名は既にサーバの /etc/hosts などに登録されているので 同じものを登録する必要があります。 また、IPアドレスをディスクレスクライアントに対して固定するために IPアドレスに対して「クライアントID」の設定を行います。 デフォルトでは00となっており、任意のクライアントにIPアドレスを貸し出すことができます。 この部分を 01[MAC Address of diskless client] (01ffeeddccbbaaのような感じ) に変更することで、固定することができます。
また、dhcpが利用するマクロに対し、以下のオプションを追加する必要があります。 DHCPマネージャの「マクロ」タブからこの情報にアクセスできます。

BootSrvA: server-ip-address
BootFile: client-macro 

smosservice でディスクレスクライアントを登録すると、/tftpboot に 01[MAC Address of diskless client] という名前でブート用のイメージが自動的に作成されます。 BootFile の項目にはこれを指定します。パスは指定する必要は無く、01[MAC Address of diskless client] のみでかまいません。
smosservice はディスクレスクライアント毎にブートイメージおよび grub.lst へのリンクを作成しますが、 ディスクレスクライアントの環境が共通する場合、 ひとつのマクロを共有しても特に問題はありませんでした。

7. クライアントの起動

ここまででディスクレスクライアントの設定は終了しました。
あとは、クライアントをネットワークブートすることにより、 Diskless Solaris環境が利用できるようになります。
初回起動時は通常のSolarisインストールと同様に設定を行いますので、 起動時に時間がかかります。 また、この時点ではCDEしか利用できません。

次回はGNOMEの利用方法などについて解説します。

投稿されたコメント:

ディスクレスの話は2chでもあって、SourceForgeのプロジェクトにまで発展してしまったものがあるのですが、ご存じでしょうか。 http://dl-x86solaris.sourceforge.jp/

Posted by ゆ(ry on 5月月 05日, 2007年 at 06:02 午後 JST #

ゆ(ry さん、 情報ありがとうございます。 プロジェクトの存在は知りませんでした。 複数台の時の動作がわからないのですが、時間があれば試してみたいですね。

Posted by thaniwa on 5月月 05日, 2007年 at 10:15 午後 JST #

コメント
コメントは無効になっています。