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

Packaging Manual ch-sharedlibs, chap12



芳尾です。

Packaging Manual の第 12 章です。

よろしければ、ご査読お願いします。

分からなかったのは、
soname の訳です。

あと、誤訳の可能性が高い箇所を以下につけます。
見てくだされば嬉しいです。

栗栖さん、ホームページへのアップロードお願いします。

私は次の 13 章へ引き続きます。
8章と、11 章については、もう一度訳をなおしたやつを、
4章と、7 章については、英語つきのやつを
そのうちに流します。

よろしくお願いします。

--- 
<!-- 
Any package installing shared libraries in a directory that's listed in
<code>/etc/ld.so.conf</code> or in one of the default library
directories of <kbd>ld.so</kbd> (currently, these are
<code>/usr/lib</code> and <code>/lib</code>) must call
<kbd>ldconfig</kbd> in its <kbd>postinst</kbd> script if and only if the
first argument is `configure'. However, it is important not to call
<kbd>ldconfig</kbd> in the postrm or preinst scripts in the case where
the package is being upgraded (see <A
href="ch-maintainerscripts.html#s-unpackphase">Details of unpack phase
of installation or upgrade, section 6.3</A>), as <kbd>ldconfig</kbd>
will see the temporary names that <kbd>dpkg</kbd> uses for the files
while it is installing them and will make the shared library links point
to them, just before <kbd>dpkg</kbd> continues the installation and
removes the links!<P>
--> 

共有ライブラリを含むすべてのパッケージは、<code>/etc/ld.so.conf</code> 
に書かれてあるディレクトリか、<kbd>ld.so</kbd> によるデフォルトの検索ディ
レクトリ(現在のところ、<code>/usr/lib</code> と <code>/lib</code> です)
にインストールしなければいけません。また、最初の引数が confiugre であっ
たときは、postinst スクリプトの中から<kbd>ldconfig</kbd> を呼出さなけれ
ばいけません。けれども、パッケージの更新作業中に postrm や preinst スク
リプトから <kbd>ldconfig</kbd> を呼出してはいけません ( <A
href="ch-maintainerscripts.html#s-unpackphase">Details of unpack phase
of installation or upgrade, section 6.3</A> をごらんください)。
<kbd>dpkg</kbd> がインストール中のファイルに対して使う一時的な名前を 
<kbd>ldconfig</kbd> が参照できなければいけません。
<kbd>dpkg</kbd> は、リンクを削除してインストールを続行するまえに、
それらへの共有ライブラリに対するリンクポイントをつくります。

ではでは。 ---- Yours, K.S.Yoshio
                mailto:shishamo@xxxxxxxxxxxxxxx
                http://www2.osk.3web.ne.jp/~shishamo
Key fingerprint = 3C 3C 1C E6 B1 65 53 58  A3 B3 6A ED BA E4 54 52

<html><head>
<title>
<!-- 
Debian Packaging Manual - Shared libraries
--> 
Debian Packaging Manual - 共有ライブラリ
</title>
<link rev=made href="mailto:ijackson@xxxxxxxxxxxxxx";>
</head><body>
<h1>
Debian Packaging Manual - 第 12 章<br>
共有ライブラリ
</h1>
<!-- 
Packages containing shared libraries must be constructed with a little
care to make sure that the shared library is always available.  This
is especially important for packages whose shared libraries are
vitally important, such as the libc.<P>
--> 

共有ライブラリを含むパッケージの場合、その共有ライブラリがつねに使用可能
かどうかに注意します。とりわけ、libc などの重要な共有ライブラリのときは
特に重要です。<p>

<!-- 
Firstly, your package should install the shared libraries under their
normal names.  For example, the <kbd>libgdbm1</kbd> package should install
<code>libgdbm.so.1.7.3</code> as <code>/usr/lib/libgdbm.so.1.7.3</code>.  The
files should not be renamed or relinked by any prerm or postrm
scripts; <kbd>dpkg</kbd> will take care of renaming things safely without
affecting running programs, and attempts to interfere with this are
likely to lead to problems.<P>
--> 

初めに、その共有ライブラリを正しい名前でインストールします。例えば、パッ
ケージ <kbd>libgdbm1</kbd> は、<code>libgdbm.so.1.7.3</code> を、
<code>/usr/lib/libgdbm.so.1.7.3</code> としてインストールします。prermや
postrm スクリプトからこれらのファイルの名前を変更したり、再リンクしたり
してはいけません; <kbd>dpkg</kbd> は、実行中のプログラムに影響がないよう
に、また、このプログラムと競合して問題を起こさないよう、注意してファイ
ル名の変更などの作業を実行します。<p>

<!-- 
Secondly, your package should include the symlink that <kbd>ldconfig</kbd>
would create for the shared libraries.  For example, the
<kbd>libgdbm1</kbd> package should include a symlink from
<code>/usr/lib/libgdbm.so.1</code> to <code>libgdbm.so.1.7.3</code>.  This is
needed so that <kbd>ld.so</kbd> can find the library in between the time
<kbd>dpkg</kbd> installs it and <kbd>ldconfig</kbd> is run in the
<kbd>postinst</kbd> script.  Futhermore, and <em>this is very important</em>,
the library must be placed before the symlink pointing to it in the
<code>.deb</code> file.  This is so that by the time <kbd>dpkg</kbd> comes to
install the symlink (overwriting the previous symlink pointing at an
older version of the library) the new shared library is already in
place.  Currently the way to ensure the ordering is done properly is
to install the library in the appropriate <code>debian/tmp/.../lib</code>
directory before creating the symlink, by putting the commands in the
<code>debian/rules</code> in the appropriate order.<P>
--> 

次に、パッケージは、<kbd>ldconfig</kbd> が、共有ライブラリ用に作成するシ
ンボリックリンクを含まなければいけません。例えば、<kbd>libgdbm1</kbd> パ
ッケージは、<code>/usr/lib/libgdbm.so.1</code> から
<code>libgdbm.so.1.7.3</code> へのシンボリックリンクを含んでいなければい
けません。これは、<kbd>dpkg</kbd> がパッケージをインストールする時と、
<kbd>ldconfig</kbd> が postinst から実行されるときとの間に、
<kbd>ld.so</kbd> が、そのライブラリを見つけることができるようにするため
です。さらに、これは<em>重要</em>なことですが、ライブラリは、
<code>.deb</code> ファイル中のシンボリックリンクがはられる前に置かれてい
なければいけません。これは、<kbd>dpkg</kbd> が、すでに設置ずみの新しい共
有ライブラリを指すシンボリックリンクをインストールする (旧いバージョンの
ライブラリを指すシンボリックリンクを上書きします)ことが問題なく行われる
ためです。現在のところ、<code>debian/rules</code> に適切な順序でコマンド
を書くことによって、シンボリックリンクを作成するまえに、ライブラリを適切
な <code>debian/tmp/.../lib</code> に置くことで、この順序を保証します。<p>

<!-- 
Thirdly, the development package should contain a symlink for the shared
library without a version number.  For example, the
<code>libgdbm1-dev</code> package should include a symlink from
<code>/usr/lib/libgdm.so</code> to <code>libgdm.so.1.7.3</code>.  This
symlink is needed by <kbd>ld</kbd> when compiling packages as it will
only look for <code>libgdm.so</code> and <code>libgdm.a</code> when
compiling dynamically or statically, respectively.<P>
--> 

三番目に、開発版 (development) パッケージは、バージョン番号なしの共有ラ
イブラリへのシンボリックリンクを含んでいなければいけません。例えば、
<code>libgdbm1-dev</code> パッケージは、<code>/usr/lib/libgdm.so</code>
から <code>libgdm.so.1.7.3</code> へのシンボリックリンクを含んでいなけれ
ばいけません。このシンボリックリンクは、パッケージのコンパイルするときに、
動的にリンクされるか静的にリンクされるかによって、
<code>libgdm.so</code> か <code>libgdm.a</code> を、<kbd>ld</kbd>が探す
ことができるように必要となります。<p>

<!-- 
Any package installing shared libraries in a directory that's listed in
<code>/etc/ld.so.conf</code> or in one of the default library
directories of <kbd>ld.so</kbd> (currently, these are
<code>/usr/lib</code> and <code>/lib</code>) must call
<kbd>ldconfig</kbd> in its <kbd>postinst</kbd> script if and only if the
first argument is `configure'. However, it is important not to call
<kbd>ldconfig</kbd> in the postrm or preinst scripts in the case where
the package is being upgraded (see <A
href="ch-maintainerscripts.html#s-unpackphase">Details of unpack phase
of installation or upgrade, section 6.3</A>), as <kbd>ldconfig</kbd>
will see the temporary names that <kbd>dpkg</kbd> uses for the files
while it is installing them and will make the shared library links point
to them, just before <kbd>dpkg</kbd> continues the installation and
removes the links!<P>
--> 

共有ライブラリを含むすべてのパッケージは、<code>/etc/ld.so.conf</code> 
に書かれてあるディレクトリか、<kbd>ld.so</kbd> によるデフォルトの検索ディ
レクトリ(現在のところ、<code>/usr/lib</code> と <code>/lib</code> です)
にインストールしなければいけません。また、最初の引数が confiugre であっ
たときは、postinst スクリプトの中から<kbd>ldconfig</kbd> を呼出さなけれ
ばいけません。けれども、パッケージの更新作業中に postrm や preinst スク
リプトから <kbd>ldconfig</kbd> を呼出してはいけません ( <A
href="ch-maintainerscripts.html#s-unpackphase">Details of unpack phase
of installation or upgrade, section 6.3</A> をごらんください)。
<kbd>dpkg</kbd> がインストール中のファイルに対して使う一時的な名前を 
<kbd>ldconfig</kbd> が参照できなければいけません。
<kbd>dpkg</kbd> は、リンクを削除してインストールを続行するまえに、
それらへの共有ライブラリに対するリンクポイントをつくります。<p>

<hr>
<h2><A name="s-shlibs">
<!-- 
12.1 The <code>shlibs</code> File Format
--> 
12.1 <code>shlibs</code> ファイルの書式
</A></h2>

<!-- 
This file is for use by <kbd>dpkg-shlibdeps</kbd> and is required when
your package provides shared libraries.<P>
--> 

このファイルは、<kbd>dpkg-shlibdeps</kbd> によって使用され、パッケージが
共有ライブラリをインストールするときに必要となります。<p>

<!--  
Each line is of the form:
--> 

それぞれの行はつぎのものから構成されます。

<pre><var>library-name</var> <var>version-or-soname</var> <var>dependencies ...</var></pre><P>

<!-- 
<var>library-name</var> is the name of the shared library, for example
<code>libc5</code>.<P>
--> 

<var>library-name</var> は、共有ライブラリの名前です。例えば、
<code>libc5</code> です。<p>

<!-- 
<var>version-or-soname</var> is the soname of the library - ie, the thing
that must exactly match for the library to be recognised by
<kbd>ld.so</kbd>.  Usually this is major version number of the library.<P>
--> 

<var>version-or-soname</var> は、ライブラリの .so のつく名前です。これは、
<kbd>ld.so</kbd> によって認識されるためのライブラリと正確に一致していな
ければいけません。ふつうは、ライブラリのメジャーバージョン番号です。<p>

<!-- 
<var>dependencies</var> has the same syntax as a dependency field in a
binary package control file.  It should give details of which package(s)
are required to satisfy a binary built against the version of the
library contained in the package.  See <A
href="ch-relationships.html#s-depsyntax">Syntax of relationship fields,
section 8.1</A>.<P>
--> 

<var>dependencies</var> は、バイナリ・パッケージ・コントロール・ファイル
中の dependency フィールドと同じ書式です。これは、パッケージに含まれるラ
イブラリのバージョンに対してバイナリを構築したときに、どのパッケー
ジが必要とされるのか、詳細を記してあります。<A
href="ch-relationships.html#s-depsyntax">Syntax of relationship fields,
section 8.1</A> をご覧になってください。<p>


<!-- 
For example, if the package <code>foo</code> contains
<code>libfoo.so.1.2.3</code>, where the soname of the library is
<code>libfoo.so.1</code>, and the first version of the package which
contained a minor number of at least <code>2.3</code> was
<var>1.2.3-1</var>, then the package's <var>shlibs</var> could say:
--> 

例えば、パッケージ  <code>foo</code> が、<code>libfoo.so.1.2.3</code> を
含むとします。この時、ライブラリの soname は、<code>libfoo.so.1</code> 
となります。そして、マイナーバージョンが、<code>2.3</code> であるような
最初のパッケージのバージョンは、<var>1.2.3-1</var> となります。そこで、
このパッケージの、<var>shlibs</var> には以下のように書かれます。

<pre>libfoo 1	foo (&gt;= 1.2.3-1)</pre><P>

<!-- 
The version-specific dependency is to avoid warnings from <kbd>ld.so</kbd>
about using older shared libraries with newer binaries.
--> 

特定のバージョン番号への依存関係は、古いバージョンの共有ライブラリで用い
て、新しいバイナリを実行しようとした際に、 <kbd>ld.so</kbd> が出力するウォー
ニングを回避するのに役立ちます。

<hr>
<h2><A name="s12.2">
<!-- 
12.2 Further Technical information on <code>shlibs</code>
--> 
12.2 <code>shlibs</code>に関する技術情報の詳細
</A></h2>
<hr>
<h3><A name="s12.2.1">
<!-- 
12.2.1 <em>What</em> are the <code>shlibs</code> files?
--> 
12.2.1 <code>shlibs</code> ファイルとは何か
</A></h3>

<!-- 
The <code>debian/shlibs</code> file provides a way of checking
for shared library dependencies on packaged binaries.  They are
intended to be used by package maintainers to make their lives easier.<P>
--> 

 バイナリパッケージの共有ライブラリへの依存性のチェックを行うとき、
<code>debian/shlibs</code> ファイルを用いておこなうことができます。
パッケージ管理者が、より快適な生活を送れるでしょう。
<p>

<!-- 
Other <code>shlibs</code> files that exist on a Debian system are
--> 

 Debian システム上にある他の <code>shlibs</code> ファイルを以下に列挙し
ます。

<ul>
<li><code>/etc/dpkg/shlibs.default</code><p>
<li><code>/etc/dpkg/shlibs.override</code><p>
<li><code>/var/lib/dpkg/info/*.shlibs</code><p>
<li><code>debian/shlibs.local</code><p>
</ul>

<!-- 
These files are used by <kbd>dpkg-shlibdeps</kbd> when creating a binary
package.
--> 

バイナリパッケージの構築時、 <kbd>dpkg-shlibdeps</kbd> がこれらのファイ
ルを使います。

<hr>
<h3><A name="s12.2.2">
<!-- 
12.2.2 <em>How</em> does <kbd>dpkg-shlibdeps</kbd> work?
--> 
12.2.2 <kbd>dpkg-shlibdeps</kbd>の働き
</A></h3>

<!-- 
<kbd>dpkg-shlibdeps</kbd> calls <kbd>ldd</kbd> to determine the shared
libraries used by the compiled binaries passed through its command
line.<P>
--> 

<kbd>dpkg-shlibdeps</kbd> は、<kbd>ldd</kbd> を呼出します。そして、コマ
ンドラインから入力されたコンパイル済のバイナリがどの共有ライブラリを使っ
ているか調べます。<p>

<!-- 
For each shared library, <kbd>dpkg-shlibdeps</kbd> needs to know 
--> 

共有ライブラリそれぞれについて、<kbd>dpkg-shlibdeps</kbd> は以下の
情報を必要とします。

<ul compact>
<!-- 
<li>the package containing the library, and<li>the library version number,</ul>
--> 

<li>ライブラリを含んでいるパッケージ、および<li>ライブラリのバージョン番
号、</ul>

<!-- 
it scans the following files in this order.
--> 

また、以下のファイルを順に走査します。

<ol compact>
<li><code>debian/shlibs.local</code><li><code>/etc/dpkg/shlibs.override</code><li><code>/var/lib/dpkg/info/*.shlibs</code><li><code>/etc/dpkg/shlibs.default</code></ol>

<hr>
<h3><A name="s12.2.3">
<!-- 
12.2.3 <em>Who</em> maintains the various <code>shlibs</code> files?
--> 
12.2.3 多くの<code>shlibs</code>ファイルを誰が管理しているのか
</A></h3>

<ul compact>

<!-- 
<li><code>/etc/dpkg/shlibs.default</code> - the maintainer of
dpkg<li><code>/var/lib/dpkg/info/</code><var>package</var><code>.shlibs</code>
- the maintainer of each
package<li><code>/etc/dpkg/shlibs.override</code> - the local system
administrator<li><code>debian/shlibs.local</code> - the maintainer of
the package</ul>
--> 

<li><code>/etc/dpkg/shlibs.default</code> - dpkg の管理者
<li><code>/var/lib/dpkg/info/</code><var>package</var><code>.shlibs</code>
- それぞれのパッケージ管理者
<li><code>/etc/dpkg/shlibs.override</code> - ローカルのシステム管理者
<li><code>debian/shlibs.local</code> - パッケージ管理者
</ul>

<!-- 
The <code>shlibs.default</code> file is managed by <kbd>dpkg</kbd>. The
entries in <code>shlibs.default</code> that are provided by
<kbd>dpkg</kbd> are just there to fix things until the shared library
packages all have <code>shlibs</code> files.
--> 

<code>shlibs.default</code>は、<kbd>dpkg</kbd> によって管理されています。
<kbd>dpkg</kbd> によって提供される<code>shlibs.default</code>の各エント
リは、共有ライブラリパッケージすべてが、それぞれの <code>shlibs</code> 
ファイルを持つようになるまで、デフォルトの決定のために置かれています。

<hr>
<h3><A name="s12.2.4">
<!-- 
12.2.4 <em>How</em> to use <kbd>dpkg-shlibdeps</kbd> and the
 <code>shlibs</code> files?
--> 
12.2.4 <kbd>dpkg-shlibdeps</kbd>と<code>shlibs</code>ファイルの使いかた
</A></h3>
<hr>
<h4><A name="s12.2.4.1">
<!-- 
12.2.4.1 If your package doesn't provide a shared library
--> 
12.2.4.1 あなたのパッケージが共有ライブラリを含んでいないとき
</A></h4>

<!-- 
Put a call to <kbd>dpkg-shlibs</kbd> into your <code>debian/rules</code> file.
If your package contains only binaries (e.g. no scripts) use:
<pre>dpkg-shlibdeps debian/tmp/usr/{bin,sbin}/*</pre>
--> 

<code>debian/rules</code> ファイル中に <kbd>dpkg-shlibs</kbd> の呼出しルー
チンを置いてください。バイナリだけを含んだパッケージ(つまり、ス
クリプトを含まない)の場合、以下を使用してください。
<pre>dpkg-shlibdeps debian/tmp/usr/{bin,sbin}/*</pre>

<!-- 
If <kbd>dpkg-shlibdeps</kbd> doesn't complain, you're done. If it does
complain you might need to create your own <code>debian/shlibs.local</code>
file.
--> 

 <kbd>dpkg-shlibdeps</kbd>が何も文句を言ってこなかったなら、成功です。も
し、エラーやウォーニングなどが出力されたのであれば、たぶん、それ用の
<code>debian/shlibs.local</code> を作成する必要があるでしょう。
<hr>
<h4><A name="s12.2.4.2">
<!-- 
12.2.4.2 If your package provides a shared library
--> 
12.2.4.2 あなたのパッケージが共有ライブラリを含んでいるとき
</A></h4>
 
<!-- 
 Create a <code>debian/shlibs</code> file and let
<code>debian/rules</code> install it in the control area:
--> 

 <code>debian/shlibs</code> ファイルを作成して、
<code>debian/rules</code>  によってそれを制御領域にインストールしてくだ
さい。

<pre>install -m644 debian/shlibs debian/tmp/DEBIAN</pre>

<!-- 
If your package contains additional binaries see above.
--> 

もし、あなたのパッケージが他のバイナリを含んでいるのであれば、上の
記述を参照してください。

<hr>
<h3><A name="s12.2.5">
<!-- 
12.2.5 <em>How</em> to write <code>debian/shlibs.local</code>
--> 
12.2.5 <code>debian/shlibs.local</code> を書くには?

</A></h3>
<!-- 
This file is intended only as a <em>temporary</em> fix if your binaries
depend on a library which doesn't provide its own
<code>/var/lib/dpkg/*.shlibs</code> file yet.<P>
--> 
 
あなたの作ったパッケージが、自身の
<code>/var/lib/dpkg/*.shlibs</code> をまだ提供していないライブラリに依存
しているとき、この問題の<em>一時的</em>解決のためにこのファイルはありま
す。<p>

<!-- 
Let's assume you are packaging a binary <code>foo</code>. Your output in
building the package might look like this.
--> 

バイナリ <code>foo</code> をパッケージしているとします。パッケージの
構築中のメッセージは例えばこんな具合になるかもしれません。

<pre>$ ldd foo
libbar.so.1 =&gt; /usr/X11R6/lib/libbar.so.1.0
libc.so.5 =&gt; /lib/libc.so.5.2.18
libX11.so.6 =&gt; /usr/X11R6/lib/libX11.so.6.0</pre>

<!-- 
And when you ran <kbd>dpkg-shlibdeps</kbd>
--> 

そして、 <kbd>dpkg-shlibdeps</kbd> を実行すると、

<pre>$ dpkg-shlibdeps -o foo
dpkg-shlibdeps: warning: unable to find dependency information 
for shared library libbar 
(soname 1, path /usr/X11R6/lib/libbar.so.1.0, dependency field Depends)
shlibs:Depends=elf-x11r6lib, libc5 (&gt;= 5.2.18)</pre>

<!-- 
The <kbd>foo</kbd> binary depends on the <kbd>libbar</kbd> shared
library, but no package seems to provide a <code>*.shlibs</code> file in
<code></code>var/lib/dpkg/info/.  Let's determine the package
responsible:<P>
--> 

 <kbd>foo</kbd> バイナリは、<kbd>libbar</kbd> 共有ライブラリに依存してい
ますが、<code>var/lib/dpkg/info/</code> に置いてある 
<code>*.shlibs</code>のうちのどれも目的のパッケージを提供しているものは
ないようです。さあ、対応するパッケージを決定しましょう:<p>

<pre>$ dpkg -S /usr/X11R6/lib/libbar.so.1.0
bar1: /usr/X11R6/lib/libbar.so.1.0
$ dpkg -s bar1 | grep Version
Version: 1.0-1</pre>

<!-- 
This tells us that the <kbd>bar1</kbd> package, version 1.0-1 is the one
we are using. Now we can create our own <code>debian/shlibs.local</code> to
temporarly fix the above problem. Include the following line into your
<code>debian/shlibs.local</code> file.
--> 

これは、 <kbd>bar1</kbd> のバージョン 1.0-1 を現在我々が使用していると
言っています。ここで、この問題を一時的に解決するために、自分専用の
 <code>debian/shlibs.local</code> を作ります。以下の行を、
 <code>debian/shlibs.local</code> 中に含めてください。

<pre>    libbar 1 bar1 (&gt;= 1.0-1)</pre>

<!-- 
Now your package build should work. As soon as the maintainer of
<kbd>libbar1</kbd> provides a <code>shlibs</code> file, you can remove your
<code>debian/shlibs.local</code> file.
--> 

さあ、これであなたのパッケージ構築作業はうまくいくはずです。
<kbd>libbar1</kbd> のパッケージ管理者が、それ用の<code>shlibs</code> を
提供したときには、あなたの<code>debian/shlibs.local</code> ファイルは
削除してもよいです。

<hr>
Debian Packaging Manual - <A href="index.html#copyright">Copyright .Aゥ1996*B
Ian Jackson.</A>
<br>
<A href="index.html#toc">Contents</A>; <A
href="index.html#abstract">abstract</A>; <A
href="ch-methif.html">next</A>; <A href="ch-diversions.html">back</A>.
<br>
<address>version 2.4.1.0, 14 April 1998
<br>
Ian Jackson <A href="mailto:ijackson@xxxxxxxxxxxxxx";>ijackson@xxxxxxxxxxxxxx</A><br>
Revised: David A. Morris <A href="mailto:bweaver@debian.org";>bweaver@debian.org</A><br>
Maintainer: Christian Schwarz <A href="mailto:schwarz@debian.org";>schwarz@debian.org</A>
日本語訳:芳尾桂 <A
href="mailto:shishamo@xxxxxxxxxxxxxxx";>shishamo@xxxxxxxxxxxxxxx</A><br>
</address>
</body></html>