Subject: Re: Help! fj.sys.sun-FAQ update (Re: [Q] gcc option)
From: [email-masked] (SANO Fumihiko)
Date: 22 Aug 1996 22:58:30 GMT
Newsgroups: fj.sys.sun

佐野＠九大です。

記事が届くまでに1週間近くかかっている...。

In article <[email-masked]>
    [email-masked] (Takuya ASADA) writes:

あさださん>
> …というのはまぁ冗談として、いいかげん化石になってしまった
> fj.sys.sun の FAQ LIST を、更新しなければと常々思っているの
> ですが、なかなか時間が取れませんです。

そうですね。いわれてみると、fj.sys.sunのFAQも二年近く更新されて
いないことになりますね。

> 興味とガッツ、ちょっとした時間のある方は、ゼヒとも協力して
> 頂けませんでしょうか？

興味はあるけど、ぜんぜん時間がないのが難です。万人に役立つFAQをま
とめてくれることを他力本願に望んでいるのですが...。
多少は貢献してみようということで、とりあえず、Solaris2.5導入から
の半年間で fj.sys.sunで二回以上見かけた覚えがあり、かつ興味があっ
たもの、プラス研究室内で聞かれたことのあるものを記憶に基づいてダ
ラダラと書いてみました。ただし、出典の方を忘れている上にウソや間
違いも沢山混じっているはずです。
ちなみに、私はSolaris2.0〜2.4には触ったことがありませんので、その
あたりの変遷についても全然知りません。

これ以外にもMuleのパッチ情報やPPPの導入などがあるといいなと思うの
ですが、忘却の彼方です。
------------------------------------------------------------------

X11, OpenWindowsに関する質問
  + CreatorやCreator3DでX11R6が動かない。
  + OpenWindowsのクライアントが、Xのライブラリが無いといわれ実行できません。
  + gs262をコンパイルするときに共有ライブラリ不足のエラーが出ます。
  + CDEで、$HOME/.Xauthorityが勝手に変更されてしまうのですが。
  + Solaris2.Xにはscreenblankがないそうですね。
  + Solaris2.X + X11R6でktermを終了させるとwindowが残ってしまいます。
  + Solaris2.X + X11R6でMuleを使うと、diredやshell-commandでハングアップします。

Solaris1.XからSolaris2.Xへの移行に関する質問。
  + psやdfのオプションや動作が違って戸惑うのですが。
  + manのオプションが違ったり、MANPATHを無視します。
  + ツールのインストールでinstallコマンドがうまくいきません。
  + BSD互換ライブラリは使えないのですか？
  + Solaris1.Xの /etc/rc や /etc/rc.local に当たるのはなんですか？
  + Solaris2.Xにはresolverをインストールする必要がありますか？

アプリケーションに関する質問。
  + Solaris2.Xでxnetloadが動かないのですが。
  + Solaris2.X x86でtracerouteが動かないのですが。
  + Solaris2.Xでxntpのtickadjが動かないのですが。
  + Solaris2.XでMH-6.8.3-JPがコンパイルできません。
  + Solaris2.Xでkterm-6.1.0のコンパイルがうまくいきません。
  + Wnn4.2をコンパイルしたのですが、jserverの辞書読み込みに失敗します。

Solaris2.Xのgccに関する質問。
  + gccのインストールはどうやればよいのでしょうか？
  + gcc-2.7.2のコンパイルがうまくいきません。
  + gccを使うと -xF や -B/usr/bin のオプションでエラーが出ます。

-------------
X11, OpenWindowsに関する質問
---
CreatorやCreator3Dで、X11R6が動かないのでしょうか？

X11R6やR6.1のサンプルサーバはこれらのframe bufferに対応していません。
昔のOpenWindowsの名残か、使い物にならない印象を持つ方も多いですが、
OpenWindows3.Xのサーバは、十分に使い物になります。また、X11R5ベースな
のが不満とはいえ、CDEなどの旨味もあり、速度的にも不満ありません。
どうせ、一般ユーザはR5とR6の違いには気付きません。:-

---
OpenWindowsのクライアントが、Xのライブラリが無いといわれ実行できません。

例えば、ktermでは以下のエラーが出て実行できません。

  ld.so.1: kterm: fatal: libXaw.so.5: can't open file: errno=2

これは、リンクするXのライブラリを見つけられないことによるエラーです。
lddコマンドでロードされるライブラリを調べてみると、ライブラリの一部が、
(not found)と表示されるはずです。
Solaris2.XのOpenWindows環境では、以下の解決方法があります。
  1.プログラムを実行する時に、$OPENWINHOME/lib への LD_LIBRARY_PATH
    を設定する。

  2.環境変数 LD_RUN_PATH に $OPENWINHOME/lib を設定してからコンパイルする。
    プログラムの実行時にロードされるデフォルトのライブラリを指定します。
    これはopenwinのmanで説明してある方法です。

  3.リンク時のオプションに -R/usr/openwin/lib を用いる。
    LD_RUN_PATHを設定するのと同じ効果が得られます。gccを利用して
    いるならimakeの設定ファイルに以下の変更をお試し下さい。xmkmfで
    Makefileを作成するときに、自動的にオプションを付けてくれます。
    CDEでは、-R/usr/dt/libを付けることもあるでしょう。

diff -c org/sun.cf sun.cf
*** org/sun.cf  Sat Sep 23 10:51:14 1995
--- sun.cf      Fri Aug 23 04:09:57 1996
***************
*** 127,132 ****
--- 127,133 ----
  #if HasGcc
  #if HasGcc2
  #define OptimizedCDebugFlags -O2
+ #define ExtraLoadFlags -R/usr/openwin/lib
  #else
  #define SharedLibraryCcCmd cc
  #define ExtraLoadFlags -B/usr/bin/

---
gs262をコンパイルするときに共有ライブラリ不足のエラーが出ます。

これは、X11R5とX11R6でライブラリ構造の一部が変更されたのが原因です。
リンク時に -lSM -lICEを付ければ問題は解決します。また、Solaris2.Xで
は - lnsl -lsocketも必要です。

---
CDEで、$HOME/.Xauthorityが勝手に変更されてしまうのですが。

CDEのdtloginでは、Xのサーバはrootの権限で動かされています。Xのサー
バと実際の利用者が異なるために、authorizeの情報を利用者の .Xauthority
に書き込む必要があります。rootの権限があるならば、/var/tmpにある
authorize情報と見比べてみてください。認証のための同一の情報が書か
れているはずです。

---
Solaris2.Xにはscreenblankがないそうですね。

標準では付いていませんが、Sunがftpで配布しています、最新版は
screenblank_02jun95.tar.gzです。ただし、screenblankの利用では、以下
のような問題が希に(?)発生します。
  1.consoleのloginプロンプトが出ている状態で、ASCII以外を突っ込む。
  2.blankされるまで放っておく。
  3.キー入力をしても画面が表示されず、入力も無視されることがある。
他の計算機からrloginして、writeコマンドなどでconsoleに出力を行うと
復帰します。

---
Solaris2.X + X11R6 でktermを終了させるとwindowが残ってしまいます。

Solaris2.4では X11R6のThreadedXがうまく動作しません。site.defに以下
の設定を加えて、X11R6の共有ライブラリを作り直してから、ktermを作って
下さい。
   #define ThreadedX       NO
このバグは、X11R6.1やSolaris2.5では修正されているようです。
また、Solaris2.4で作成したktermをSolaris2.5で使った場合にも、同様の
症状が発生します。その時はktermを作り直して下さい。

---
Solaris2.X + X11R6でMuleを使うと、diredやshell-commandでハングアップします。

ktermの場合同様ThreadedXのバグです。muleのパッケージに含まれる
FAQ-Mule.jpのB-14に情報があります。

-------------
Solaris1.XからSolaris2.Xへの移行に関する質問。
---
psやdfのオプションや動作が違って戸惑うのですが。

/usr/ucb にあるバイナリは Solaris1.Xと同様の動作をします。ただし、こ
こに入っているバイナリはいささか古いのか、sedの動作など一部に問題が
あります。したがって、/usr/ucb をPATHに含めない方が良いでしょう。使
いたいものだけを集めた別のディレクトリに用意しておいて、そちらにPATH
を通すという手もあります。

---
manのオプションが違ったり、MANPATHを無視します。

セクションの指定は -s オプションを使用して下さい。また、windexデータ
ベースが存在する場合、man.cfやMANPATHよりも優先されてしまいます。
MANPATHを優先したい場合には -F オプションを付けて下さい。

---
ツールのインストールでinstallコマンドがうまくいきません。

installコマンドに古いオプションしていが行われるならば、
/usr/ucb/installの方を使うように修正してみて下さい。

---
BSD互換ライブラリは使えないのですか？

-lucb を付けてコンパイルするという奥の手がありますが、安全性や安定性
に難がありますので薦めません。可能ならばソースの方を修正しましょう。

---
Solaris1.Xの /etc/rc や /etc/rc.local に当たるのはなんですか？

Solaris2.Xでは、/etc/rc[S0-6].d のスクリプトがそれに相当します。
[SK]nn<name>といった名称で、数字の順番+nameの順番に実行されます。
Kはkill、Sはstartを意味します。書き方は、最初からあるスクリプトが
参考になるでしょう。実行順序についての注意は /etc/rc2.d/README を
参照しましょう。

---
Solaris2.Xにはresolverをインストールする必要がありますか？

Solaris1.XではDNSを利用するには、resolverをインストールする必要が
ありましたが、Solaris2.Xでは対応するようになりました。ただし、初
期設定ではDNSは参照しません。/etc/nsswitch.conf の書くエントリー
で参照と順序を設定できますので、host: に dns を加えるとDNSを参照
するようになります。

-------------
アプリケーションに関する質問。
---
Solaris2.Xでxnetloadが動かないのですが。

Solaris2.Xでは、kernelイメージ/kernel/genunixから load averageを
直接読むことはできません。xnetloadがバージョンアップでloadを取得
できるようになるのを待つか、openwin付属のxloadをお使い下さい。

---
Solaris2.X x86でtracerouteが動かないのですが。

古いバージョンでは、little-endianとbig-endianの違いを考慮してないバ
グがあります。intel系CPUはlittle-endianのためきちんと動作しません。
traceroute-951024やtraceroute-1.2を入手設定後、コンパイルして下さい。

---
Solaris2.Xでxntpのtickadjが動かないのですが。

Solaris2.Xではtickadjは不要です。kernelが対応していますので、
/etc/systemに set dosynctodr = 0と書いて、rebootして下さい。

---
Solaris2.XでMH-6.8.3-JPがコンパイルできません。

いくつかパッチが公開されていますが、mh-6.8.3+-jp2c+.patch.gzを用
いると楽です。gccを使ってコンパイルするならば、展開したディレクト
リにあるMHの設定ファイルに option TYPESIG=void を付け加え、必要な
設定を行った後コンパイルして下さい。GNU makeを用いるとコンパイル
に失敗しますので、必ず/usr/ccs/bin/makeでコンパイルして下さい。

---
Solaris2.Xでkterm-6.1.0のコンパイルがうまくいきません。

misc.cの gettimeosday()の引数がOSにより異なります。以下の
修正を行って下さい。
    misc.c に #include<sys/time.h>を加える。
    X_GETTIMEOFDAY(&curtime)を修正。
       Solaris2.4:    gettimeofday(&curtime);
       Solaris2.5:    gettimeofday(&curtime, NULL);
また、OpenWindowsの場合、Makefileに以下の修正を行って下さい。
    XAPPLOADDIR = $(OPENWINHOME)/lib/app-defaults
$(OPENWINHOME)/lib/X11/app-defaults ではリソースが参照されません。

---
Wnn4.2をコンパイルしたのですが、jserverの辞書読み込みに失敗します。

Wnnは辞書をinodeでアクセスしますが、インストーラーのバグで、辞書の
inodeが正しく設定されません。エラーを起こす辞書に対して、wnntouchを
行うことにより問題は解決します。

-------------
Solaris2.Xのgccに関する質問。
---
gccのインストールはどうやればよいのでしょうか？

Solaris2.XではSolaris1.Xとは異なりコンパイラは標準添付されていません。
新しいgccをインストールするためには以下の方法があります。
  1.gccのバイナリパッケージgcc-binaries-2.5.6をインストールする。
    国内のftpサイトから手軽に入手できます。くれぐれもinclude file
    のfixを忘れないよう。また、海外のサイトならば、より新しいgccの
    バイナリを入手することも可能ですが、gcc-2.7.2をコンパイルする
    ならば、2.5.6のバイナリで十分です。
  2.www.sun.comにあるSunのC4.0(Try&Buy版)を使う。include fileを
    fixし忘れて、はまる事はなくなります。

---
gcc-2.7.2のコンパイルがうまくいきません。

いくつか原因が考えられますが、よくある失敗例としては以下のものが
挙げられます。

  1.他の計算機からgccをコピーしたが、include fileをコピーし忘れた。
    または、CPUアーキテクチャが違うのを持ってきた(論外)。
  2.gccのバイナリを入れるときにfix-includesをわすれていませんか？
  3.gcc-2.7.2をコンパイルを途中で失敗した場合、次にコンパイルする前に
    make distcleanをするのを忘れていませんか？
  4.PATHの設定は適切ですか？ INSTALLに書いてあるように、Solaris2.X
    では、/usr/ccs/binにあるlinkerを使う必要があります。/usr/ucb が
    検索PATHの先の方に入っていませんか？

---
gccを使うと -xF や -B/usr/bin のオプションでエラーが出ます。

gccをインストールしたときに、$OPENWINHOME/lib/config/site.defに、
  #define HasGcc  YES
  #define HasGcc2 YES
の設定がされていない場合によく見受けられます。設定を確認しましょう。
このエラーはgccとSunのCのオプションの違いにより発生します。
SunのCでは-xFはパフォーマンス評価を行うためのDEBUGオプションです。
ところが、gccでは、-x はソースの言語を陽に指定するオプションです。
つまり、-xFは謎のF言語という指定をしていることになり、エラーとな
ります。

-- おまけ ---
SunOS4.XとSunOS5.Xのバイナリ互換性は?
究極の目標は完全互換らしいです。Sunはダイナミックリンクライブラリに
黒魔術を用いることにより高度な互換性を提供しています。

-- 
九州大学大学院システム情報科学研究科情報工学専攻(三下)
佐野  文彦 ([email-masked])