【Debian参考手册】第 2 章 Debian软件包管理

目录

成都网站建设哪家好,找创新互联建站!专注于网页设计、成都网站建设、微信开发、成都小程序开发、集团企业网站制作等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:成都餐厅设计等众多领域,积累了大量丰富的经验,同时也获得了客户的一致表扬!

2.1. Debian 软件包管理的前提
2.1.1. 软件包配置
2.1.2. 基本的注意事项
2.1.3. 持续升级的生活
2.1.4. Debian 档案库基础
2.1.5. Debian 是100% 的自由软件
2.1.6. 软件包依赖关系
2.1.7. 包管理的事件流
2.1.8. 对包管理问题的第一个回应
2.2. 基础软件包管理操作
2.2.1. apt vs. apt-get / apt-cache vs. aptitude
2.2.2. 命令行中的基础软件包管理操作
2.2.3. aptitude 的交互式使用
2.2.4. aptitude 的按键绑定
2.2.5. aptitude 软件包视图
2.2.6. aptitude 搜索方式选项
2.2.7. aptitude 正则表达式
2.2.8. aptitude 的依赖解决
2.2.9. 软件包活动日志
2.3. aptitude 操作范例
2.3.1. 通过正则表达式匹配软件包名称来列出软件包
2.3.2. 使用正则表达式匹配浏览
2.3.3. 完整地清理已删除软件包
2.3.4. 调整自动/手动安装状态
2.3.5. 全面的系统升级
2.4. 高级软件包管理操作
2.4.1. 命令行中的高级软件包管理操作
2.4.2. 验证安装的软件包文件
2.4.3. 预防软件包故障
2.4.4. 搜索软件包元数据
2.5. Debian 软件包内部管理
2.5.1. 档案库元数据
2.5.2. 顶层“Release”文件及真实性
2.5.3. 档案库层的“Release”文件
2.5.4. 获取用于软件包的元数据
2.5.5. APT 的软件包状态
2.5.6. aptitude 的软件包状态
2.5.7. 获取的软件包的本地副本
2.5.8. Debian 软件包文件名称
2.5.9. dpkg 命令
2.5.10. update-alternatives 命令
2.5.11. dpkg-statoverride 命令
2.5.12. dpkg-divert 命令
2.6. 从损坏的系统中恢复
2.6.1. Failed installation due to missing dependencies
2.6.2. Caching errors of the package data
2.6.3. 不兼容旧的用户配置
2.6.4. 具有相同文件的不同软件包
2.6.5. 修复损坏的软件包脚本
2.6.6. 使用 dpkg 命令进行救援
2.6.7. 恢复软件包选择数据
2.7. 软件包管理技巧
2.7.1. 如何挑选 Debian 软件包
2.7.2. 混合源档案库中的软件包
2.7.3. 调整候选版本
2.7.4. 更新和向后移植
2.7.5. 阻止推荐的软件包的安装
2.7.6. 使用带有 unstable 软件包的 testing 版本
2.7.7. 使用带有 experimental 软件包的 unstable 版本
2.7.8. 自动下载和升级软件包
2.7.9. 限制 APT 的下载带宽
2.7.10. 紧急降级
2.7.11. 上传软件包的是谁?
2.7.12. equivs 软件包
2.7.13. 移植一个软件包到 stable 系统
2.7.14. 用于 APT 的代理服务器
2.7.15. 更多关于软件包管理的文档
注意

这一章假定最新的稳定版的代号为:bullseye

Debian 是一个志愿者组织,它建立一致的自由软件的预编译二进制包并从档案库中分发它们。

许多远程镜像站提供了 HTTP 和 FTP 的方式来访问 Debian 档案库。也可以使用 CD-ROM/DVD 。

目前 Debian 的软件包管理系统是 高级软件包工具 (APT),它能够使用所有这些资源。

Debian 软件包管理系统,当使用适当时,可以让用户从档案库安装统一设置的二进制软件包 到系统中。现在,有 66314 个可用于 amd64 架构的软件包。

Debian 软件包管理系统有丰富的历史,有许多可供选择的前端用户程序和后端访问方式。现在,我们推荐下列的这些。

  • apt(8) 用于所有的交互式命令行操作,包含软件包的安装、移除和版本升级。

  • apt-get(8) 用于从脚本中调用 Debian 软件包管理系统。它在 apt 不可用时也可作为一个备选选项(常见于较旧的 Debian 系统)。

  • aptitude(8) 使用一个交互式的文本界面来管理已安装的软件包和搜索可用的软件包。

表 2.1. Debian 软件包管理工具列表

软件包 流行度 大小 说明
dpkg V:924, I:999 6900 用于 Debian 的底层软件包管理系统(基于文件的)
apt V:870, I:999 4351 使用命令行管理软件包的 APT 前端: apt/apt-get/apt-cache
aptitude V:66, I:359 4256 使用全屏控制台交互式管理软件包的 APT 前端: aptitude(8)
tasksel V:34, I:978 395 用来安装选择的任务的 APT 前端: tasksel(8)
unattended-upgrades V:314, I:465 326 用于 APT 的增强软件包,会自动安装安全更新
gnome-software V:130, I:232 2856 GNOME 软件中心(图形化的 APT 前端)
synaptic V:46, I:356 7874 图形化的软件包管理工具(GTK 的 APT 前端)
apt-utils V:382, I:997 1167 APT 实用程序:apt-extracttemplates(1) 、apt-ftparchive(1) 和 apt-sortpkgs(1)
apt-listchanges V:358, I:855 423 软件包历史更改提醒工具
apt-listbugs V:7, I:11 465 在每次 APT 安装前列出严重的 bug
apt-file V:18, I:75 90 APT 软件包搜索工具 —— 命令行界面
apt-rdepends V:0, I:6 41 递归列出软件包依赖

2.1. Debian 软件包管理的前提

2.1.1. 软件包配置

下面是 Debian 系统软件包配置的一些要点。

  • Debian 尊重系统管理员的手动配置。换句话说,软件包配置系统不会为了方便而去更改那些配置。

  • 每个软件包都带有自己的配置脚本,它使用标准用户接口 debconf(7) 来帮助软件包初始化安装过程。

  • Debian 开发者通过软件包配置脚本,尽力使你能有一个完美的升级体验。

  • 系统管理员可以使用软件包工具的全部功能。但在默认的安装中会禁用那些具有安全风险的。

  • 如果你手动激活了一些具有安全隐患的服务,你有责任遏制风险。

  • 高深的配置可以由系统管理员手动启用。这可能会对用于系统配置的通用流行帮助程序造成干扰。

2.1.2. 基本的注意事项

警告

不要从任何的混合套件中安装软件包。它可能会打破软件包的一致性,这需要你要深厚的系统管理知识,例如 ABI 编译器、库版本和解释器特性等等。

Debian 系统管理员中的新手应该保持在只进行安全更新的 stable 版本。我的意思是,最好避免下列的一些行为作为一项预防措施,直到你十分了解 Debian 系统。下面有一些提醒。

  • 在 “/etc/apt/sources.list” 中不要包含 testingunstable

  • 在 “/etc/apt/sources.list” 里不要在标准的 Debian 中混合使用其它非 Debian 的档案库,例如 Ubuntu 。

  • 不要建立 “/etc/apt/preferences” 。

  • 不了解会造成的全部影响,就不要通过配置文件改变软件包管理工具的默认行为。

  • 不要使用 “dpkg -i random_package” 安装任何软件包。

  • 绝不使用 “dpkg --force-all -i random_package” 安装任何软件包。

  • 不要删除或修改 “/var/lib/dpkg/” 中的文件。

  • 不要让从源码直接安装的程序覆盖系统文件。

    • 如果需要的话,将它们安装到 “/usr/local” 或 “/opt” 中。

上述对 Debian 软件包管理系统做的行为所导致的不兼容影响可能会使你的系统无法使用。

负责有关键任务的服务器的严谨的 Debian 系统系统管理员,应该使用额外的预防措施。

  • 没有在安全的条件下使用你特定的配置进行彻底地测试,就不要从 Debian 安装任何软件包(包含安全更新)。

    • 你作为系统管理员要对你的系统负责到底。

    • Debian 系统长久的稳定史并无法保证什么。

2.1.3. 持续升级的生活

小心

对于你的生产服务器,建议使用带有安全更新的 stable 套件。对于你只进行有限管理的桌面 PC 也是同样如此。

尽管我在上面进行了警告,我知道本文档的许多读者希望可以运行更新的 testingunstable 版。

菩萨使用下面的内容拯救一个人,使他从挣扎于持续升级地狱的因果报应中脱困,并让他达到 Debian 的极乐世界。

这个列表面向 自己管理的 桌面环境。

  • 使用 testing 版,实际上,它是自动滚动发布的,由 Debian 档案库的 QA 质量架构来管理,比如:Debian 持续集成、只上传源代码实践 和 库转换跟踪。在 testing 版中的软件包被更新得足够频繁来提供全部最新的特性。

  • 在"/etc/apt/sources.list"里面设置 testing 版相应的代码名(目前是 “bookworm”)。

  • 大概在主版本发布一个月后,仅仅在你自己评估了形势后,才手动更新"/etc/apt/sources.list"里的这个代码名到新的版本号。对于这个更新,Debian 用户和开发者邮件列表也是好的信息来源。

使用 unstable 版是不推荐的。unstable 版对开发者 调试软件包合适,但对普通的桌面使用而言,会有使你暴露在不必要的风险中的倾向。 尽管 Debian 系统的 unstable 版在大多数时候看起来都非常稳定,但会有一些软件包问题,并且它们中的一部分是不容易解决的。

这里有一些基本预防措施意见,确保简单快速地从 Debian 软件包的 bug 中恢复。

  • 通过将 Debian 系统的 stable 版安装到另一个分区,可以使系统能够进行双启动

  • 制作安装 CD 便于用于 救援启动

  • 考虑安装 apt-listbugs ,这可以在升级之前检查 Debian Bug 跟踪系统(BTS) 的信息

  • 对软件包系统的基础设施有足够的了解来解决问题

  • 在遇到问题的情况下,安装上游相应的沙盒化二进制软件包(参见 第 7.6 节 “沙盒”)

  • 建立一个 chroot 或类似的环境来提前运行最新的系统(参见第 9.11 节 “虚拟化系统”)

小心

如果你无法做到这些预防措施中的任何一个,那你可能还没做好使用 testingunstable 版的准备。

2.1.4. Debian 档案库基础

让我们从系统用户的角度来看看 Debian 档案库。

提示

Debian 档案库官方政策的定义参见 Debian 政策文档,第2章 —— Debian 档案库。

对于典型的 HTTP 访问,档案库在 “/etc/apt/sources.list” 文件中像下面那样指定,例如,现在 stable = bullseye 系统。

deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free

deb http://security.debian.org/debian-security bullseye-security main contrib
deb-src http://security.debian.org/debian-security bullseye-security main contrib

这里,我倾向于使用代号 “bullseye” 来代替套件名 “stable” ,以避免下一个 stable 版本发布时出现意外。

/etc/apt/sources.list” 的含义在 sources.list(5) 中进行了描述,下面是一些要点。

  • deb” 的那行定义了二进制软件包。

  • deb-src” 的那行定义了源代码软件包。

  • 第一个参数是 Debian 档案库的根 URL 。

  • 第二个参数是发行版名称:可以使用套件名或代号。

  • 第三个和之后的参数是 Debian 档案库的有效档案库范围名称。

如果只是用 aptitude(它不访问源代码相关的元数据),“deb-src”那行可以安全地删掉(或者在文件开头添加 “#” 来将它注释掉)。这可以加速档案库元数据的更新。URL 可以是“http://” 、“ftp://” 、 “file://” ……

提示

如果在上述的例子中,使用了 “sid” 代替 “bullseye” ,那么 “/etc/apt/sources.list” 中的 “deb: http://security.debian.org/ …” 这行就不需要了。因为没有用于 “sid” (unstable)的安全更新的档案库。

下面是配置文件所使用的 Debian 档案库站点的 URL 和套件名或代号的列表。

表 2.2. Debian 档案库站点列表

档案库 URL 套件名(代号) 目的
http://deb.debian.org/debian/ stable (bullseye) stable (bullseye) release 版本
http://deb.debian.org/debian/ testing (bookworm) testing (bookworm) release 版本
http://deb.debian.org/debian/ unstable (sid) unstable (sid) release 版本
http://deb.debian.org/debian/ experimental experimental pre-release 版本(可选,只适用于开发者)
http://deb.debian.org/debian/ stable-proposed-updates (bullseye-proposed-updates) 用于下一个稳定版 (bullseye)点版本(小版本)发布的更新(可选)
http://deb.debian.org/debian/ stable-updates(bullseye-updates) 用于稳定版( bullseye )的垃圾邮件过滤器、IM客户端等的兼容更新
http://deb.debian.org/debian/ stable-backports (bullseye-backports) 用于稳定版(bullseye ) 的较新的向后移植的软件包(可选)
http://security.debian.org/debian-security/ stable-security (bullseye-security) 用于稳定版(bullseye) 发布的安全更新(重要)
http://security.debian.org/debian-security/ testing-security (bookworm-security) 用于测试版发布的安全更新(这个没有安全团队的积极支持)

小心

只有带有安全更新的纯净的 stable release 版本可以提供最佳的稳定性。运行大多数 stable release 版本的软件包之中混合一些来自 testingunstable release 版本的软件包会比运行纯净的 unstable release 版本冒更大的风险,这是因为库版本的不匹配导致的。如果在 stable release 版本下你真的需要一些程序的最新版本,请使用来自 bullseye-updates 和 http://backports.debian.org (参见 第 2.7.4 节 “更新和向后移植”)的软件包。使用这些软件包时必须额外小心。

小心

在 "deb" 行中,你只需列出 stabletesting 或者 unstable 套件中的一个即可,如果你在 "deb" 行中混合了 stabletestingunstable 套件,APT 程序的执行速度将会变慢并且只有最新的档案库是有用的。只有在 "/etc/apt/preferences" 文件带有明确目标的时候,混合的列表才是有意义的。(查看第 2.7.3 节 “调整候选版本”)。

提示

对于使用 stable 套件的 Debian 系统而言,在 “/etc/apt/sources.list” 中包含带有 “http://security.debian.org/” 的一行是不错的主意。它会启用安全更新。

注意

Debian 安全团体将会修正 stable 档案库的安全缺陷。这些行为是十分严格可靠的。testing 档案库中的缺陷,不一定会被 Debian 测试安全团体修正。由于一些原因,这些行为相对 stable 档案库没有那么严格,您可能需要等待已修正的 unstable 软件包移植到 testingunstable 档案库的缺陷,交由各个维护者修改。经常维护的unstable 软件包通常处于相当好的状况,因为它利用了上流最新的安全修正。有关 Debian 怎样处理安全缺陷,请参见 Debian安全常问问题 。

表 2.3. Debian 归档区域(area)列表

区域 软件包数量 软件包组件标准
main 65132 遵从 Debian 自由软件指导方针(DFSG),并且不依赖于 non-free
contrib 372 遵从 Debian 自由软件指导方针(DFSG),但依赖于 non-free
non-free 810 不遵从 Debian 自由软件指导方针(DFSG)

上述软件包的数量是 amd64 架构的。main 区域提供 Debian 系统(参见 第 2.1.5 节 “Debian 是100% 的自由软件”)。

通过把你的浏览器指向档案库 URL,这些 URL 在 distspool 之后是各不相同的,Debian 档案库能够被有规划的组织。

发行版可以用套件或代号来指定。发行版在许多文档中也被当做是套件的同义词。套件和代号的关系总结如下。

表 2.4. 套件和代号的关系

时间 suite = stable suite = testing suite = unstable
bullseye 发布后 codename = bullseye codename = bookworm codename = sid
bookworm 发布后 codename = bookworm codename = trixie codename = sid

代号的历史参见 Debian FAQ: 6.2.1 以前用过哪些代号名?

在较严格的 Debian 档案术语,“部分 section”这一词特指按应用领域来分类的软件包类别。(但是,主要部分 ("main section") 这一词有时会用来描述 Debian 档案区中,名为”main 主要"的区域 。)

Debian 开发者(DD)每次上传软件包到 unstable 档案库(通过 incoming 处理),都必须确保上传的软件包与最新的 unstable 档案库中的最新软件包兼容。

如果 DD 故意打破重要的库升级等的这种兼容性,这通常会在 Debian 开发者邮件列表等进行公告。

在 Debian 档案库维护脚本将软件包从 unstable 档案库移动到 testing 档案库前,档案库维护脚本不仅检查时间(约10天)和软件包的 RC bug 报告的状态,还尝试确保它们可以和最新的 testing 档案库中的软件兼容。这个过程使得testing 档案库非常正确可用。

通过由发布团队领导的逐步冻结档案库的过程,并进行一些手动干预,使 testing 档案库完全一致,无缺陷。然后,将旧的 testing 档案库的代码名称分配给新的 stable 档案库,并为新的 testing 档案库创建新的代码名称。新的 testing 档案库最初的内容和新发布的 stable 档案库的内容完全相同。

unstabletesting 档案库都可能会遭受由以下几个因素导致的临时的小故障。

  • 损坏的软件包被上传到档案库(多见于 unstable

  • 延迟接受新的软件包到档案库(多见于 unstable )

  • 档案库时间同步问题( testingunstable

  • 手动干预档案库,例如移除软件包(多见于 testing )等。

因此,如果你决定使用这些档案库,你应该能够修复或忍受这些类型的小故障。

小心

在新的 stable 版本发布后的几个月,大多数桌面用户应该使用带有安全更新的 stable 档案库,即使他们通常使用 unstabletesting 档案库。在这个过渡期中,unstabletesting 档案库不适合大多数人。你使用 unstable 档案库的系统是很难保持良好的工作状态的,因为它会遭受核心软件包的大量升级狂潮。 testing 档案库不大有用,因为它包含有和没有安全支持的 stable 档案库相同的内容(Debian testing 安全公告 2008-12)。一个月左右的时间后, 如果你仔细点的话, unstable 档案库或许可以使用。

提示

跟踪 testing 档案库时,由一个已移除的软件包引起的问题通常可以安装 unstable 档案库中相同的软件包(已修复 bug )来解决。

档案库的定义参见 Debian 政策文档。

  • 部分

  • "优先级"

  • "基本系统"

  • "极重要的软件包"

2.1.5. Debian 是100% 的自由软件

Debian 是100%的自由软件,因为:

  • Debian 默认只安装自由软件,这尊重了用户的自由。

  • Debian 在 main 中只提供自由软件。

  • Debian 建议只运行来自 main 的自由软件。

  • main 中的软件包没有依赖于在 non-freecontrib 中的软件包。

有人想知道下列的两个事实是否互相矛盾。

  • “ Debian 将始终是 100% 的自由软件”。( Debian 社群契约中的第一条)

  • Debian 服务器上有一些 non-freecontrib 软件包。

因为下列原因,这并不矛盾。

  • Debian 系统具有100%的自由,并且它的软件包位于 Debian 服务器的 main 区域。

  • Debian 系统之外的软件包位于 Debian 服务器的 non-freecontrib 区域。

在 Debian 社群契约的第4条和第5条对这进行了明确的解释:

  • 我们将优先考虑我们的用户及自由软件

    • 我们由我们的用户及自由软件社群的需要所导向。我们将优先考虑他们的利益。我们将在多种计算环境中支持我们的用户的操作需要。我们不反对在 Debian 系统上使用非自由软件,我们也不会尝试向创建和使用这部分软件的用户索取费用。我们允许他人,在没有我们的资金的参与下,制造包括 Debian 以及商业软件的增值套件。为了达成这些目标,我们将提供集成的、高质量的、100%自由的软件,而不附加任何可能阻止在这些方面使用的法律限制。

  • 哪些作品不符合我们的自由软件规范

    • 我们明了,某些我们的用户需要使用不符合 Debian 自由软件指导方针的作品。 我们为这些作品,在我们的档案库中留出了 “contrib" 以及 “non-free" 目录。在这些目录下的软件包,并不属于 Debian 系统 尽管它们已被配置成可以在 Debian 下使用。我们鼓励光盘制造商阅读这些目录下的软件的许可证,以判断他们是否可以在光盘中发行这些软件 。所以,尽管非自由软件并非 Debian 系统的一部分,我们仍支持它们的使用,并且我们为非自由软件提供了公共资源 (诸如我们的缺陷跟踪系统以及邮件列表)。

用户应该了解使用 non-freecontrib 中的软件包所需要冒的风险:

  • 使用类似的软件包会失去自由

  • 失去 Debian 对软件包的支持(这些软件包无法访问源代码,Debian 不能进行完全的支持。)

  • 污染你100%自由的 Debian 系统

Debian 自由软件指导方针为 Debian 设立了自由软件标准。Debian 对软件包中的软件做了最广泛的解释,包含文档、固件、图标和图形数据。这使得 Debian 的自由软件标准非常严格。

典型的 non-freecontrib 软件包包含了下列类型的自由分发的软件包:

  • 在GNU Free Documentation License下的文档包 ,包含不变的部分 ,比如GCC 和 Make的。 (大多数都可以在non-free/doc找到 .)

  • 包含没有源代码的二进制数据的固件软件包,例如在 第 9.10.5 节 “硬件驱动和固件” 中列出的 non-free 软件包。(多见于 non-free/kernel 部分。)

  • 游戏和字体软件包,对商业使用和/或内容修改进行了限制。

请注意,non-freecontrib 软件包的数量少于 main 软件包的2%。允许访问 non-freecontrib 并不会模糊软件包的来源。使用 aptitude(8) 的全屏交互式界面可以提供完全的可见性和完全的控制,可以让你决定安装来自某个部分的软件包,来使你的系统保持自由。

2.1.6. 软件包依赖关系

Debian 系统通过其控制文件字段中的版本化二进制依赖声明机制来提供一致的二进制软件包集合。下面有一些它们的简单定义。

  • “依赖”

    • 绝对的依赖,所有在这里列出的软件包都必须同时或提前安装。

  • "预依赖"

    • 类似于 Depends,但列出的软件包必须提前完成安装。

  • "推荐"

    • 这里表示一个强,但不是绝对的依赖关系 。大多数用户不会想要这个包,除非在这里列出的所有包都已经安装。

  • "建议"

    • 较弱的依赖。这个软件包的大多数用户可能会从安装所列的软件包中受益,但没有它们也可以有适当的功能。

  • "增强"

    • 这里表明一个像建议的弱依赖关系,不装也没关系。

  • "破损"

    • 表明一个软件包不兼容一些版本规范。一般的解决方法就是升级列出的所有软件包。

  • "冲突"

    • 这表明了绝对的不兼容。为了安装这个软件包必须移除所有列出的软件包。

  • "替代"

    • 这表明这个文件安装的文件会替代所列的软件包的文件。

  • "提供"

    • 表明这个软件包会提供所列的软件包所有的文件和功能。

注意

请注意,同时将 “Provides” 、“Conflicts” 和 “Replaces” 定义到一个虚拟的软件包是一个明智的配置。这确保了在任何一个时间只能安装一个提供该虚拟包的真正软件包。

包含源代码依赖关系的官方定义位于 the Policy Manual: Chapter 7 - Declaring relationships between packages。

2.1.7. 包管理的事件流

这是 APT 提供的软件包管理的简单事件流摘要。

  • 更新(“apt update”、“aptitude update” 或 “apt-get update”):

    1. 从远程档案库获取档案库元数据

    2. 重建和更新 APT 使用的本地元数据

  • 升级(“apt upgrade” 和 “apt full-upgrade”,或 “aptitude safe-upgrade” 和 “aptitude full-upgrade”,或 “apt-get upgrade” 和 “apt-get dist-upgrade”):

    1. 选择候选版本,它所安装的软件包通常都是最新的可用版本(例外参见 第 2.7.3 节 “调整候选版本” )

    2. 解决软件包依赖关系

    3. 如果候选版本与已安装的版本不同,会从远程档案库获取所选择的二进制软件包

    4. 解包所获取的二进制软件包

    5. 运行 preinst 脚本

    6. 安装二进制文件

    7. 运行 postinst 脚本

  • 安装(“apt install ...”、“aptitude install ..." 或者 "apt-get install …” ):

    1. 选择命令行中列出的包

    2. 解决软件包依赖关系

    3. 从远程服务器获取已选二进制包

    4. 解包所获取的二进制软件包

    5. 运行 preinst 脚本

    6. 安装二进制文件

    7. 运行 postinst 脚本

  • 移除 ("apt remove …", “aptitude remove …” 或 “apt-get remove …”):

    1. 选择命令行中列出的包

    2. 解决软件包依赖关系

    3. 运行 prerm 脚本

    4. 移除已安装的文件,除了配置文件

    5. 运行 postrm 脚本

  • 清除 ("apt purge",“aptitude purge …” 或 “apt-get purge …”):

    1. 选择命令行中列出的包

    2. 解决软件包依赖关系

    3. 运行 prerm 脚本

    4. 移除已安装的文件,包含配置文件

    5. 运行 postrm 脚本

这里,为了大局,我特意省略了技术细节。

2.1.8. 对包管理问题的第一个回应

你应该阅读优良的官方文档。第一个阅读的文档是 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) 网站。

表 2.5. 解决特定软件包问题的主要网站

网站 命令
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) 命令。

2.2. 基础软件包管理操作

在 Debian 系统中有许多基于 APT 的软件包管理工具可以在 Debian 系统上进行基于仓库的软件包管理操作。在这里,我们将介绍 3 种基本的软件包管理工具:apt,apt-get / apt-cacheaptitude

对于涉及软件包安装或更新软件包元数据的软件包管理操作,你必须有 root 权限。

2.2.1. apt vs. apt-get / apt-cache vs. aptitude

尽管 aptitude 是作者主要使用的一个非常好的可互动工具,但你应该知道下列警示:

  • 不建议在新版本发布后在 stable Debian 系统上使用 aptitude 命令来进行跨版本的系统升级。

    • 建议使用"apt full-upgrade"或“apt-get dist-upgrade” 来进行这个操作。参见 Bug #411280。

  • aptitude命令有时候会为了testingunstable Debian 系统升级清除大量软件包。

    • 这个情况吓坏了许多的系统管理员。请不要惊慌。

    • 这似乎大多数是由元软件包的依赖或推荐的软件包版本偏差造成的,例如 gnome-core

    • 要解决这个问题,可以在 aptitude 命令菜单中选择 “取消待执行的动作” ,退出 aptitude,并使用 “apt full-upgrade”。

apt-getapt-cache 是最基础 的基于 APT 的软件包管理工具。

  • apt-getapt-cache 只提供命令行用户界面。

  • apt-get 是进行跨版本的主系统升级等操作的最合适工具。

  • apt-get 提供了一个强大的软件包依赖解析器。

  • apt-get 对硬件资源的要求不高。它消耗更少的内存并且运行速度更快。

  • apt-cache 提供了一个 标准的正则表达式来搜索软件包名称和描述。

  • apt-getapt-cache 可以使用 /etc/apt/preferences 来管理软件包的多个版本,但这非常繁琐。

apt 命令是一个用于软件包管理的高级命令行界面。它基本上是 apt-getapt-cache 和类似命令的一个封装,被设计为针对终端用户交互的界面,它默认启用了某些适合交互式使用的选项。

  • apt 工具在用户使用 apt install 安装软件包时提供了一个友好的进度条。

  • 在成功安装下载的软件包后,apt 将默认删除缓存的 .deb 软件包。

提示

建议用户使用新的 apt(8) 命令用于 交互式的使用场景,而在 shell 脚本中使用 apt-get(8) 和apt-cache(8) 命令。

aptitude 命令是最通用的基于 APT 的软件包管理工具。

  • aptitude 提供了一个全屏的交互式文本用户界面。

  • aptitude 同样也提供了一个命令用户界面。

  • aptitude 是用于日常软件包管理(例如检查已安装的软件包和搜索可用的软件包)的最合适工具。

  • aptitude 对硬件资源的要求更高。它消耗更多的内存并且运行速度更慢。

  • aptitude 提供一个增强的正则表达式来搜索所有的软件包元数据。

  • aptitude 可以管理软件包的多个版本,并且不使用 /etc/apt/preferences,这会十分直观。

2.2.2. 命令行中的基础软件包管理操作

下面是使用 apt(8), aptitude(8) 和 apt-get(8) / apt-cache(8) 的命令行基本软件包管理操作。

表 2.6. 使用 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-getaptitude 能够混用,没有大问题。

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-getapt-cache 命令来替代 aptitude 命令。

你可以在 “aptitude” 后面使用的命令选项。

表 2.7. aptitude(8) 中重要的命令选项

命令选项 说明
-s 模拟命令的结果
-d 仅下载,不进行安装/更新
-D 在自动安装和删除前,显示简要的说明

更多内容参见 aptitude(8) 和位于 “/usr/share/doc/aptitude/README” 的 “aptitude 用户手册”。

2.2.3. aptitude 的交互式使用

要使用交互式的软件包管理,你可以像下面那样以交互模式启动 aptitude

$ sudo aptitude -u
Password:

这将更新档案库信息的本地副本,并以菜单的形式全屏显示软件包列表。 aptitude 将它的配置放在 “~/.aptitude/config”。

提示

如果你想用 root 的配置而非使用者的,可以在上面的例子中使用 “sudo -H aptitude …” 代替 “sudo aptitude …” 。

提示

aptitude 以交互模式启动时,会自动设置待执行的动作。如果您不喜欢,您可以通过菜单:“动作” → “取消待执行的动作” 来取消它。

2.2.4. aptitude 的按键绑定

在全屏模式下浏览软件包状态和设置动作的按键如下。

表 2.8. aptitude 的按键绑定

快捷键 键绑定功能
F10Ctrl-t 菜单
? 显示按键帮助(更加完整的清单)
F10 → 帮助 → 用户手册 显示用户手册
u 更新软件包档案库信息
+ 标记该软件包以便升级安装
- 标记该软件包以便移除(保留配置文件)
_ 标记该软件包以便清除(移除配置文件)
= 将软件包设为保持状态
U 标记所有可升级包(动作如同 full-upgrade
g 开始 下载安装 所选择包
q 退出该界面并保存变更
x 退出该界面并清除变更
Enter 查看软件包的信息
C 查看软件包的变更记录
l 变更软件包的显示限制
/ 搜寻匹配的第一个软件包
\ 重复上一个搜索

可以通过命令行指定文件名称,也可以通过按 “l” 或 “/” 之后在菜单提示下输入下列所述的 aptitude 正则表达式。aptitude 正则表达式可以使用 “~n” 开头后接软件包名称的字符串来精确匹配软件包名称。

提示

你需要在可视化界面中按下 “U” 键让所有的已安装软件包升级到可用版本 。否则只有选中的软件包和一些与之有依赖关系的软件包才能被升级到可用版本

2.2.5. aptitude 软件包视图

aptitude(8) 全屏交互模式下,软件包列表里的软件包会像下面的例子那样显示。

idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

该行的从左到右的含义如下。

  • “状态”标签 (第一个字母)

  • “动作”标签(第二个字母)

  • “自动”标签(第三个字母)

  • 软件包名称

  • 该“动作”对磁盘空间的变化

  • 软件包当前版本

  • 软件包可用版本

提示

您可以在帮助菜单中找到完整的标签列表,按“?”即可在帮助菜单底部显示。

可用版本 的选择是依据当前的本地首选项(参见 apt_preferences(5) 和 第 2.7.3 节 “调整候选版本”)。

软件包视图的几种类型都可以在“ 视图 ”菜单下找到。

表 2.9. aptitude 视图

本文题目:【Debian参考手册】第 2 章 Debian软件包管理
网页链接:http://www.shufengxianlan.com/qtweb/news49/98899.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

视图 视图描述