[转]YUM的工作机制与配置


Yum解决了rpm不能解决的依赖关系,但是YUM是依赖RPM运行的

  • yum服务器

    所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提 供简单的下载就可以了,ftp或者httpd的形式都可以。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本 号,conf文件,binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息(元数据)做成一张" 清单",这张"清单""就是描述每个rpm包的spec文件中信息。

  • yum client端

    client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务 器的地址。yum会定期去"更新"yum服务器上的rpm包"清单",然后把"清单"下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找"清单",根据"清 单"里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。(前提是不存在rpm包的cache),yum安装完成后自动删除已安装程序的安装包,但是不会删除元数据,方便下次使用

Yum仓库相当于rpm仓库+元数据

Createrepo命令(用于分析每个包后在rpm仓库中生成元数据)

当第一次使用yum管理软件时,yum会自动下载所需要的headers放置在/var/cache/yum目录下;

Yum仓库---->yum 缓存---->本地安装

yum的配置文件:

1./etc/yum.conf:为所有仓库提供公共配置
[main]
cachedir:  yum缓存的目录,yum在此路径下存储下载的rpm包和数据库,一般是/var/cache/yum。
debuglevel:除错级别,0──10,默认是2
logfile:   yum的日志文件,默认是/var/log/yum.log。
pkgpolicy:包的策略。

一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。
distroverpkg:指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
exactarch:有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用i686的包来升级。
retries:   网络连接发生错误后的重试次数,如果设为0,则会无限重试。
tolerent:  也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1则yum不会出现错误信息,默认是0。
除了上述之外,还有一些可以添加的选项,如
exclude:   排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
gpgcheck: 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认好像也是检查的。

plugins:  是否启用所有的插件(plug-in),默认为0,代表不启用。由于RHEL为YUM提供了一个名为rhn-plugin的插件,以便读取RHN提供的YUM下载源,因此你必须保持这个参数为1,才能顺利使用RHN的YUM下载源来安装、升级你的RHEL。

metadata_expire: 定义YUM缓存中数据的过期时间,单位为秒。

proxy:    指定读取下载源时使用的代理服务器的路径(URL)。

2.    /etc/yum.repos.d/*.repo:为仓库的指向提供配置

        仓库指向的定义:
        [repositoryID]
        name=Some name for this repository
        baseurl=url://path/to/repository/
        enabled={1|0}
        gpgcheck={1|0}
        gpgkey=URL
        enablegroups={1|0}
        failovermethod={roundrobin|priority}
            默认为:roundrobin,意为随机挑选;baseurl有多个时,会轮询挑选,如果选             roundrobin,会随机挑选       

        cost=(默认为1000)

wKioL1XqsMCiTFLBAABvPi29niw042.jpg

YUM工具的使用:

    yum的命令行选项:
        --nogpgcheck:禁止进行gpg check;
        -y: 自动回答为“yes”;
        -q:静默模式;
        --disablerepo=repoidglob:临时禁用此处指定的repo;
        --enablerepo=repoidglob:临时启用此处指定的repo;
        --noplugins:禁用所有插件;

    yum的repo配置文件中可用的变量:
        $releasever: 当前OS的发行版的主版本号;
        $arch: 平台;
        $basearch:基础平台;
        $YUM0-$YUM9

下面的配置中使用了变量:

wKiom1XqyvLx0vOvAAHkI4mYydQ790.jpg

man手册输出

        yum [options] [command] [package ...]
       command is one of:
        * install package1 [package2] [...]
        * 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 [...]
        * info [...]
        * provides | whatprovides feature1 [feature2] [...]
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
        * makecache
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [hidden] [groupwildcard] [...]
        * groupremove group1 [group2] [...]
        * groupinfo group1 [...]
        * search string1 [string2] [...]
        * shell [filename]
        * resolvedep dep1 [dep2] [...]
        * localinstall rpmfile1 [rpmfile2] [...]
           (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|rollback|new|sync|stats]
        * check
        * help [command]
 

    总结用法:

    显示仓库列表:
        repolist [all|enabled|disabled]

wKioL1Xqs8WBUcs0AAEWBT8Te-k543.jpg

    显示程序包:
        list
            # yum list [all | glob_exp1] [glob_exp2] [...]
            # yum list {available|installed|updates} [glob_exp1] [...]

    安装程序包:
        install package1 [package2] [...]
        reinstall package1 [package2] [...]  (重新安装)
    升级程序包:
        update [package1] [package2] [...]
        downgrade package1 [package2] [...] (降级)
    检查可用升级:
        check-update
    卸载程序包:
        remove | erase package1 [package2] [...]
    查看程序包information:
        info [...]
    查看指定的特性(可以是某文件)是由哪个程序包所提供:
        provides | whatprovides feature1 [feature2] [...]
    清理本地缓存:
        clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    构建缓存:
        makecache

    搜索:
        search string1 [string2] [...]
        以指定的关键字搜索程序包名及summary信息;
    查看指定包所依赖的capabilities:
        deplist package1 [package2] [...]

wKioL1XqtomRGjcbAAESPEd_gjg340.jpg

    查看yum事务历史:
        history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

wKiom1XqtRKQDMxDAAC_DfVBNmU525.jpg   

    安装及升级本地程序包:
        * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
        * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
    包组管理的相关命令:
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [hidden] [groupwildcard] [...]
        * groupremove group1 [group2] [...]
        * groupinfo group1 [...]

wKioL1Xqubmyz8JdAAFGyeGiSW8254.jpg

话题:创建YUM仓库

步骤:

服务器端配置:

  1. 创建要设置为yum源的目录,并且拷贝一些rpm包到此目录

wKiom1Xqz77gxMBBAAGHDnSvVmQ577.jpg

使用createrepo命令生成repodata信息

wKioL1Xq0eTAXgmvAAJOkTWNWLo120.jpg

如果想提供远程仓库需要配置httpd服务器到发布目录

客户端配置:

在/etc/repo.d目录下新建一个repo文件

wKiom1Xq0X2gPmX0AAAlcD31XDY194.jpg

测试:发现最后一行我们配置的local仓库生效了

wKioL1Xq06OTq60LAAFCOVODaM8809.jpg

来源:

http://zhuanlan.zhihu.com/p/103038696

http://blog.51cto.com/leeyan/1691586