软件管理 - YUM工具管理RPM包

1. YUM概述

yum是基于RPM包管理, 能够自动解决依赖关系, 极大的方便rpm包的安装升级。

1.1 YUM特点

  1. 联网获取软件: 从远程仓库获取软件包
  2. 基于RPM管理: 底层使用RPM包管理
  3. 自动解决依赖: 自动下载并安装依赖包
  4. 命令简单好记: 命令简洁易用
  5. 生产最佳实践: 企业级软件管理方案

1.2 YUM与RPM对比

特性 RPM YUM
依赖处理 需要手动解决 自动解决
软件源 本地文件 远程仓库
安装速度 相对慢(需要下载)
适用场景 离线安装、单个包 在线安装、批量安装

2. YUM软件仓库管理

2.1 本地YUM仓库

有时候你的linux系统不能联网,当然就不能很便捷的使用联网的yum源了,这时候就需要你自己会利用linux系统光盘制作一个yum源。具体步骤如下:

步骤1: 挂载镜像

1
2
# 挂载镜像
[root@liyanzhao ~]# mount /dev/cdrom /mnt

步骤2: 备份原有仓库

1
2
# 备份原有仓库
[root@liyanzhao ~]# gzip /etc/yum.repos.d/*

步骤3: 创建新仓库文件

方式1: 使用yum-config-manager命令

1
2
# 使用yum-config-manager命令添加本地仓库
[root@liyanzhao ~]# yum-config-manager --add-repo="file:///mnt"

方式2: 手动添加repo配置文件

1
2
3
4
5
6
7
# 手动添加repo配置文件
[root@liyanzhao ~]# vim /etc/yum.repos.d/cdrom.repo
[cdrom]
name=This is local cdrom
baseurl=file:///mnt
enabled=1
gpgcheck=0

repo配置文件说明:

配置项 说明 示例
[] 仓库名称 [cdrom]
name 仓库描述信息 name=This is local cdrom
baseurl YUM源url地址 baseurl=file:///mnt
enabled 是否激活该YUM源 enabled=1 (0代表禁用,1代表激活,默认为激活)
gpgcheck 安装软件时是否检查签名 gpgcheck=0 (0代表禁用,1代表激活)

baseurl支持的类型:

  • file:// - 本地文件系统
  • ftp:// - FTP服务器
  • http:// - HTTP服务器
  • https:// - HTTPS服务器

步骤4: 刷新repos生成缓存

1
2
# 刷新repos生成缓存
[root@liyanzhao ~]# yum makecache

2.2 网络YUM仓库

官方网络YUM源配置

阿里镜像站点: http://mirrors.aliyun.com

1
2
3
# Base/Extras/Updates: 默认国外官方源
[root@liyanzhao ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.aliyun.com/repo/Centos-7.repo

EPEL扩展源

EPEL (Extra Packages for Enterprise Linux): 提供额外的软件包

1
2
3
4
5
6
# 国外epel源
[root@liyanzhao ~]# yum -y install epel-release

# 阿里云epel源
[root@liyanzhao ~]# wget -O /etc/yum.repos.d/epel.repo \
http://mirrors.aliyun.com/repo/epel-7.repo

2.3 官方YUM仓库

Nginx官方源

1
2
3
4
5
6
7
# 源查找方式基本一致,zabbix,mysql,saltstack,openstack
[root@liyanzhao ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

其他常用官方源

MySQL官方源:

1
2
3
# 下载MySQL官方源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm

Zabbix官方源:

1
2
# 安装Zabbix官方源
rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm

2.4 红帽配置Centos仓库

红帽Redhat7替换Centos7网络源

步骤1: 卸载红帽yum源

1
2
# 卸载红帽yum源
rpm -e $(rpm -qa|grep yum) --nodeps

步骤2: 删除所有repo相关文件

1
2
3
4
# 删除所有repo相关文件
rm -rf /etc/yum.conf
rm -rf /etc/yum.repos.d/
rm -rf /var/cache/yum

步骤3: 下载centos相关yum组件

1
2
3
4
5
6
7
8
9
10
11
12
13
# 下载centos相关yum组件
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-154.el7.centos.noarch.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-42.el7.noarch.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-updateonboot-1.1.31-42.el7.noarch.rpm
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-42.el7.noarch.rpm

# 如果没有wget命令则使用curl命令
curl -o yum-utils-1.1.31-42.el7.noarch.rpm https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-42.el7.noarch.rpm
curl -o yum-3.4.3-154.el7.centos.noarch.rpm https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-154.el7.centos.noarch.rpm
curl -o yum-metadata-parser-1.1.4-10.el7.x86_64.rpm https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
curl -o yum-plugin-fastestmirror-1.1.31-42.el7.noarch.rpm https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-42.el7.noarch.rpm
curl -o yum-updateonboot-1.1.31-42.el7.noarch.rpm https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-updateonboot-1.1.31-42.el7.noarch.rpm

步骤4: 安装所有相关组件

1
2
# 安装所有相关组件
[root@liyanzhao-node1 ~]# rpm -ivh yum-*

步骤5: 下载base和epel仓库

1
2
3
4
5
6
# 下载base仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo

# 下载epel仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3. YUM软件命令管理

3.1 搜索软件包指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 列出软件仓库中可用的软件
[root@liyanzhao ~]# yum list

# 进行模糊查找
[root@liyanzhao ~]# yum list|grep ftp

# 列出软件包详情
[root@liyanzhao ~]# yum info ftp

# 搜索软件包(按名称和描述)
[root@liyanzhao ~]# yum search ftp

# 列出所有可用的软件包
[root@liyanzhao ~]# yum list available

# 列出已安装的软件包
[root@liyanzhao ~]# yum list installed

3.2 安装软件包指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装软件只需要给出软件名称
[root@liyanzhao ~]# yum install traceroute

# 安装过程中分析依赖关系后, 直接安装, 无需交互
[root@liyanzhao ~]# yum install php -y

# 安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖(非来自.repo定义的软件仓库)
[root@liyanzhao ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm

# 安装网络上rpm包
[root@liyanzhao ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

# 安装多个软件包
[root@liyanzhao ~]# yum install nginx php mysql -y

# 从指定仓库安装
[root@liyanzhao ~]# yum install --enablerepo=epel package_name

3.3 重装软件包指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 检查软件是否存在
[root@liyanzhao ~]# rpm -q vsftpd
vsftpd-2.2.2-24.el6.x86_64

# 检查vsftpd软件配置文件
[root@liyanzhao ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

# 不小心删除vsftpd配置文件
[root@liyanzhao ~]# rm -f /etc/vsftpd/vsftpd.conf

# 重新安装软件
[root@liyanzhao ~]# yum reinstall vsftpd

# 再次检查
[root@liyanzhao ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

3.4 更新软件包指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 对比Linux已安装的软件和yum仓库中的软件, 有哪些需要升级
[root@liyanzhao ~]# yum check-update

# 更新软件
[root@liyanzhao ~]# yum update acl -y

# 更新所有软件包
[root@liyanzhao ~]# yum update -y

# 更新指定软件包到最新版本
[root@liyanzhao ~]# yum update nginx -y

# 仅检查更新,不实际更新
[root@liyanzhao ~]# yum check-update

3.5 删除软件包指令

1
2
3
4
5
6
7
8
9
# 先安装一个samba软件
[root@liyanzhao ~]# yum install samba -y

# 删除该软件包,不会删除依赖, 但是我们尽可能不要使用删除软件操作
[root@liyanzhao ~]# yum erase samba -y
[root@liyanzhao ~]# yum remove samba -y

# 删除软件包及其依赖(谨慎使用)
[root@liyanzhao ~]# yum remove samba --remove-leaves

3.6 仓库相关指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 列出yum源可用的软件仓库
[root@liyanzhao ~]# yum repolist

# 列出全部yum源可用和禁用的仓库
[root@liyanzhao ~]# yum repolist all

# 查看这个文件或命令属于哪个包
[root@liyanzhao ~]# yum provides /etc/my.cnf
[root@liyanzhao ~]# yum provides cd

# 查看软件包依赖关系
[root@liyanzhao ~]# yum deplist nginx

# 启用/禁用仓库
[root@liyanzhao ~]# yum-config-manager --enable epel
[root@liyanzhao ~]# yum-config-manager --disable epel

3.7 缓存相关指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 缓存yum源软件仓库, xml元数据文件
[root@liyanzhao ~]# yum makecache

# 缓存软件包, 修改yum全局配置文件
[root@liyanzhao ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 //启动缓存

# 查看缓存的xml文件
[root@liyanzhao ~]# ls /var/cache/yum/x86_64/7/base/

# 查看缓存软件包路径
[root@liyanzhao ~]# ls /var/cache/yum/x86_64/7/

另一种缓存rpm包方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1.安装插件支持只下载软件包不安装
[root@liyanzhao ~]# yum install -y yum-plugin-downloadonly

# 2.将软件下载至指定目录
[root@liyanzhao ~]# yum install httpd -y --downloadonly --downloaddir=/tmp

# 清除所有yum缓存
[root@liyanzhao ~]# yum clean all

# 只清除缓存的软件包
[root@liyanzhao ~]# yum clean packages

# 清除元数据缓存
[root@liyanzhao ~]# yum clean metadata

# 清除所有缓存
[root@liyanzhao ~]# yum clean all

3.8 包组相关指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 列出已经安装和所有可使用的软件组
[root@liyanzhao ~]# yum groups list

# 安装一整个组的软件
[root@liyanzhao ~]# yum groups install "Development tools" \
"Compatibility libraries" \
"Base Debugging Tools"

# yum删除包组
[root@liyanzhao ~]# yum groups remove -y Base

# 查看包组信息
[root@liyanzhao ~]# yum groups info "Development tools"

# 列出已安装的包组
[root@liyanzhao ~]# yum groups list installed

3.9 历史记录指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看历史执行yum命令
[root@liyanzhao ~]# yum history

# 查询历史执行yum命令ID详细信息
[root@liyanzhao ~]# yum history info N

# 撤销历史执行过的yum命令
[root@liyanzhao ~]# yum history undo N

# 重做历史命令
[root@liyanzhao ~]# yum history redo N

# 查看特定软件包的历史
[root@liyanzhao ~]# yum history list nginx

3.10 全局配置文件

1
2
# 编辑yum全局配置文件
vim /etc/yum.conf

配置文件说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
[main]
cachedir=/var/cache/yum/$basearch/$releasever # 缓存目录
keepcache=0 # 缓存软件包, 1启动 0 关闭
debuglevel=2 # 调试级别
logfile=/var/log/yum.log # 日志记录位置
exactarch=1 # 检查平台是否兼容
obsoletes=1 # 检查包是否废弃
gpgcheck=1 # 检查来源是否合法,需要有制作者的公钥信息
plugins=1 # 是否启用查询
installonly_limit=5
bugtracker_url
# metadata_expire=90m //每小时手动检查元数据
# in /etc/yum.repos.d //包含repos.d目录

4. YUM签名检查机制

rpm软件提供组织redhat在构建rpm包时, 使用其私钥private key对 rpm进行签名

客户端在使用rpm为了验证其合法性, 可以使用redhat提供的公钥public key进行签名检查

4.1 方式1: 指定公钥的位置

1
2
3
4
5
6
7
8
# 编辑repo配置文件
[root@liyanzhao ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

4.2 方式2: 提前导入公钥

1
2
3
4
5
6
7
8
9
10
# 提前导入公钥
[root@liyanzhao ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# 编辑repo配置文件
[root@tianyun ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1

4.3 方式3: 不进行签名验证

1
2
3
4
5
# 不检查软件包的签名
[root@liyanzhao~]# yum install httpd --nogpgcheck

# 或在repo文件中设置
gpgcheck=0

4.4 签名检查说明

方式 说明 安全性
gpgcheck=1 + gpgkey 检查签名并指定公钥位置
gpgcheck=1 + 导入公钥 检查签名,公钥已导入
gpgcheck=0 不检查签名 低(不推荐)
–nogpgcheck 单次安装不检查签名 低(临时使用)

5. 构建企业YUM仓库

5.1 环境准备

需求:

  • 本地光盘提供基础软件包Base
  • yum缓存提供update软件包
  • yum缓存提供常用软件包: nginx, zabbix, docker, saltstack

5.2 服务端配置

步骤1: 基础环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 关闭防火墙
[root@yum_server_69_112 ~]# systemctl stop firewalld

# 临时关闭selinux
[root@yum_server_69_112 ~]# setenforce 0

# 安装ftp服务,启动并加入开机启动
[root@yum_server_69_112 ~]# yum -y install vsftpd
[root@yum_server_69_112 ~]# systemctl start vsftpd
[root@yum_server_69_112 ~]# systemctl enable vsftpd

# 开启yum缓存功能
[root@yum_server_69_112 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1

[root@yum_server_69_112 ~]# yum clean all

步骤2: 提供基础base源

1
2
3
4
5
6
7
8
# 创建目录
[root@yum_server_69_112 ~]# mkdir /var/ftp/{centos69,centos74}

# 挂载光盘
[root@yum_server_69_112 ~]# mount /dev/cdrom /mnt

# 复制RPM包
[root@yum_server_69_112 ~]# cp -rp /mnt/Packages/*.rpm /var/ftp/centos74

步骤3: 提供第三方源

1
2
3
4
5
6
7
8
9
# 创建第三方软件目录
[root@yum_server_69_112 ~]# mkdir /var/ftp/ops

# 安装常用软件(会自动下载依赖)
[root@yum_server_69_112 ~]# yum -y install nginx docker

# 复制已缓存的 Nginx docker 及依赖包 到自定义 YUM 仓库目录中
[root@yum_server_69_112 ~]# find /var/cache/yum/x86_64/7/ \
-iname "*.rpm" -exec cp -rf {} /var/ftp/ops \;

步骤4: 安装createrepo并创建repodata仓库

1
2
3
4
5
6
7
8
9
# 安装createrepo
[root@yum_server_69_112 ~]# yum -y install createrepo

# 生成仓库信息
[root@yum_server_69_112 ~]# createrepo /var/ftp/ops

# 注意: 如果此仓库每次新增软件则需要重新生成一次
# 重新生成仓库信息
[root@yum_server_69_112 ~]# createrepo --update /var/ftp/ops

5.3 客户端使用yum源

步骤1: 配置并使用base基础源

1
2
3
4
5
6
7
8
9
10
# 备份原有仓库
[root@yum_client_69_113 ~]# gzip /etc/yum.repos.d/*

# 创建base源配置文件
[root@yum_client_69_113 ~]# vim /etc/yum.repos.d/centos7.repo
[centos74]
name=centos74_base
baseurl=ftp://192.168.69.112/centos74
gpgcheck=0
enabled=1

步骤2: 客户端指向本地ops源

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建ops源配置文件
[root@yum_client_69_113 ~]# vim /etc/yum.repos.d/ops.repo
[ops]
name=local ftpserver
baseurl=ftp://192.168.69.112/ops
gpgcheck=0
enabled=1

# 刷新缓存
[root@yum_client_69_113 ~]# yum makecache

# 测试安装
[root@yum_client_69_113 ~]# yum install nginx -y

5.4 企业YUM仓库优化

优化1: 使用HTTP服务

1
2
3
4
5
6
7
8
9
10
11
# 安装httpd服务
yum install -y httpd
systemctl start httpd
systemctl enable httpd

# 创建软链接
ln -s /var/ftp/centos74 /var/www/html/centos74
ln -s /var/ftp/ops /var/www/html/ops

# 客户端配置
baseurl=http://192.168.69.112/centos74

优化2: 定期更新仓库

1
2
3
4
5
6
7
8
9
# 创建更新脚本
vim /root/update_repo.sh
#!/bin/bash
createrepo --update /var/ftp/centos74
createrepo --update /var/ftp/ops

# 添加定时任务
crontab -e
0 2 * * * /root/update_repo.sh

优化3: 仓库权限控制

1
2
3
4
# 配置FTP访问控制
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_root=/var/ftp

6. YUM命令总结

6.1 软件包管理

命令 功能 示例
yum install 安装软件包 yum install nginx -y
yum localinstall 安装本地RPM包 yum localinstall package.rpm
yum reinstall 重装软件包 yum reinstall nginx
yum update 更新软件包 yum update nginx -y
yum remove 删除软件包 yum remove nginx -y
yum erase 删除软件包 yum erase nginx -y

6.2 查询命令

命令 功能 示例
yum list 列出软件包 yum list
yum list installed 列出已安装的包 yum list installed
yum list available 列出可用的包 yum list available
yum info 显示软件包信息 yum info nginx
yum search 搜索软件包 yum search nginx
yum provides 查询文件属于哪个包 yum provides /etc/my.cnf
yum deplist 查看依赖关系 yum deplist nginx

6.3 仓库管理

命令 功能 示例
yum repolist 列出仓库 yum repolist
yum repolist all 列出所有仓库 yum repolist all
yum-config-manager 管理仓库 yum-config-manager --enable epel

6.4 缓存管理

命令 功能 示例
yum makecache 生成缓存 yum makecache
yum clean all 清除所有缓存 yum clean all
yum clean packages 清除包缓存 yum clean packages

6.5 包组管理

命令 功能 示例
yum groups list 列出包组 yum groups list
yum groups install 安装包组 yum groups install "Development tools"
yum groups remove 删除包组 yum groups remove "Development tools"

6.6 历史记录

命令 功能 示例
yum history 查看历史 yum history
yum history info 查看历史详情 yum history info 1
yum history undo 撤销操作 yum history undo 1
yum history redo 重做操作 yum history redo 1

7. YUM最佳实践

7.1 仓库配置建议

  1. 使用国内镜像: 提高下载速度
  2. 定期更新缓存: 使用yum makecache更新元数据
  3. 启用缓存: 设置keepcache=1保存下载的RPM包
  4. 签名验证: 生产环境启用gpgcheck=1

7.2 安装建议

  1. 使用-y参数: 避免交互式确认
  2. 批量安装: 一次安装多个相关软件包
  3. 查看依赖: 安装前使用yum deplist查看依赖
  4. 测试安装: 使用--downloadonly测试下载

7.3 维护建议

  1. 定期更新: 定期执行yum update更新系统
  2. 清理缓存: 定期清理不需要的缓存
  3. 备份配置: 备份/etc/yum.repos.d/目录
  4. 监控日志: 查看/var/log/yum.log了解操作历史