GOL @Wiki

Tips for OpenSolaris

最終更新:

divadiva

- view
管理者のみ編集可


OpenSolarisを便利に使うための設定の備忘録。普通のUNIX/Solarisでも使えるかも。



inetmenuなどでDHCPを使うときの注意点

WiFiを使用したWireless環境の設定にも書いていますが、NW環境を切り替えるツールであるinetmenuはちょっとめんどうな「くせ」があります。
いちばんうっとうしいのは、手書きのNW設定ファイルを許してくれないことです。たとえば、/etc/hostname.<インタフェース名> などのファイルが/etcに存在するとその時点で「そのファイル消せや、ゴラァ!」と怒られ、動作を拒否しやがります!

なぜその動きがうっとうしいのか。

仮にNWインタフェース名がiprb0である場合、通常、ローカルマシン名を /etc/hostname.iprb0 に記述し、/etc/hosts にIPアドレスの対応を記述します。しかしinetmenuを日常的に使用する方の場合、これらはまったく機能しません。なぜなら、/etc/hostname.iprb0 が存在するだけでinetmenuは動作拒否しますし、/etc/hosts もファイル毎全て書き換えられてしまうからです。

さて、inetmenuを使っていて、かつDHCPを利用する場合、マシン名が unknown になってしまう場合があります。Solarisは /sbin/dhcpinfo Hostname でホスト名をゲットしようとしますが、DHCPサーバがこれに対応していない場合、ホスト名が取得できなくなってしまいます。ではマシン名はどこに設定するのか。そう、/etc/nodename しかありません。そしてここからが面白いのですが・・・。

問題は、/etc/nodename でマシン名を設定してしまうのはいいとしても、IPアドレスとの関連情報が、/etc/hosts(実際には /etc/inet/hosts)と /etc/inet/ipnodes に設定されないという事態があることです。/etc/inet/hosts と /etc/inet/ipnodes を覗いてみると、
 <DHCPサーバからもらったIPアドレス> <nodename>.<インタフェース名>
しか書き込まれていません。

通常はこれでも何も問題ありません。が・・・。

私はGlassFishをApp Serverとして利用していろいろお勉強(遊んで)いるのですが、マシン名にIPアドレスが割り当てられていないため、GlassFishの起動スクリプト実行時に、結果的にホテルのサーバのIPアドレスにソケット接続しにいってしまうのです。で、起動スクリプトはマシンに接続できないとか言い出して起動に失敗すると。。

というわけで、<nodename>にも<nodename>.<インタフェース名>と同じIPアドレスを割り当ててもらうために、inetmenuを少しいじります。
実際にDHCPクライアント設定時に /etc/inet/hosts や /etc/inet/ipnodes にアドレスを書き込むのは、/etc/inet/eventhook です。なのでコイツを改造します。
(/etc/inet/eventhook 100行目あたり)
       #
       # Set up a hosts entry for the DHCP'ed address if we can.
       #
       ADDRESS=$(dhcpinfo Yiaddr)
       if [[ -n "$ADDRESS" ]]; then
               HOSTNAME=$(dhcpinfo Hostname)
               NODENAME=$(uname -n)
               aliases="$HOSTNAME"
               if [[ -n "$NODENAME" ]]; then
                       if [[ -n "$aliases" ]]; then
                               aliases="${aliases} ${NODENAME}-$1"
                       else
                               aliases="${NODENAME}-$1"
                       fi
               fi
               if [[ -n "$aliases" ]]; then
                       echo "${ADDRESS} ${aliases}   {eventhook_comment}" \
                                               >> /etc/inet/hosts
                       if [ -n "`diff /etc/inet/hosts /etc/inet/ipnodes 2>/dev/null`" -a -f /etc/inet/ipnodes ]; then
                               echo "${ADDRESS} ${aliases} ${eventhook_comment}" >> /etc/inet/ipnodes
                       fi
               fi
具体的には /etc/inet/eventhook の上記部分でIPアドレスの設定をしているわけですが、ごらんの通り、dhcpinfo Hostname で HOSTNAME を設定しようとしています。ところが上述のようにこれは失敗することがあり、その場合、ホスト名(今回は/etc/nodename)にはIPアドレスが設定されないのです。
ですので、上記のスクリプトを下記のようにいじります。
       if [[ -n "$ADDRESS" ]]; then
               HOSTNAME=$(dhcpinfo Hostname)
               HOSTNAME=$(uname -n)     *** この行を追加 ***
               NODENAME=$(uname -n)
               aliases="$HOSTNAME"
uname -n で /etc/nodename が返ってきますので、これで、aliases="$HOSTNAME" で aliases に /etc/nodename が設定され、aliases="${aliases} ${NODENAME}-$1" の行が呼ばれ、結果的に、/etc/inet/hosts と /etc/inet/ipnodes には、
<IPアドレス> <nodename> <nodename>.<NWインタフェース名>
が書き込まれ、一件落着となるのでした。おしまい。


JDS(Java Desktop System)起動直後にパネルが開かない

何らかの理由で(前回のセッションが正常に終了できなかった、など)、GNOME起動時に下記のようなエラーが発生することがあります。

I've detected a panel already running, and will now exit.
(他のパネルがすでに起動しています。終了します。)

この問題の対処ですが、下記2つを試してください。
> pkill -KILL gnome-panel
これで、立ち上がったままのプロセスを殺すことができます。

あるいは、
> gnome-panel &
これで、画面最下部に表示されるツールバーが起動できます。あとは通常使用できるようになると思います。(はず・・・)



M+IPAフォント(フリーで配布されているフォント)を導入する

M+ (エムプラス)というフリーで高品質な日本語フォントがあります。ですがまだ漢字のフォントができていません。そこで、同様にIPAからフリーで配布されているIPAフォントと合成して、これまたフリーで配布されている「M+IPA」フォントというものをSolarisにインストールします。
インストールは超簡単です。

  • 手順
  1. M+ + IPAフォントをこのサイトからダウンロードする(TrueType)。
  2. ダウンロードしたファイルを適当なところに解凍・展開する。
  3. TrueTypeフォント「*.ttf」ファイルを、~/.fonts ディレクトリにコピーする。
  4. fc-cache ~/.fonts コマンドを実行する。

これだけ!

ちなみに、上記手順はユーザ毎にフォント設定する場合です。
コンピュータを使用している全てのユーザに対して設定する場合は少し作業が異なってきますが、いずれにせよ、ここに登録操作マニュアルがありますので、その通り操作すればOKです。


x86 SolarisでnVIDIA GeForceシリーズドライバを使う



キーボードの割り当て OpenSolaris 2008.05版

最近デビューしたOpenSolaris 2008.05ですが。
ネットで探ってみると、いろいろやり方があがっております。xorgcfgを使うやり方はこんな感じらしく、はっきり言って複雑。
私は簡単にいきました。以前から使っていた.Xmodmapをホームディレクトリに置いて、.bashrc に、xmodmap ~/.Xmodmap と記述。

ところがこれだと反映されないのです。.profile じゃないとだめらしく。なので、ln -s .bashrc .profile でリンクを作って完了。問題無しです。

(追記 2008/08/23)
問題無しと書きましたが、問題ありでした。知らない間に設定が元に戻ったりします。やはりコンソール用の設定ファイルに書くのはよろしくないですね。てことで、[システム]-[設定]-[セッション]の起動時実行プログラムのところで設定してみたりしたのですが、いまいちうまくいかず。
結局、.xprofileに xmodmap ~/.Xmodmap を記述して、とりあえず解決っぽい。

キーボードの割り当て 通常版

キーの割り当てというとxmodmapの使用がありますが、j106の設定や、CapsLock、Ctrlなど、基本的な設定については専用ツールで行います。

OpenSolarisをインストールするとGNOMEデスクトップも使用可能となります。いくつかのアプリケーションや管理ツールもデフォルトで付属しており、キーボード設定ツールもあります。しかしその設定ツールで日本語キーボードの設定をしても反映されない場合があります。こういった場合、別途コマンドラインツールなどで設定をします。

キーボードの設定をする場合、2種類のツールが存在しており、使用中のXサーバによって使い分けます。使用しているXサーバがXsunの場合は /usr/sbin/kdmconfig を使用します。一方、Xorgを使用している場合は /usr/X11/bin/xorgcfg or /usr/X11/bin/xorgconfig を使用します。

私の場合は Xorg を使用しているので、xorgcfg か xorgconfig を使用すればいいのですが、やはりGUIの方が設定しやすいので、一度Xを終了してコマンドラインモードでシステムにログインし、xorgcfg を起動し、日本語キーボードの使用と、CapsLockとCtrlのスワップを、GUIから設定しました。

ちなみに自分の使用しているXサーバの種類がわからない場合は、とりあえずkdmconfigを起動してみましょう(Xの中で起動可能)。Xsunを使用している場合はそのまま設定に進めますが、Xorgの場合は、別のツールを使用しての設定インストラクションが表示されます。


キーボードの割り当て レガシー版

日本語キーボードj106を使う場合、ほとんどの人が下記の設定変更を行うだろう。
  1. CapsLockとCtrlの入れ替え
  2. 半角/全角キーにEscを割り当て
これを行う場合、下記のようにする。

まず $HOME/.Xmodmap ファイルを作成する。

 # change CapsLock and Ctrl
 remove Lock = Caps_Lock
 remove Control = Control_L
 keysym Control = Caps_Lock
 keysym Caps_Lock = Control_L
 add Lock = Caps_Lock
 add Control = Control_L
 # add new function
 keycode 9 = Zenkaku_Hankaku
 keycode 49 = Escap

次に、$HOME/.dtprofile に下記を追加する。

 xmodmap .Xmodmap

これでOK!


gccの環境設定

OpenSolaris 2008.05導入にあたって各種環境を整備しなおしているのですが、Sunfreeware.comからgccのバイナリを落としてきてインストールし、何かをコンパイル&リンクしようとしたところ、下記のようなエラーが発生しました。

ld: fatal: file values-Xa.o: cannot open file: No such file or directory
ld: fatal: File processing errors. No output written to a.out

リンカなどのツール類は/usr/ccs/binにちゃんと入っているしなぁ、、と思っていたのですが、これはSUNWarcパッケージを導入すれば解決されます。OpenSolaris 2008.05の場合はPackage Managerを使用してインストールすればOKです。

この問題についてはSunfreeware.comのFAQのQ.5にも記載してあります。もしかしたらSUNWarcを入れても解決しない方は、このFAQに書いてあるパッケージがインストール済みかチェックして下さい。


ネットワーク自動設定

新しいOpenSolarisなど、新世代Solarisは、ネットワークの自動設定ツールがとても進化しています。Network Auto-Magicというサービスなのですが、ノートPCなどで有線LANを使用している時に、別の部屋に移動して、LANケーブルにつなぎ変えたりした場合に、一時的なネットワーク断を検知したサービスが無線につなぎたがる場合があります。この場合、下記のコマンドでサービスをリスタートすれば、再びデフォルトの有線LANに接続してくれます。

svcadm restart /network/physical:nwam


OSアップデート

OpenSolarisではかなり簡単にOSのアップデートが可能です。下記は、OpenSolaris 2008.05から2008.11にアップデートした際の例です。
 # pkg image-update
このコマンドで、ネットワークからパッケージをダウンロードしてきます。ギガバイト単位ですので、かなり時間がかかります。しばらくマシンを放置しておきましょう。
この後、ブートローダの設定をします。まずは現在の状態を見てみます。
# beadm list

BE            Active Active on Mountpoint Space 
Name                 reboot               Used 
----          ------ --------- ---------- -----
opensolaris   yes    no        legacy     7.67M
opensolaris-1 no     yes       -          4.36G
さらに下記のコマンドを実行します。
# pfexec mount -F zfs rpool/ROOT/opensolaris-1 /mnt
# pfexec /mnt/boot/solaris/bin/update_grub -R /mnt
Creating GRUB menu in /mnt
Installing grub on /dev/rdsk/c4d0s0
stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 267 sectors starting at 50 (abs 16115)
# 
# reboot 
これで立ち上がってきたgrubメニューで新しいイメージが選択可能になっているはずです。たとえばメニューには「Solaris 2008.11 snv_101b_RC2」などという選択項目が追加されています。


/usr/ucb/installがない!

ソフトウェアのコンパイル時に、まれに、/usr/ucb/installを思いっきりご指名されることがあります。この場合は、/usr/bin/ginstallへのソフトリンクを/usr/ucbに作って解決しましょう。オプションなどの関係で一番フィットするらしいです。
記事メニュー
目安箱バナー