1.4.1 包管理体系概览:RPM/DEB与包元数据

包管理体系概览:RPM/DEB与包元数据#

RPM 与 DEB 是 Linux 两大主流包管理体系,分别服务于 RHEL/CentOS/Rocky/Alma 等发行版与 Debian/Ubuntu 系列。理解包管理体系与包元数据结构,是后续仓库配置、依赖排查与安全更新的基础。

原理草图:包与元数据流转

文章图片

RPM 体系要点
- 代表发行版:RHEL/CentOS/Rocky/Alma、SUSE
- 包格式:.rpm
- 工具链:rpm(底层),yum/dnf(高层)
- 元数据入口:包头(依赖、脚本、文件清单、签名)

DEB 体系要点
- 代表发行版:Debian、Ubuntu
- 包格式:.deb
- 工具链:dpkg(底层),apt/apt-get(高层)
- 元数据入口:control(依赖、脚本、文件清单)


包元数据查看与命令示例#

示例 1:查看已安装包的元数据(RPM)

# 查看包信息(Name/Version/Release/Arch/InstallTime)
rpm -qi bash

# 查看包包含的文件
rpm -ql bash

# 查看包安装/卸载脚本
rpm -q --scripts bash

# 解释:
# -qi: query info
# -ql: query list files
# --scripts: 显示 %pre/%post/%preun/%postun

示例 2:查看包文件的元数据(RPM,未安装)

# 对本地包文件查询元数据
rpm -qpi /tmp/nginx-1.24.0-1.el8.x86_64.rpm
rpm -qpl /tmp/nginx-1.24.0-1.el8.x86_64.rpm

示例 3:查看已安装包的元数据(DEB)

# 查看包控制信息
dpkg -s bash

# 查看包文件列表
dpkg -L bash

# 解释:
# -s: status/metadata
# -L: list files

示例 4:查看包文件的元数据(DEB,未安装)

# 查看 control 信息
dpkg-deb -I /tmp/nginx_1.24.0-1_amd64.deb

# 查看包内容文件清单
dpkg-deb -c /tmp/nginx_1.24.0-1_amd64.deb

安装示例(含说明与预期效果)#

RPM 安装(低层)

# 安装本地 RPM 包
sudo rpm -ivh /tmp/nginx-1.24.0-1.el8.x86_64.rpm

# 预期效果:输出 Installing... 并写入数据库
# -i: install
# -v: verbose
# -h: progress bar

DEB 安装(低层)

# 安装本地 DEB 包
sudo dpkg -i /tmp/nginx_1.24.0-1_amd64.deb

# 预期效果:配置脚本执行完成,提示 Setting up ...

实际生产更推荐使用高层工具(yum/dnf/apt)以自动处理依赖。


常见问题与排错#

问题 1:依赖缺失(RPM)

# 现象:error: Failed dependencies
# 解决:用 yum/dnf 自动补齐依赖
sudo dnf install /tmp/nginx-1.24.0-1.el8.x86_64.rpm

问题 2:依赖缺失(DEB)

# 现象:dpkg: dependency problems
# 解决:使用 apt 修复依赖
sudo apt-get -f install

问题 3:包文件损坏/签名异常

# RPM 校验包完整性
rpm -K /tmp/nginx-1.24.0-1.el8.x86_64.rpm

# DEB 校验包结构
dpkg-deb -I /tmp/nginx_1.24.0-1_amd64.deb

关键字段速查(命令可验证)#

  • Name/Version/Release(Revision)/Arch:rpm -qi / dpkg -s
  • Requires/Depends:rpm -qi / apt-cache depends <pkg>
  • Scripts:rpm -q --scripts / /var/lib/dpkg/info/<pkg>.postinst
  • Files:rpm -ql / dpkg -L

小练习#

  1. 使用 rpm -q --scripts/var/lib/dpkg/info/*.postinst 找出某包的安装脚本,并解释脚本可能做了什么。
  2. 下载一个 .rpm.deb 包,分别用 -qpi/-qpldpkg-deb -I/-c 对比元数据字段差异。
  3. 人为制造一次依赖缺失(如安装本地包),用 dnf/apt-get -f install 修复并记录输出。
  4. 写出你所在发行版中“同一功能”但包名不同的示例(如 httpd vs apache2)。