두 개의 바이너리 패키지( 및 ) foo
를 생성하는 소스 패키지( )가 있습니다 .foo-a
foo-b
버전 2.0에서는 파일이 에서 으로 /etc/foo
이동됩니다 . 이로 인해 오류가 발생합니다.foo-a
foo-b
apt upgrade
$ sudo apt upgrade
...
dpkg: error processing archive /var/cache/apt/archives/foo-b_2.0_amd64.deb (--unpack):
trying to overwrite '/etc/foo', which is also in package foo-a 1.0.
apt
이 문제를 해결할 수 있는 클라이언트 측 솔루션이 있습니까 ?
답변1
올바른(tm) 솔루션은 foo-a
다음 항목의 종속성을 수정하여 수정하는 것입니다.foo-b
debian/control
Package: foo-b
Replaces: foo-a (<< 2.0)
Breaks: foo-a (<< 2.0)
인용하다:https://www.debian.org/doc/debian-policy/ch-relationships.html#overwriting-files-in-other-packages
그러나 이 패키지의 개발자나 저장소의 관리자가 아닌 경우 클라이언트 측 솔루션이 필요합니다.
유효한 클라이언트 측 솔루션은 --force-overwrite
다음 옵션을 사용하는 것입니다 dpkg
.
$ apt download foo-{a,b}
$ dpkg --force-overwrite -i foo-{a,b}_2.0_amd64.deb
인용하다:https://man7.org/linux/man-pages/man1/dpkg.1.html#OPTIONS
그러나 -only 1-liner를 찾고 있다면 옵션을 에 전달 apt
해야 합니다 . 이는 다음에 간략하게 설명된 방법을 사용하여 수행할 수 있습니다.apt
--force-overwrite
dpkg
--option
apt-get(8)
. apt.conf(5)
Say를 DPkg::options
사용하여 옵션을 dpkg
.
이 매뉴얼 페이지 중 어느 것도 전체 구문을 명확하게 정의하지 않으므로 몇 가지 실험 후에 다음과 같이 수행할 수 있음을 발견했습니다.
$ sudo apt upgrade -o DPkg::options::="--force-overwrite"
...
Unpacking foo-b (2.0) over (1.0) ...
dpkg: warning: overriding problem because --force enabled:
dpkg: warning: trying to overwrite '/etc/foo', which is also in package foo-a 1.0
...