yum 是 yellowdog updater modified 的缩写,起初是由yellow dog这一发行版的开发者terra soft研发,用python写成,那时还叫做yup(yellow dog updater),后经杜克大学的linux@duke开发团队进行改进,遂有此名。yellowdog 是一个 linux 的 distribution,rh 将这种升级技术利用到自己的 distribution 形成了现在的 yum,感觉上 yum 和 apt 的原理类似,但是 apt是编译代码,执行效率远高于使用 python 写成的 yum。
yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个 distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级、安装、删除等等操作,减少了 linux 用户一直头痛的 dependencies 的问题。yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。这一点上,yum 和 apt 相同。apt 原为debian的 deb 类型软件管理所使用,但是现在也能用到 rh 门下的 rpm 了。
一般这类软件通过一个或者多个配置文件描述对应的 repository 的网络地址,通过 http 或者 ftp 协议在需要的时候从 repository 获得必要的信息,下载相关的软件包。这样,本地用户通过建立不同的 repository 的描述说明,在有 internet 连接时就能方便进行系统的升级维护工作。另外,如果需要使用代理,可以用 http_proxy 和 ftp_proxy 这些 shell 里面标准环境变量的设定。
yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header,header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。repository 是用 yum-arch 或者 createrepo 命令创建的,也可以用别人已有的 repository 作为镜像。
如果没有安装,先我们要到http://ayo.freshrpms.net/下载与自己系统相对应的版本的 yum。
yum的一切配置信息都储存在一个叫yum.conf的配置文件中,通常位于/etc目录下,这是整个yum系统的重中之重,所以有必要详细介绍。
下面是centos5.2的yum配置文件,以此为例,进行说明:
1、几个变量
$releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
$arch,cpu体系,如i686,athlon等
$basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
2、/etc/yum.conf(这是yum的全局性设置,默认一般不必改动)
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
metadata_expire=1h
#installonly_limit = 3
说明:
cachedir yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum
keepcache 缓存是否保存,1保存,0不保存。
debuglevel 除错级别,0──10,默认是2
logfile yum的日志文件,默认是/var/log/yum.log。
distroverpkg 指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
exactarch 有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用i686的包来升级。
tolerent 有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
obsoletes 这是一个update的参数,简单的说就是相当于upgrade,允许更新陈旧的rpm包。
gpgchkeck 有1和0两个选择,分别代表是否是否进行gpg校验。
plugins 是否允许使用插件,0不允许,1允许。但是我们一般会用yum-fastestmirror这个插件。
installonly_limit 允许保留多少个内核包。
除了上述之外,还有一些可以添加的选项,如:
pkgpolicy 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
retries 网络连接发生错误后的重试次数,如果设为0,则会无限重试。
exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
3、/etc/yum.repos.d/centos-base.repo
[base]
name=centos-$releasever - base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/rpm-gpg-key-centos-5
#released updates
[updates]
name=centos-$releasever - updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/rpm-gpg-key-centos-5
#packages used/produced in the build but not released
[addons]
name=centos-$releasever - addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/rpm-gpg-key-centos-5
#additional packages that may be useful
[extras]
name=centos-$releasever - extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/rpm-gpg-key-centos-5
#additional packages that extend functionality of existing packages
[centosplus]
name=centos-$releasever - plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/rpm-gpg-key-centos-5
说明:
所有服务设置都应该遵循如下格式:
[serverid] 用于区别各个不同的repository,必须有一个独一无二的名称
name 对repository的描述,支持像$releasever $basearch这样的变量
mirrorlist 根据网上提供的镜像站点列表,寻找合适的repository,和baseurl两者仅用一个选项即可
#baseurl 当mirrorlist注释掉后,这个选项就是服务设置中最重要的部分,只有设置正确,才能从上面获取软件
…… 其他设置
其中baseurl的格式是:
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
file:///media/cdrom/
ftp://centos:centos@192.168.0.1/
其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl只能有一个。
其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。
url之后可以加上多个选项,如gpgcheck、exclude、failovermethod、enabled等
其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务起作用,
failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。
4、/etc/yum.repos.d/centos-media.repo(扩展功能配置)
[c5-media]
name=centos-$releasever - media
baseurl=file:///media/centos/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/rpm-gpg-key-centos-5
说明:
[c5-media] 服务id
name 描述
baseurl repository在本地的地址
gpgcheck 有1和0两个选择,分别代表是否是否进行gpg校验
enabled
gpgkey key地址
使用dvd或iso文件来使用yum,使用时先使用mount -o loop /root/centos.iso /mnt/cdrom或mount /root/centos.iso /mnt/cdrom挂载光盘,然后在使用yum时,如果使用“网络镜像+本地dvd”则加参数--enablerepo=c5-media即可,如yum --enablerepo=c5-media install xxx,如果仅使用本地dvd则使用参数--disablerepo=\* --enablerepo=c5-media,如:yum --disablerepo=\* --enablerepo=c5-media install xxx
万事具备,只欠东风。还有一件事没有做。那就是导入每个reposity的gpg key,前面说过,yum可以使用gpg对包进行校验,确保下载包的完整性,所以我们先要到各个repository站点找到gpg key,一般都会放在首页的醒目位置,一些名字诸如 rpm-gpg-key.txt之类的纯文本文件,把它们下载,然后用rpm --import xxx.txt命令将它们导入,最好把发行版自带gpg-key也导入,rpm --import /usr/share/doc/redhat-release-*/rpm-gpg-key 官方软件升级用的上。如:fc4: rpm --import /usr/share/doc/fedora-release-4/rpm-gpg-key-fedora
至此一切准备工作都已完毕。
对yum.conf设定完成,我们就可以好好体验yum带来的方便了。
三、yum使用
yum 的基本操作包括软件的安装(本地,网络),升级(本地,网络),卸载,另外还有一定的查询功能。
1、安装
yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断。设定好了本地的 yum 之后,就可以很方便的进行安装(现在假设就用 fc5 自带的 yum 进行安装),如我们需要安装虚拟机 bochs,可以使用# yum install bochs;如果本地有相关的 rpm 文件,可以用# yum localinstall ur.rpm。前者导致 yum 搜索现有 repository 中的数据(一般先会连接到这些 repository 下载更新数据),如果发现有此软件,则会通过分析其 dependencies 然后下载并安装所需软件。
常用命令:
yum install xxx 安装指定的软件
2、卸载
卸载同安装一样,yum也会查询数据库,给出解决依赖关系的提示。卸载也会消解对应的 dependencies。yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除。
常用命令:
yum remove xxx 卸载指定的软件
yum eraser xxx 卸载指定的软件
yum clean all 清除所有缓存文件(/var/cache/yum)
yum clean packages 将相关的 rpm 文件删除
yum clean headers 清除header
yum clean oldheaders 清除旧的headers
3、更新
用yum升级软件,yum update,这一步是必须的,yum会从服务器的header目录下载rpm的header,放在本地的缓存中,这可能会花费一定的时间。header下载完毕,yum会判断是否有可更新的软件包,如果有,它会询问你的意见,是否更新,输入y,把系统始终up to date总是不错的,这时yum开始下载软件包并使用调用rpm安装,这可能要一定时间,取决于要更新软件的数目和网络状况,万一网络断了,也没关系,再进行一次就可以了。升级完毕,以后每天只要使用yum check-update检查一下有无跟新,如果有,就用yum update进行跟新,时刻保持系统为最新,堵住一切发现的漏洞。
更新某个软件可以用# yum update firefox。如果不带后面的程序名,将会升级所有可以升级的软件。过时的软件如果需要处理(如删掉)可以添加 --obsolete 参数,或者使用 upgrade。如果需要更自动化一些的操作(避免回答一些问题)还可以增加一些参数,如# yum -y upgrade。
常用命令:
yum check-update 列出所有可更新的软件清单
yum update 更新所有软件
yum update xxx 更新指定的软件
yum upgrade 更换废弃的包,但现在通常用来进行重大的升级,如系统升级
4、查询
想要安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字,这时yum的查询功能就起作用了。你可以用 yum search keyword这样的命令来进行搜索,yum会搜索所有可用rpm的描述,列出所有描述中和keyword有关的rpm包,以使我们从中选择。
常用命令:
yum list 列出所有可安装的软件包
yum list xxx 列出xxx相关的信息
yum list updates 列出所有可更新的软件包
yum list installed 列出所有已安装的软件包
yum list extras 列出所有已安装但不在 yum repository 內的软件包
yum list info 给出详细的说明
yum info 列出所有软件包的信息
yum info xxx 获取xxx信息
yum info updates 列出所有可更新的软件包信息
yum info installed 列出所有已安裝的软件包信息
yum info extras 列出所有已安裝但不在 yum repository 內的软件包信息
yum search rpm 获得一切能找到的与 rpm 相关的程序,搜索的对象是每个程序的描述部分
yum provides /bin/rpm 查看什么rpm提供某个程序
5、package group操作
yum grouplist
yum groupinstall
yum groupupdate
yum groupinfo
yum groupremove