Debian パッケージを分割します。彼らの関係はどのように見えるべきですか?

Debian パッケージを分割します。彼らの関係はどのように見えるべきですか?

パッケージとfoo/usr/lib/libfoo1.so/usr/lib/libfoo2.so

foo2つのパッケージ、 foo1つまりおよびに分割したいが、foo2正しい関係を理解することはできません。私の考えでは、私が欲しいと思います。パッケージ全体を交換して強制的に取り外します。しかし、これはパッケージ名を変更した場合にのみ機能するようです(分割しません)。


私のテストは次のとおりですdebian/control

Source: libfoo
Maintainer: Stewart <[email protected]>
Build-Depends: debhelper-compat (= 11)

Package: foo
Architecture: all
Description: Old package

Package: foo1
Architecture: all
Conflicts: foo
Replaces: foo
Provides: foo

Package: foo2
Architecture: all
Conflicts: foo
Replaces: foo
Provides: foo

Package: bar
Architecture: all
Depends: foo
Description: Old rdepends, don't want this breaking

Package: baz
Architecture: all
Depends: foo1, foo2
Description: New rdepends, this needs to work too

次に、次をテストします。

dpkg-buildpackage

# Set up an existing system
sudo dpkg -i ../foo_1.0.0_all.deb ../bar_1.0.0_all.deb

# Simulate what will happen during upgrade
sudo dpkg -i ../baz_1.0.0_all.deb ../foo1_1.0.0_all.deb ../foo2_1.0.0_all.deb

私はインストール、アンインストール、そして両方とも満足のいく状況を達成しようfoo1foo2していfooます。barbaz


状況{Conflicts,Replaces,Provides}: foo結果:

$ sudo dpkg -i ../foo1_1.0.0_all.deb ../foo2_1.0.0_all.deb ../baz_1.0.0_all.deb 
dpkg: regarding ../foo1_1.0.0_all.deb containing foo1:
 foo1 breaks foo
  foo (version 1.0.0) is present and installed.

dpkg: error processing archive ../foo1_1.0.0_all.deb (--install):
 installing foo1 would break foo, and
 deconfiguration is not permitted (--auto-deconfigure might help)
dpkg: regarding ../foo2_1.0.0_all.deb containing foo2:
 foo2 breaks foo
  foo (version 1.0.0) is present and installed.

dpkg: error processing archive ../foo2_1.0.0_all.deb (--install):
 installing foo2 would break foo, and
 deconfiguration is not permitted (--auto-deconfigure might help)
Preparing to unpack ../baz_1.0.0_all.deb ...
Unpacking baz (1.0.0) over (1.0.0) ...
dpkg: dependency problems prevent configuration of baz:
 baz depends on foo1; however:
  Package foo1 is not installed.
 baz depends on foo2; however:
  Package foo2 is not installed.

dpkg: error processing package baz (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 ../foo1_1.0.0_all.deb
 ../foo2_1.0.0_all.deb
 baz


私が得ることができる最も近いのは、{Conflicts,Replaces,Provides}:foo2ではなくfoo1を設定することです。これは以下を提供します:

$ sudo dpkg -i ../foo1_1.0.0_all.deb ../foo2_1.0.0_all.deb ../baz_1.0.0_all.deb 
Selecting previously unselected package baz.
(Reading database ... 538326 files and directories currently installed.)
Preparing to unpack ../baz_1.0.0_all.deb ...
Unpacking baz (1.0.0) ...
Selecting previously unselected package foo1.
dpkg: considering removing foo in favour of foo1 ...
dpkg: yes, will remove foo in favour of foo1
Preparing to unpack ../foo1_1.0.0_all.deb ...
Unpacking foo1 (1.0.0) ...
Selecting previously unselected package foo2.
Preparing to unpack ../foo2_1.0.0_all.deb ...
Unpacking foo2 (1.0.0) ...
Setting up foo1 (1.0.0) ...
Setting up foo2 (1.0.0) ...
Setting up baz (1.0.0) ...

ベストアンサー1

これDebian ポリシーfoo区切りの例があります。これがここに当てはまるものです。foofoo-data

実際に予想されるパッケージfooと交換しないでください。 and に追加するとどのバーも満足するようになり、実際にバーは or の内容によって変わることがありますが、これは任意のものではないからですProvides:。したがって、満足できることはANDが必要であることを意味します。次の状況でのみこれを実行できます。Provides: foofoo1foo2barfoo1foo2foofoo1foo2foo Depends: foo1, foo2

したがって、初期制御ファイルは次のようにする必要があります。

Source: libfoo
Maintainer: Stewart <[email protected]>
Build-Depends: debhelper-compat (= 11)

Package: foo
Architecture: all

Package: bar
Architecture: all
Depends: foo

ここでdpkg -i foo_1.0.0_all.deb bar_1.0.0_all.deb初期条件の設定を開始してください。次に、制御ファイルを次に変更します。

Source: libfoo
Maintainer: Stewart <[email protected]>
Build-Depends: debhelper-compat (= 11)

Package: foo
Architecture: all
Depends: foo1, foo2

Package: foo1
Architecture: all
Breaks: foo (<< 1.1)
Replaces: foo (<< 1.1)

Package: foo2
Architecture: all
Breaks: foo (<< 1.1)
Replaces: foo (<< 1.1)

Package: baz
Architecture: all
Depends: foo1, foo2

fooその後、これをビルドすると、、、、、およびをインストール/アップグレードするときにすべて正しくインストールされ、中断されないことがわかります。foo1foo2bazbar

おすすめ記事