上一篇说了CentOS后台包管理程序rpm,但是rpm最为人诟病的一点就是不能自己解决包与包之间的依赖关系。为此,yum可以说是CentOS上最受欢迎的包管理器了。yum是CentOS上前端的包管理工具。
先来看看yum是怎么工作的。
yum是一个C/S架构的应用程序。首先,yum客户端向远程yum服务器发起请求,申请操作,服务器接收请求,在本地查询repodata(元数据文件)中对应的包的相关信息,然后对于该包进行安全认证,查询其gpg-key,一同由服务器返回给客户端。由此,一次简单的yum操作就完成了。那既然是C/S架构的应用程序,就有配置文件信息 。来看看yum客户端的配置信息。
yum的配置文件/etc/yum.conf; /etc/yum.repos.d/*.conf
先来看看yum客户端配置文件/etc/yum.conf的配置文件语法吧
[main]
cachedir=/var/cache/yum/$basearch/$releasever #缓存存放的目录
keepcache=0 #缓存是否保存[0|1]
debuglevel=2 #调试级别(0-10)默认2
logfile=/var/log/yum.log #日志文件位置
exactarch=1 #更新的时候是否更新不同版本的包
obsoletes=1 #update参数允许更新旧的rpm包
gpgcheck=1 #是否检查gpg-key(秘钥)
plugins=1 #是否开启插件
installonly_limit=5 #允许同时最多安装几个包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release #bug提交网址
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
/etc/yum.repos.d/目录下定义yum仓库,以.repo结尾,我在该目录下定义了5个yum仓库,分别是yum的官方仓库CentOS-Base.repo,docker-ce的官方仓库docker-ce.repo,内核仓库elrepo.repo,epel仓库epel.repo,还有一个我自己定义的清华大学的Centos包镜像仓库Tsinghua.repo
[root@docker yum.repos.d]# ll
总用量 24
-rw-r--r-- 1 root root 675 8月 17 13:07 CentOS-Base.repo
-rw-r--r-- 1 root root 2424 8月 16 16:47 docker-ce.repo
-rw-r--r-- 1 root root 2142 7月 24 2017 elrepo.repo
-rw-r--r-- 1 root root 230 8月 17 13:07 epel.repo
-rw-r--r-- 1 root root 968 9月 7 15:00 Tsinghua.repo
这里就以其中的官方仓库的配置来进行说明
[base] #设置该段的标签
name=CentOS-$releasever #base段的注释信息
enabled=1 #是否启用该仓库[0|1]如果没有设置该字段,默认为1
failovermethod=priority #baseurl有多个地址采用什么查询方式priority优先级方式
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/ #远程仓
库的地址
gpgcheck=1 #是否启用秘钥检查[0|1]
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7 #秘钥文件的地址
[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7
这里每一段的配置基本都一样,这里也可以设置为自己搭建的yum仓库的地址,只需要设置正确即可。到此,yum的基本设置就结束了,下面来看看yum命令的一些常见用法。
安装、升级包:
#yum install [options] package_name
options:
-y|--assumeyes:所有回答都是yes,直接安装包
-q|--quiet:静默安装
--nogpgcheck:不进行验证
--enablerepo=repoid 临时启用该仓库
--disablerepo=repoid 临时禁用该仓库
--noplugins 禁用所有插件
常用的命令组合
# yum install -y package_name
如果远程包秘钥签名验证失败,而且不是很在意其安全性,可以使用--nogpgcheck跳过检查秘钥阶段
#yum install --nogpgcheck -y package_name
#yum update|upgrade package_name 升级包
#yum check-update 检查可用升级
#yum reinstall pkg_name 重新安装
#yum localinstall 安装本地rpm包,可以自动解决依赖关系
#yum localupdate 使用本地包升级
#yum downgrade pkg_name 进行降级操作
查询包:
#yum list [all|available|updates|installed|extras|obsoletes] 列出符合条件的程序包
all 所有包
available 可用的
installed 已经安装的
updates 可升级的
extras 额外的包
obsoletes 废弃的包
#yum repolist [all|enabled|disabled] 列出符合条件的仓库列表
all 所有的
enabled 已经使用的
disabled 禁用的仓库
#yum info package_name 查询包信息
#yum provides capability 查询哪个功能是由哪个包提供的类似rpm --whatprovides capability
#yum search string 搜索包以及相关包的摘要信息
#yum deplist pkg_name 查看包的依赖
#yum history 查看yum的事务历史<事务型数据库>
移除包:
#yum remove|erase package_name 同时会卸载所有依赖的包
缓存相关操作:
#yum makecache 生成yum缓存,提升安装时的速度
#yum clean [packages|metdata|expire-cache|rpmdb|plugins|all] 清除所选项的缓存
yum还支持包组的概念,即将用途差不多的包集合在一起组成包组方便下载:
#yum grouplist [installed|available|all]显示所选项的包组
#yum groupinfo group_name 显示包组信息
#yum groupinstall group_name 安装包组
#yum groupremove group_name 卸载包组