dpkg错误:“正在尝试覆盖文件,它也在…中”


108

例如:

$ sudo apt-get install curl
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:
bsh : Depends: libjline-java but it is not going to be installed
groovy : Depends: libjline-java but it is not going to be installed
rhino : Depends: libjline-java but it is not going to be installed
E: Unmet dependencies. 

Try 'apt-get -f install' with no packages (or specify a solution).

尝试安装clojure1.3,leiningen和其他几个软件包时,我得到相同或相似的错误。

当我尝试错误消息中的建议时,会发生以下情况:

$ sudo apt-get -f install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  diffstat linux-headers-3.2.0-26-generic linux-headers-3.2.0-26 dh-apparmor dkms html2text libmail-sendmail-perl libsys-hostname-long-perl
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  libjline-java
Suggested packages:
  libjline-java-doc
The following NEW packages will be installed:
  libjline-java
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
23 not fully installed or removed.
Need to get 0 B/72.0 kB of archives.
After this operation, 129 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
(Reading database ... 226243 files and directories currently installed.)
Unpacking libjline-java (from .../libjline-java_1.0-1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
 trying to overwrite '/usr/share/java/jline.jar', which is also in package scala 2.9.2-400
Errors were encountered while processing:
 /var/cache/apt/archives/libjline-java_1.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

$ sudo 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:
 bsh : Depends: libjline-java but it is not installed
 groovy : Depends: libjline-java but it is not installed
 rhino : Depends: libjline-java but it is not installed
E: Unmet dependencies. Try using -f.

看上去也很生动,您需要安装Java,并在软件中心中进行搜索
Mark Kirby 2012年

1
可能是该问答的重复,或者至少是解决方法应该有所帮助
danjjl 2012年

@markkirby,sudo apt-get update如果您正在问我,我已经跑了。
missingfaktor 2012年

@markkirby,已安装JDK。
missingfaktor 2012年

Answers:


72

请不要直接寻求danjjl的答案,如果您遇到这种“试图覆盖”错误,则可能是您有冲突的软件包需要首先解决。

解决此问题的直接方法是删除不希望的有冲突的软件包,在这种情况下scala

sudo dpkg -P scala

接下来,建议与相应的软件包维护者一起提交错误报告。这通常意味着Conflict: package在控制文件中添加一行。

另请参阅答案以获取有关此错误的更多详细说明。


3
不太确定此建议。我认为这取决于情况。在您以前的文章的链接中,同一软件的两个版本存在冲突。我同意在那里应该先删除旧软件。但是,如果打包两个不同程序的方式存在问题,并且被覆盖的文件相同或无害,那么我认为该建议没有问题。不,不是理想的...但是,如果替代方法是等到问题解决
Ray

在这种情况下,@ Ray可能会按顺序提交错误报告...但是我怀疑Ubuntu仓库中的软件是否存在该问题,因为它们已从Debian和Debian测试中全面抽出了此类问题。
Braiam '16

1
@Braiam自从我使用Debian已有很长时间了。也许现在更好了,但是我发现Debian也有类似的问题。这不是因为缺乏详尽的测试,而是有时很难测试所有可能的情况。无论执行多少测试,都会漏掉一些东西。我不反对编写错误报告,但“更轻松地说完成了”。毕竟,可能很难总结所有有冲突的软件包。而且,如果错误不是很“热”(即,它们不会影响很多人),您最终将不得不等待。

如果将原始答案修改为“请不要因为某些原因而这样做”可能会更好。这样,一旦有人知道其优缺点,便可以选择忽略它。就目前而言,上面的答案只是说不要这样做。

@Ray umm ...构建软件包时,dpkg存储文件列表(dpkg -L软件包),仅查找冲突就足以解决第一个问题。通过详尽的测试,我的意思是真实世界的测试,不稳定的测试和正是针对这种情况的测试
Braiam

97

要解决您的问题运行

sudo dpkg -i --force-overwrite /var/cache/apt/archives/libjline-java_1.0-1_all.deb

通过运行以下命令检查一切是否固定: sudo apt-get -f install

如果你还有问题重新运行任何的第一步dpkg: error processing (...)剩余

webupd8上找到的解决方案


9
这将有效安装软件包,但是当两个软件包都尝试使用相同的库/文件/二进制文件时,问题仍然存在。
Braiam

11
天哪

修复了我的odroid Plex媒体服务器更新..谢谢!
Mark

为我工作,谢谢
Miguel Mota

44

@danjjl的命令适用于.deb文件。我发现此命令适用于apt/ apt-get

sudo apt-get -o Dpkg::Options::="--force-overwrite" install <package-name>

4
很棒的小费。但是请当心:如果文件不同,覆盖内容可能会造成严重的麻烦。您有冲突的软件包之一将无法正常运行。
Potaito

1
sudo apt-get -o Dpkg::Options::="--force-overwrite" install -f为我解决了类似的问题
user2205916 '18

@猫:那么更像是“伟大的黑客”。;-]
David Foerster,

1

不知道这是一个全局修复程序,因为我遇到了同样的问题,但是缓存中有一个libglx-mesa文件与Nvidia-390冲突。我删除了文件,并发表了apt install -f -y,让那完了再与进行apt updateupgradeautoremove在该序列。

apt dist-upgrade在Ubuntu 18.04上执行时出现错误,然后再次继续该过程,没有其他问题了,这似乎是“我的”修复。

命令:

sudo su -
mv /var/cache/apt/archives/libglx-mesa0_18.0.0~rc5-1ubuntu1_amd64.deb ~
apt install -f -y
apt update -y
apt upgrade -y
apt autoremove -y
apt dist-upgrade

PS:强制改写是我尝试过的一个坏主意,我很幸运。但是最好找到根本原因并加以解决。我仍然需要调查,但是错误导致我将文件移开。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.