yum是通过分析RPM的标题数据,根据各软件的相关性制作出属性依赖时的解决方案,然后自动处理软件之间的依赖属性问题,以解决软件包的安装,删除和升级的问题,实现自动安装。
那yum是怎么工作的呢?首先,我们先了解一下几个概念。软件发行者要发布的软件通常会放在一个服务器上,称为yum服务器。然后他们分析这些软件的依赖属性问题,将这些信息记录下来,再将这些信息分析记录成软件相关性的清单列表,这些列表数据和软件所在的位置,我们称为yum仓库。
yum的工作流程:当客户端有升级,安装,卸载的需求时,yum会向仓库要求清单的更新,等到清单更新到本机的/var/cache/yum中,操作的时候就会用这个清单与本机RPM数据库进行比较,这样就知道该下载或卸载什么软件了。接下来yum会到yum服务器的yum仓库中下载所需要的软件,然后通过RPM机制进行安装或卸载。
yum服务器支持的服务有:
1,ftp
2,http
3,本地的文件
首先,我们来说一下yum服务器的创建,我们以创建本地yum仓库为例:
1,我们创建一个目录/var/yum,这个目录中存放我们要发布的RPM软件包
2,创建yum仓库需要createrepo命令,如果系统没有这个命令,则需要挂载系统安装光盘,打开Server目录中,安装createrepo这个软件包即可。
命令为:rpm -i createrepo-0.4.11-3.el5.noarch.rpm(不同系统版本不同)
3,createrepo /var/yum 这个命令就把yum目录创建为了yum仓库,命令执行成功后或在yum目录中生成一个repodata目录,里面会有primary.xml.gz,filelists.xml.gz,other.xml.gz,repomd.xml文件(默认不会有comps-rhel5-server-core.xml这个文件,即yum不支持组包的相关功能)
primary.xml.gz文件:主要记录yum仓库中所有软件包的包名和相互之间的依赖关系,还包含了每一个rpm包的安装要生成什么文件。
filelists.xml.gz文件:存放yum仓库中每一个RPM包中的文件的相关信息
other.xml.gz文件:存放额外信息,如使用changelog选项显示的信息等。
repomd.xml文件:存放上面三个文件的校验码和时间戳。
这四个文件,会在第一次使用yum命令的时候下载到yum设定的缓存中,如果yum仓库中有软件更新,则primary.xml.gz,filelists.xml.gz,other.xml.gz这三个文件内容就会改变,检测到改变之后,就会从yum仓库下载新的文件。
我们的yum仓库就这样的创建了,很简单吧!
yum服务器创建之后,我们系统上要有yum客户端,才能使用yum仓库,yum命令才能正常的工作。
yum客户端的配置文件有两部分:
1,/etc/yum.conf 客户端的主配置文件
[main] 表示这是全局生效的文件
cachedir=/var/cache/yum 定义的缓存路径,用于下载要安装的软件包等
keepcache=0 安装之后,缓存中的软件包是否保留(0不保留,1保留)
debuglevel=2 调试级别
logfile=/var/log/yum.log yum安装之后相应的安装日志保存路径
distroverpkg=redhat-release 说明软件包的格式
tolerant=1 当同时安装多个软件包时,有的已经安装过了,就会出错,但是设为把这个值设为1之后,就表示会忽略已安装的继续安装
exactarch=1 是否精确匹配硬件平台版本,0表示禁用,1表示启用
obsoletes=1 是否检查已废弃的包,0表示禁用,1表示启用
gpgcheck=1 安装之前是否坚持软件包的签名,0表示禁用,1表示启用
plugins=1 是否启用插件功能,0表示禁用,1表示启用
metadata_expire=1h 源数据的过去时间
2,/etc/yum.repos.d/*.repo 每一个yum仓库可以使用对应的一个这样后缀的文件
[heartbeat] 对应yum仓库的识别符号,[]一定不能省,不能使用main,其他的任意,多个名字的话不能重复
name=heartbeat 只是说明这个yum容器的意义,不大重要
baseurl=file:///var/yum 指定yum源的位置,这是一个固定的。(如果是本地的yum仓库,写为:baseurl=ftp://172.16.0.1/pub/Server)
gpgcheck=0 是否要验证数字证书
enabled=1 yum仓库是否启用,0表示禁用,1表示启用
配置之后,yum客户端就完成了!现在,我们的yum仓库和yum客户端都已经ok,现在就可以使用yum命令了。
yum命令:
yum list all 显示系统上所有的软件包
yum list installed 显示系统上已经安装的软件包
yum list available 显示yum仓库中尚未使用的软件包
yum list updates 显示系统上能升级的软件包
yum install package_name... 安装RPM包 指定软件包的名字就可以了,下面相同
yum remove package_name... 卸载RPM包
yum update package_name... 更新RPM包
yum info package_name... 显示软件包的摘要信息
yum provides filename 显示这个文件由哪个RPM包安装
yum downgrade package_name... 降级软件包
yum reinstall package_name... 重装RPM包
yum whatprovides libmysqlclient.so.16 查询哪个包提供libmysqlclient.so.16文件
yum repolist all 显示所有的yum仓库
yum repolist enabled 显示启用的yum仓库
yum repolist disabled 显示未启用的yum仓库
yum clean all 清空本地yum缓存
yum grouplist 显示已安装的软件包组的信息
yum groupinstall "groupname" 安装RPM包组
yum groupremove "groupname" 卸载RPM包组
yum groupinfo "groupname" 查看包组的相关信息
yum localinstall localfile... 安装本地的一个软件包,如果这个包需要依赖其他RPM包的话,会从yum源直接下载并安装(即自动解决依赖关系)
yum localupdate localfile...用本地的软件包进行更新
yum search keyword 查找yum仓库符合关键字的RPM包的相关属性信息