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