적절한 --force-overwrite 옵션이 있습니까?

적절한 --force-overwrite 옵션이 있습니까?

두 개의 바이너리 패키지( 및 ) foo를 생성하는 소스 패키지( )가 있습니다 .foo-afoo-b

버전 2.0에서는 파일이 에서 으로 /etc/foo이동됩니다 . 이로 인해 오류가 발생합니다.foo-afoo-bapt 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-bdebian/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-overwritedpkg--optionapt-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
...

관련 정보