[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:09736] Re: modified points on mh-ja



佐野@浜松です。こんばんは。

In article <19990701001834F.kubota@xxxxxxxxxxxxxxxxxxxxx>
 Tomohiro KUBOTA <kubota@xxxxxxxxxxxxxxxxxxxxx> さん writes:

> じつは、libmh.so は、対処のしかたがわからないけど lintian が
> 出すのは error じゃなくて warning だからまあいいだろう、と
> ほってあったのです。

 xxx.so は make (コンパイル) 時に参照されるライブラリ名で、
リンカはこれを手がかりに実行時に使用するライブラリの soname を
見つけます。 strings /usr/bin/mh/inc とすると、最初に

/lib/ld-linux.so.2
__gmon_start__
libmh.so.3.2

と表示されますが、/lib/ld-linux.so.2 はランタイムリンカの名前、
libmh.so.3.2 はランタイムライブラリの soname です。

strings /usr/lib/libmh.so.3.2 | grep libmh とすると
libmh.so.3.2 が表示されます。

 sbr/Makefile は

SLIBVER =       3.2
...
libmh.so:       $(OFILES)
                -if [ -f $@ ]; then \
                    mv -f $@ z$@; \
                fi
                (cd shared; cc -shared -o ../$@ -Wl,-soname,$@.$(SLIBVER) $(OFILES))
                -@rm -f $@.$(SLIBVER)
                ln $@ $@.$(SLIBVER)
                -@ls -l $@*
                -@echo "MH shared library built normally"

となっています。 -soname,$@.$(SLIBVER) が soname の指定です。

ここでは libmh.so が実体で libmh.so.3.2 がリンクになっていますが、
この後、

inst-lib:       libmh.so $(LIBSA)
                -rm -f $(SLIBDIR)/libmh.so.$(SLIBVER)
                cp libmh.so.$(SLIBVER) $(SLIBDIR)/libmh.so.$(SLIBVER)
                -@chmod $(PGMPROT) $(SLIBDIR)/libmh.so.$(SLIBVER)
# we do not need this to use mh-ja
#               -@ln -sf libmh.so.$(SLIBVER) $(SLIBDIR)/libmh.so
                -@ls -l $(SLIBDIR)/libmh.so*
                -@echo "Shared library installed normally"
                -@echo ""

で libmh.so.3.2 が実体になり、コメントアウトした行で libmh.so が
 libmh.so.3.2 のリンクになります。

lintian が警告を出すのは、一般に xxx.so が make 時に参照される
ライブラリ名であり、「開発用ライブラリ」として認識するためです。

「開発用ライブラリが含まれるパッケージは -dev (開発用パッケージ) に
するべき」という基準なのでしょう。ただし、小規模なパッケージで
 runtime 用と開発用を兼ねるような場合は例外として認めるので、
エラーではなく警告扱いとなっているようです。なお、この場合は
 lintian の「例外情報」として記録して、警告を出さないようにするので
連絡してほしいという表示が出ます。

今回の mh-ja の場合、特に libmh.so を残す必然性を感じなかったので
リンクコマンドをコメントアウトしました。

> > # -rpath でリンクされていると、lintian が Error を出すので、
> > # 外しました。-rpath 付きのリンクはダイナミックリンカーの動作に
> > # 影響するので、やめたほうが良いと思います。
> 
> -rpath ってなんでしょうか... 勉強します。って、時間がないかも。

man ld すると

       -rpath directory
              ディ レ ク トリを実行時ライブラリの検索パスに追加す
              る。これは ELF の実行ファイルを共有オブジェクトとリ
              ン クするときに用いられる。 -rpath の引き数は全て結
              合され、ダイナミックリンカに渡される。ダイナミッ ク
              リ ンカは、これを用いてロードする共有オブジェクトを
              実行時に決定する。 -rpath オプションはリンクに明 示
              的 に含まれている共有オブジェクトによって必要とされ
              る別の共有オブジェクトを指定するのに用いることも で
              き る。 -rpath-link オプションの説明を見よ。 ELF 実
              行ファイルの -rpath が指定されない場合には、 (指 定
              さ れ ていれば) 環境変数 LD_RUN_PATH の値が用いられ
              る。

              -rpath オプションは SunOS で用いることも で き る。
              SunOS  のデフォルトでは、リンカは実行時の検索パスを
              -L オプションで与えられたパスから生成する。  -rpath
              が 用いられると、実行時の検索パスは -rpath オプショ
              ンで与えられたパスのみから生成され、 -L オプショ ン
              は無視される。これは gcc を使っていて、 -L がたくさ
              ん指定されてしまう (これらは NFS マウントされたファ
              イルシステムかもしれない) 場合などに便利である。

と書かれています。

これが指定されていると、ランタイムリンカ ld-linux.so の動作に
影響します。場合によってはランタイムリンカが適切なライブラリを
選択できなくなり、動作不能となる可能性もあると思われます。

# libc のメジャーバージョンアップがあった場合など。

> ldconfig についてもよく理解してないのですが、シェアードライブラリが
> 実行時に正しくリンクされるために必要なんですよね。ということは、
> libmh.so が必要無いのなら、ldconfig も必要がないのではないでしょうか。

パッケージに /usr/lib/libmh.so.3.2 (これは実行時に参照される
ランタイムライブラリ) が含まれており、これを ld-linux.so に
認識させるために ldconfig が必要です。

> > # potato 用に Standard-Version 変更。Depends に jless 追加。
> > # (もしかしたら、これは Suggests のほうが良いかも。)
> 
> たしか、ページャーには /usr/bin/sensible-pager を使うようにしています。
> w3m など、日本語が通る別のページャーもある (or 将来的に増える可能性も
> ある) ので、Suggests 程度にしておいたほうがいいと思います。

そうですね。次に upload する時にはそうします。

# もしかしたらその頃は久保田さんにバトンタッチできているかもしれないし :)

> じつは、ほかにも、mh-ja には不安な点がありまして、
> そのひとつにシャドウパスワードがあります。-2 (JP版mh-ja) は
> シャドウパスワードを使うというオプションでコンパイルしてありますが、
> Debian ではシャドウパスワードの使用/不使用を shadowconfig コマンドで
> 動的に変更できるようになっています。これに対応するにはどうしたら
> いいのだろうと思いつつも、ほとんどの人はシャドウパスワードを
> 使うだろうという前提で、そのようなオプションでコンパイルしました。
> (たしか、シャドウパスワードが有効になった環境でコンパイルしたら、
> configure が勝手にそれを読み取るのだと思います)。

ああ、それは気がつかなかった。どうするのがいいのかな。
ちゃんとするには mh-ja-shadow と mh-ja-noshadow の 2 種類に
分離したほうが良いのでしょうね、きっと。

Debian package の mh がどうやっているか、調べてみるかな。

-- 
     #わたしのおうちは浜松市、「夜のお菓子」で有名さ。
    <xlj06203@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)