Yum (Yellow dog Updater, Modified) 由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。——维基百科
我们的“阿黄”上场了,这条dog非常忠诚可靠,而且确实帮助我们干了很多家务活还不制造垃圾。Yum是基于RPM的前段工具,所以它管理的依然是RPM包,不能忘了主人哦。
Yum利用的是一种C/S结构,它有客户端和服务端两个部分,客户端可以理解为yum命令本身,而服务端上就是我们的软件包仓库以及“元数据”。这个“元数据”类似于我们的“花名册”,记录了仓库的信息、特征码以及仓库里都有哪些“货”。当阿黄第一次来取货时,它会缓存在自己的窝里一份元数据这个花名册,然后在花名册中找自己想要的骨头,找到以后缓存到家里一份,吃完以后就删掉了,下次再去取骨头时,阿黄会对比一下自己的花名册和服务器的是否一致,不一致的话就更新一下,然后取骨头走人。这就是Yum的基本工作流程,当然它可以自动给我们解决软件包的依赖问题。
我们知道了阿黄的工作方式那么就来先建立一个仓库吧,要不它去哪里找骨头呢。如果你连阿黄都没有那么只能先用rpm装一个了,这里就不演示了。要找到仓库我们得先有一张地图,这就是yum的配置文件:
我们来解释一下都是什么意思:
## [main]
## cachedir=/var/cache/yum/$basearch/$releasever
## keepcache=0 --> 是否保持包缓存
## debuglevel=2 --> 调试级别,显示安装时的详细信息级别
## logfile=/var/log/yum.log --> 日志
## exactarch=1 --> 与当前平台是否一致
## obsoletes=1 --> 是否检查包丢弃
## gpgcheck=1 --> 检查来源合法性和包完整性
## plugins=1 --> yum是否支持插件
## installonly_limit=5 --> 安装限制
## bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
## distroverpkg=centos-release --> 发行版版本
这里有一句很重要/etc/yum.repos.d/这个目录下使我们每个仓库的精确地图
看我们有这么多,它们都有一个共同点就是以.repo结尾,这就是仓库的标准命名。但到底该用哪个呢,不用担心我们用的是test.repo,因为其他的repo我都在内部给注销掉了,并且每个仓库都有一个cost类似于优先级,默认为1000.我们来看看这个精确地图里的内容吧:
解释一下:
各仓库配置
[repositoryid]
# 对于当前系统的yum来讲,此repositoryid用于惟一标识此repository指向,因此,其必须惟一;
name=
# 当前仓库描述信息;
baseurl=url://path/to/repository/
# 指明repository的访问路径;通常为一个文件服务器上输出的某repository;
url:
ftp服务
ftp://SERVER/PATH/TO/REPOSITORY
http服务
http://SERVER/PATH/TO/REPOSITORY
本地目录:
file:///PATH/TO/REPOSTIROY
enabled={1|0}
此仓库是否可被使用
gpgcheck={1|0}
是否对程序包做校验
gpgkey=url://path/to/keyfile
指明gpgkey文件路径;
cost=#
指明当前repository的访问开销,默认为1000;
好了,其实这里我们逗了一下阿黄,因为我们给了它地图确没有建立仓库,阿黄是找不到的。现在就来把仓库建立起来吧。需要使用createrepo命令,如果没有装只能用RPM装一下了。
这里我么挂载了CentOS的光盘,我们就把他当一个仓库吧,看看它为什么能成为一个仓库呢?
是不是发现有一个叫repodata的目录呢,看看里面是什么
OK,这就是我们的元数据,有了它就代表我们的仓库有被使用权了,如果你还记得我们的地图路径中所指向的应当是repodata目录的父目录,那一串乱七八糟的数字其实就是仓库的特征码了,标识着仓库是否发生过改变。
是不是有了一个叫repodata的目录啊,至于为什么在这个目录中建设,是因为我的主机上配置了httpd服务,当然我们也可以配置一个ftp服务。
当然这个ftp我没有配置成repo仓库,而是共享了我写的一些脚本。好了,一切具备只欠东风了:
##yum:系统不能有两个yum进程同时启动
## command is one of:
## * install package1 [package2] [...] --> -y自动回答为yes
## * update [package1] [package2] [...] --> 升级
## * update-to [package1] [package2] [...]
## * check-update --> 检查可用升级,需要配置升级路径
## * upgrade [package1] [package2] [...]
## * upgrade-to [package1] [package2] [...]
## * distribution-synchronization [package1] [package2] [...]
## * remove | erase package1 [package2] [...] --> 卸载一个被依赖的包时会将依赖它的包都卸载
## * list [...]
## yum list extras [glob_exp1] [...] --> 机器上装了,但是yum仓库中没有
## yum list obsoletes [glob_exp1] [...] --> 机器上装了,但是有更新的版本
## yum list recent --> yum仓库中新添加的包
## * info [...] --> 查询包的信息
## * provides | whatprovides feature1 [feature2] [...] --> 查询指定文件由哪个程序包安装完成
## * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] --> 清理包|元数据|过期缓存|rpm数据库|插件|所有
## * makecache --> 创建缓存
## * groupinstall group1 [group2] [...]
## * groupupdate group1 [group2] [...]
## * grouplist [hidden] [groupwildcard] [...] --> 组列表,可以一下安装|卸载一个组
## * groupremove group1 [group2] [...] -->
## * groupinfo group1 [...] --> 显示包租详情,安装和使用时包组要用""引起来,CentOS7中使用install就可以了,如:yum install @"Server Platform Development"
## * search string1 [string2] [...] --> 在包名和sumary信息中搜索指定的关键字
## * shell [filename]
## * resolvedep dep1 [dep2] [...]
## * localinstall rpmfile1 [rpmfile2] [...] --> 安装本地的程序包文件而不是仓库中的,CentOS7之后使用install就可以了
## (maintained for legacy reasons only - use install)
## * localupdate rpmfile1 [rpmfile2] [...] --> 升级本地的程序包文件而不是仓库中的
## (maintained for legacy reasons only - use update)
## * reinstall package1 [package2] [...] --> 覆盖安装
## * downgrade package1 [package2] [...] --> 降级
## * deplist package1 [package2] [...]
## * repolist [all|enabled|disabled] --> 显示全部|可用|禁用仓库信息
## * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
## * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
## * load-transaction [txfile]
## * check
## * help [command]
好好好,不要慌不要忙,让我给你演示一下就会很明白了:
这里clean all就是清空所以缓存,repolist是查看仓库列表,因为172网段是在教室的IP段所以连不上,不过我一经把本机的http服务器的IP给改过了,所以xen4是可用的。
install就是安装了,-y是自动回答为yes,我们看到安装xen使用了DVD1和xen4这两个仓库。
info为查看包的相关信息
update为升级软件包,这里不需要升级
我们有时会遇到要安装一个包组,可以使用grouplist查看以后再使用groupinstall安装就可以了,不再演示。
remove卸载软件包
好了,这大致就是yum的使用情况了,其他的选项大家使用man或者在实践当中继续学习吧。这里在补充一个小知识点:
yum有内置变量,用于保存当前平台的相信息;客户端下载配置文件后可以自动选择适合自己arch的rpm包
(1) $raleasever: 当前OS发行版的主版本号;
例如,对CentOS 6.6 x86_64,主版本号为6;
(2) $arch:平台
i386, i486
(3) $basearch: 基础平台, 例如i686, i586, i486以及i386的基础平台同为i386;
(4) $YUM0-$YUM9 --> 自定义使用的变量
##如果6升级为6.1,我们可以ln 6 --> 6.1这样客户端不用改变就可以升级到6.1的安装包仓库 例如:
baseurl=http://repo.magedu.com/centos/$releasever/$basearch
当前系统为CentOS 6.6 x86_64
http://repo.magedu.com/centos/6/x86_64
希望本文能够给您带来帮助,如有错误敬请指正,拜谢!
本文出自 “Linuxlove” 博客,请务必保留此出处http://linuxlover.blog.51cto.com/2470728/1631592
原文地址:http://linuxlover.blog.51cto.com/2470728/1631592