Messages in cipher reflected in the looking glass

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

(JA) Diskless Solaris (x86編) その2:GNOMEを使う、その他

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

通常であれば、前回の内容だけで終わってしまうことが多いのかもしれませんが、 中途半端にあれこれと喰らいつくのがこのblog。^-^;
ディスクレスクライアント環境というのは通常のPCの内臓HDDにOSをセットアップする使いかたとは異なります。 そのため、おそらく通常環境ではあまり遭遇しないであろうトラブルに見舞われることもあるでしょう。
ということで、数回にわけて、この辺の話にかじりついていこうと思います。 対処方法は場当たり的ですが、あくまでも参考程度ということで…。

Java Desktop System (Gnome) のログインに失敗する

前回の作業でディスクレスクライアントの構築は完成したはずです。 この状態で Solaris を起動して、ログイン。もちろん Java Desktop System ですよ。 といきたいところですが、そのままではログイン中のアプリケーション起動に失敗して、ログイン画面に戻ってしまいます。
CDEを選択すればそのようなことは無く、ログイン可能です。 ということで、CDEであれば普通に使えるのですが、 Gnome系のアプリケーション(gnome-terminalとか)はことごとく落ちてしまいます。 はっきり言って使えません。(-_-#)

ホームディレクトリを見てみると、どうも core が吐き出されているようなので、 pstack を利用して中身を確認してみました。
locale=C の時と locale=ja の時とで core を吐いているアプリが違うのですが、 内容は同じです。

C ロケールの場合、

# pstack core
core 'core' of 10077:   /usr/lib/gnome_segv gnome-session 11 2.6.1
 fce54179 FcPatternPosition (81fd128, fce6398c) + 69
 fce54244 FcPatternFindElt (81fd128, fce6398c) + 34
 fce54f64 FcPatternGet (81fd128, fce6398c, 0, 8045670) + 34
 fce553dc FcPatternGetCharSet (81fd128, fce6398c, 0, 80456bc) + 3c
 fce5063b FcSortWalk (81b1d30, 422, 8297ef8, 8045724, 1) + 73
 fce50be4 FcFontSetSort (8103a30, 8045780, 1, 81029e0, 1, 0) + 3fc
 fce50d52 FcFontSort (8103a30, 81029e0, 1, 0, 80457cc, 81029e0) + ca
 fe838043 pango_fc_font_map_get_patterns () + 157

ja ロケールの場合、

# pstack core.ja
core 'core.ja' of 8063: jp.co.justsystem.atokx2.BasicAux
 fd8507e7 kill     (b, 0, 8045250) + 7
 fd85001f __sighndlr (b, 0, 8045250, 80a13c0) + f
 fd8465d9 call_user_handler (b, 0, 8045250) + 22b
 fd846759 sigacthandler (b, 0, 8045250) + bb
 --- called from signal handler with signal 11 (SIGSEGV) ---
 fd434179 FcPatternPosition (841bcb0, fd44398c) + 69
 fd434244 FcPatternFindElt (841bcb0, fd44398c) + 34
 fd434f64 FcPatternGet (841bcb0, fd44398c, 0, 80454fc) + 34
 fd4353dc FcPatternGetCharSet (841bcb0, fd44398c, 0, 8045548) + 3c
 fd43063b FcSortWalk (82d97b0, 426, 83bbb88, 80455b0, 1) + 73
 fd430be4 FcFontSetSort (823b298, 804560c, 1, 8233988, 1, 0) + 3fc
 fd430d52 FcFontSort (823b298, 8233988, 1, 0, 8045658, 8233988) + ca
 fd358043 pango_fc_font_map_get_patterns () + 157

で、これ何よ? ということになるんですが、
http://www.opensolaris.org/jive/thread.jspa?threadID=22240&tstart=195
にもあるように fc-cache の問題です。 というのも、fc-cache の初回動作時やフォント情報の更新要求があった場合、 /usr 以下(正確にはフォントが格納されているディレクトリ)に 書き込みを行います。
ディスクレスクライアントの場合 /usr が読み込み専用になっているため、 書き込みに失敗しているのが原因になっているようです。

回避方法としては、サーバ側の fonts.cache-1 などをディスクレスクライアント用の /usr 以下のフォントの格納されたディレクトリにコピーすれば良いと思いますが、 コピー忘れとかもあるといけないので、 fc-cacheコマンドに作ってもらうという方法を用います。

ということで、/usr をディスクレスクライアントで書き換えれるようにします。 まずはサーバ側の設定ですが、共有状態は share コマンドで確認できます。

# share
-               /export/exec/Solaris_10_i386.all/usr   ro   ""
-               /export/root/w1100z   rw=w1100z,root=w1100z   ""
-               /export/swap/w1100z   rw=w1100z,root=w1100z   ""

/etc/dfs/dfstab を下記のように書き換えます。 ( /export/exec/Solaris_10_i386.all/usr の共有設定部分)

# share -F nfs -o ro /export/exec/Solaris_10_i386.all/usr
share -F nfs -o rw=w1100z,root=w1100z /export/exec/Solaris_10_i386.all/usr
share -F nfs -o rw=w1100z,root=w1100z /export/root/w1100z
share -F nfs -o rw=w1100z,root=w1100z /export/swap/w1100z

shareallコマンドで変更を有効にします。share で変更されたかどうか確認できます。

# shareall
# share
-               /export/exec/Solaris_10_i386.all/usr   rw=w1100z,root=w1100z   ""
-               /export/root/w1100z   rw=w1100z,root=w1100z   ""
-               /export/swap/w1100z   rw=w1100z,root=w1100z   ""

次にクライアント側の vfstab (今回の場合 /export/root/w1100z/etc/vfstab ) を次のように書き換えます。
書き換えたのは一番下の項目(x4200m2:/export/exec/Solaris_10_i386.all/usr)の部分です。

#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
#
/devices        -               /devices        devfs   -       no      -
/proc           -               /proc           proc    -       no      -
ctfs            -       /system/contract        ctfs    -       no      -
objfs           -       /system/object  objfs   -       no      -
fd              -               /dev/fd         fd      -       no      -
swap            -               /tmp            tmpfs   -       yes     -

x4200m2:/export/root/w1100z     -       /       nfs     -       -       rw
x4200m2:/export/swap/w1100z     -       /dev/swap       nfs     -       -       -
/dev/swap       -       -       swap    -       -       -
# x4200m2:/export/exec/Solaris_10_i386.all/usr   -       /usr    nfs     -       -       ro
x4200m2:/export/exec/Solaris_10_i386.all/usr    -       /usr    nfs     -       -       rw

この後、ディスクレスクライアントを起動し、 JDS(Gnome) ログインしたところ、成功しました。
フォントの入っているディレクトリをチェックすると、下記のように fonts.cache-1 等が新規に作成されています。

# cd /export/exec/Solaris_10_i386.all/usr/openwin/lib/X11/fonts/Type1
# ls -l
-rw-r--r--   1 root     bin         4204 Dec 16  2004 fonts.alias.all
-rw-r--r--   1 root     root        8013 Apr 23 14:10 fonts.cache-1
-rw-r--r--   1 root     bin         1162 Dec 16  2004 fonts.dir
-rw-r--r--   1 root     bin         1162 Dec 16  2004 fonts.scale
drwxr-xr-x   2 root     bin          512 Apr 23 14:10 outline
drwxr-xr-x   2 root     bin          512 Apr 23 14:10 prebuilt
drwxr-xr-x   3 root     bin         2048 Apr 23 14:10 sun

一度作成してしまえば、フォントの追加等を行わない限りは大丈夫だと思います。 ですので、念のため、読み込み専用に戻しておくと良いかと思います。

ディスクレスクライアントの /opt が空なんですが…。

ディスクレスクライアントでログイン後、/opt を見てみると空だったりします。 上記の vfstab を見れば一目瞭然なのですが、/opt がマウントされていないだけです。

Netbeans とか、StarSuite 等は /opt にインストールしたりします。 また、Solaris 10 で標準で /opt にインストールするものがいくつかあります。 各クライアントの root に直接インストールしても問題ないのですが、 /usr のように共有した方が便利でしょう。
ということで、マウントします。ディスクレスクライアント構築時、 /usr に関しては /export/exec/Solaris_10_i386.all/usr というディレクトリが作成され、/export/Solaris_10/usr_i386.all にシンボリックリンクされていますが、 /opt は /export/Solaris_10/opt が直接作られています。 複数バージョンのディスクレスクライアントを作成する場合は好ましくないような気がしますが、面倒なのでそのまま使います。^-^;
まず、/etc/dfs/dfstab にマウントできるように設定を追加します。

share -F nfs -o rw=w1100z,root=w1100z /export/Solaris_10/opt

その後、shareallをお忘れ無く。
次にディスクレスクライアントの vfstab (今回は /export/root/w1100z/etc/vfstab) に /opt 用のエントリを追加します。

#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
#
/devices        -               /devices        devfs   -       no      -
/proc           -               /proc           proc    -       no      -
ctfs            -       /system/contract        ctfs    -       no      -
objfs           -       /system/object  objfs   -       no      -
fd              -               /dev/fd         fd      -       no      -
swap            -               /tmp            tmpfs   -       yes     -

x4200m2:/export/root/w1100z     -       /       nfs     -       -       rw
x4200m2:/export/swap/w1100z     -       /dev/swap       nfs     -       -       -
/dev/swap       -       -       swap    -       -       -
# x4200m2:/export/exec/Solaris_10_i386.all/usr   -       /usr    nfs     -       -       ro
x4200m2:/export/exec/Solaris_10_i386.all/usr    -       /usr    nfs     -       -       rw
x4200m2:/export/Solaris_10/opt    -       /opt    nfs     -       yes       ro

以上終わり。まぁ、これは大したことないですね。

と今回はここまで。次回に続きます。

投稿されたコメント:

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