YUM介绍:RPM前端工具,在将rpm包依赖关系做成数据库的前提下,自动查找依赖关系,并从某个仓库(repository)下载到所需要的安装包并在本地完成安装;在客户端,用yum可以安装在本地配置文件中可以找到的仓库,通过仓库的元数据(仓库(repository)中的rpm包的rpm信息被抽取出来,制作成yum仓库的元数据),可以知道仓库中有哪些软件包,以及对应的安装依赖关系。****例如:如果要安装Z,Z依赖X、Y,查到本地已经安装Y,则yum只需要从仓库(repository)中下载Z、X安装即可;;;根据本地rpm数据库中的数据,以及仓库(repository)中元数据判断要下载那些rpm包来安装,然后等待下载完成后自动调用rpm命令来安装这些下载下来的rpm包。
使用yum命令安装软件的流程:
yun client先将仓库元数据下载至本地,在本地缓存下来,以后再通过yum安装rpm包时,就不用再连接远程仓库获取元数据了,可以在本地完成分析,需要用到那个软件包,他就联系对应仓库下载软件包,缓存仓库(repository)元数据的目的就是为了加速。
Yum仓库的实现方式有如下几种:
1) ftp://
2) http://
3) 在本地某个目录,例如file:///yum (注:file//为协议格式,/yum为仓库的路径)
实现yum的步骤(yum 仓库(repository)与yum client):
1) 配置好yum的仓库(repository),对应的[主机]路径下,存放着我们需要的rpm包,这些rpm包要有包含他们元数据的文件。***createrepo命令自动抽取rpm包元数据并生成元数据文件(一堆压缩后的xml文档,存放在.repo|.repofile|repodata目录下),这个隐藏目录存放的位置,就是yum仓库(repository)的位置。
2) 我们针对某个目录创建(来createrepo)元数据文件(repodata目录),通常就是yum仓库(repository)所在目录。
3) 客户端(主配置文件/etc/yum.conf):yum install | reinstall |remove rpm包基名(yum对程序包管理要依赖于仓库才能完成,需要通过配置文件告诉yum 仓库(repository)的位置,可以编辑主配置文件或者配置文件/etc/yum.repos.d/*.repo,配置文件/etc/yum.repos.d/*.repo被视为主配置文件的一部分)。
下面介绍yum客户端主配置文件/etc/yum.conf:
[main] #此配置文件格式是分段配置,section[repository_id]定义仓库,section[main]是特
#殊的,除了它以外每一个中括号括起来就是一个仓库的名称,main是为后面每一个仓库提#供默认的配置;同一yum客户端可以有多个仓库,但是全局配置[main]只有一个,也可以#在主配置文件中写上仓库名称定义它,也可以在/etc/yum.repos.d/下新建一个*.repo文件,#并在里面定义仓库。
Cachedir=/….PATH…(告诉yum将什么目录当成缓存目录)
Keepcache=0 (通过yum仓库下载到本地的rpm包是否在安装后删除,还是长期保存)
Debuglevel=2(调试级别)(运行过程中是否显示错误信息,级别越高显示的越详细)
Logfile=/..PATH..(日志文件位置,使用yum执行了什么操作会保存在日志中以供以后检索)
Exactarch=1 (1表示下载软件包时必须和本地硬件平台精确匹配;0反之)
Gpgcheck=1 (gpg用于验证软件包的来源合法性以及完整性,这里表示每次安装一个软件包是是否要自动完成来源合法性的检测,1为yes)
定义yum仓库的配置文件详解:
如果希望定义一个yum仓库,可以在/etc/yum.repos.d/下创建一个以.repo为后缀名的配置文件,每一个.repo文件由[repository_id]以及下面跟的几个指令组成:常用指令如下:
Name=……(仓库的描述信息,无意义,但不可以缺少这个值,中间可以有空格)
Baseurl=……(告诉yum这个仓库可以通过什么路径访问,一般ftp://;http://;file://)
Enabled={0|1}(是否启用此仓库,没写enabled指令都是默认启用的,1为启用,0为不启用)
Gpgcheck={0|1}(是否启用gpg校验,没写gpgcheck指令默认为启用,1,为启用,0为不启
#用,如果为1,要告诉yum用于gpg校验的key文件路径,可在本地也可在远程主机上)
Gpgkey=/….PATH….
Cost=1000(在几个yum仓库中优先选哪个,cost值越低越优先使用)
*)[repository_id]可以随便取名,主要是本机唯一的,不与其他repository_id冲突即可。
示例:
[base]
Name=centos
Baseurl=http://172…(这个路径下必须直接能够找到repodata目录!!)
Enabled=1
Gpgcheck=0
这样就完成了一个yum仓库的定义,配置好yum仓库后本地就可以通过yum命令来安装程序了。
Yum命令介绍:
Yum subcommand:
List[all|installed|available|updates(可更新的包)|extras(本地不属于任何yum仓库的包)|recent(新添加进仓库的包)] #支持globbing,例如#yum list all bind*#all指所有包,installed指已安装的包,available指可安装的包。
Repolist[all|enabled|disabled]查看当前可使用的yum仓库,默认采用enabled选项
*yum有包组的概念,可以安装/卸载一整个包组,如果包组名中间有空格的话需要用引号引起来。
Grouplist(显示已安装/可安装的包组)
Groupinfo “包组名”(查看包组信息:描述、必须装的包、默认装的包、可选装的包)
*yum仓库元数据缓存到本地可以加速yum操作,但缺点是如果yum仓库更新的话,yum无法反映出之后的更新,因此在必要时要清空本地的缓存,管理缓存的选项如下:
Clean [packages(清空本地缓存的包)|metadata(清空本地缓存的元数据)|all(清空所有数据)]
Makecache(手动建立元数据缓存)#yum makecache
安装子命令:
Install packagename….(可以有多个包,用空格隔开)(可以用globbig)
-y(自动回答为yes)
Reinstall packagename(重新安装软件包)
升级子命令:
Update packagename
Update-to packagename-version(指定升级到哪个版本)
Check-update(检查一下本地有哪一些可以升级的软件包)
卸载子命令:
Remove packagename(用yum命令卸载包,依赖此包的软件也将一并被卸载)
查询某文件可以有那个rpm包来提供:
Provides /path/to/somefiles #例:yum provides/etc/fstab(次包已安装)
例:yumprovides /etc/named.cong(此包未安装)
搜索rpm包
Search 关键字#例yum search init
安装包组:
Groupinstall 包组名…(可以跟多个包组名,如果包组名中间有空格的话需要用引号引起来)
*******我们的开发环境(把下面几个包组安装好以后,我们就可以手动编译其他程序了,或制作源码rpm包为2进制rpm包了)
Rhel5/centos5上面安装:
1)Development Tools (2)Server Platform Development (3)Develogmentlibraries
Rhel6/centos6上面安装:
1)Development Tools (2)Server Platform Development (3)Desktop PlatformDevelopment
例#yum groupinstall “..” “..” “..”
Groupupdate 包组名#包组更新
Groupremove 包组名#包组卸载
Downgrade 包组名#包组降级
使用yum安装升级本地rpm包(好处:可以通过yum仓库自动解决安装升级过程中发生的依赖关系问题,自动下载安装依赖的库,rpm包等等,rhel5(localinstall|localupdate),rhel6(install|update))
语法格式:yum localinstall|localupdate|install|update /path/XXXX.rpm
其他yum命令:
History(查看本机用户前几次使用yum操作的历史记录)
Version(为rpmdb提供的一个版本)
--nogpgcheck(此选项可跳过gpg检测,在命令行上指定的选项可以覆盖配置文件中的选项)
创建yum仓库
用系统安装光盘来创建一个本地的yum仓库:
安装光盘本身就是一个yum仓库,将光盘挂载在系统上,光盘的那个挂载点就可以直接当做yum仓库来使用。
示例如下:
#yum clean all
#mount /dev/cdrom /media/cdrom
#vi /etc/yum.repos.d/base.repo(创建一个以.repo后缀结尾的文件就行,文件名自己取,只要不和其他repo文件重名即可,改baseurl)
baseurl=file:///media/cdrom :x(保存退出)
#yum makecache
#yum repolist
** .repo文件创建实例:
#vi /etc/yum.repos.d/mybase.repo
[centos6] #这是仓库名,可以随便取,不与其他仓库名重复即可。
name=centos 6.4 x86_64 #“=”号前后不能有空格
baseurl=http://172…/x86_64/ #这个是远程的服务器上已http方式提供的yum仓库源
gpgcheck=0 #可以不写这一行,只要在主配置文件中将这一项设置为0。
enable=1 #可以不写这一行,默认为1.
cost=1000 #优先级
[cdrom_centos6] #这是仓库名,可以随便取,不与其他仓库名重复即可。
name=centos base repo #“=”号前后不能有空格
baseurl=file:///media/cdrom #这个是远程的服务器上已http方式提供的yum仓库源
gpgcheck=0 #可以不写这一行,只要在主配置文件中将这一项设置为0。
enable=1 #可以不写这一行,默认为1.
cost=2000 #优先级
:x(保存退出)
创建连接到互联网上yum源的yum仓库
步骤:查看互联网上的yum源的包含repodata目录的目录如:
http://centos.ustc.edu.cn/centos/5/os/i386/ 或者
http://centos.ustc.edu.cn/centos/5/os/x86_64/
将baseurl的值设置为上面的网址即可。
问题:1)如果新的版本出现,旧版本的目录就空了,如rhel6.4àrhel6.5
2)要批量给自己的服务器配置yum仓库,但是有的服务器是rhel5,有的服务器是rhel6,有的服务器是32位操作系统,有的服务器是64位操作系统。
解决方案:在定义baseurl选项时,可以使用yum的内置变量,它在/etc/yum.repos.d/下有样例文件CentOS-Base.repo
#less CentOS-Base.repo(下面介绍yum的内置变量)
$releasever:检查并替换为当前系统的主要发行版本号,它不包括次版本(rhel6.5,为6)
$basearch: 检查并替换为当前系统的硬件平台(cpu架构),x86_64或i386,这个值可以用命令uname -m 来显示;此变量会将ix86(x指[3456])统统替换为i386
例:baseurl=http://mirror.sohu.com/centos/$releasever/os/$basearch/
这个路径不论有的服务器是rhel5,有的服务器是rhel6,有的服务器是32位操作系统,有的服务器是64位操作系统。都可以使用!!!
4) 制作yum仓库
#yum install createrepo(createrepo:为1个yum仓库创建元数据)
使用方法:
#mkdir /yum
#mv xen-4.1/ /yum
#cd /yum
#createrepo /yum/xen-4.1
#cd /yum/xen-4.1/repodata;ls
其中:
xxx.filelists.xxx当前yum仓库内所有rpm包的文件列表,yumprovides命令依赖此文件。
xxx.primary.xxx:包含当前yum仓库内所有rpm包的文件列表以及rpm包之间的依赖关系。
xxx.other.xxx: 包含当前yum仓库内所有rpm包的changelog(改变日志),用命令来查询:
rpm -q --changelog 包名,可以在制作rpm包时修改它的changelog。
repomod.xml:记录上面3个文件的时间戳,每次用createrepo命令创建repodata目录都会更新这个文件。
***:我们使用yum命令安装程序时,它会拿缓存在本地的repomod.xml中的时间戳与远程yum仓库中的repomod.xml中的时间戳做比较,若远程时间戳较新,它会自动更新元数据,并自动下载与安装软件包。
***:使用自建的yum仓库:
#vi /etc/yum.repos.d/xen.repo
[xen-4.1] #这是仓库名,可以随便取,不与其他仓库名重复即可。
name= xen-4.1 x86_64 #“=”号前后不能有空格
baseurl=file:///yum/xen-4.1 #这个是远程的服务器上已http方式提供的yum仓库源
gpgcheck=0 #可以不写这一行,只要在主配置文件中将这一项设置为0。
enable=1 #可以不写这一行,默认为1.
:x(保存退出)
#yum repolist #yum install xen
5) yum缓存位置:/var/cache/yum下
*)如果我们学习了网络服务器http、ftp后,将这些yum源一导出,也可作为网络yum源!