Equivs:削除せずに既存のパッケージを強化または更新しますか?

Equivs:削除せずに既存のパッケージを強化または更新しますか?

glibc = 2.15背景情報:私はDebian 7をデフォルト環境として使用しており、いくつかの最新のアプリケーションを使用するために必要な環境に加えて追加の環境が必要であることをシステムに知らせたいと思います。glibc = 2.13

Steamなど、さまざまなオンラインインストールチュートリアルからglibcを取得しました。解凍され、/usr/local/lib/libc6-2.15Pidgin 2.10、Boinc 7、Stellariumなどの一部のアプリケーションでテストされ、正常に動作します(これまでする最終的には正常に失敗することを期待しています。)パッケージソース(たとえば、clangとBoincは両方ともテスト中)からこれらのアプリケーションをインストールできる方が良いでしょう。したいです。

もちろん、私はそれがequivs人々がすることの仮想パッケージを作成するツールであることを知っています。いいえ私はリポジトリからインストールしましたが、これまでにインストールされたequivsパッケージを壊さずに理想的に更新する仮想パッケージを作成する方法に関する良いドキュメントを見つけることができませんでした。

私は最初に明らかなことを試しました。

Package: libc6
Version: 2.15-1

そして、dpkgが生成されたパッケージをインストールした場合、予想される結果は既存のlibcアップデートを削除し、システムを利用できない状態にすることです。 (もちろん、仮想マシンで試しました。)私も試しました

Version: >= 2.13

良いことは何も出ません。

活用方法を探そうとします供給または改善する別の名前でパッケージを作成して

Package: local-libc6
Version: 2.15
# Either this:
Provides: libc6
# Or this:
Enhances: libc6 (< 2.15)

しかし、これまでにインストール可能なパッケージを作成することに成功しておらず、equivs(正しくない提供や改善について不平を言う)、パッケージの作成にも成功しませんでした。

もちろん、アイデアはlibcこれのためのダミーパッケージを作ることです。に慣れるインストールされているバージョンを削除し、新しいバージョンを「提供」してください。しかし、これまで、私はこの分野の文書が情けないほど不足していることを知っていました。 (そして私は本当にDPKG百科事典を掘り下げて迷子にしたくありません。一般的に私はそのような仕事のためのスキルと時間がありますが、最近は注意が必要です。別の場所にいるため)。

だから基本的な質問は次のとおりです。できる元のパッケージを削除せずにパッケージのアップデートを作成したり、いくつかの効果を得るためにEquivsを使用しますか?バージョンを指定するときに一般的に考慮すべき事項は何ですかequivs

ベストアンサー1

答えは、equivs-build既存のパッケージのバリエーションと最新の名前(libc6-localなど)を含む制御ファイルで生成されたパッケージが古いパッケージの削除をトリガーすることです。実装するprermまたはpostrm スクリプト新しいパッケージや古いパッケージではありませんデザイン

これで、まったく異なる名前のパッケージを作成して制御ファイルに設定できます。供給libc6のようなパッケージ。より具体的に提案された仮想パッケージについては、以下の制御ファイルを検討してください(関連部分のみが表示されます)。

Package: 6cbil-local //libc6 backwards is good enough
Version: 2.9
Provides: glibc-2.9
Section: libs

これをlibc6 2.17-0ubuntu5(マイコンピュータ)の制御ファイルと比較してみてください。

Package: libc6
Source: eglibc
Version: 2.17-0ubuntu5
Architecture: amd64
Maintainer: Ubuntu Developers <[email protected]>
Installed-Size: 10441
Depends: debconf (>= 0.5) | debconf-2.0, libgcc1
Suggests: glibc-doc, locales
Conflicts: prelink (<= 0.0.20090311-1), tzdata (<< 2007k-1), tzdata-etch
Breaks: lsb-core (<= 3.2-27), nscd (<< 2.17)
Replaces: libc6-amd64
Provides: glibc-2.17-1
Section: libs
Priority: required
Multi-Arch: same

次に、この制御ファイルに基づいて空のパッケージを検討してください。

Package: using6
Version: 1.0
Depends: libc6 (= 2.9) // it requires that specific version

その後、パッケージをビルドします。私たちの仮想パッケージはglib-2.9を提供しますインストールされているlibc6をインストールして削除しないでください。。 glibc-2.9 apt(2.2に設定)に依存するパッケージをインストールしようとするとエラーが発生します。ここ):

The following packages have unmet dependencies:
 using6 : Depends: libc6 (= 2.9) but 2.17-0ubuntu5 is to be installed
E: Unable to correct problems, you have held broken packages.

またはdpkg:

dpkg: dependency problems prevent configuration of using6:
 using6 depends on libc6 (= 2.9); however:
  Version of libc6:amd64 on system is 2.17-0ubuntu5.

元のダミーパッケージに戻り、提供されているものを次のものに置き換えます。

Provides: glibc-2.9, libc6

次に、glibc-2.9に依存するパッケージを再インストールしてみてください。dpkg同じエラーメッセージが表示されますが、いいえapt! ! ! !実際に提供された値を変更した後にパッケージをビルドすると、Aptは心を変えてから変更をPackages.gzにプッシュし、次のようにdpkg-scanpackages dirwithpackages | gzip > dirwithpackages/Packages.gzaptを更新しますsudo apt-get update

The following packages have unmet dependencies:
 using6 : Depends: libc6 (= 2.9) //notice the reference to 2.17 is gone!!
E: Unable to correct problems, you have held broken packages.

私が見逃した説明とは実際には少し異なります。Debian マニュアル:


5.2.1.4.3.現在の制限

仮想パッケージにはいくつかの不安な制限があり、その中で最も重要なのはバージョン番号がないことです。前の例に戻ると、Perl 5.10があるにもかかわらず、依存関係:libdigest-md5-perl(> = 1.6)などの依存関係は、パッケージングシステムでは決して満たされていないと見なされます。実際にはそうです。パッケージシステムはそれを認識せず、バージョンが一致しないと仮定して最も危険性の低いオプションを選択します。

バーチャルパッケージのバージョンに進む バーチャルパッケージはバージョンを持つことはできませんが、必ずしもそうではありません。実際、aptはすでに仮想パッケージのバージョンを管理でき、dpkgも最終的に同じことを行うことができます。次に、パッケージがバージョン1.7のlibstorable-perlと同じ機能を提供することを示すために、提供:libstorable-perl(= 1.7)などのフィールドを作成できます。


apt上記の経験は、私の設定(Xubuntu 13.04、dpkg = 1.16.10(amd64)、apt = 0.9.7.7ubuntu4(amd64))で多少異なる動作(エラーメッセージの変更に関して)を示していますdpkgApt私たちがインストールしたこのパッケージがlibc6を提供することは確認しましたが、まさにバージョン2.9を提供することは確認できませんでした。最終的にaptはdpkgを呼び出すので、dpkgはボトルネックを引き起こすはずです。

私の設定とあなたのシナリオで制御ファイルの「提案」に影響を与えるように見える唯一の値は次のとおりです。図書館6。しかし、現在の制限と設計により、これは特定のバージョンに依存するソフトウェアをインストールするのに十分ではありません。

最後に、ご存知のようにld構成ファイル図に示すように、すべてのリンクを処理するツールです。この例ld.so.conf ファイルとディレクトリチェーンの一部です。共有オブジェクトのリンクインフラストラクチャと$ LD_LIBRARY_PATH変数は、このコンテキストでは、/libや/usr/libなどのデフォルトライブラリの場所よりも優先されます。

おすすめ記事