RHCE认证学习笔记(六):软件包管理 – 从RPM到YUM仓库

大家好,欢迎回到RHCE9学习笔记系列。在前几篇文章中,我们学习了Linux基础命令、文件操作、用户权限以及进程管理。今天,我们将进入软件包管理的世界,了解如何在RHEL系统中安装、升级和删除软件。无论是日常运维还是自动化部署,掌握软件包管理都是必备技能。
1. 软件包管理概述
Linux软件包管理分为两类:源码包和二进制包。
源码包:源代码形式,需要手动编译安装,优点是可以自定义编译选项、获得最新功能,缺点是安装复杂、依赖关系需要手动处理。
二进制包:预编译好的软件包,直接安装即可。优点是安装简单、速度快,缺点是受限于编译时的架构和依赖版本。
在RHEL系列(包括CentOS、Fedora)中,二进制包以.rpm结尾,称为RPM包。管理RPM包的工具主要有两个层面:
rpm命令:底层工具,直接操作RPM包,但不处理依赖关系。
yum/dnf命令:上层工具,自动解决依赖关系,从软件仓库中获取包。
RHEL 8及以后,dnf取代了yum作为默认包管理工具,但两者用法基本相同。本文以dnf为主,同时介绍yum兼容命令。
2. RPM包详解与操作
2.1 RPM包命名规则
一个典型的RPM包名称如下:
xfsprogs-4.19.0-2.el8.x86_64.rpm
各部分含义:
xfsprogs:软件名称
4.19.0:版本号
2:发行号(打包次数)
el8:适用操作系统(Enterprise Linux 8)
x86_64:CPU架构(noarch表示与架构无关)
主包与子包:通常主包是核心功能,如xfsprogs;辅助包如xfsprogs-devel提供开发头文件,是否安装取决于需要。
2.2 查看RPM包信息
查看已安装的包信息rpm -qi xfsprogs# 查看未安装的包信息(需要包全名)rpm -qpi xfsprogs-4.19.0-2.el8.x86_64.rpm# 列出包中的文件rpm -ql xfsprogs# 查询某个文件属于哪个包rpm -qf /usr/bin/xfs_repair
2.3 安装与卸载RPM包
安装(-i install, -v 详细, -h 进度条)rpm -ivh package.rpm# 卸载(-e erase, -v 详细, -h 进度条)rpm -evh package-name
依赖性问题:当安装A包需要B包,卸载B包时如果有其他包依赖B,操作会失败。这就是RPM的“依赖地狱”。为了解决依赖,我们需要更智能的工具——YUM/DNF。
3. YUM/DNF:自动解决依赖的包管理工具
YUM(Yellowdog Updater Modified)是一个前端工具,底层仍使用RPM,但通过软件仓库(repository)的元数据自动分析并解决依赖关系。
3.1 软件仓库的结构
一个软件仓库包含两部分:
实际RPM包文件
元数据(repodata),包括包名、版本、依赖关系等信息
YUM通过读取元数据,快速查找包和依赖,无需遍历所有RPM文件。
3.2 仓库配置文件
仓库配置文件存放在/etc/yum.repos.d/目录下,以.repo结尾。一个典型的仓库文件如下:
[myrepo]name=My Local Repositorybaseurl=file:///mnt/BaseOSenabled=1gpgcheck=0
[仓库ID]:唯一标识
name:描述信息
baseurl:仓库地址(可以是本地路径、HTTP、FTP、HTTPS)
enabled:是否启用(1启用,0禁用)
gpgcheck:是否检查GPG签名(生产环境建议开启)
4. 配置本地光盘仓库
当系统无法联网时,可以使用安装光盘作为本地仓库。
4.1 挂载光盘
mkdir /mnt/cdrommount /dev/sr0 /mnt/cdrom
4.2 创建仓库文件
vim /etc/yum.repos.d/local.repo
内容:
[local-baseos]name=Local BaseOSbaseurl=file:///mnt/cdrom/BaseOSenabled=1gpgcheck=0[local-appstream]name=Local AppStreambaseurl=file:///mnt/cdrom/AppStreamenabled=1gpgcheck=0
4.3 验证仓库
dnf repolist
应能看到local-baseos和local-appstream两个仓库。
5. YUM/DNF常用命令
5.1 查看仓库与包
dnf repolist 列出所有启用的仓库dnf repolist all # 包括禁用的dnf list # 列出所有可用包(会缓存元数据)dnf list installed # 列出已安装的包dnf list available # 列出可用的包dnf search httpd # 搜索包dnf provides /usr/bin/rm # 查找哪个包提供指定文件
5.2 安装与卸载
dnf install httpd 安装包(自动处理依赖)dnf install ./package.rpm # 安装本地RPM包(仍会处理依赖)dnf remove httpd # 卸载包dnf reinstall httpd # 重新安装
5.3 更新与升级
dnf update 更新所有包dnf update httpd # 只更新指定包dnf upgrade # 与update类似(含过时包)dnf check-update # 检查可用更新(不执行)
5.4 历史与回滚
dnf history 查看操作历史dnf history info 3 # 查看第3条操作的详情dnf history undo 3 # 撤销第3条操作
5.5 其他常用选项
dnf -y install package 自动确认(适合脚本)dnf --nogpgcheck install package # 跳过GPG检查(测试用)
6. 搭建本地仓库(离线环境)
如果需要在内网环境中搭建一个包含大量软件的仓库,可以使用reposync同步官方仓库,再用createrepo生成元数据。
6.1 安装必要工具
dnf install yum-utils createrepo
6.2 同步仓库
同步 BaseOS 仓库到本地目录reposync --repo=local-baseos -p /data/repos# 同步 AppStream 仓库reposync --repo=local-appstream -p /data/repos
6.3 生成元数据
createrepo /data/repos/local-baseoscreaterepo /data/repos/local-appstream
6.4 配置本地仓库文件指向这些目录
[local-mirror]name=Local Mirrorbaseurl=file:///data/repos/local-baseosenabled=1gpgcheck=0
6.5 将仓库发布为HTTP服务
如果想让其他机器访问,可以将/data/repos通过Nginx或Apache发布为HTTP,然后其他机器配置baseurl为http://yourserver/repos。
7. 实践:安装第三方软件
7.1 下载并安装TeamViewer
下载RPM包wget https://download.teamviewer.com/download/linux/teamviewer-host.x86_64.rpm# 安装(可能会提示需要依赖,dnf会自动解决)dnf install ./teamviewer-host.x86_64.rpm
7.2 添加EPEL仓库(Extra Packages for Enterprise Linux)
EPEL提供了大量RHEL官方仓库中没有的软件包:
dnf install epel-releasednf repolist
之后就可以安装如htop、iftop等常用工具:
dnf install htop
8. 小结
本篇我们学习了RHEL软件包管理的基础:
RPM包的基本操作(安装、卸载、查询)
YUM/DNF通过仓库自动解决依赖,简化了包管理
如何配置本地仓库和网络仓库
常用dnf命令:安装、卸载、更新、历史回滚
搭建本地仓库镜像供离线环境使用
安装第三方软件(如TeamViewer)和启用EPEL仓库
掌握了软件包管理,你就能灵活地为系统安装所需软件,无论是从官方仓库还是自建仓库,都能游刃有余。
下一篇,我们将进入网络管理,学习如何配置网络接口、管理网络服务以及使用Firewalld防火墙。敬请期待!
练习建议:
使用光盘搭建本地仓库,安装httpd服务,并启动它。
尝试用dnf history查看操作记录,并回滚一次安装操作。
从EPEL仓库安装tmux或htop等工具。
搭建一个本地仓库镜像,模拟内网环境。
标题:RHCE认证学习笔记(六):软件包管理 – 从RPM到YUM仓库
作者:shuaiqijun
地址:https://shuaiqijun.com/articles/2026/03/26/1774504622526.html