一个微不足道的冲突包富可以与酒吧,通过跑步dpkg --force-conflicts -i foo
。但最终是时候升级了,“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被调整/被迫容忍(几乎固定的)冲突,然后升级?
(快速存在证明:卸载富,然后升级,然后重新安装富像之前一样。因此它是可能的话,问题是找到最不麻烦的机制。)
举个例子,但是这个问题是不是关于任意两个特别的包。
几年来GNU平行线与某人发生过小冲突莫尔图尔斯;每个提供/usr/bin/并行。 包装袋可以强制共存:
# 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
这会创建一个转移,重命名更多实用程序版本为/usr/bin/parallel.moreutils。这两个程序都可以工作,直到用户升级为止。
我尝试了一个-o选择,但这并没有带来和平:
apt-get -o Dpkg::Options::="--force-conflicts" install parallel moreutils
可能的-o选项数量有数百个,但是......
答案1
由于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
这是假设冲突行仅moreutils
作为一个条目(并且没有版本限制),就像我的安装中的情况一样。否则,用作'/^Conflicts:/s/\(, \)\?moreutils\( [^,]\+\)\?//'
第二个sed
脚本仅删除行的相关部分并支持版本限制。
您安装的软件包不会被存储库中的较新版本覆盖,如果您想使该软件包保持最新,则必须为 GNU 并行软件包的每次更新手动重复此过程。
答案2
包之间的冲突本身就是有害的。当您强制dpkg
安装冲突的软件包时,这可能不会导致任何问题其他如果没有充分理由声明冲突,但软件包仍然存在冲突,则会造成伤害。 APT 努力解决安装软件包时的冲突,并且它没有要忽略的冲突列表。你不能通过让它传递不同的选项来解决这个问题dpkg
:问题是这些冲突使得 APT 自己的工作变得不可能。
切勿安装冲突的软件包,除非这是为了摆脱 APT 崩溃的情况而采取的临时状态。在您努力dpkg
摆脱冲突情况之前,不要运行 APT。
如果要安装冲突的软件包,请首先修改它们以删除Conflict:
声明,此外还要解决引发冲突声明的任何问题。