银河麒麟桌面版包管理器(一)
以下内容摘自《银河麒麟操作系统进阶应用》一书
为便于从整体上把握本章内容,图31绘制了本章介绍的银河麒麟桌面版包管理器层次架构图。
deb包格式
(1)deb包的组成。
在Debian及其派生的Linux发行版中,deb包扮演了至关重要的角色。作为这些系统上软件分发和安装的标准格式,理解deb包的结构和管理机制是很有必要的。deb包不仅仅是简单的软件容器,还包含了软件运行所需的依赖信息、配置文件,以及安装前后的脚本指令(如图32所示)。这些都是确保软件能够正确安装和运行的关键因素。
- 控制信息:这部分包含了软件包的元数据,如软件版本、维护者信息、软件包依赖关系等。这些控制信息的文件格式遵循Deb822格式标准。Deb822是一种基于文本的结构化数据表示形式,其命名源自RFC 822标准(该标准定义了互联网文本消息格式)。Deb822格式主要用于描述Debian软件包的元数据,确保包管理系统能够正确地解析和处理这些信息。Deb822文件的主要特点是采用简单、直观的键值对格式,这使得它既便于人类阅读,也易于机器解析。
- 数据文件:包含了软件包本身的所有文件和目录。这些是安装到系统中的实际内容。
- 脚本:包含了preinst、postinst、prerm和postrm等脚本,这些脚本在软件包安装、升级或卸载的不同阶段被执行,用于进行配置和清理工作。
(2)deb包的高级功能。
deb包不仅仅是一个简单的软件分发格式,还是一个强大的系统管理工具,如图33所示。
- 配置文件处理:deb包可以包含配置文件,并在软件包安装或更新时智能处理用户对配置文件的修改。这是通过dpkg(将在下一节介绍)的配置文件管理机制实现的。dpkg能够检测到用户对配置文件的改动,并在包更新时提供选项,让用户选择是保留修改、使用包的新版本,还是查看差异。
- 虚拟包和替代:deb包允许创建虚拟包,这是一种没有实际内容的包,仅作为其他包的依赖存在。通过这种机制,可以建立复杂的依赖关系,例如,一个实际软件包可以提供多个虚拟包的功能,或多个包可以替代同一个虚拟包。
- 触发器:触发器允许deb包在安装、更新或删除时触发相关脚本执行。这对于处理诸如字体缓存更新、桌面数据库更新等任务特别有用,因为这样的任务只有在相关的包发生变化时才执行,避免了不必要的重复处理。
deb包的管理
使用dpkg管理deb包
在Debian及其衍生系统中,dpkg(Debian Package)是最基础的包管理工具,尽管普通用户通常更多地通过APT(Advanced Package Tool)这样的高级工具间接地使用dpkg,但掌握dpkg的基本用法可以在系统管理中实现更精细的控制。
安装、卸载、配置及清除软件包是日常维护系统时的基本任务。了解如何使用dpkg来执行这些操作,将帮助用户有效地管理Debian系操作系统。表32列举了dpkg常见用法。
表32 dpkg常见用法
命 令 | 解 释 |
dpkg -i <package-file.deb> dpkg -i ./*.deb | 安装或更新.deb文件的软件包 批量安装当前目录下的所有.deb软件包 |
dpkg -r <package> | 从系统中删除软件包,但保留其配置文件 |
dpkg --purge <package> | 从系统中彻底删除软件包及其配置文件 |
dpkg -I <package-file.deb> | 显示.deb文件的详细信息,如版本、架构等 |
dpkg --unpack <package-file.deb> | 解压.deb文件,但不配置软件包 |
dpkg --configure <package> | 配置或重新配置已解压但未配置的软件包 |
在银河麒麟桌面版中安装.deb软件包时,有时会出现如图34所示的报错信息,这是因为操作系统“安全中心”的“应用保护”功能限制了未验证第三方软件包的安装。
可以打开“设置>安全中心>应用保护”,临时将应用程序“来源检查”、“应用程序执行控制”、“应用防护控制”关闭后再安装。
当遇到软件包数据库损坏时,可使用dpkg --configure -a命令尝试修复所有未正确配置的包。在安装过程中断时,可能产生未完全安装的软件包,这些软件包可能会妨碍进一步的包管理操作。dpkg --remove和dpkg --purge命令分别提供了卸载和清除这些半安装包的手段。dpkg-query命令允许用户执行更复杂的搜索查询,例如,使用正则表达式来定位软件包,其常见用法如表3-3所示。
表33 dpkg-query命令常见用法
命 令 | 解 释 |
dpkg-query -l | 列出所有已安装的软件包 |
dpkg-query -s <包名称> | 显示特定软件包的信息 |
dpkg-query -L <包名称> | 列出特定软件包的文件位置 |
dpkg-query -S /path/to/file | 搜索包含特定文件的软件包 |
高级dpkg用法还包括使用dpkg日志进行问题追踪,该日志存储在/var/log/dpkg.log中,记录了所有dpkg活动的详细信息。通过文本处理工具,可以从日志中筛选出有用的信息,以解决问题或优化系统性能。
可先使用dpkg --get-selections导出所有已安装软件包的列表,在其他计算机上再使用dpkg --set-selections导入这些软件包列表,可以实现批量安装。配合备份工具和脚本可以实现软件配置的自动化备份与恢复,保证在系统故障时能够迅速重建服务。
使用gdebi安装deb包
dpkg在安装Debian包时,若遇到依赖问题,则需要用户手动解决。而gdebi可以在安装deb包时自动下载并安装所需的依赖项,简化了安装过程。
(1)安装gdebi工具。
sudo apt-get update
sudo apt-get install gdebi
(2)使用gdebi安装deb包。
- 命令行形式:sudo gdebi <package_name.deb>。
- 图形用户界面形式:使用gdebi-gtk打开图形用户界面的gdebi,选择deb包后再安装。
使用APT安装deb包
APT作为Debian及其派生系统的默认包管理器,除了具有从远程软件仓库中下载安装软件等功能,也支持安装本地的.deb格式的软件包,具体命令如下:
sudo apt install ./package_name.deb
小结
对于普通用户来说,gdebi和apt是安装.deb文件的最佳选择,因为它们都能够自动处理依赖问题,简化安装过程。而dpkg更适合有经验的用户或在特定情况下使用,比如已经手动解决了所有依赖问题时。在安装.deb软件包的场景下,三者的比较见表34。
表34 dpkg、gdebi、apt在安装.deb软件包时的比较
特 性 | dpkg | gdebi | apt |
自动解决依赖 | 否 | 是 | 是 |
图形用户界面支持 | 否 | 是(gdebi-gtk) | 否 |
包信息显示 | 部分(通过dpkg -I查看) | 是 | 是(通过apt show查看) |
处理速度 | 快 | 中 | 中 |
占用系统资源 | 低 | 低 | 中 |
安装前检查依赖 | 否 | 是 | 是 |
使用简便性 | 中等 | 高 | 高 |
依赖错误处理 | 需要手动解决 | 自动提示并解决 | 自动提示并解决 |