適切な--force-overwriteオプションはありますか?

適切な--force-overwriteオプションはありますか?

2つのバイナリパッケージ(および)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
...

関連情報