web-dev-qa-db-ja.com

無害な 'dpkg --force-conflicts' kludgeを許容するようにapt-getオプションを設定しますか?

dpkg --force-conflicts -i fooを実行することで、自明に矛盾するパッケージfoobarで動作させることができます。しかし、最終的にはアップグレードする時であり、オブジェクトを '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 parallelmoretutils と些細な矛盾を抱えています。それぞれが/ 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数百のオプション番号、ただし...

7
agc

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並列パッケージを最新に保つには、このパッケージを更新するたびにこの手順を手動で繰り返す必要があります。日付。

5
phk

パッケージ間の競合はそれ自体に有害です。 dpkgに競合するパッケージを強制的にインストールしても、正当な理由なしに競合が宣言されていても、otherの害はありませんが、パッケージはまだ競合しています。 APTパッケージをインストールするときに競合を解決するために一生懸命働き、無視する競合のリストがありません。dpkgに異なるオプションを渡してこれを解決することはできません:問題は対立はAPT自身の仕事を不可能にします。

APTが機能しない状況から抜け出すための一時的な状態でない限り、競合するパッケージをインストールしないでください。dpkgを使用するまでは、APTを実行しないでください。相反する状況から抜け出すために。

競合するパッケージをインストールする場合は、最初にそれらを変更してConflict:宣言を削除し、競合の宣言の動機となった問題を解決します。