上文(http://7703592.blog.51cto.com/7693592/1631539)已经介绍过使用rpm对CentOS6上的软件包进行管理,之所以强调是在CentOS6之上,是因为在新出的CentOS7上部分操作还可以更简化,而对于Linux运维工程师来说,掌握CentOS6上的使用方式,在CentOS7上就不成问题了,而接下来要谈的是另外一个软件包管理工具,或者说是rpm的前端工具——yum。
为什么要用yum
来聊一个话题,那就是Linux的特性之一:组合小程序完成复杂任务,在Linux中,大多数的软件都遵循这个特性,尽可能把软件的功能做的单一。若是要完成比较复杂的任务,宁愿再添加一个软件,也不会在原来的软件之上添加新功能。因此,一个大的软件就会去调用其他软件的功能,组合成一个大软件来完成复杂任务。所以想要安装的软件若有依赖的其他软件尚未安装则会报错,如下所示:
[[email protected] Packages]# rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm error: Failed dependencies: xinetd is needed by telnet-server-1:0.17-48.el6.x86_64 #:该错误提示,在安装telnet-server时,其依赖于xinetd。也就是说xinetd是telnet-server的一个重要组成部分,没有xinetd则telnet-server不能正常工作。
根据以上提示,你若继续使用rpm来进行软件安装,那么你可以有两种选择,其一,使用--nodeps选项,强制忽略其依赖关系并安装;但是如此一来,telnet-server就不能使用。其二,你还可以先找到xinetd包,然后安装,接着再安装telnet-server包;使用此法可正常安装使用,但是当其依赖的包过多,达到十个,二十个,甚至更多时怎么办呢?依然使用此法显然不是明智的选择。所以此时就迫切需要一个工具来自动帮助我们解决软件管理过程中所遇到的种种问题,yum就应运而生了。
什么是yum
yum是yellowdog update modifier取首字母得来的,是一个基于RPM的前端包管理软件,其可以根据用户设置的yum仓库自动寻找软件安装,并自动解决依赖关系。
yum的工作机制
在rpm中,可以使用--test选项进行测试安装,测试出即将安装的包所依赖的其他软件包,rpm只能测试出需要的包,但是不能自动解决,而yum则可以根据测试出的包,然后再从用户指定的yum仓库中寻找并下载下来安装,所以对于yum来说首先得有另外的服务为其提供软件仓库,所以从工作模式上来说,yum是一个C/S的架构。他依赖于FTP或者NFS和http服务,当然还可以使用一批本地的软件包作为其仓库。
yum相关配置
首先是其主配置文件,其主配置文件/etc/yum.conf,对于其主配置文件,有如下常用选项:
cachedir:缓存目录
keepcache=0:是否把下载的软件包缓存下来,0表示不缓存
debuglevel=2:调试信息级别
logfile:指定日志文件存放位置
obsoletes:检查包是否废弃
gpgcheck=1|0:检查包的来源合法性和完整性
plugins:yum是否支持插件
bugtracker_url:做bug追踪的路径
根据以上选项,使用时可根据需求设置即可。除此之外,上面谈到的仓库则在/etc/yum.repo.d/目录下以.repo的所有文件都是,其配置项如下:
[repository]
#对于当前系统的yum来讲,此repository用于唯一标识此repository指向,因此,其必须唯一
name=
#当前仓库的描述信息
baseurl=
#指明repository的访问路径,通常为一个文件服务器上输出的repository
url:
ftp服务:
ftp://SERVER/PATH/TO/REPOSITORY
http服务
http://SERVER/PATH/TO/REPOSITORY
本地目录:
file:///PATH/TO/REPOSITORY
nfs服务:
nfs://SERVER/PATH/TO/REPOSITORY
enabled=1|0:
#表示此仓库是否被启用,0表示不启用,1则相反,默认值为1
gpgcheck=1|0:
#是否进行完整性检查,默认值为1
gpgkey=url://PATH/TO/keyfile:
#指明验证密钥存放位置
cost=#
#指明当前repository访问开销,默认为1000,越低越优先使用
yum命令使用详解
1.仓库管理:
repolist:列出已配置的所有可用仓库
all|enabled|disabled
例1:查看当前系统可用仓库
[[email protected] Packages]# cd /etc/yum yum/ yum.conf yum.repos.d/ [[email protected] Packages]# yum repolist all Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile repo id repo name status oldpackagepath centos6.6 enabled: 3,348 repolist: 3,348#:可使用软件包数量
2.缓存管理
clean:清理缓存
#:缓存存放位置:/var/cache/yum/
[ packages(包) | metadata(源数据) | expire-cache(过期缓存) | rpmdb(数据库) | plugins(插件) | all(所有) ]
makecache:缓存创建{自动连接至每一个可用仓库,下载其所有数据,将其创建为缓存}
例2:清理当前yum缓存并重新创建缓存
[[email protected] yum]# yum clean all Loaded plugins: fastestmirror, refresh-packagekit, security Cleaning repos: oldpackagepath Cleaning up Everything Cleaning up list of fastest mirrors [[email protected] x86_64]# yum makecache Loaded plugins: fastestmirror, refresh-packagekit, security Determining fastest mirrors oldpackagepath | 2.1 kB 00:00 oldpackagepath/group | 920 kB 00:02 oldpackagepath/filelists_db | 3.9 MB 00:07 oldpackagepath/primary_db | 2.0 MB 00:05 oldpackagepath/other_db | 10 MB 00:19
3.程序包查看
list
yum list [all(所有) | glob_exp1] [glob_exp2] [available(可安装的包)] [exreas(已安装,但是没有仓库提供的包)]
程序包组查看
grouplist
[hidden] [groupwildcard] [...]
4.程序包安装
install
package1 [package2] [...]:可跟上VERSION
重新(覆盖)安装
reinstall
package1 [package2] [...]:可跟上VERSION
例3:使用yum安装tree软件包
[[email protected] base]# yum install tree -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package tree.x86_64 0:1.5.0-4 will be installed --> Finished Dependency Resolution Dependencies Resolved...#后续已省略 Installing : tree-1.5.0-4.x86_64 1/1 Verifying : tree-1.5.0-4.x86_64 1/1 Installed: tree.x86_64 0:1.5.0-4 Complete!
6.升级
update、upgrade
update [package1] [package2] [...]
upgrade [package1] [package2] [...]
降级
downgrade
检查可升级情况
check-update
例4:先升级tree到新版tree.x86_64 0:1.5.0-4 然后再降级,可使用先前说过的rpm -q查看当前版本验证
[[email protected] base]# rpm -q tree tree-1.5.0-4.x86_64 [[email protected] base]# yum update tree -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Update Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package tree.x86_64 0:1.5.0-4 will be updated ---> Package tree.x86_64 0:1.5.3-2.el6 will be an update --> Finished Dependency Resolution ...#后续已省略 Updated: tree.x86_64 0:1.5.3-2.el6 [[email protected] base]# rpm -q tree tree.x86_64 0:1.5.3-2.el6 [[email protected] base]# yum downgrade tree -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Downgrade Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package tree.x86_64 0:1.5.0-4 will be a downgrade ---> Package tree.x86_64 0:1.5.3-2.el6 will be erased --> Finished Dependency Resolution ...#后续已省略 Complete! [[email protected] base]# rpm -q tree tree-1.5.0-4.x86_64
7.卸载
remove | erase:所有依赖于正卸载曾虚报的程序都会被一并卸载
package1 [package2] [...]
例5:使用yum卸载zsh
[[email protected] base]# yum remove zsh Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package zsh.x86_64 0:4.2.6-3.el5 will be erased --> Finished Dependency Resolution ...#:中间部分已被省略 Erasing : zsh-4.2.6-3.el5.x86_64 1/1 Verifying : zsh-4.2.6-3.el5.x86_64 1/1 Removed: zsh.x86_64 0:4.2.6-3.el5 Complete! [[email protected] base]#
8.查询
info:查询程序包的相关简要信息
package1 [package2][...]
serach:在包名和sumary信息中搜索指定的关键字:
KEYWORD...
provides|whatprovides:查询指定文件是由哪个程序包安装生产
packages...
例6:查询/etc/httpd/是由哪个程序包生成的
[[email protected] base]# yum whatprovides /etc/httpd/conf/httpd.conf Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile httpd-2.2.3-31.el5.centos.x86_64 : Apache HTTP Server Repo : oldpackagepath Matched from: Filename : /etc/httpd/conf/httpd.conf httpd-2.4.6-31.el7.centos.x86_64 : Apache HTTP Server Repo : installed Matched from: Other : Provides-match: /etc/httpd/conf/httpd.conf
9.安装本地的程序包文件
localinstall
[rpmfile1] [rpmfile2]...
使用本地的程序包升级或安装
localupdate
10.包组管理
列出所有包组:
grouplist
安装包租
groupinstall
卸载包组
groupremove
更新包租
groupupdate
11.yum命令可用选项:
-y:自动回答为yes
--disablerepo=:临时禁用在配置文件中配置并启用的某repository
--enabledrepo:临时启用
--nogpgcheck:禁止做包校验
例7:使用尚未启用的old仓库安装tree命令,并且指定安装时不做包校验
[[email protected] yum.repos.d]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile repolist: 0 [[email protected] yum.repos.d]# yum install tree --enablerepo=old --nogpgcheck Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package tree.x86_64 0:1.5.0-4 will be installed --> Finished Dependency Resolution ...#中间已省略 Installed: tree.x86_64 0:1.5.0-4 Complete! [[email protected] yum.repos.d]#
至此,软件包管理介绍已完成,以上介绍足以应付平常软件包管理需求,若要查看rpm相关使用技巧可查阅以下文章
http://7703592.blog.51cto.com/blog/7693592/1631539