你的位置:首页 > 操作系统

[操作系统]ubuntu下软件包安装故障解决方案(深入剖析专治疑难)


前言:apt-get在安装大多数包时是没有问题的,但有些时候用apt-get命令安装包出现错误提示如:the following packages have unmet dependencies(下列软件包存在未满足的依赖关系),通常可以采取更新软件源的方法,这样一般可以解决大多数软件包安装问题,但是有些疑难的包依赖问题仅凭这个方法是解决不了的就需要使用aptitude深入解决了。
平台环境:ubuntu14.04


1. 一般用apt-get命令安装包出现问题提示如:the following packages have unmet dependencies(下列软件包存在未满足的依赖关系),我们首先可以采取更新软件源列表的方法,如果更新过程没有提示”无法下载“的情况,成功更新了源一般即可顺利安装所需的包,即执行以下指令

 

sudo apt-get update

 

2.如果直接更新源列表还是不能安装包,请先清除包缓存,再更新源,即依次执行以下指令后再尝试安装

 

sudo apt-get clean allsudo apt-get update

 

 

 

注:clean是清除本地所有的包缓存文件,即这个文件夹 /var/cache/apt/archives/ 和/var/cache/apt/archives/partial/下的所有除了锁定了的文件

3.以上不能解决问题,就尝试更换源,如下图所示进入ubuntu软件中心--设置界面--图示位置选择国内的其他较快的服务器

 

之后再执行sudo apt-get update指令。

4.如果出现更新源列表失败,提示错误如:无法下载......Hash和校验不符,这是由于身份校验信息出错导致,可以把软件中心的源设置菜单的身份验证密钥设置为默认值,如下图所示,把红框内的密钥依次设置为默认值,再尝试更新列表就解决啦!


5.另外有些时候使用apt-get指令安装包时会出现以下错误提示,同样是依赖关系错误:the following packages have unmet dependencies(下列软件包存在未满足的依赖关系),同时伴随提示说:这个包(姑且称为A吧)依赖于包B,但是包B将不被安装,无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。此时用apt-get指令是无论如何也不明白所以然的,什么叫您要求保持现状,就是这个原因不能安装,气死人!此时如果使用aptitude命令就能明白所以然了。
aptitude 是 Debian GNU/Linux 系统中, 非常神奇的的软件包管理器,基于大名鼎鼎的 APT 机制, 整合了 dselect 和 apt-get的所有功能, 并提供的更多特性,特别是在依赖关系处理上。aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。
当我们用这个aptitude(如果没有这个命令需要先用apt-get安装一下这个包)时会发现详细的依赖关系说明了,如安装libgtk2.0-dev(A包)时,提示它依赖这个包libpango1.0-dev(B包),而B又依赖libpango-1.0-0 (=1.36.3-1ubuntu1)(C包),但是系统已经安装了C包的一个更新的版本1.36.3-1ubuntu1.1 (D包)这样如果要安装这个A包就得降级D包到C包,然后安装了B再安装A,想想如果这个A包依赖了更多的要降级的包,这将是怎样一个庞大的工程来安装它,此时aptitude面对这种疑难杂症就要发挥神威了,它会给出多种解决方案,您只需要判断解决方案是否合适即可,通常提示要降级某些包,这样的情况按照提示执行即可成功解决依赖的问题。但是另外特别需要注意的是aptitude的使用是有风险的,如果你看的安装某个包时提示有很多包冲突了,给出的解决方案是要删除某些包,而且还是一大串,这时要注意了,不当的删除会一步步把你的系统删崩溃(我轻身经历啊啊啊),这时就不要采取aptitude给出的方案了,还是要参照前述再软件源的方向上着手解决依赖的问题。
注:软件包的4种关系
软件包之间存在四种关系:(1)depend upon 依赖关系。若A依赖B,则B必须安装后,A的核心功能才能正常运行; (2)recommend 推荐关系。若A推荐B,则B安装后,A常用到的附加功能才能正常运行; (3)suggest 建议关系。若A建议B,则B安装后,A不常用到的增强功能才能正常运行; (4)conflict 冲突关系。若A与B冲突,则A和B不能同时安装
 总结:ubuntu在使用过程中包安装是常事,掌握好apt-get及aptitude等包管理指令很重要,遇到包安装问题多在互联网上搜索,一般你遇到的别人都遇到过,群众的力量是无穷滴!