yum执行原理

功能简介

    yum是一款shell前端软件包管理工具,用其安装软件时,该工具以rpm软件包的包头(header)写入的依赖信息为依据,列出需要安装以满足欲装软件正常运行的所有依赖包,并在用户确认后进行自动化安装。


    可通过如下命令来检查rpm包所需依赖情况。

	rpm -qpR rpm包名


    对于“只下载不安装”的需求,可以通过“yum-downloadonly”插件来实现,安装及使用范例如下。


    安装插件:

	yum install yum-downloadonly

    执行(只下载rpm而不安装):

	yum install 欲装软件名 --downloadonly

·执行原理

    yum在得到正确的参数后,会首先从“/etc/yum.repo”路径下的众repo文件中取得软件仓库的地址并下载“元数据”,“元数据”含注册于该软件仓库内所有软件包的包名及其所需的依赖环境等信息,yum得到这些信息后会和本地以后环境做对比,进而列出确认需要安装哪些包,并在用户确认后开始安装。


    “元数据”由位于yum源服务器相关路径的repodata目录下的repomd.xml做索引。


·配置yum下载目录

    由yum下载的rpm包的存放位置,以及这些包是否会被系统自动清理,可通过修改yum配置文件(默认路径为/etc/yum.conf)中“cachedir”和“keepcache”两个属性来指定。


    cachedir后可用“=”连接目标路径,而keepcache值为0使,不长期保留下载的rpm包,值为1时则会保留

什么是repo文件


    repo文件是yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。



·repo文件常用属性详解


[serverid]

#其中serverid是用于区别各个不同的repository,必须有一个独一无二的名称。


name=Some name for this server

#name,是对repository的描述,支持像$releasever $basearch这样的变量;


mirrorlist=url://

#mirrorlist指定了一个URL地址,改地址是一个包含有众多源镜像地址的列表,当用户通过yum安装或升级软件时,yum会试图依次从列表中所示的镜像源中进行下载,如果从一个镜像源下载失败,则会自动尝试列表中的下一个。若列表遍历完成依然没有成功下载到目标软件包,则向用户抛错。


baseurl=url://

#baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。

#其中url支持的协议有 http:// ftp:// file://三种。

#其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。


gpgcheck=[1 or 0]

gpgkey=url://

#gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。gpgkey则用来指明KEY文件的地址,同样支持“http、ftp和file”三种协议。


exclude=

#exclude指明将哪些软件排除在升级名单之外,可以用通配符,列表中各个项目需用空格隔开。


failovermethod=priority

priority=

#failovermethode在yum有多个源可供选择时,决定其选择的顺序。该属性有两个选项:roundrobin和priority。roundrobin是随机选择,如果连接失败,则使用下一个,依次循环。priority则根据url的次序从第一个开始,如果不指明,默认是roundrobin。


enabled=[1 or 0]

#当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。



·repo文件常用变量

(1)$releasever:发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。

(2)$arch,cpu体系,如i386、x86_64等。

(3)$basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。

·createrepo简介


    createrepo用以创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据。



·createrepo语法

    基本语法:

    createrepo [option]


    通常情况下需要依次指定两个路径(directory):第一个是放置即将生成的元数据目录的位置,第二个则是存放rpm包用来提供下载的位置。

    常用参数(option)详解见下文描述。

    


·createrepo常用参数详解

    -u  --baseurl

        指定Base URL的地址


    -o --outputdir

        指定元数据的输出位置


    -x --excludes

        指定在形成元数据时需要排除的包


    -i --pkglist

        指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。


    -n --includepkg

        通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。


    -q --quiet

        安静模式执行操作,不输出任何信息。


    -g --groupfile

        指定本地软件仓库的组划分,范例如下:

 
  
  1. createrepo -g comps.xml /path/to/rpms
         注意:组文件需要和rpm包放置于同一路径下。



    -v --verbose

        输出详细信息。


    -c --cachedir

        指定一个目录,用作存放软件仓库中软件包的校验和信息。当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。


    --update

        如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。


    -p --pretty

        以整洁的格式输出xml文件。


    -d --database

        该选项指定使用SQLite来存储生成的元数据,默认项。

·yum简介及基本执行原理

    参考《yum执行原理》一文:http://izack.cn/worknote/9.html



·repo文件详解

    参考《repo文件详解》一文:http://izack.cn/worknote/10.html



·createrepo简介及主要参数

    参考《createrepo常用参数》一文:http://izack.cn/worknote/8.html



·自建yum源范例

    下述内容记录了自建最简化yum源(软件仓库)的过程。


    第一步:首先明确该软件仓库对外开放的访问协议和路径格式,这里我采用Apache HTTP Server提供服务,并制定格式为“http://主机IP地址:80/操作系统名/发行版/CPU架构”。


    第二步:按照第一步制定的格式去创建目录:

        /home/data/yum/centos/6/x86_64


    第三步:安装并配置Apache HTTP Server,使来访者能访问到本地软件仓库。

        首先安装Apache HTTP Server服务。

 
  
  1. yum -y install httpd
         这里用yum直接安装,如果实际环境无法联网,需要自带rpm安装包。


        由于我的测试环境上Apache HTTP Server没有用作它途,所以直接将“/etc/httpd/conf/httpd.conf”内的“ServerName”一行注释掉,并在修改“DocumentRoot”和“Directory”属性为“/home/data/yum”后直接启动了服务。

 
  
  1. chkconfig httpd on
  2. service httpd start



    第四步:将rpm包全部拷贝至第二步所示的目录下。


    第五步:使用createrepo创建元数据:

 
  
  1. createrepo -p -d -o /home/data/yum/centos/6/x86_64/ /home/data/yum/centos/6/x86_64/
createrepo -g ../repocdae/comps.xml .
yum-groups-manager 生成组信息comps.xml

 

        执行效果如下图所示。

yum执行原理_第1张图片

        (注意:-p参数表示用pretty format输出;-d参数表示用SQLite存储元数据;-o用来指定元数据输出路径,即后面跟随的第一个路径;第二个路径为存放rpm包的路径)

        成功执行后,“/home/data/yum/centos/6/x86_64/”路径下会出现“repodata”目录,该目录内即为该软件仓库的元数据。


    第六步:编写如下repo文件并下发至需要使用本自建yum源安装软件的节点,这里文件名使用“Zack-Mirror.repo”,“10.1.51.137”是我的本机内网IP,可依据具体部署环境自行更改。

 
  
  1. [Zack-Mirror]
  2. name=Zack-Mirror
  3. baseurl=http://10.1.51.137/centos/$releasever/$basearch/
  4. enabled=1
  5. gpgcheck=0


    第七步:指定从本地自建仓库安装软件。

        以安装vsftp服务为例,命令行指令如下:

 
  
  1. yum --disablerepo=* --enablerepo=Zack-Mirror install vsftpd


        执行效果如下图。

yum执行原理_第2张图片


        输入y确认后即完成安装。


你可能感兴趣的:(Linux文件系统)