[Sol2] Solaris 2と戦う

Solaris 2.xに関する情報を集めています。

「ディスプレイとキーボードを繋げずに使う」の節に、DOSで使える端末ソフトウェアの項目を追加 (2000/10/30)
同じく「ディスプレイとキーボードを…」の節にkbd(1)について補足 (2000/10/30)

関連して、Solaris 2でプリンタを利用する方法について、およびNISの設定と Solaris 2.5.1→2.6へのアップグレードについて、それぞれ別のページで説明しています。(Solaris 2.5.1→2.6へのアップグレードに関しては、もともとこのページにあった情報を引っ越したものです。)

[go!] みんなでプリンタを使おう (Solaris編)
[go!] Solarisで使うNISのはなし
[go!] Solaris 2.5.1→2.6へのアップグレード

日経BP, Find'X(コンピュータ・通信分野の専門検索サイト)に「厳選お薦めサイト」として登録されました。

あなたはだいたい ???人目のお客様です。(1997年3月1日以降)


[Goodies] Solaris2のいいところ

Solaris2のいいところ、気に入っているところは、例えば次のようなことです。

他にもいろいろ挙げられます。Solaris 2 FAQにも述べられているのでご覧下さい。

-> Solaris 2 FAQ Question 1.13) ある人々がSolaris2を好むのはなぜですか?
(Solaris 2 FAQ)

これを挙げるなら、こっちも挙げないと不公平ですね :-P

-> Solaris 2 FAQ Question 1.12) ある人々がSolaris2を好まないのはなぜですか?
(Solaris 2 FAQ)


[Patch] パッチを当てよう!!

Solaris 2.xはOSにパッチを当てて、バグを回避したりセキュリティホールを塞いだりすることが簡単にできます。中には怖いバグやセキュリティホールもあるので、守るべき資源を持っている方、古いバージョンのSolarisを使い続けていらっしゃる方は、一度はパッチ情報に目を通すことをお勧めします。

* 単語を覚えよう!

vulnerable
傷つきやすい、攻撃を受けやすい、弱味がある、などの意。

* これを読もう!

セキュリティに関するたくさんの情報にアクセスできます。守るべき資源のある方は、目を通すことをお勧めします。

* ここでパッチを探そう!

当てた方がよいと思われるパッチは"Recommended Patch"としてまとめられていますので、簡単に見つかります。でもファイルサイズが大きいので、ダウンロードにもパッチを当てるのにも時間がかかると思います。パッチを当てるのには、マシンにもよるでしょうがおそらく数時間かかります。覚悟しましょう :-)

* あれ、どのパッチを当てたっけ?

どのパッチを当てたかは、showrev -pというコマンドで分かります。同じパッチを2度当てようとすると「もうパッチが当たってる」と文句を言われますが、動作に支障はありません。

* パッチを当てた後に

/etc/mail/sendmail.cfがパッチを当てる前後で入れ替わっていることがあります。まったく余計なことしてくれるよ…。もしメール関連の設定をしている場合、これを元に戻すのを忘れると、メールがうまく投げられないことがあります。筆者自身、よく戻し忘れます。まぁパッチなんてしょっちゅう当てるわけじゃないですからねぇ。

元の設定ファイルは/etc/mail/sendmail.cf.oldという名前で残っているはずですので、まず中身を確かめた上で、これを /etc/mail/sendmail.cfに上書きし、sendmailを再起動します。

* 補遺: ディスクの空き容量について

普通にパッチを当てると、/var/sadm/patch/以下にデータが保存されます。これはパッチを当てたために何か問題が起きた場合に、パッチを当てる前の状態に戻すことができるようにしているのです。

こまめにパッチを当てていると、/var/sadm/patch/の入っているディスクにパッチ情報がたくさん保存されるので、このディスク容量が不足する場合があります。そしてここがいっぱいになると、いろいろと問題が発生します。たとえば印刷スプーラは/var/に一時ファイルを保存するので、ディスク容量が不足すると印刷に支障を来すことがあります。注意して下さい。


[X11] X11R6.3のインストール

研究室の中には、CDE(共通デスクトップ環境)やOpenWindowsに馴染めないので生のX11を使いたいという人もいます。そのためSolaris2マシンにX11R6.3をインストールしましたので、その方法を説明します。なに、簡単です。

まだ中途半端で、ちょっといい加減なところもあります :-P

* 前提

* 下準備、ここに注意

  1. ソースコードの展開からスーパーユーザ(root)の権限で 行った方が、ファイルモードの変更などで文句を言われないので何か と都合が良い。
  2. xc/config/cf/site.defをコンパイルして次の2点を書き 換える。
  3. /usr/ccs/bin/make が"-wオプションが無い"と言って動かなかったの で、GNU makeを利用してコンパイルした。このために xc/config/cf/svr4.cfを書き換えた。
  4. imakeをコンパイルするときは、site.defを書き換 えてもgccではなくccを使おうとしてエラーになる。makeの引数で MFLAGS="CC=gcc"とやるとコンパイルできるようなのだが、 この方法では他のコマンドやライブラリをコンパイルするときに 問題が起きるかもしれないと思って踏み切れなかった。
    結局imakeのあるディレクトリに入って、Makefile.ini を直接書き換えた。

* コンパイルとインストール

スーパーユーザになって、以下のコマンドを実行します。

# make World >& world.log
# make install >& install.log
# make install.man >& man.log

繰り返しになりますが、ソースコードの展開からスーパーユーザになって行わないと、シェルスクリプト類、たとえばstartxxmkmfのインストールの時点でエラーになります。chmod -R で直してもいいのですが、まぁ最初からrootさんでやるのが簡単でしょう。

* CDEのdtloginの画面からX11を起動する

当研究室のSolaris2マシンにはCDEがインストールしてあり、私はCDEを使っています。そのためCDEのdtloginの画面からX11を起動したい場合もあります。 NetNewsで流れていた方法です。

  1. /usr/dt/config/%L/Xresources.d/ディレクトリ(%Lは ロケール名、たとえば"ja"など)に Xresources.??というファイルを置いておくと、dtlogin の"オプション"→"セッション"メニューにその内容が現れます。私の 場合はOpenWindows用の設定を元に、次のような内容のファイルを Xresources.xwという名前で置いてあります。
          !!  This file used by the Solaris Desktop Login manager
          
          Dtlogin*altDtsIncrement:  True
          
          Dtlogin*altDtName:        X Window System (X11R6.3)
          Dtlogin*altDtKey:         /usr/local/X11R6.3/bin/twm
          Dtlogin*altDtStart:       /usr/dt/config/Xsession.xw
          Dtlogin*altDtLogo:        X11
          
  2. 上記の設定にある/usr/dt/config/Xsession.xwX11というファイルを用意します。まずはじめの Xsession.xwの方は、同じディレクトリにあるXsession.owをコピーし て、中のメッセージらしい部分と、最後の行にある実行するシェルス クリプトの名前を自分の用意したシェルスクリプトに差し替えただけ のものです。
    (詳しくは書きません。)
  3. もう一つのX11のほうはdtloginの画面に表示されるアイコンです。… アイコンというには大きすぎるかな? 237x237ピクセルのxpmファイル で、/usr/dt/appconfig/icons/C/X11.pmという 名前で置いておきます。(もちろん"X11"の部分は任意)
    私は白バックに×印がついているだけの、味もソッケもないアイコン を使っています。(恥ずかしいので"見せろ"とは言わないで ^^;;)

自分で用意しなければならないものが多いので面倒だと思いますが、難しくは無いと思います。上に書いてある設定よりも、Xsession.xwの中から起動されるシェルスクリプトを書く作業の方がずっと面倒です。

私が使っているシェルスクリプトは、X11R6.3のxdmの設定ファイルを元に多少調整したものです。

-> シェルスクリプトの記述例

注意: Xサーバのバージョン

CDEのdtloginの画面からログインするということは、CDEのXサーバ、つまり OpenWindowsのXサーバを利用する、ということになります。Solaris 2.6以降のOpenWindowsはX11R6ベースですが、Solaris 2.5.1以前はX11R5ベースのサーバです。したがって、場合によってはバージョンの違いのために、動作しないプログラムがあるかもしれません。dtloginからの利用を考えている以上、この制限は避けられないので、お含みおき下さい。


[GS] GhostscriptとDisplay PostScriptフォント

Solaris 2.4以降のOpenWindowsはAdobe Display PostScriptを使っており、 Adobe純正のType1、Type3 PostScriptフォントが付属しています。このフォントをGhostscriptから使う方法を説明します。とても簡単です。

Ghostscriptのコンパイルとインストールの方法は Ghostscriptの使い方いろいろ のページに、関連情報を集めていますので参照して下さい。また、 GhostscriptでComputer Modern PostScriptフォントを使いたい方は GhostscriptでComputer Modern PostScriptフォントを使うを参照して下さい。

* コンパイルするときに

この設定は必須ではありません!! しかし、この設定をしてコンパイルした方があとあと楽です。(次節参照)

Solaris 2.6の場合、 Makefileを編集して、GS_LIB_DEFAULT/usr/openwin/lib/X11/fonts/Type1/outline:/usr/openwin/lib/X11/fonts/Type3 を追加してコンパイルします。こうしておくとあとあと楽です。

Solaris 2.5.1でも、たしかこの設定でよかったはずですが、記憶が曖昧です。私がSolaris 2.5.1用の設定をしたときには、Type1フォントのパスとして "/outline" をつけないパスを設定していたと記憶しています。 Solaris 2.6では "/outline" をつけたパスの方がよいと判断したのですが、理由は、このパスにCourier系フォントが、分かりやすい名前で置いてあるからです。Courier系フォントの利用法は、あとで説明します。

* 個人々々の設定

上記「コンパイルするときに」の設定をしなかったときは、この設定が必要です。

環境変数GS_LIBにDPSのフォントのあるディレクトリを指定します。

Bourne Shell系
GS_LIB=/usr/openwin/lib/X11/fonts/Type1:/usr/openwin/lib/X11/fonts/Type3
export GS_LIB
C Shell系
setenv GS_LIB /usr/openwin/lib/X11/fonts/Type1:/usr/openwin/lib/X11/fonts/Type3

* Fontmapの設定

Ghostscript 4.03付属のFontmap(たとえば /usr/local/share/ghostscript/4.03にあります)を、 Fontmap.Solと置き換えます。Ghostscript 5.x以上では、自動的にはインストールされないようですので、ソースコードのあるディレクトリからコピーして使ってください。

以上でOKです。お試し下さい。

補遺: Solaris 2.6の場合の追加

Solaris 2.5.1以前は、Courier系フォントが提供されていませんでしたが、 Solaris 2.6以降では提供されています。これを利用するように、Fontmapに追加の設定を行います。

Ghostscript付属のFontmap.Solでは、Courier系フォントを以下のように定義しています。

/Courier                        /NimbusMonL-Regu        ;
/Courier-Oblique                /NimbusMonL-ReguObli    ;
/Courier-Bold                   /NimbusMonL-Bold        ;
/Courier-BoldOblique            /NimbusMonL-BoldObli    ;

これを消すなりコメントアウトするなりして、以下の定義を追加します。

% Solaris 2.6 has Courier font and its variants
/Courier                        (Courier.pfa)                   ;
/Courier-Bold                   (Courier-Bold.pfa)              ;
/Courier-Oblique                (Courier-Oblique.pfa)           ;
/Courier-BoldOblique            (Courier-BoldOblique.pfa)       ;

カッコの中に書かれているのは、ファイル名です。".pfa"の拡張子を持つので、PS Type1 ASCIIフォーマットのファイルだと分かります。先ほど設定したGS_LIB_DEFAULTのパスに、上記のフォントファイルがあることを確認してください。

以上で設定終了です。どうぞお試し下さい。

* 参考

以上の情報は、実はFontmap.Solの中にコメントとして書いてあります。英語が苦にならない方は読んでみて下さい。

* おまけ: 日本語TrueTypeフォント

Solaris 2.6以降には、日本語TrueTypeフォントが付属します。 /usr/openwin/lib/locale/ja/X11/fonts/TT以下にあるので探してみてください。実際に使う方法は…、ちょっと待ってね。


[LANG] 困った! コンソールに文字化けメッセージ

日本語Solaris 2.5.1をインストールして使っていますが、このOSは標準の設定では、全体が日本語環境(LANG=ja)で動きます。そのためにコンソールでログインしているときも、表示できない日本語を表示しようとして、結果として謎のガミラス語が表示されてしまうのです。

システム全体が日本語環境で動いている、というのは結局どういうことかというと、実行されるプログラムの全てに環境変数LANG=jaが継承されているのです。

システム全体が日本語環境で動いていると、コンソールの文字が化けるのが欠点ですが、しかしこれはまだ対処のしようがあります。それにコンソールを使うのが人間ならば、人間は賢いのでガミラス語でもその意味を汲み取ることが出来ます :-) しかし、システムが日本語で動いていると、他にも弊害が出ます。

例えばWindowsやマックで動くGUIベースのFTPクライアントからSolarisマシンに繋ぐと、ものによっては動作しません。FTPの"ls"の出力が日本語になるためです。

システム全体を日本語環境で動かすのは、残念ながら時期尚早なようです。システム動作を変えてしまいましょう。

* システムの環境を変える

全てのプロセスに環境変数LANG=jaが継承される理由は、全てのプロセスの祖先である、プロセス番号1、initから継承されているからです。ですからinitの環境を変えればよいのです。

この方法は簡単です。/etc/default/initというファイルを編集して、LANG=jaという行を削るかコメントアウトし、システムを再起動して下さい。

* ログインシェルは日本語環境で動かしたいなぁ

システム環境は英語でも、ひとりひとりがログインしたときの環境は日本語のほうがよいと思われるのでしたら、そうすることも出来ます。

安易な解ですが、ログインシェルの環境を設定すればよいのです。利用者全員の環境を変えるには、全てのログインシェルが参照する設定ファイルを書き (変え)ます。そのファイルとは、

sh (Bourne Shell)の場合
/etc/profile
csh, tcshの場合
/etc/.login
zshの場合
/etc/zlogin

bashは知りません。マニュアルを読んで調べて下さい。

/etc/default/loginにLANG=jaと書いたら出来るんじゃないかと思って試しましたが、環境変数は設定されませんでした。残念。

もっと簡単には、各人で勝手に設定してもらいます。大学環境では留学生も来ますので、一括して日本語環境を押しつけるより、各人で設定した方が良い場合もありますよね。

* CDEは日本語環境で動かしたいなぁ

システム環境は英語でも、CDE(共通デスクトップ環境)の環境は日本語のほうがよいかもしれません。ログイン画面(デスクトップログイン)の画面の標準は日本語の方が、分かりやすいですよね。これを設定するのも簡単です。

  1. /usr/dt/config/Xconfigというファイルをじっと読む。 すべきことはそこに全て書かれています。
  2. 上記ファイルを/etc/dt/config/に複写。
  3. コピーしたファイルを編集して、"Dtlogin*language: ja" という行を 追加します。

以上です。どちらも簡単ですね。


[NoDisplay] ディスプレイとキーボードを繋げずに使う

ここまでは主に、Sunワークステーションにディスプレイとキーボードを接続して、デスクトップワークステーションとして利用する場合の話題でした。この節では視点を変え、ディスプレイやキーボードを接続せずに、主にネットワーク経由でのみ利用する方法を簡単に説明します。

WindowsやMacintoshに慣れていらっしゃる方は、ディスプレイやキーボードを繋がずに利用するというと、ちょっと不思議に思うかもしれません。しかし UNIXワークステーションでは、このような利用は、まったく珍しくありません。特にそのワークステーションを何らかのサーバとして用いる場合、このような方法で使われます。コンソールの利用を避けて負荷を押さえるためです。また、たくさんのディスプレイやキーボードを並べておく空間を確保するのが難しい場合も考えられます。

ちなみにPC UNIXでも、PCのBIOSにキーボードやディスプレイなしで起動できるような機能があれば、同様の使い方ができます。しかしここでは話をSunワークステーションに限定します。

* 私の場合はどうやっているか

私の所属する研究室では、ディスプレイとキーボードを接続していないSunワークステーションが2台あり、ネットワーク経由でのみ利用されています。

シリアルコンソールには古い一体型のPCを使っています。詳しくは下で述べます。

* シリアルコンソールとしてのPC・その問題点と解決策

ディスプレイとキーボードが繋がっていないSunワークステーションは、 シリアルポートAがコンソールになります。ここにシリアル端末を繋いで、コンソールとして利用します。

いまどきシリアル端末専用機を手に入れるのは難しいでしょう。私の研究室では、シリアル端末のかわりにPC(Windows95マシン)を繋いでいます。PCとワークステーションのシリアルポートをクロスケーブルで接続します。端末エミュレータ・ソフトウェアとしては、Telnetクライアントでもある Tera Termが機能、操作性ともに非常に優れており、お勧めです。シリアルポートの設定は次のようにしています。

ポイントは通信速度で、これを正しく設定すればたいていは大丈夫です。なおこの通信速度は、OpenBootの設定で変更可能です。

DOSで使える端末ソフトウェア

Windows 95以上なら上に書いたTera TermでOKですが、DOSを使いたい場合や、フロッピーディスクだけでハードディスクの無い端末を作りたい場合には、 MS-DOS Kermitが使えます。小さなプログラムですのでフロッピーディスク1枚に入り、また設定なども簡単です。

当研究室は最近(2000年10月末)、ある事情から以前のWindows端末をやめて古い一体型PCをシリアルコンソールにしました。英語版のDOSとkermitを入れたフロッピー1枚でPCをコンソールとして利用でき、性能や使い勝手にも満足しています。ただし日本語は表示できません。 (DOS/Vだったらできるかな? あ、でも漢字コードが違うから…。)

PC端末の問題点・電源断の際にBREAK送信

PCをシリアル端末に使うと、そのPCの電源を落とすたびに、シリアルの先に繋がっているワークステーションのOSがいっしょに落ちる、という深刻な問題が起こる場合があります。PCの電源が落ちた場合に、シリアルラインにBREAK信号を送るので、OSがそれを関知して落ちるのです。ちょうど、キーボードから L1(Stop)+Aを入力してOSを落とすのと同じ方法です。

繋ぎっぱなしで電源を切らないシリアル端末なら、これでもいいのだと思いますが、PCは電源を落として帰りたいので、OSをいじって、BREAK信号をコンソールに送出しても落ちないようにします。

参考: UNIX SysAdm Resources: FAQs, Patches and Other info [Sun]

方法その1: kbdコマンド

さてその方法ですが、 Solaris 2.6以降であればkbd(1)コマンドを使います。具体的には、 /etc/default/kbdを編集して、 KEYBOARD_ABORT=disableにします。その後kbd -iというコマンドを実行します。上のファイルを書き換えておけば、再起動した後もBREAKを無視する設定は有効です。

(筆者はこの方法をまだ試していません。調査中。)

方法その2: stop-a.pl

カーネルメモリ内のテーブルを直接いじって、設定を変えます。Jason Wessel氏がstop-a.pl というプログラム(Perlスクリプト)を作成・公開していましたので、それを使うとよいでしょう。詳しくはWessel氏のページで解説されています。

(2000/10/30) Jason Wessel氏のページへのリンクが切れているようです。上のkbd(1)を使う方法でうまく行けば問題ないので、この件はこれ以上追求しません。

シリアル端末の種類を設定する

/etc/inittabというファイルに、コンソールの端末の種類を設定する部分があります。その最後のあたりに、次のような行があるでしょう。

co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat

ちと長いですが、ここで"-T sun"の部分で、端末の種類を決めています。標準はキーボードとディスプレイが繋がっている場合の"sun"ですが、シリアル端末の場合は、繋がっている端末に対応する名前を指定します。たとえばTera Termの場合は、DEC VT100端末互換の端末エミュレータなので "vt100"などと指定すればよいでしょう。詳しくはttymon(1M)のマニュアルなどをご覧下さい。

補遺: UNIXと端末

ちょっと脱線して、「端末」とその種類について述べます。UNIXはマルチユーザー・マルチタスクのOSですが、この"マルチユーザー"、つまり複数の人が同時に1台のマシンを使うためには、そのマシンに複数の人がログインできるような仕組みが必要です。

UNIXは、Ethernetなどのネットワークはまだ無い時代から、複数の利用者がログインして利用する状況を想定して作られ、そして利用されてきました。当時はどうやってログインしたかというと、簡単に言えば一つのマシンにたくさんのキーボードとディスプレイを繋げて使いました。このキーボードとディスプレイの組合わせが"端末"(terminal)です。端末はRS232Cに代表されるシリアルポートを介して接続するのが普通でした。最小で2本の電線を引けば、接続することができたからです。UNIXが動いている計算機から、たくさんの線が伸びていて、その端に端末が繋がっていたわけです。なるほどだから"端末"と呼ぶわけですね。

ひとくちに"端末"と言ってもいろいろな種類があります。もっとも初期の頃は、ディスプレイはなく、そのかわりにプリンタが繋がった"テレタイプ端末"が普通だったそうです。ディスプレイに表示するかわりにすべての情報が紙(連続紙)に印刷されるわけです。私はこれを見たことはありますが、幸運にも使ったことがありません。その後、多くの会社からいろいろな種類(形式)のシリアル端末が売り出されました。その代表格がDEC VT100端末とTektronix端末です。私は前者の本物は見たことがありませんが、その後継機とTektronix端末は見たことがあります。

さらに時代が下ると、パソコンのシリアルポートをUNIXマシンに繋ぎ、kermit などの"端末エミュレータ・ソフトウェア"、つまり端末のふりをするソフトウェアを使ってログインする方法が、よく使われるようになります。私が実際に本格的に使ったことがあるのは、このあたりからです。1990年代前半は、ワークステーションの世界ではすでにEthernetが一般的になっていましたが、パソコン用のEthernetインターフェイスカードは10万円台とまだ高価だったので、シリアルポートを介してログインする端末エミュレータが重宝したのです。 PC-9801シリーズの定番は"hterm", "eterm"などでした。(あぁ懐かしい。)

UNIXでは、これら多種多様な端末を繋いで、ひととおり使えるようにするため、たくさんの端末のデータベースを持っています。端末を操作するプログラム、たとえばスクリーンエディタなどは、このデータベースを調べ、データにしたがって動作するように設計されています。

ちょっと話が長くなりましたが、そういうわけでUNIXは伝統的にシリアルポートの扱いと、端末の扱いが得意です。また、キーボードやディスプレイを外して、シリアル端末だけを繋いだワークステーションを利用することは、UNIXの伝統から考えても珍しいことではないと分かります。

"X端末"など、ネットワーク時代の端末についての解説は、この節の話題から逸れるのでやめておきます。ご容赦下さい。

* dtloginの停止

dtloginは、X Display Managerの一種で、CDEのログイン画面を司るプログラムです。ですから、コンソール(シリアルコンソールではなく、ディスプレイとキーボードをつなげた状態でのコンソール)からCDEのログイン画面を利用してログインする場合、または、X端末やX窓ソフトウェアを使っていて、XDMCP を用いて当該マシンにログインしたい場合には、dtloginを使います。ディスプレイとキーボードを繋がないで使い、またXDMCPも使わないのであれば、おそらくdtloginを動かす必要はないでしょう。

さてdtloginを使わないことに決めたら、まず、いま動いているdtloginを停止させます。

# /etc/init.d/dtlogin stop

その上で、以下の3つのファイルを削除します。今後dtloginを使わないようにするためです。(いつでも復活させることができますから、安心して消してください。)

/etc/rc0.d/K10dtlogin
/etc/rc1.d/K10dtlogin
/etc/rc2.d/S99dtlogin

dtloginを復活させたい場合には、/etc/init.d/dtloginを、上で削除した3つのファイルにリンクさせます。(だから /etc/init.d/dtloginは、消さずに残しておきます。)

さて、ここまでに述べた3つの作業、つまり(1)キーボードとディスプレイをはずし、(2)シリアル端末をつなげ、(3)必要に応じてdtloginを止めれば、これでもう後は特にすることはありません。Telnetなりrloginなりで、ネットワークを経由してログインし、普通に使ってください。


[Refs] 参考にしよう!!

「みんなでプリンタを使おう (BSD編)」のページの 参考にしよう!!との重複があります。

* Sun Microsystems関連のページ

* その他、参考になるもの

UNIX MAGAZINEは(だまされたと思って?)目を通しておくことをお勧めします。何かアスキーの本ばっかりになったけど、別にアスキーの回しもんじゃないよ。


<- トップページ
工学院大学機械工学科流体研

リンクはご自由に。でもメールをくれると嬉しいな。

金野 祥久  konno@researchers.jp

Last modified: Mon Oct 30 17:43:05 JST 2000