1 软件包依赖关系
Debian 系统通过其控制文件字段中的版本化二进制依赖声明机制来提供一致的二进制软件包集合。下面有一些它们的简单定义。
-
“依赖”
绝对的依赖,所有在这里列出的软件包都必须同时或提前安装。 -
"预依赖"
类似于 Depends,但列出的软件包必须提前完成安装。
-
"推荐"
这里表示一个强,但不是绝对的依赖关系 。大多数用户不会想要这个包,除非在这里列出的所有包都已经安装。
-
"建议"
较弱的依赖。这个软件包的大多数用户可能会从安装所列的软件包中受益,但没有它们也可以有适当的功能。
-
"增强"
这里表明一个像建议的弱依赖关系,不装也没关系。
-
"破损"
表明一个软件包不兼容一些版本规范。一般的解决方法就是升级列出的所有软件包。
-
"冲突"
这表明了绝对的不兼容。为了安装这个软件包必须移除所有列出的软件包。
-
"替代"
这表明这个文件安装的文件会替代所列的软件包的文件。
-
"提供"
表明这个软件包会提供所列的软件包所有的文件和功能。
注意
请注意,同时将 “Provides” 、“Conflicts” 和 “Replaces” 定义到一个虚拟的软件包是一个明智的配置。这确保了在任何一个时间只能安装一个提供该虚拟包的真正软件包。
2 包管理的事件流
这是 APT 提供的软件包管理的简单事件流摘要。
-
更新(“apt update”、“aptitude update” 或 “apt-get update”):
从远程档案库获取档案库元数据
重建和更新 APT 使用的本地元数据
-
升级(“apt upgrade” 和 “apt full-upgrade”,或 “aptitude safe-upgrade” 和 “aptitude full-upgrade”,或 “apt-get upgrade” 和 “apt-get dist-upgrade”):
选择候选版本,它所安装的软件包通常都是最新的可用版本(例外参见 第 2.7.3 节 “调整候选版本” )
解决软件包依赖关系
如果候选版本与已安装的版本不同,会从远程档案库获取所选择的二进制软件包
解包所获取的二进制软件包
运行 preinst 脚本
安装二进制文件
运行 postinst 脚本
-
安装(“apt install ...”、“aptitude install ..." 或者 "apt-get install …” ):
选择命令行中列出的包
解决软件包依赖关系
从远程服务器获取已选二进制包
解包所获取的二进制软件包
运行 preinst 脚本
安装二进制文件
运行 postinst 脚本
-
移除 ("apt remove …", “aptitude remove …” 或 “apt-get remove …”):
选择命令行中列出的包
解决软件包依赖关系
运行 prerm 脚本
移除已安装的文件,除了配置文件
运行 postrm 脚本
-
清除 ("apt purge",“aptitude purge …” 或 “apt-get purge …”):
选择命令行中列出的包
解决软件包依赖关系
运行 prerm 脚本
移除已安装的文件,包含配置文件
运行 postrm 脚本
3 对包管理问题的第一个回应
你应该阅读优良的官方文档。第一个阅读的文档是 Debian 特定的 “/usr/share/doc/package_name/README.Debian”。同时也应该查询 “/usr/share/doc/package_name/” 中的其它文档。如果你设置 shell 为第 1.4.2 节 “定制 bash”,输入下列命令。
$ cd package_name
$ pager README.Debian
$ mc
你可能需要安装以 “-doc” 后缀命名的对应文档软件包来获取详细的信息。
如果你在使用一个特定的软件包时出现了问题,一定要首先检查 Debian bug 跟踪系统(BTS) 网站。
4 解决特定软件包问题的主要网站
Debian bug 跟踪系统(BTS) 的主页 sensible-browser "http://bugs.debian.org/"
软件包名称已知的 bug 报告 sensible-browser "http://bugs.debian.org/package_name"
bug 编号已知的 bug 报告 sensible-browser "http://bugs.debian.org/bug_number"
使用 Google 搜索,在关键字中包含 “site:debian.org”,“site:wiki.debian.org”,“site:lists.debian.org” 等等。
当你要发送一份 bug 报告时,请使用 reportbug(1) 命令。
5 基础软件包管理操作
在 Debian 系统中有许多基于 APT 的软件包管理工具可以在 Debian 系统上进行基于仓库的软件包管理操作。
在这里,我们将介绍 3 种基本的软件包管理工具:apt,apt-get / apt-cache 和 aptitude 。
对于涉及软件包安装或更新软件包元数据的软件包管理操作,你必须有 root 权限。
1. apt vs. apt-get / apt-cache vs. aptitude
尽管 aptitude 是作者主要使用的一个非常好的可互动工具,但你应该知道下列警示:
不建议在新版本发布后在 stable Debian 系统上使用 aptitude 命令来进行跨版本的系统升级。
建议使用"apt full-upgrade"或“apt-get dist-upgrade” 来进行这个操作。参见 Bug #411280。
aptitude命令有时候会为了testing 或 unstable Debian 系统升级清除大量软件包。
这个情况吓坏了许多的系统管理员。请不要惊慌。
这似乎大多数是由元软件包的依赖或推荐的软件包版本偏差造成的,例如 gnome-core。
要解决这个问题,可以在 aptitude 命令菜单中选择 “取消待执行的动作” ,退出 aptitude,并使用 “apt full-upgrade”。
2. apt-get 和 apt-cache 是最基础 的基于 APT 的软件包管理工具。
-
apt-get 和 apt-cache 只提供命令行用户界面。
-
apt-get 是进行跨版本的主系统升级等操作的最合适工具。
-
apt-get 提供了一个强大的软件包依赖解析器。
-
apt-get 对硬件资源的要求不高。它消耗更少的内存并且运行速度更快。
-
apt-cache 提供了一个 标准的正则表达式来搜索软件包名称和描述。
-
apt-get 和 apt-cache 可以使用 /etc/apt/preferences 来管理软件包的多个版本,但这非常繁琐。
3. apt 命令是一个用于软件包管理的高级命令行界面。它基本上是 apt-get、apt-cache 和类似命令的一个封装,被设计为针对终端用户交互的界面,它默认启用了某些适合交互式使用的选项。
apt 工具在用户使用 apt install 安装软件包时提供了一个友好的进度条。
在成功安装下载的软件包后,apt 将默认删除缓存的 .deb 软件包。
提示
建议用户使用新的 apt(8) 命令用于 交互式的使用场景,而在 shell 脚本中使用 apt-get(8) 和apt-cache(8) 命令。
4. aptitude 命令是最通用的基于 APT 的软件包管理工具。
-
aptitude 提供了一个全屏的交互式文本用户界面。
-
aptitude 同样也提供了一个命令用户界面。
-
aptitude 是用于日常软件包管理(例如检查已安装的软件包和搜索可用的软件包)的最合适工具。
-
aptitude 对硬件资源的要求更高。它消耗更多的内存并且运行速度更慢。
-
aptitude 提供一个增强的正则表达式来搜索所有的软件包元数据。
-
aptitude 可以管理软件包的多个版本,并且不使用 /etc/apt/preferences,这会十分直观。
6 命令行中的基础软件包管理操作
下面是使用 apt(8), aptitude(8) 和 apt-get(8) / apt-cache(8) 的命令行基本软件包管理操作。
表 使用 apt(8), aptitude(8) 和 apt-get(8) / apt-cache(8) 的命令行基本软件包管理操作
apt 语法 | aptitude 语法 | apt-get / apt-cache 语法 | 说明 |
---|---|---|---|
apt update | aptitude update | apt-get update | 更新软件包档案库元数据 |
apt install foo | aptitude install foo | apt-get install foo | 安装 “foo” 软件包的候选版本以及它的依赖 |
apt upgrade | aptitude safe-upgrade | apt-get upgrade | 安装已安装的软件包的候选版本并且不移除任何其它的软件包 |
apt full-upgrade | aptitude full-upgrade | apt-get dist-upgrade | 安装已安装的软件包的候选版本,并且需要的话会移除其它的软件包 |
apt remove foo | aptitude remove foo | apt-get remove foo | 移除 “foo” 软件包,但留下配置文件 |
apt autoremove | N/A | apt-get autoremove | 移除不再需要的自动安装的软件包 |
apt purge foo | aptitude purge foo | apt-get purge foo | 清除 “foo” 软件包的配置文件 |
apt clean | aptitude clean | apt-get clean | 完全清除本地仓库的软件包检索文件 |
apt autoclean | aptitude autoclean | apt-get autoclean | 清除本地仓库中过时软件包的软件包检索文件 |
apt show foo | aptitude show foo | apt-cache show foo | 显示 “foo” 软件包的详细信息 |
apt search 正则表达式 | aptitude search regex | apt-cache search regex | 搜索匹配 regex 的软件包 |
N/A | aptitude why regex | N/A | 解释匹配 regex 的软件包必须被安装的原因 |
N/A | aptitude why-not regex | N/A | 解释匹配 regex 的软件包不必安装的原因 |
N/A | aptitude search '~i!~M' |
apt-mark showmanual | 列出手动安装的软件包 |
apt / apt-get 和 aptitude 能够混用,没有大问题。
“aptitude why regex” 可以通过 “aptitude -v why regex” 列出更多的信息。类似的信息可以通过"apt rdepends package" 或 “apt-cache rdepends package” 获取。
当 aptitude 命令在命令行模式下启动后遇到了一些问题(例如软件包冲突),你可以在之后的提示中按下 “e” 键切换到全屏的交互模式。
注意
虽然 aptitude 命令提供了丰富的功能,例如增强的软件包解析器,但它的复杂程度导致了(或可能导致)一些退步,例如 Bug #411123、Bug #514930 及 Bug #570377。如有疑问,请使用 apt,apt-get 和 apt-cache 命令来替代 aptitude 命令。
你可以在 “aptitude” 后面使用的命令选项。
标签:get,管理,apt,aptitude,软件包,foo,安装 From: https://www.cnblogs.com/namevt/p/16841073.html