2007年 5月 09日 水曜日
Messages in cipher reflected in the looking glass
(JA) Diskless Solaris (x86編) その2:GNOMEを使う、その他
(JA) Diskless Solaris (x86編) その1:ディスクレスクライアント構築
の続きです。
通常であれば、前回の内容だけで終わってしまうことが多いのかもしれませんが、
中途半端にあれこれと喰らいつくのがこのblog。^-^;
ディスクレスクライアント環境というのは通常のPCの内臓HDDにOSをセットアップする使いかたとは異なります。
そのため、おそらく通常環境ではあまり遭遇しないであろうトラブルに見舞われることもあるでしょう。
ということで、数回にわけて、この辺の話にかじりついていこうと思います。
対処方法は場当たり的ですが、あくまでも参考程度ということで…。
前回の作業でディスクレスクライアントの構築は完成したはずです。
この状態で 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 を見てみると空だったりします。 上記の 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
以上終わり。まぁ、これは大したことないですね。
と今回はここまで。次回に続きます。
Posted at 04:16午後 5 09, 2007 by Yasuhiro Fujitsuki in Linux & Solaris |