Debian 共有ライブラリの設定

Debian 共有ライブラリの設定

共有ライブラリ用のDebianパッケージがあります。ライブラリの名前がthreadxであるとしましょう。私がインストールしたバージョンは0.0.1です。したがって、このパッケージには次のものが含まれます。

/lib/i386-linux-gnu/libthreadx.so.0.0.1
/lib/i386-linux-gnu/libthreadx.so.0 # symlink to libthreadx.so.0.0.1

今すぐ0.0.2にアップグレードするには、パッケージに次のものが含まれます。

/lib/i386-linux-gnu/libthreadx.so.0.0.2
/lib/i386-linux-gnu/libthreadx.so.0 # symlink to libthreadx.so.0.0.2

/lib/i386-linux-gnu/libthreadx.so.0同じファイルであるため、競合が発生します。エラーメッセージは次のとおりです。

dpkg: error processing archive /tmp/apt-dpkg-install-SwpeYD/01-libthreadx0.0.2_0.0.2_i386.deb (--unpack):
 trying to overwrite '/lib/i386-linux-gnu/libthreadx.so.0', which is also in package libthreadx0.0.1:i386 0.0.1

libthreadx0.0.1両方のパッケージ(およびlibthreadx0.0.2)を並列にインストールし、シンボリックリンクが最新のライブラリを指すようにしたいと思います。

動作する構成/パッケージ方法に関する実際のアドバイスが見つかりません。これについて話すスレッドがありますが、詳細については公開しません。

実際に正しく実行されたら、複数のバージョンの共有ライブラリをインストールできます。

複数のバージョンの共有ライブラリをインストールできないのはなぜですか?

また、Debian のマニュアルは私にとって非常に曖昧なので、これを行う方法についての情報がないか理解していません。https://www.debian.org/doc/debian-policy/ch-sharedlibs.html

答え1

問題はフルバージョンがあり、パッケージ名があるために発生しlibthreadx0.0.2ますlibthreadx0.0.1。前者をインストールすると、dpkg後者のアップグレードとは見なされず、一緒にインストールされた新しいパッケージと見なされます。したがって、dpkg「代替」ファイルは自動的に処理されないため、これを行うのに役立つ追加情報を提供する必要があります。

libthreadx.so.0理論的には、この場合、ライブラリパッケージ名はライブラリの名前を反映する必要があるため、ライブラリパッケージにはlibthreadx0下線の後に適切なバージョン番号が必要ですlibthreadx0_0.0.1-1_i386.deblibthreadx0_0.0.2-1_i386.debただし、ご存知のように、これは並列インストールを許可しません。

並列インストールを許可するには、ライブラリーが含まれてからパッケージが以前のパッケージのシンボリックリンクを置き換えることを許可する必要があります。1つReplacesの期間パッケージの制御ファイルから例えばこの例では、libthreadx0.0.2制御ファイルから

Replaces: libthreadx0.0.1

libthreadx0.0.2これは完全に置き換えるものではありませんが、libthreadx0.0.1競合するファイルを提供できるようにします。libthreadx0.0.2インストール後、そのシンボリックリンクはのシンボリックリンクを置き換えますlibthreadx0.0.1

技術的にはこれはシンボリックリンクを変更するので、パッケージを「中断」(用語dpkg)しますlibthreadx0.0.1。または、libthreadx0.0.1以前にライブラリによって提供されたシンボリックリンクを介しても正しく見つからないため、依存パッケージを中断しますlibthreadx0.0.1。これは通常Breaksセクションを使用して宣言されますが、ここでは維持したいので、適切ではありませんlibthreadx0.0.1

これにより、ユーザーがインストールしlibthreadx0.0.1て再インストールlibthreadx0.0.2した後、アンインストールして再度使用しようとlibthreadx0.0.2するlibthreadx0.0.1と、設定が破損する可能性があります。シンボリックリンクは復元されません。

あなたの名前が両方の図書館で同じであるという事実は、彼らが実際にはそうではないことを示唆しています。書くことができる最初は並列性ですが、これは別の議論の問題です。

関連情報