dpkg --force-conflicts -i foo
を実行することで、自明に矛盾するパッケージfooをbarで動作させることができます。しかし、最終的にはアップグレードする時であり、オブジェクトを 'apt-get'します。
% apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
foo : Conflicts: bar but 0.2-1 is installed
E: Unmet dependencies. Try using -f.
apt-getを調整/強制して(かなり修正された)競合を許容してからアップグレードできますか?
(Quickieの存在証明:アンインストールfoo、次にアップグレードし、再インストールfoo以前と同じです。したがって、可能です、質問最も厄介なメカニズムを見つけることです。)
例ですが、この質問は、任意の2つの特定のパッケージについてではありません。
数年間 GNU parallelはmoretutils と些細な矛盾を抱えています。それぞれが/ usr/bin/parallelを提供します。 dpkgは共存を強制できます:
# assume 'moreutils' is already installed, and 'parallel' is in
# apt's cache directory.
dpkg --force-conflicts -i /var/cache/apt/archives/parallel_20141022+ds1-1_all.deb
これにより宛先変更が作成され、moreutilsバージョンの名前が/ usr/bin/parallel.moreutilsに変更されます。どちらのプログラムも、ユーザーがアップグレードするまで機能します。
-oオプションを試しましたが、それは平和をもたらしませんでした:
apt-get -o Dpkg::Options::="--force-conflicts" install parallel moreutils
可能な-o数百のオプション番号、ただし...
OPがGillesの回答へのコメントでコマンドのリスト(パッケージの関連メタデータを変更するため)を要求したので、ここにそれを示します。
_# download .deb
apt download parallel
# alternatively: aptitude download parallel
# unpack
dpkg-deb -R parallel_*.deb tmp/
# make changes to the package metadata
sed -i \
-e '/^Version:/s/$/~nomoreutconfl/' \
-e '/^Conflicts: moreutils/d' \
tmp/DEBIAN/control
# pack anew
dpkg-deb -b tmp parallel_custom.deb
# install
dpkg -i parallel_custom.deb
_
これは、私のインストールの場合と同様に、conflicts行にはエントリとしてmoreutils
しか含まれていない(およびバージョンの制限がない)ことを前提としています。それ以外の場合は、2番目のsed
スクリプトとして'/^Conflicts:/s/\(, \)\?moreutils\( [^,]\+\)\?//'
を使用して、行の関連部分のみを削除し、バージョン制限をサポートします。
インストールしたパッケージはリポジトリの新しいバージョンで上書きされないため、GNU並列パッケージを最新に保つには、このパッケージを更新するたびにこの手順を手動で繰り返す必要があります。日付。
パッケージ間の競合はそれ自体に有害です。 dpkg
に競合するパッケージを強制的にインストールしても、正当な理由なしに競合が宣言されていても、otherの害はありませんが、パッケージはまだ競合しています。 APTパッケージをインストールするときに競合を解決するために一生懸命働き、無視する競合のリストがありません。dpkg
に異なるオプションを渡してこれを解決することはできません:問題は対立はAPT自身の仕事を不可能にします。
APTが機能しない状況から抜け出すための一時的な状態でない限り、競合するパッケージをインストールしないでください。dpkg
を使用するまでは、APTを実行しないでください。相反する状況から抜け出すために。
競合するパッケージをインストールする場合は、最初にそれらを変更してConflict:
宣言を削除し、競合の宣言の動機となった問題を解決します。