帮你快速理解、总结文档立即下载

软件包管理

最近更新时间:2026-08-24 18:27:31
我的收藏
在 TencentOS Server 上进行软件包管理时,涉及查询、安装、更新、删除及软件源配置等多种操作。本文介绍如何使用 dnf(Dandified YUM)和 rpm 工具完成上述任务,帮助您高效管理软件包全生命周期。
说明:TencentOS Server 4 默认使用 dnf, TencentOS Server 3 yumdnf 均可用。

前提条件

权限要求:软件包安装/删除需要 root 权限;查询操作普通用户即可
网络要求:在线安装需具备访问公网或内网软件源的网络能力

软件源介绍

TencentOS Server 提供以下两类软件源:
基础软件源:包含 [BaseOS][AppStream],提供系统核心组件和应用程序包,默认已配置。
EPOL 源(Extra Packages for TencentOS Linux):提供额外的增强功能包,默认已配置。
默认仅启用 [BaseOS][AppStream] 两项。如需使用其他源(如 debuginfo、source),可在对应配置段中将 enabled 设置为 1
cat /etc/yum.repos.d/TencentOS.repo
返回示例:
[BaseOS]
name=BaseOS $releasever - $basearch
baseurl=https://mirrors.tencent.com/tlinux/$releasever/BaseOS/$basearch/os/Packages/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
[AppStream]
name=AppStream $releasever - $basearch
baseurl=https://mirrors.tencent.com/tlinux/$releasever/AppStream/$basearch/os/Packages/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
[BaseOS-debuginfo]
name=BaseOS-debuginfo $releasever - $basearch
baseurl=https://mirrors.tencent.com/tlinux/$releasever/BaseOS/$basearch/debug/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
[AppStream-debuginfo]
name=AppStream-debuginfo $releasever - $basearch
baseurl=https://mirrors.tencent.com/tlinux/$releasever/AppStream/$basearch/debug/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
[BaseOS-source]
name=BaseOS-source $releasever
baseurl=https://mirrors.tencent.com/tlinux/$releasever/BaseOS/source/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
[AppStream-source]
name=AppStream-source $releasever
baseurl=https://mirrors.tencent.com/tlinux/$releasever/AppStream/source/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS
如果 EPOL 源配置缺失,可以通过如下命令安装:
dnf install -y epol-release
安装完成之后即可访问 EPOL 中的 rpm 包。

搭建本地软件源

对于需要离线使用软件源的场景,您可以自行搭建本地软件源,具体步骤如下:
1. 创建目录
mkdir -p /mnt/myiso # 创建放置 iso 的目录,自定义目录,请确保存储空间充足
mkdir -p /mnt/my_yum # 创建挂载 iso 的目录,自定义目录,请确保存储空间充足
2. 下载 ISO 镜像文件(此处以 x86_64 为例)
cd /mnt/myiso
wget https://mirrors.tencent.com/tlinux/4.0/isos/x86_64/TencentOS-Server-4.0-everything-x86_64.iso
说明:示例中的版本号仅作为演示,您需要按需填写对应的版本路径。
3. 挂载 ISO
临时挂载(重启后失效)
mount -o loop /mnt/myiso/TencentOS-Server-4.0-everything-x86_64.iso /mnt/my_yum/
永久挂载(重启后自动挂载)
编辑配置文件 vim /etc/fstab ,并添加以下内容
echo "/mnt/myiso/TencentOS-Server-4.0-everything-x86_64.iso /mnt/my_yum iso9660 loop,ro 0 0" >> /etc/fstab
挂载后即可通过 /mnt/my_yum 目录访问 ISO 中的 rpm 包:
cd /mnt/my_yum/
tree -L 2 .
输出示例:
.
├── AppStream
│ ├── Packages
│ └── repodata
├── BaseOS
│ ├── Packages
│ └── repodata
├── boot
│ └── grub2
├── EFI
│ └── BOOT
└── images
├── efiboot.img
├── eltorito.img
├── install.img
└── pxeboot

12 directories, 3 files
4. 配置本地 repo 源,可以参考如下:
# 查看 repo 文件,cat /etc/yum.repos.d/local.repo
[AppStream]
name=AppStream
baseurl=file:///mnt/my_yum/AppStream
priority=1
enabled=1
[BaseOS]
name=BaseOS
baseurl=file:///mnt/my_yum/BaseOS
priority=1
enabled=1
5. 验证。可以尝试安装一个软件包,或者查询源中的软件包进行验证。

搭建临时本地源

除了使用官方提供的 ISO 搭建本地源之外,您也可以自行准备 rpm 包,将指定目录制作为临时的本地源,具体步骤如下:
1. 创建目录
mkdir -p /mnt/local_repo/x86_64/Packages # 自定义目录位置,请确保存储空间充足
2. 安装 createrepo 工具
dnf install -y createrepo
3. 将 rpm 包拷贝到本地源目录
cp *.rpm /mnt/local_repo/x86_64/Packages
4. 创建 repodata
createrepo /mnt/local_repo/x86_64
执行完后将在 /mnt/local_repo/x86_64 目录下创建 repodata。
5. 配置本地 repo 源,可以参考如下:
cat /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt/local_repo/x86_64
priority=1
enabled=1
6. 验证,可以尝试安装一个软件包,或者查询源中的软件包进行验证。

包管理配置

系统默认通过 dnf 工具进行软件包管理。dnf 配置分为两部分:dnf 本身的配置和源配置。

dnf 配置

系统默认的配置如下:
cat /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
zchunk=False
除默认配置外,您也可以自行调整 dnf 配置。完整的参数说明可执行 man dnf.conf 查看。

repo 源配置

上文已经列出了环境中默认的 repo 配置,常见的配置说明如下,您可按需调整。
参数
值类型
默认值
说明
name
string
repo 源的名称
baseurl
list
repo 源的 URL 列表
priority
integer
repo 源的优先级,取值范围 0 - 99,值越小优先级越高
gpgcheck
boolean
1
是否进行 GPG 校验
gpgkey
string
GPG 公钥的 URL 或本地路径,配合 gpgcheck 使用
installonly_limit
integer
3
允许被并行安装的软件包数量
clean_requirements_on_remove
boolean
True
是否在卸载软件包时同时卸载没有被其他软件包使用的依赖
best
boolean
True
是否在安装软件包时安装最高版本,如果无法安装则失败
skip_if_unavailable
boolean
False
设为 True 时跳过不可用的源,设为 False(默认)时遇到不可用的源会报错
zchunk
boolean
False
是否通过 zchunk 格式压缩 repo 的元数据

软件源(Repo)管理

查看软件源

# 列出所有已启用的软件源
dnf repolist
# 列出所有软件源(包含禁用的)
dnf repolist all
# 查看某个软件源的详细信息
dnf repoinfo <repo-name>
dnf repolist all 输出示例:
repo id repo name status
AppStream TencentOS-4 - AppStream enabled
BaseOS TencentOS-4 - BaseOS enabled
extras TencentOS-4 - Extras enabled

启用/禁用软件源

# 临时禁用某个源(仅本次命令生效)
dnf install <包名> --disablerepo=<repo-id>
# 永久启用某个源
dnf config-manager --enable <repo-id>
# 永久禁用某个源
dnf config-manager --disable <repo-id>

添加软件源

# 通过 URL 添加软件源
dnf config-manager --add-repo <repo-url>
# 手动创建 .repo 文件
vi /etc/yum.repos.d/<name>.repo
软件源配置文件格式示例:
[myrepo]
name=My Custom Repository
baseurl=https://example.com/repo/
enabled=1
gpgcheck=1
gpgkey=https://example.com/RPM-GPG-KEY

常用包管理命令

软件包查询

列出已安装软件包:
# 列出当前环境所有已安装软件包
dnf list installed
# 列出所有已安装的软件包(rpm 方式)
rpm -qa
说明rpm -qa 会列出系统全量安装的包列表,一般配合 grep 命令使用。
搜索软件包:
# 搜索包含关键词的软件包
dnf search <包名>
# 在包名和摘要中搜索(更精确)
dnf search --all <包名>
查看软件包信息:
# 查看软件包的详细信息
dnf info <包名>
# 查询软件包信息(rpm 方式)
rpm -qi <包名>
# 查看软件包的文件列表
rpm -ql <包名>
# 查询文件属于哪个软件包
dnf provides /etc/<包名>/<包名>.conf
dnf provides "*.so.1"
# 查询文件属于哪个软件包(rpm 方式)
rpm -qf /etc/<包名>/<包名>.conf
列出软件包:
# 列出所有可安装的软件包(仅显示未安装的)
dnf list available
# 列出特定软件包的所有可用版本
dnf list <包名> --showduplicates
查询依赖关系:
# 查询哪些包依赖指定软件包
dnf repoquery --whatrequires <包名>
# 查询指定软件包的依赖
dnf repoquery --requires <包名>

软件包安装

# 安装源中的软件包
dnf install -y <包名>
# 安装多个软件包
dnf install -y <包名1 > <包名2 > <包名3 >
# 安装指定版本
dnf install <包名-1.2.1 >
# 安装用户自己编译的 rpm 包文件
dnf localinstall -y <包名>.rpm
dnf install /path/to/<包名>.rpm
# 安装软件包组
dnf groupinstall "包组名"
# 查看可用软件包组
dnf grouplist

软件包更新

# 检查有哪些可用更新(不执行更新)
dnf check-update
# 更新所有软件包(自动确认)
dnf update -y
# 更新指定软件包
dnf update <包名>
# 将已安装的 rpm 包升级
dnf upgrade <包名>
# 更新软件包组
dnf groupupdate "包组名"
警告:更新软件包可能引入依赖关系变化或兼容性问题,建议在测试环境验证后再在生产环境执行。更新前可使用 dnf update --downloadonly 预下载,或使用 dnf history 记录便于回滚。

软件包降级

# 将已安装的 rpm 包降级
dnf downgrade <包名>
警告:降级操作可能引发依赖冲突,建议先确认目标版本与依赖包的兼容性后再执行。

软件包卸载

# 卸载软件包(保留依赖)
dnf remove <包名>
# 卸载软件包及其未被其他包使用的依赖
dnf autoremove <包名>
# 清理不再需要的依赖包
dnf autoremove
警告:卸载软件包可能影响依赖该包的其他软件或服务。卸载时会提示将要删除的包列表,请仔细确认后再执行,避免误删系统关键组件导致系统异常。建议在卸载前使用 dnf repoquery --whatrequires <包名> 检查影响范围。

下载软件包

# 下载源中的 rpm 包(不安装)
dnf download <包名>

查看操作历史

# 查看 dnf 操作历史
dnf history
# 查看某次操作的详情
dnf history info <id>
# 回滚某次操作
dnf history undo <id>

RPM 基础操作

rpm 命令可以直接操作 RPM 包,无需连接软件源:
# 查询软件包是否已安装
rpm -q <包名>
# 查询所有已安装的软件包
rpm -qa
# 查询软件包的安装文件
rpm -ql <包名>
# 查询文件属于哪个软件包
rpm -qf /etc/ <包名>/ <包名>.conf
# 查询软件包的详细信息
rpm -qi <包名>
# 查询软件包的版本
rpm -q --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\\n" <包名>
# 安装 RPM 包(不解决依赖,适用于离线场景)
rpm -ivh <包名>.rpm
# 强制安装(忽略依赖检查)
rpm -ivh --force --nodeps <包名>.rpm
# 卸载
rpm -e <包名>

模块流管理(TencentOS Server 3)

TencentOS Server 3 支持通过模块流安装同一软件的多个版本:
# 查看可用模块
dnf module list
# 查看特定模块信息
dnf module info python3
# 启用特定版本流
dnf module enable python3:3.8
# 安装模块
dnf module install python3:3.8/default
# 重置模块(恢复默认流)
dnf module reset python3

缓存管理

# 清理软件包缓存
dnf clean packages
# 清理所有缓存
dnf clean all
# 重新生成元数据缓存
dnf makecache

软件包验证

# 验证软件包已安装
dnf list installed | grep <包名>
# 验证软件包完整性
rpm -V <包名>
# 查看 dnf 日志
cat /var/log/dnf.log | tail -50

常见报错处理

install 失败

问题一:GPG 密钥未安装

问题描述:安装软件包时报如下错误:
You have enabled checking of packages via GPG keys. This is a good thing.
However, you do not have any GPG public keys installed. You need to download
the keys for packages you wish to install and install them.
You can do that by running the command:
rpm --import public.gpg.key
处理方案:导入系统 GPG 公钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS-*

问题二:RPM 数据库损坏

问题描述:安装或查询软件包时报如下错误:
error: cannot open Packages database in /var/lib/rpm
处理方案:多见于强制结束 yum/dnf 进程导致 rpm 数据库损坏,处理步骤如下:
1. 删除损坏的 rpmdb 文件:
rm -f /var/lib/rpm/__db.*
2. 重建 rpm 数据库:
rpm --rebuilddb
dnf clean all

问题三:报错提示 No match for argument

问题描述:安装软件包时报 No match for argument 错误,通常由缓存过期或包名不正确导致。
处理方案:按以下步骤排查和修复:
# 清理缓存后重试
dnf clean all
dnf makecache
dnf install <包名>
# 确认软件源已启用
dnf repolist
# 尝试搜索正确的包名
dnf search <关键词>

问题四:报错提示 GPG key check failed

问题描述:安装软件包时报 GPG 校验失败。
处理方案:可选择导入 GPG 密钥或临时跳过校验:
# 方法1:导入 GPG key
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-TencentOS-*
# 方法2:临时跳过 GPG 检查(不推荐在生产环境使用)
dnf install <包名> --nogpgcheck

dnf update 速度很慢

问题描述:执行 dnf update 时下载速度缓慢。
处理方案:检查并优化软件源配置:
# 确认使用了镜像源
dnf repolist -v | grep Repo-baseurl
# 更换软件源(编辑 /etc/yum.repos.d/*.repo 修改 baseurl)

dnf 和 rpm 的数据库不一致

问题描述dnfrpm 查询结果不一致。
处理方案:重建 RPM 数据库并清理 dnf 缓存:
# 重建 RPM 数据库
rpm --rebuilddb
dnf clean all