错误描述
昨天忘了为了修复什么问题,手贱点了 源更新-“Other Softwar”那里取消了很多东西。也不知道是不是这个原因,然后装 $ sudo apt install ros-kinetic-fetch-gazebo*
的时候就报有个dependence package ros-kinetic-fetch-navigation
没装,我就手动安装了一下,此时又说 ros-kinetic-map-sever
没装。如此层层递进,一直报有依赖没装。这肯定是不行的。
我们可以看见,它说依赖不能装上的下面有一句报错:
E: Unable to correct problems, you have held broken packages.
搜到的方法
然后我在网上搜到的解决方法总结起来大概是这几个:
参考:
https://appuals.com/fix-unable-correct-problems-held-broken-packages/
https://unix.stackexchange.com/questions/389156/how-to-fix-held-broken-packages
https://askubuntu.com/questions/363200/e-unable-to-correct-problems-you-have-held-broken-packages
方法一:apt修复
sudo dpkg --configure -a
sudo apt-get install -f
sudo apt-get clean && sudo apt-get update
sudo apt-get upgrade
sudo apt-get purge <package>
sudo apt-get autoremove
在upgrade
那里,如果它报某些包 "held back"
, 则用 sudo apt-get dist-upgrade
我不仅运行完上面所有步骤,而且还鼓起勇气 sudo apt-get remove ros-kinetic-*
,然后打算重装,没用的,发现连 sudo apt-get install ros-kinetic-ros-base
都报同样的错误(依赖不能装)。
方法二:用 aptitude 装
sudo aptitude install <package>
装 ros-kinetic-ros-base
倒是装上了,可是再用apt-get装ros包还是会有同样的问题。所以我干脆卸载了 ros-kinetic-ros-base 继续寻求其它解决办法。
方法三:用 Synaptic来修复损坏包
就是先 sudo apt install synaptic
,然后打开这个软件Synaptic。在里面先搜索找到损坏的包,然后点菜单Edit->Fix Broken Packages
那里就可以修复。我试了不行,还报错(日志显示):
“Unable to correct problems, you have held broken packages”。
问题的最终解决
由于上述方法都不行,最后我参考:
https://askubuntu.com/questions/223237/unable-to-correct-problems-you-have-held-broken-packages
我就是跟提问者一样,用方法1修复的时候就说
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
也就是说没有依赖被安装咯。
然后根据第一个回答者的建议用以下命令查看held package的时候是没有输出的,即:
dpkg --get-selections | grep hold
和尝试
$ apt-mark showhold
的时候输出都是空。
也就是说我这可能就没有held package吧?
然后下面有个回答者 @krael
真正解决了我的问题。
也就是手动修复损坏的包。以下是作者给的命令:
ls -l /var/lib/dpkg/info | grep <package>
cd /tmp && sudo mkdir new