패키지 와 .foo
/usr/lib/libfoo1.so
/usr/lib/libfoo2.so
foo
두 개의 패키지, 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
이것데비안 정책와 foo
로 구분된 예가 제공됩니다 . 이것이 여기에 적용되는 것입니다.foo
foo-data
실제로 예상되는 패키지 foo
로 교체 하면 안 됩니다 . and 에 추가하면 어느 bar든 만족하게 되고 , 실제로 bar는 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