扩展-APT包管理
Debian系的操作系统都是使用dpkg进行包管理的,但是我们手动安装deb安装包的时候,可能就会遇到下面的情况:
dpkg: 依赖问题使得 xxx 的配置工作不能继续:
xxx 依赖于 deb_name;然而:
未安装软件包 deb_name。
dpkg: 处理软件包 xxx(--install)时出错:
依赖关系问题 - 仍未被配置
在处理时有错误发生:
xxx
虽然上面的报错信息很长,但关键的就一个:未安装软件包 deb_name。正常情况下,我们只需要找到对应的安装包一起安装就行了。
但是很多时候,依赖关系是相互的,安装一个依赖的包时,可能需要更多的依赖,已经不是手动能处理的了。
于是,apt工具就出现了,它能够自动分析软件包的依赖关系,并在安装一个软件的时候顺便安装所有的依赖包;也可以在系统依赖关系不能满足软件的时候警告你并停止安装。
* apt 与 apt-get 区别很少,本文中都是可以互相替换的。
* apt需要连接互联网。
1.正常安装
sudo apt update
sudo apt install xxx
update操作可以获取最新的软件库列表,首次执行apt必须执行。
‘install’操作将会自动分析xxx软件包的依赖关系并进行安装。安装时会提示“是否继续”,输入y并回车即可。
sudo apt install xxx -y
‘-y’参数可以默认执行所有询问的步骤。
2.卸载软件
sudo apt remove xxx
卸载软件的操作与dpkg -r
相同,将只卸载软件本体,不会卸载它的依赖。
如果软件被其他软件依赖,则无法卸载。
3.下载软件
apt download xxx
这个操作只下载软件,不安装,也不会下载它的依赖软件。
4.处理dpkg的依赖报错
dpkg安装deb文件报错缺失依赖后,可以用apt进行自动修复。
sudo apt --fix-broken install
install后面不需要任何软件名作为参数。
5.换APT镜像源
遇上apt更新和下载太慢,或者无法连接的情况,就需要更换apt镜像源了,即更换apt的下载地址。
如果是UOS系统,且apt报错401,则是系统激活问题,需要激活系统。在不能激活的情况下,再换源
这里以UOS更换阿里云的Debian10 apt源为例。
1、用管理员权限编辑/etc/apt/sources.list
文件。
sudo deepin-editor /etc/apt/sources.list
2、将原来的源地址禁用,方法是在那一行的头部添加 # 符号。将新的源地址写入文件,保存。
# 用 '#' 注释掉原来的地址。
# deb https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free
# deb-src https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free
# 添加新的地址
deb https://mirrors.aliyun.com/debian/ buster main non-free contrib
3、更新软件列表,执行sudo apt update
后,若无报错即可使用。
* 例子中的阿里云源只是示例,UOS换用该源后可能导致部分软件不满足以来要求而无法安装!
6.关于aptitude指令
aptitude
是APT的扩展指令,能实现全部apt的功能,并且在处理依赖的功能上更加激进。
aptitude
在处理依赖的时候,可以无视依赖冲突强行安装,这个常常会引起问题,不建议新手使用。
7.报错的处理
1、无法定位软件包
sudo apt install xxx
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
E: 无法定位软件包 xxx
apt要求软件名完整,无法定位基本上是软件名写错或者缺失。
2、无法解析域名
错误: 1 http://xxxxx eagle InRelease
无法解析域名xxxxx
部分索引文件下载失败。
网络问题。APT工具必须能够正常连接到互联网。你可以尝试去ping报错信息中的域名,查找网络问题点。
3、不满足的依赖关系
也许需要运行"apt -fix-broken install"来修正上面的错误。
下列软件包有未满足的依赖关系:
package_name : 依赖: xxx 但是它将不会被安装
依赖: xxx(>=1.0) 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行"apt --fix-broken install"(也可以指定一个解决办法)
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
libgl1-mesa-dev : 依赖: mesa-common-dev (= 18.3.6-2+deb10u1) 但是它将不会被安装
依赖: libdrm-dev (>= 2.4.95) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
libx11-dev : 依赖: libx11-6 (= 2:1.6.7-1+deb10u2) 但是 2:1.6.12-2 正要被安装
上面三种情况都表明,系统当前的环境不满足被安装软件的依赖需求,并且apt不能解决这个错误。直接原因有以下可能性:
apt软件仓库内没有这个软件。
apt软件仓库内有,但是版本不满足要求(一般是太旧了)
系统内已经安装了某个版本,但是由于被其他软件依赖而不能升级。比如第三个里面的"依赖2:1.6.7-1但是2:1.6.12正要被安装",系统内环境依赖的是.7版本,但是仓库内是.12版本导致。
出现这个情况的根本原因,可能是使用了错误的软件源(比如在UOS上使用之前提到的阿里云镜像源),也有可能是之前手动强制安装过一些软件破坏了系统依赖。
解决该问题时,首先使用指令sudo apt --fix-broken install
让apt尝试自动修复。
如果修复不了,就应该检查镜像源是否正确,检查之前安装的软件是否有冲突的情况。
最后是手动下载软件包尝试安装,或者寻找该软件的替代品。