设置 apt-get 选项以容忍无害的“dpkg --force-conflicts”拼凑?

设置 apt-get 选项以容忍无害的“dpkg --force-conflicts”拼凑?

一个微不足道的冲突包可以与酒吧,通过跑步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:声明,此外还要解决引发冲突声明的任何问题。

相关内容