パッケージとfoo
。/usr/lib/libfoo1.so
/usr/lib/libfoo2.so
foo
2つのパッケージ、 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
私はインストール、アンインストール、そして両方とも満足のいく状況を達成しようfoo1
とfoo2
していfoo
ます。bar
baz
状況{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
区切りの例があります。これがここに当てはまるものです。foo
foo-data
実際に予想されるパッケージfoo
と交換しないでください。 and に追加するとどのバーも満足するようになり、実際にバーは or の内容によって変わることがありますが、これは任意のものではないからですProvides:
。したがって、満足できることはANDが必要であることを意味します。次の状況でのみこれを実行できます。Provides: foo
foo1
foo2
bar
foo1
foo2
foo
foo1
foo2
foo
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
その後、これをビルドすると、、、、、およびをインストール/アップグレードするときにすべて正しくインストールされ、中断されないことがわかります。foo1
foo2
baz
bar