软件包管理
在 Linux 系统中,软件包管理是系统管理的重要组成部分。Rocky Linux 作为企业级 Linux 发行版,提供了强大而灵活的软件包管理系统。本教程将详细介绍 Rocky Linux 中的软件包管理工具,包括 DNF、RPM 的使用方法,软件仓库管理以及常见软件安装方式。
软件包管理基础
软件包管理概念
软件包是一个或多个程序及其相关文件(配置文件、文档等)的集合,以标准格式打包。软件包管理系统提供了安装、升级、删除和查询软件包的功能,同时处理软件包之间的依赖关系。
在 Rocky Linux 中,主要使用以下组件进行软件包管理:
- RPM(Red Hat Package Manager):底层软件包管理工具,负责软件包的安装、升级和删除
- DNF(Dandified YUM):高级软件包管理工具,是 YUM 的下一代版本,提供了更好的性能和用户体验
- 软件仓库(Repository):存储软件包的服务器,包含软件包及其元数据
DNF 包管理器
DNF 是 Rocky Linux 中默认的软件包管理器,提供了强大的软件包管理功能。
基本语法
dnf [选项] 命令 [软件包名称...]安装软件包
# 安装单个软件包
sudo dnf install package_name
# 安装多个软件包
sudo dnf install package1 package2 package3
# 安装指定版本的软件包
sudo dnf install package_name-1.0.0
# 重新安装软件包
sudo dnf reinstall package_name
# 安装软件包组
sudo dnf groupinstall "Development Tools"升级软件包
# 检查可用更新
sudo dnf check-update
# 升级单个软件包
sudo dnf update package_name
# 升级所有软件包
sudo dnf update
# 或简写为
sudo dnf up
# 升级系统内核(通常会自动包含在 update 中)
sudo dnf update kernel
# 升级软件包组
sudo dnf groupupdate "Development Tools"删除软件包
# 删除软件包(保留配置文件)
sudo dnf remove package_name
# 或使用老式命令
sudo dnf erase package_name
# 删除软件包及其依赖(不再需要的)
sudo dnf autoremove package_name
# 删除软件包组
sudo dnf groupremove "Development Tools"查询软件包
# 搜索软件包
sudo dnf search keyword
# 精确搜索软件包名称
sudo dnf search --name package_name
# 显示软件包详情
sudo dnf info package_name
# 列出所有已安装的软件包
sudo dnf list installed
# 列出所有可安装的软件包
sudo dnf list available
# 列出所有软件包(已安装和可安装)
sudo dnf list all
# 列出软件包组
sudo dnf grouplist
# 显示软件包组详情
sudo dnf groupinfo "Development Tools"
# 查找哪个软件包提供特定文件
sudo dnf provides /path/to/file
# 列出软件包中包含的文件
sudo dnf repoquery -l package_nameDNF 缓存管理
# 清理所有缓存
sudo dnf clean all
# 只清理过期缓存
sudo dnf clean expire-cache
# 下载软件包但不安装
sudo dnf download package_nameDNF 高级功能
# 查看软件包的依赖关系
sudo dnf deplist package_name
# 显示软件包的变更日志
sudo dnf changelog package_name
# 检查软件包的安全更新
sudo dnf updateinfo list security
# 只更新安全相关的软件包
sudo dnf update --security
# 显示事务历史
sudo dnf history
# 显示特定事务的详情
sudo dnf history info 1
# 回滚到特定事务
sudo dnf history rollback 1DNF 配置
DNF 的主配置文件是 /etc/dnf/dnf.conf,可以通过编辑此文件来自定义 DNF 的行为:
sudo vim /etc/dnf/dnf.conf常见配置选项:
[main]
ggcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
max_parallel_downloads=10
deltarpm=True
keepcache=False
timeout=300配置选项说明:
gpgcheck=1:验证软件包的 GPG 签名installonly_limit=3:限制保留的内核版本数量clean_requirements_on_remove=True:删除软件包时自动清理不再需要的依赖best=True:总是尝试安装最佳可用版本skip_if_unavailable=False:仓库不可用时跳过max_parallel_downloads=10:最大并行下载数量deltarpm=True:启用增量 RPM 下载keepcache=False:不保留已安装的软件包timeout=300:下载超时时间(秒)
RPM 包管理工具
RPM 是 Rocky Linux 中底层的软件包管理工具,DNF 实际上是构建在 RPM 之上的高级工具。在某些情况下,可能需要直接使用 RPM 命令。
基本语法
rpm [选项] 命令 [软件包名称或文件...]安装软件包
# 安装 RPM 软件包
sudo rpm -ivh package.rpm
# 升级 RPM 软件包
sudo rpm -Uvh package.rpm
# 强制安装或升级(覆盖已安装文件)
sudo rpm -ivh --force package.rpm查询软件包
# 列出所有已安装的软件包
rpm -qa
# 查询特定软件包是否已安装
rpm -q package_name
# 显示软件包详情
rpm -qi package_name
# 列出软件包中包含的文件
rpm -ql package_name
# 列出软件包的配置文件
rpm -qc package_name
# 查找哪个软件包提供特定文件
rpm -qf /path/to/file
# 验证软件包的安装文件
rpm -V package_name删除软件包
# 删除软件包
sudo rpm -e package_name
# 强制删除(忽略依赖关系)
sudo rpm -e --nodeps package_name软件仓库管理
软件仓库是存储软件包的服务器,Rocky Linux 使用多个官方和第三方软件仓库。
查看已配置的仓库
# 列出所有已启用的仓库
sudo dnf repolist
# 列出所有仓库(包括已禁用的)
sudo dnf repolist all
# 显示特定仓库的详情
sudo dnf repoinfo repository_name启用和禁用仓库
# 临时启用仓库
sudo dnf --enablerepo=repository_name install package_name
# 临时禁用仓库
sudo dnf --disablerepo=repository_name update
# 永久启用或禁用仓库
sudo dnf config-manager --set-enabled repository_name
sudo dnf config-manager --set-disabled repository_name添加和删除仓库
# 使用 dnf config-manager 添加仓库
sudo dnf config-manager --add-repo repository_url
# 手动创建仓库配置文件
sudo vim /etc/yum.repos.d/custom.repo仓库配置文件示例:
[custom-repo]
name=Custom Repository
baseurl=http://example.com/repo/rocky/8/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://example.com/repo/RPM-GPG-KEY-custom导入 GPG 密钥
# 导入仓库的 GPG 密钥
sudo rpm --import http://example.com/repo/RPM-GPG-KEY-custom常用软件仓库
官方仓库
- BaseOS:提供核心操作系统包
- AppStream:提供应用程序流,包括额外的用户空间应用程序、运行时语言和数据库
- PowerTools:提供构建软件所需的开发工具和库
- Extras:提供额外的软件包,包括 EPEL 仓库的集成
EPEL 仓库
EPEL (Extra Packages for Enterprise Linux) 提供了许多在官方仓库中不可用的高质量软件包:
# 安装 EPEL 仓库
sudo dnf install epel-release -yELRepo 仓库
ELRepo 专注于硬件相关的软件包,如内核、显卡驱动等:
# 安装 ELRepo 仓库
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -yRemi 仓库
Remi 仓库提供了最新版本的 PHP 和相关软件:
# 安装 Remi 仓库
sudo dnf install dnf-utils -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y源码编译安装
除了使用包管理器外,有时还需要从源码编译安装软件。
安装编译工具
# 安装开发工具组
sudo dnf groupinstall "Development Tools" -y
# 安装常用的开发库
sudo dnf install openssl-devel zlib-devel pcre-devel -y源码编译安装步骤
- 下载源码包:
wget https://example.com/software-version.tar.gz- 解压源码包:
tar -xzvf software-version.tar.gz
cd software-version- 配置:
./configure --prefix=/usr/local/software --with-feature- 编译:
make -j$(nproc) # 使用所有可用的 CPU 核心- 安装:
sudo make install- 配置环境变量(可选):
sudo vim /etc/profile.d/software.sh添加以下内容:
export PATH=$PATH:/usr/local/software/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/software/lib使环境变量生效:
source /etc/profile.d/software.sh容器化软件安装
Docker 提供了另一种安装和运行软件的方式,特别适合开发和测试环境:
安装 Docker
# 安装 Docker 依赖
sudo dnf install dnf-utils device-mapper-persistent-data lvm2 -y
# 添加 Docker 仓库
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE
sudo dnf install docker-ce docker-ce-cli containerd.io -y
# 启动 Docker 服务
sudo systemctl start docker
# 设置 Docker 开机自启
sudo systemctl enable docker
# 验证 Docker 安装
sudo docker run hello-world使用 Docker 安装软件
# 拉取软件镜像
sudo docker pull nginx
# 运行容器
sudo docker run -d -p 80:80 --name nginx-server nginx
# 列出运行中的容器
sudo docker ps软件包管理最佳实践
- 优先使用官方仓库:官方仓库中的软件包经过测试,与系统兼容性更好
- 定期更新系统:
sudo dnf update可以确保系统安全和稳定 - 保持系统清洁:使用
sudo dnf autoremove清理不再需要的依赖 - 谨慎添加第三方仓库:第三方仓库可能导致软件包冲突
- 备份配置文件:在升级重要软件前备份配置文件
- 使用 DNF 历史:了解系统上的软件包变更历史
- 验证软件包签名:确保软件包的完整性和来源
常见问题与解决方案
依赖冲突
- 问题:安装软件包时出现依赖冲突
- 解决方案:
- 尝试使用
--best或--allowerasing选项:sudo dnf install package --allowerasing - 检查是否有冲突的仓库,暂时禁用它们:
sudo dnf --disablerepo=problematic-repo install package - 查找并删除冲突的软件包:
sudo dnf remove conflicting-package
- 尝试使用
仓库不可用
- 问题:无法访问软件仓库
- 解决方案:
- 检查网络连接:
ping mirror.rockylinux.org - 清理缓存:
sudo dnf clean all - 尝试使用不同的镜像:编辑仓库配置文件中的 baseurl
- 暂时禁用有问题的仓库:
sudo dnf --disablerepo=problematic-repo update
- 检查网络连接:
GPG 密钥错误
- 问题:安装软件包时出现 GPG 密钥错误
- 解决方案:
- 导入正确的 GPG 密钥:
sudo rpm --import key-url - 临时禁用 GPG 检查(不推荐):
sudo dnf install package --nogpgcheck
- 导入正确的 GPG 密钥:
软件包无法找到
- 问题:无法找到需要的软件包
- 解决方案:
- 检查软件包名称是否正确:
sudo dnf search keyword - 确保已启用包含该软件包的仓库:
sudo dnf repolist - 考虑添加提供该软件包的第三方仓库
- 如果官方仓库中没有,尝试从源码编译安装
- 检查软件包名称是否正确:
总结
本教程详细介绍了 Rocky Linux 中的软件包管理系统,包括:
- DNF 包管理器的基本和高级使用方法
- RPM 包管理工具的使用
- 软件仓库的管理,包括添加、启用和禁用仓库
- 常用的第三方软件仓库
- 从源码编译安装软件
- 使用 Docker 容器化安装软件
- 软件包管理的最佳实践和常见问题排查
掌握这些软件包管理技能,您可以轻松地在 Rocky Linux 系统中安装、更新和管理软件,保持系统的安全和稳定。在实际应用中,根据软件的重要性和来源,选择合适的安装方法,确保系统的安全性和稳定性。