2009年11月27日金曜日

Solaris10の軽量化

VMを2台動かしてテストをするために、Solaris10の軽量化を試みます。
まずは、不要なサービスの停止。

とりあえずこのくらい止めてみた
svcadm disable /network/http:apache2
svcadm disable /network/dns/server
svcadm disable /network/smtp:sendmail
svcadm disable /network/nfs/status
svcadm disable /network/nfs/mapid
svcadm disable /network/nfs/nlockmgr
svcadm disable /network/nfs/rquota
svcadm disable /network/nfs/client
svcadm disable /network/nfs/dbd
svcadm disable /network/nfs/cbd
svcadm disable /application/print/ppd-cache-update
svcadm disable /application/cde-printinfo
svcadm disable /application/print/ipp-listener
svcadm disable /application/print/rfc1179
svcadm disable /system/power
svcadm disable /system/webconsole

仕上げに、GUIを止めます。
/usr/dt/bin/dtconfig
というコマンドもあるようなのですが、個別にコマンドを覚えるのはやっかいなので、こっちで止めます。
svcadm disable /application/graphical-login/cde-login
ただ、これをやると、ログインだけではなくて、今動いているデスクトップが即死しますね。
ご注意ください。
VMwareの場合、キャラクタモードにすると、VMのウインドウから抜けるために毎回[ctrl]+[Alt]を押さなくてはいけないのが少し面倒です。
あ、よく考えると、これならそもそもVMのウインドウを立ち上げる必要はなくて、TeraTermで十分ですね。

最後に再起動。気持ち、軽くなったような気がしますが、やはりVM2台はきつそうです。

VMを複製する

・Virtual Machinesのディレクトリ内にある、"Solaris10"のVMをフォルダごとコピーする

・フォルダの名前を変更~"Solaris10_mini"にした(後で最小構成にしていくため)

・フォルダ内の、Solaris10.vmxをエディタで編集
displayName = "Solaris10_mini"
以下3つの項目の末尾の16進数を適当な値に変える
(f1→f2にしました。MACアドレスに由来するものなので、これを変えないと、コピー元のVMと同一ネットワークに共存できません。)
uuid.location = "xx xx xx b1 f5 46 96 12-ec c3 90 f6 22 xx xx f2"
uuid.bios = "xx xx xx b1 f5 46 96 12-ec c3 90 f6 22 xx xx f2"
ethernet0.generatedAddress = "xx:xx:29:fa:xx:f2"

・VMwareのメニューから、"Add virtual machine to inventory"を選んで、このVMを登録

・新しいVMを起動
こんなメッセージが出てきた
msg.uuid.altered:This virtual machine may have been moved or copied.
In order to configure certain management and networking features VMware Server needs to know which.
Did you move this virtual machine, or did you copy it?
If you don't know, answer "I copied it".

"I copied it"を選択した
(もしかすると、これを選べば、MACアドレスの問題など、良きに計らってくれたのかもしれません。)

これで、新しいVMがあっけなく起動しました。

・ホスト名とIPアドレスを変更して再起動
/etc/nodename
/etc/hostname.g1000e1
/etc/hosts
を編集

これで、2台のSolaris10 VMを共存させられました。
しかし、さすがに重い!軽量化しないとテストできない。
次は軽量化です。

2009年10月29日木曜日

Net-SNMPの設定をいじる

SNMPのクエリに応答するために、Solaris10に標準で入っているNet-SNMPの設定を変えました。
いちばん苦労したのは、snmpd.confのありかを見つけることです。Linux系のサイトに書いてある場所を探しても、ぜんぜんありません。(さらに悲しいことに、「/etc/snmp/conf/snmpd.confだよ」と書いてあるサイトがあって、確かにファイルは存在したのですが、編集しても何の変化もありません。削除しても平気だったので、見られてなかったのですね。 orz)

で、正解は、
/etc/sma/snmp/snmpd.conf
です。ここを変えて、snmpdにHUPを送ると、設定が変わります。

(そもそもですが、わたくしのSolaris10サーバでは、最初からsnmpdが動いています。killしてもよみがえるので、たぶんsvcadmから起動しているようです。でも、どの項目で立ち上げているのかわかりません。snmpdxとは、別物のようです。)

次に設定変更の方ですが、これは、snmpd.confにexecというディレクティブを追加するだけなので、簡単です。
詳しい説明は、このへん見てください。
http://www.itmedia.co.jp/help/howto/linux/0007master/06/21.html

自分が作ったものの例だけ書いておきます。

snmpd.conf に追加

exec 1.3.6.1.4.1.xxx.101 test /bin/echo hello world

bash-3.00# kill -HUP 1406
bash-3.00# snmpwalk -c public -v 1 localhost .1.3.6.1.4.1.xxx
SNMPv2-SMI::enterprises.xxx.101.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.xxx.101.2.1 = STRING: "test"
SNMPv2-SMI::enterprises.xxx.101.3.1 = STRING: "/bin/echo hello world"
SNMPv2-SMI::enterprises.xxx.101.100.1 = INTEGER: 0
SNMPv2-SMI::enterprises.xxx.101.101.1 = STRING: "hello world"
SNMPv2-SMI::enterprises.xxx.101.102.1 = INTEGER: 0
bash-3.00#

と、このようにうまくいきます。
(OIDのxxxのところは、会社のコードが入ります。数字です。)

1つだけ気になるのは、execディレクティブの設定で、OIDを明示的に指定すると、STRINGが""で区切られて出てくることです。指定しないと、Net-SNMPのOID"1.3.6.1.4.1.2021.8"になるのですが、この場合は区切られません。
マネージャでちゃんと認識されるかなぁ?

2009年9月4日金曜日

IO::Ttyのインストール

PerlでExpectの続きのような感じですが、Expect.pmを使うためには、Pty.pmというモジュールが必要です。ない環境で実行すると、しょっぱなで、
Can't locate IO/Pty.pm in @INC...
というエラーが出ます。

で、このPty.pmは、IO::Ttyというモジュールに含まれているので、こちらをインストールします。
http://search.cpan.org/~rgiersig/IO-Tty-1.08/Tty.pm

ところが、です。こちらのモジュール、Expectなどの「普通の」モジュールとは違いまして、適当なところに置くだけでは使えません。いままでは、パッケージのフォルダの中にMakefile.PLとかあっても無視していたのですが、ちゃんとインストールしないといけません。

しかしさらに!このインストール処理では、中でしっかりCのコンパイラを使います。それもどうも、gccでなくてはいけないようです。また、他のライブラリとか、GNUのmakeなども入れる必要があります。
このあたり全く初心者のわたくしは、会社の人に教えを請いながらコツコツ入れてみました。
前置きはこのくらいで、導入手順です。
-----
その1~UNIXモジュールのインストール(rootでやります)
・gcc 3.4.6
・libiconv 1.11
・binutils 2.19
・make 3.81

1.sunfreeware.comから、以下のインストールモジュールを落としてくる
gcc-3.4.6-sol10-sparc-local.gz
libiconv-1.11-sol10-sparc-local.gz
binutils-2.19-sol10-sparc-local.gz
make-3.81-sol10-sparc-local.gz

2.各モジュールをgunzipで解凍

3.パッケージのインストール
特に順序は気にしなくても大丈夫みたいです。

#pkgadd –d gcc-3.4.6-sol10-sparc-local
#pkgadd –d libiconv-1.11-sol10-sparc-local
#pkgadd –d binutils-2.19-sol10-sparc-local
#pkgadd –d make-3.81-sol10-sparc-local

「上書きするか?」と質問されたら、とりあえずyで答えておきました。

その2~Perlモジュールのインストール(rootでやります)
・IO::Tty 1.08

1.上記のCPANから、インストールモジュールを落としてくる

2.gunzipで解凍してから、tarで適当なところに展開
(IO-Tty-1.08 というディレクトリが作られて、その中に展開されます。)

3.PerlのConfig.pmをgccでのインストール用のものに置き換える
目的はよく知らないのですが、このファイルを一時的に置き換えておかないと、インストールの時にエラーになります。
(逆に、元のConfig.pmを使う場合、というのがよくわからないので、永久的に置き換えてしまってもいいのかもしれません。)
サーバ上のPerlが5.8.4の場合です。

#cd /usr/perl5/5.8.4/lib/sun4-solaris-64int/
#cp –p Config.pm Config.pm.bak
#cp –p /usr/perl5/5.8.4/lib/Sun/Solaris/PerlGcc/Config.pm .

4.モジュールのインストール
#cd .../IO-Tty-1.08 (先ほど展開して作成されたディレクトリに移動
#perl Makefile.PL

何だかよくわからない記号がいっぱい出てきて、makefileの作成を行っているようです。
このモジュールは、仮想ターミナルを作成する、ということを行うので、システムの構成情報を取ってきて、設定に反映させているのだと思います。

#make
#make test
#make install
この3つは、どうしてこの順序でやるのか理解していないのですが、まあ、定番ですね。make testが一番の山場のようで、ここが問題なく通れば、make installは基本的に大丈夫みたいです。

5.Config.pmを元に戻す
#cd /usr/perl5/5.8.4/lib/sun4-solaris-64int/
#mv Config.pm.bak Config.pm


6.結果の確認
#/usr/perl5/5.8.4/bin/perldoc Tty.pm
これで結果が確認できれば、ちゃんとインストールされているようです。
ちなみに、インストールしたファイルの一覧は、こちらにあります。
/usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/IO/Tty/.packlist

モジュールのアンインストール、という処理はないのですが、この一覧のファイルを削除すれば、元に戻るようです。
-----
ここまでやるのだったら、Expect.pmもインストーラを使ってちゃんとインストールしてもよいかもしれないですね。なにぶん自分は、間借りしているサーバだったので、システムレベルのインストールは最小限にしたかったのです。

あ、当然ながら、上記の作業の前には、/usr/local/bin/ や、/usr/sfw/bin の下に既にgccが入っていないかどうか、とかは確認しておきましょう。入っていれば、パスを通すだけで使えるはずです。

2009年5月27日水曜日

PerlでExpect

PerlからExpectのライブラリを利用するためにセットアップしてみました。
でも、全体の環境にインストールするのではなく、自分のプログラムだけで「こっそり」使用するため、makeを行わずに、ライブラリだけを置きました。

1.Perl-Expectの入手
CPANのWebサイトからダウンロードしました。
http://search.cpan.org/~rgiersig/Expect-1.21/
zipファイルがダウンロードできます。

2.zipの展開
zipファイルの中身はすべて"Expect-1.21"というディレクトリに入っています。展開した結果を適当な場所に置きます。どこかに展開してから、中身だけをPerlの環境設定で指定したlibのディレクトリに置けば簡単なのでしょうが、上記の目的のため、こういう置き方をしました。
~/lib/Expect-1.21/

3.Perlのソースで、このライブラリを使うことを宣言する
ソースコードの先頭部分で、このライブラリの場所と、Expectを使用することを宣言します。

#!/usr/local/bin/perl -w
use lib "/export/home/(ホームディレクトリ名)/lib/Expect-1.21";
use Expect;

4.トラブルシューティング
基本、これで動くようになったのですが、私の環境では1つだけ問題が起きました。
Expectのライブラリの中で、IO::Ptyというライブラリを使っていて、これのバージョンチェックをしているのですが、バージョン1.03以上でないと動かないらしく、ライブラリの関数を呼び出すときに「1.02しか入っていない!」とエラーになります。
Expext.pmのソースコードの22行目に定義がありました。

use IO::Pty 1.03; # We need make_slave_controlling_terminal()

とりあえず急いでいたので、数字だけ書き換えて使ってみちゃお、と思い、そこだけ編集しました。

use IO::Pty 1.02; # We need make_slave_controlling_terminal()

今のところこれで動いています。本番で使用する環境で、このままというわけにはいかないので、バージョンをチェックした上で、IOの方のバージョンを上げるか、Expectのバージョンを下げるかすることにします。

そうそう、そもそもの話なのですが、Expectというと、普通は独立したプログラミング環境のことを指していて、Solarisの場合なんかもインストールパッケージがあります。(さらにこのExpectはTcl/Tkという言語(?)でできているので、そちらをあらかじめインストールしないといけません。)
今回試してみたPerlのExpectは、基本的にはそれとは別のものです。

2009年4月17日金曜日

ブートデバイスの変更

SunFireT2000で、ブートデバイス(起動ディスク)を変更する必要に迫られたので、方法を調べました。
参考:http://docs.sun.com/app/docs/doc/819-0378/bootdevice-change?l=ja&a=view
EEPROMの'boot-device'という値(そのまんまですね)を設定すればよいのですが、ハードウェアの構成情報そのものを設定するので、値がけっこう複雑でした。

#eeprom boot-device で現状の値を表示
/pci@780/pci@0/pci@9/scsi@0/disk@0,0:a disk net
となっていました。後ろの方の'net'がよくわからないのですが、ネットワークブートとたぶん関係あるのでしょう(自分は使っていません)。
これがデフォルトで、フロントパネル上のディスクスロットの0番から起動される設定です。

今回、2番から起動したかったので、デバイスファイルをlsで調べて、このパスを探しました。デバイスファイルがハードウェアの構成情報にリンクされている、という形で表現されているので、探せば見つかります(この時のログはどこかにやっちゃいました)。
/pci@780/pci@0/pci@9/scsi@0/disk@2,0:a でした。

設定値を変更
#eeprom boot-device=/pci@780/pci@0/pci@9/scsi@0/disk@2,0:a disk net
値を確認して、リブートすると、あっけなく2番のディスクから起動されます。
そうそう、2番のディスクに、0番からのバックアップを使う場合、再起動の前に、2番のディスク上の/etc/vfstab だけは修正する必要があります。そうしないと、ルートパーティションは2番なのに、他のパーティションは0番からマウントされる、という間抜けなことになります。

よく考えると、x86版のSolaris10の場合は、EEPROMはディスクでエミュレートしているので、この方法は使えないですね。ま、ブートに関してはOS関係ないので、GRUBとかでやるのが普通でしょうね。

-----
当然ながら、2番のディスクにOSが入っていて、ブートブロックが作られていることが大前提です。
今回は、これまでミラーリングしていなかったディスクを、なるべく少ないダウンタイムでミラーリングにするのが目的でした。
ポイントは、現状の0番のパーティション構成では、metaDBのための領域(c0t0d0s3 とか)が確保されていないので、わたくしが知っている方法では、そのままミラーにできなかった、ということです。
以下の手順で構成し直しました。詳細な手順はちょっと書ききれませんが、とにかくこの順序でできます。

1.0番のディスクをテープにバックアップする
2.ミラーリングの対向となる2番のディスクにパーティションを作り直す(metaDBの領域を作る)
3.0番からのバックアップを2番にリストアする
4.上記の方法で、ブートデバイスを変更
4'.2番の/etc/vfstabを修正
5.再起動して、2番のOSで立ち上げる
6.0番のディスクに2番のディスクからパーティション情報をコピー
7.0番と2番でミラーを構成する
8.後は同期させるだけ
(その後、ブートデバイスを0番に戻しても、ちゃんと立ち上がります。)

ということで、上記の項番の中では、1.と5.の時だけサーバがダウンします。でも、3.のリストアがデスクトップから実行できたので、とても楽でした。
当然ながら、2~4の間に、サーバ上で行っている他の作業の結果は失われます。今回は、別の人がアプリの動作確認を行っていただけだったので、変更点はほとんどなく、影響は少なかったです。

2009年3月31日火曜日

Apacheの名前ベースのバーチャルホストのデフォルト

httpd.confの設定で複数のバーチャルホストを定義した場合、そのいずれにもマッチしないリクエストが来ると、どう処理されているのか、これまで深く考えていませんでした。
で、ここを読んでいたら(http://httpd.apache.org/docs/2.2/ja/vhosts/name-based.html)、複数書いたバーチャルホストのうち、先頭のものがデフォルトとのことです。
従って、商用利用などの場合は、先頭部分に代表となるWebサイトの設定を置くか、意図的にエラーになるようにすれば、不公平にならず、問題が起きません。
自分は今回は、先頭にApacheのトップページを持ってきました。

Apacheのアクセスログにバーチャルホスト名を出力する

Apache2で、複数のバーチャルホスト(名前ベース)を運用していますが、アクセスログが分かれると管理が煩雑になるので、ログを1つにまとめることにしました。
その場合、通常アクセスログにはDocument Rootからの相対パスしか出力されないので、例えば"/index.html"とあっても、www.a.comのindexなのか、www.b.comのindexなのか、わからなくなります。
これを何とかするためには、ログフォーマットの定義に"%v"という項目を追加します。

LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
CustomLog logs/access_log comonvhost

(参考:http://httpd.apache.org/docs/2.2/ja/logs.html

これで、アクセスログのレコード毎にバーチャルホスト名が表示されて、区別できるようになります。
ただ、この技が使えるのはアクセスログだけで、エラーログはやはりまとめてしまうと区別が付かなくなります。

2009年3月24日火曜日

Apacheのバージョン確認

Apache(httpd)のバージョンを確認するには、

#/usr/apache2/bin/httpd -v
と打ちます。簡単です。
ただし、Solaris10のフルインストールの状態では、バージョン1(/usr/apache/bin/httpd)とバージョン2(/usr/apache2/bin/httpd)の2つが入っています。パスが切ってあるわけでもないので、自分が使っているのがどちらなのかは、自分で確認してから、対象のディレクトリ上のhttpdを呼び出さなくてはいけません。
Solaris10 10/8の環境で、apache2のバージョンは、 2.0.63 でした。

BINDのバージョン確認

サーバに入っているBIND(named)のバージョンを確認する方法は、一般的にはBIND自体にはなく、digやnslookupのコマンドを使って問い合わせます。
わたくしはdigを使います。

サーバ自身で動作しているBINDのバージョンを確認するとき
#dig @localhost txt chaos version.bind

このコマンドの出力結果として、バージョンが表示されます。
サーバ自身で実行した場合は同じになるはずですが、digコマンドのバージョンも一緒に表示されますので、一応、混同しないようにしましょう。
Solaris10 10/08の環境では、 9.3.5-P1 と出ました。

2009年3月18日水曜日

Solarisのバージョン確認

Sunのホームページに出てくる、"10/08"などのリリース番号を確認するには、/etc/releaseファイルを見ます。(テキストファイルのようなんだけど、こんなのを信用していいのだろうか?)

bash-3.00# cat /etc/release
Solaris 10 10/08 s10x_u6wos_07b X86
Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 27 October 2008

一般的なUNIXのバージョン確認方法は、unameコマンドですね。

bash-3.00# uname -a
SunOS HOSTNAME 5.10 Generic_137138-09 i86pc i386 i86pc

Sunのバージョンって、どうしてこんなに何通りもあるのだろう。

Sun Java Desktop Systemsから、コマンドラインでログアウトする

先日の起動ボタンの件で苦しんだので、方法を調べてみました。
自分がログインしている、gnome-sessionのプロセスにSIGTERMを送ると、あたかも「起動」メニューからログアウトを選択した後のように抜けることができます。一度コンソールに戻った後は、自動的にログイン画面が再び立ち上がってきます。(これは、電源投入後に自動的にデスクトップが立ち上がる設定にしているためだと思います。)

手順は以下の通り
・自分のデスクトップセッションで使っているgnome-sessionプロセスのプロセスIDを調べる

 # ps -u ユーザ名 -f |grep session

 rootで入っているときの結果はこんな感じ

bash-3.00# ps -u root -f |grep session
root 1271 1269 0 11:25:01 pts/2 0:01 /usr/bin/gnome-session
root 1269 1240 0 11:25:01 pts/2 0:00 /bin/ksh /usr/dt/config/Xsession2.jds
root 1144 1125 0 11:24:54 ? 0:00 /bin/ksh /usr/dt/bin/Xsession root 1240 1235 0 11:25:01 pts/2 0:00 -sh -c unset DT; DISPLAY=:0; /usr/dt/bin/dtsession_res -merge

 一番上のプロセスが該当するので、プロセスIDは1271だとわかる。

・gnome-sessionプロセスにSIGTERMを送る

 # kill -TERM プロセスID(上の例では1271)

これで、ディスクがカラカラ回ってから、暗転します。

2009年3月16日月曜日

日本語キーボードなのに英語キーボードになる

職場のT2000は日本語(JIS)キーボードなのですが、なぜかキーアサインが英語(ASCII)になっていました。困ります。Sunの出荷時のデフォルトらしいです。

これを直すには、/etc/default/kbd というファイルに、

LAYOUT=Japanese

という行を追加して、サーバを再起動します。
(有効な設定値の一覧は、"kbd -s"で確認できます。)

-----
ここから先は未検証なのですが、kbdのファイルの説明によると、この設定はSolaris起動時にEEPROMの設定をオーバーライドする形になっているそうです。従って、EEPROMの設定が正しければ、こちらは必要ないです。(実際、このファイルのLAYOUTの行は、初期状態ではコメントアウトされています。)
EEPROMの設定方法はたぶん以下のとおりです。

#eeprom keyboard-layout=Japanese

こちらも、再起動後に設定が有効になります。
ちなみに、"keyboard-layout"の値の初期値は、"US-English"です。
さらに、このキーワード、x86版では、"kbd-type"のようです。(なぜ違うんだろう。)

当たり前ですが、この設定を間違ってしまうと大変なことになります。一度、EEPROMの設定に、x86版で使えるとどこかに書いてあった、"Japanese(106)"という値を設定したところ、セミコロンやクォーテーションのキーがウムラルトなどの特殊文字になる謎の配列になってしまいました。元の値に戻そうにも、イコールの入力方法がわからず、とても苦労しました。どこの国の配列だったのだろう?

2009年3月12日木曜日

Solaris10のIPMP

デフォルト・ゲートウェイとつながっていないネットワーク・インタフェースにIPMPを設定すると、うまくフェールオーバしてくれませんでした。/etc/hostname...のファイルに昔から使っている設定を書いていたのですが、うまく行きません。よくよく考えると、疎通確認先のIPアドレスが設定されていないので、それが原因のようです。今まで、デフォルト・ゲートウェイとつながっているネットワークにしか設定した覚えがないので、何かが足りないのだと思います。

で、正しい設定方法を探していたら、そもそも、Solaris10では、検査用IPや疎通確認先などは不要になっている、との情報を見つけました。
(参考:http://spacesheriffsharivan.blog9.fc2.com/blog-entry-79.html#more

おおざっぱに言って、この3つの設定でよかったです。
/etc/hosts
192.168.0.100 HOSTNAME loghost

/etc/hostname.hme0
HOSTNAME netmask + broadcat + group GP-A up

/etc/hostname.hme1
group GP-A standby up

これで、hme0とhme1のインタフェースが、Active-Standbyで動作します。
さらに、hme1側の'standby'の記述を削除すると、Active-Activeで動作するらしい(送信側のみ)。
A-Aもとりあえずは動きましたが、対向のルータもそれなりの冗長構成を組んでいるので、何か微妙なことが起きそうで、遠慮しておきました。

しかし、よくよく見てみると、これって、IPアドレス1つだけで冗長構成を実現しているので、いわゆるIPマルチパスとは別物なんではないだろうか?ま、今回は結果的に冗長が取れれば良いのだけど。
これがリンク・アグリゲーションってやつなのかなぁ?また勉強しておきます。

rootでいろいろできるようにする

Solaris10は、デフォルトではrootユーザでtelnet・FTPができないので、できるように設定変更が必要。

1.telnet(参考:http://okdmnsk.blogspot.com/2007/06/solaris10roottelnet.html
/etc/default/login を開く

CONSOLの設定をコメントアウトする
#CONSOLE=/dev/console

ファイルを書き込むと有効になります。

2.FTP(参考:http://workup.blog25.fc2.com/blog-category-10.html
FTPのログインを禁止しているユーザの一覧があるので、そこからrootを外せばOK
/etc/ftpd/ftpdusers を開く

ユーザ名が並んでいるうちのrootを削除(コメントアウト)する
#root

ファイルを書き込むと有効になります。
これでログインできない場合は、/etc/ftpdusers というファイルにも同様の記述がないか確認して、修正する。

ルーティング情報の追加

ルーティング情報を、再起動されても残るように設定する方法は、Solaris10から変わっています。
以前は、initのスクリプトを使って、1つ1つコマンドで追加を行っていました。
(参考:http://sunsabc.its-abc.net/modules/xfsection/article.php?articleid=22

/usr/sbin/route -p add net 192.168.150 192.168.100.2

オプションに-pを付けることで、設定した内容が「どこかに」残るそうです。
しかし、この場合の「どこか」って、どこなんだろう?

2009年3月11日水曜日

「起動」メニューが表示されない!

VMware上のSolaris10で、画面の解像度を何度か変更していたら、突然タスクバーの「起動」メニュー(オレンジ色のボタン)が消えました。どうするんだよ!
Windowsみたいに、Windowsキーを押しても出てきませんし、タスクバーを右クリックしても何も出ません。タスクバーを移動することもできなくなったので、解像度を大きくすると、タスクバーが宙に浮いて、著しく不格好です。
何より困るのは、この環境からログアウトできないこと。マシンの電源断(init 5)や再起動(init 6)はターミナルから可能ですが、そういう手荒な方法ではなく、ログイン画面に戻りたいのです。
現象自体は、Sunのホームページに書いてありました。
http://docs.sun.com/source/820-2811/chapter3.html
「Sun Java Desktop Systems で「起動」メニューのエントリが表示されない」
どうも既知の問題らしく、パッチが出ているようです。
現在調査中。

3/12
追記その1
しかし、上記のSunのページの説明、おかしすぎます。
-----
問題: Sun Java Desktop Systems で統合モードを有効に設定したとき、SGD の「起動」メニューエントリが作成されません。「起動」メニューエントリは、デスクトップからログアウトしてから再度ログインすると追加されます。

原因: GNOME パネルの既知の問題です。

解決策: 次のパッチをインストールします。

  • 119906 - SPARC テクノロジプラットフォームの Solaris OS の場合

  • 119907 - x86 プラットフォームの Solaris OS の場合

解決方法は、デスクトップからログアウトしてから再度ログインすることです。

-----
「起動」メニューがなくなったら、どうやってデスクトップからログアウトするんだよ!


追記その2
同じようなことをやっている人のブログを発見して、ちょっと和みました。
http://straycats.blog.so-net.ne.jp/archive/c5376526-1
しかし、こちらによると、上記のパッチが含まれている「
Solaris 10 OS update 5」を「Solaris 10 5/08」のことらしい。
今日はまだVMに火を入れていないので未確認だけど、自分のSolaris10は確か5/08になっていたなぁ。じゃ、この問題じゃないのかー。調査行き詰まったな。

追記その3
ログアウトする方法は見つかりました。別エントリに書きました。
http://kokomade-deteru.blogspot.com/2009/03/sun-java-desktop-systems.html
この問題を起こしてから、試してみたところ、直後に開いたセッションでは、「他のパネルが既に開いています。終了します。」というメッセージが表示されて、タスクバーそのものが無くなってしまいました。仕方がないのでもう一回ログインし直すと、今度はうまく行きました。うーん、安定してくれるかなぁ?

2009年3月10日火曜日

DNSクライアントを設定する

バーチャルサーバを作ったときは仕事用に限りなく近くしたので、hostsによる名前解決を選択しました。しかしそれではデスクトップ用として使うには厳しいので、DNSクライアントを設定することにしました。
1.nsswitch.confを設定する
/etc/nsswitch.conf を編集して、名前解決の方法を指定します。中身の仕様はいろいろありますが、標準でいろいろな指定方法のサンプルが/etcの下にありますからコピーするだけです。

(こんなサンプルがあります)
bash-3.00# ls nsswitch.*
nsswitch.conf nsswitch.files nsswitch.nis
nsswitch.dns nsswitch.ldap nsswitch.nisplus

(DNS用のファイルを、設定ファイルにコピーします)
bash-3.00#cp nsswitch.dns nsswitch.conf

2.resolv.confを設定する
DNSの参照先をこのファイルに設定します。こちらは、サンプルも何もなかったので作りました。

bash-3.00# cat resolv.conf
domain abc.defg.jp
nameserver 123.223.123.223

自分のドメインを指定する"domain"のところには、自分が使っているDNSの名前が"dns.abc.defg.jp"だったので、それをもとに設定しました。(DNSの名前は、既にDNSが使えている状態のWindows PCで、"nslookup"を実行すると、最初に表示されます。)でも、ほんとのところはどうやるのが正しいか知りません。指定しなくてもうまく行くのかな?
nameserverは、今回たまたま1台しかなかったのでそちらを指定していますが、複数ある場合は、1行に1つずつ、nameserverの指定を繰り返します(3台までできるようです)。

3.DNSクライアントのサービスを開始する
これ、Solaris10以外のOSの常識では理解しにくいのですが、svcで制御する常駐プロセスの中に、DNSクライアントというものがあり、こちらを起動しなくてはいけません。
対象のサービスの名前は、"/network/dns/client"です。

起動方法は、
svcadm enable /network/dns/client

です。成功とか失敗のメッセージは特に出ません。
ステータスの確認を行ってチェックします。

bash-3.00# svcs |grep dns
online 17:44:28 svc:/network/dns/client:default
bash-3.00#

こちらが、"online"になっていれば起動成功です。

digやnslookupコマンドで試すもよし、ブラウザをいきなり起動しても、ネットワーク設定がちゃんとできていれば恐らくうまく行きます。
(あ、わたくしはNATモードでネットワーク設定して、少し苦戦しました。そこはまた次回。)

Solaris10のVirtual Machine作成

Solaris10のサーバが手もとに欲しくなったので、VMwareでバーチャルサーバを作りました。
1.VMware Serverを入手してインストール
ここからユーザ登録してダウンロードできます。タダです。
http://www.vmware.com/jp/products/server/

2.Solaris10のDVDイメージを入手する
ここからユーザ登録してダウンロードできます。タダです。
http://jp.sun.com/practice/software/solaris/get.jsp
DVDイメージの、x86版をダウンロードします。これは、あとでバーチャルサーバの方から、DVDイメージ(.isoファイル)をDVDとして認識させて使います。なので、バーチャルサーバを作るPCでダウンロードして、DVDは焼く必要ありません。

3.VMwareから、DVDイメージが見えるようにする(データストアの作成)
VMwareを起動すると、実際にはブラウザが開いてログインを求められます。初期ID・パスワードなんて知らないのでたじろぎましたが、わたくしの環境では、通常パソコンにログインする時のID・パスワードでログインできました。なんだか、ハッキングされているようでやな感じですが、こんなものなのか。
バーチャルサーバを作りたい気分になりますが、その前にこの作業をやっておかないと、バーチャルサーバを作るウィザードで、先に進めなくなります。
データストアの作成を選んで、先ほどダウンロードしたDVDイメージが入っているフォルダを登録します。もしくは、既に作成されているデフォルトのデータストア(C:\Virtual Machines)にDVDイメージの方を移動してもよいです。

4.バーチャルサーバを作成する
VMwareの画面からバーチャルサーバを作成します。基本的には、指示に従って作ればOKです。仮想ディスクのサイズを聞かれるので、自分は8GB割り当てました。Solaris10のフルインストールにはこれで十分でした。オプションとして、「仮想ディスクの容量をあらかじめ確保する」というのがあるのですが、これは別に選択しなくてもよいと思います。バックアップとかやりにくくなります。
あと、光学ドライブの設定のところで、先ほどデータストアに登録した、DVDイメージの.isoファイルを指定して、「起動時に有効にする」にします。

5.Solaris10のインストール
作成したバーチャルサーバの電源を入れる(もちろん仮想的にですが)と、DVDイメージからSolaris10のインストーラが立ち上がってきます。1箇所だけ苦労した点がありまして、インストーラをデフォルトのGUIモードではなく、コンソールモードで起動しないと途中で反応しなくなります。これは、途中でいろいろ選択肢を聞かれる中で出てきます。
自分の場合は、デスクトップや、その他オプションも含めてフルにインストールしました。インストール完了時の、仮想ディスクのファイルサイズが約4.9GBになりました。

6.完成!
インストールにはかなり時間がかかります(2・3時間かな)が、あまり難しいことはなく完了しました。
VMwareの画面上で、バーチャルサーバに電源を入れて、コンソールのタブに移動します。以前のバージョンだと、このUI全体が専用のアプリで、コンソールのタブにバーチャルサーバの画面が出たのですが、今回のはブラウザなので、コンソールの画面はさすがに出ません。黒い画面をクリックすると、ブラウザのプラグインとして、コンソールを表示するアプリケーションをインストールさせられて、そちらのウィンドウに画面が出力されました。
おなじみのSolaris10のデスクトップ画面が自分のPC上に表示されて、なかなか感動です。最近自分は、SunFire T2000を使っていますが、デスクトップ関係のレスポンスに関しては、そちらのコンソール画面を使っているのとあまり変わらない気がします。FireFoxのブラウザの反応は、ホストOSであるWindows上で使っているのより速い気がするのですが、やはりSolaris10の方がシンプルにできていて、仮想化のできも良いからでしょうか...。
ネットワーク関係の設定については、また気が向いたら書いてみます。
これからは、Solaris10が指に貼り付くほどなじむまで、日常的に使っていきたいと思います。

動画のアスペクト比

動画のアスペクト比(縦横比)にはいつも悩まされます。
16:9の動画なのに4:3になって縦に引き延ばされていることが多いです。
本当のところ、何がどこにセットされているのかはよくわからないのですが...
・mpeg2(.mpg)の動画のアスペクト比を変更する。
ReAspectというアプリケーションで強引に書き換えました。
http://yakki-.hp.infoseek.co.jp/delphi/reaspect/reaspect.htm

・WindowsMedia(.wmv)の動画のアスペクト比を変更する。
ムービーメーカーの環境設定で、出力したいアスペクト比を選択しておく
アスペクト比を変更したい動画ファイルを読み込んで、適当に編集する
ムービーファイルを書き出す
(そもそも、ムービーメーカーで16:9のビデオカメラの動画を取り込むと、出力ファイルが4:3になっていました。上記の方法で編集してから書き出すと、16:9の動画ファイルが出力されました。なぜなんだろう。)

はじめに

家ではWindowsとUbuntu、仕事ではSolarisなどなどを使っています。
一度やった作業などで、「確かやったはずで、ここまで出てるのに思い出せない~」というのを解消するためにブログに記録することにしました。
内容の正確性については一切保証できませんが、他の方のお役に立つと嬉しいです。
コメントもいただけると励みになります。リンクとかは、断りなくじゃんじゃん張って下さい。