yum详解

简介:
yum
  • yum由来

  • yum基本工作机制

  • yum的相关特点

  • yum的配置文件

  • yum的配置仓库示例

  • yum的命令使用

  • yum中常见问题

yum由来

yum是yellowdog updater修改而来,被yellowdog linux,rhel,centos,fedora所采用.其名为"Yellowdog Updater Modified".是一个基于rpm的前端管理工具.用于解决rpm包之间的依赖关系,并且一次安装所有依赖的软件包,无需繁琐下载,安装.

yum基本工作机制

yum程序如何获取rpm包呢?
    一般有指定的服务器,或者光盘将大量rpm包保存其中.这些存储地方我们称其为"仓库",那么我们是直接将所有的包都下载到本地,还是怎么获取呢?
    其实很简单,服务器端提供一些元数据文件,其元数据文件中包含了rpm包的名字,版本,以及包与包之间的依赖关系等信息.我们
    直接将元数据缓存到本地,再根据所需,yum会自动将rpm下载到本地并安装.

yum再安装完rpm包之后,会自动清除下载的rpm包,但其元数据文件保留,方便下次更快使用.
此方法虽然加快yum使用速度,但如果服务器发生文件更新或者依赖性的某些改动,则无法及时更新元数据文件,为了解决此问题
yum在每次使用之前都会与服务器对比校验码,如果校验码没有变动,则继续使用原来的元数据文件,否则下载新的元数据文件.

获取其rpm包的方式有多种,http,ftp,nfs,本地光盘都能获取仓库.

yum的相关特点

保持与rpm数据库的一致性      #如果rpm数据库损坏,yum也无法正常使用.
同时配置多个源
简单配置文件
解决依赖关系

yum的配置文件

 /etc/yum.conf                  #为所有仓库提供公共配置
 /etc/yum.repos.d/*.repo        #yum的仓库相关配置文件
 **man yum.conf 用来查询其帮助文档 **

 /etc/yum.conf
 [main]
 cachedir=/var/cache/yum/$basearch/$releasever      #缓存目录路径
 keepcache=0        #本地缓存文件是否保存
 debuglevel=2       #debug调试级别
 logfile=/var/log/yum.log       #yum自己的日志文件
 exactarch=1        #是否严格平台匹配
 obsoletes=1        
 gpgcheck=1         #是否检查包的来源合法性
 plugins=1          #是否支持插件
 installonly_limit=5        #一次同时安装几个程序包
 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
 distroverpkg=centos-release        #设定$releasever的值由哪个rpm包的主版本号


 /etc/yum.repos.d/*.repo
 [repositoryid]                                 #仓库id,保持唯一性
 name=Some name for this repository             #仓库名称,仅作标识
 baseurl=url://server1/path/to/repository/      #指定仓库访问路径,以下的行
         url://server2/path/to/repository/
         url://server3/path/to/repository/
 gpgcheck={1|0}                                 #是否检查包来源合法性及完整性,默认为1
 gpgkey=RPM-GPG-KEY                             #指向RPM-GPG-KEY的位置
 enabled={1|0}                                  #是否启用,默认为1
 failovermethod={"roundrobin"|"priority"}       #roundrobin随机选择url,priority从第一个url开始,按顺序选择
 cost=#                                         #仓库开销,用来定义仓库优先级,默认为1000,数字越小优先级越大
 mirrorlist=url://mirrorlist_path               #镜像列表,其路径指向的是访问仓库路径的url,不能与baseurl同时使用

 注意:仓库所指的路径一定是在repodata目录"上",并不是指向package目录.repodata目录中保存了元数据文件.

 一些常用变量:
 arch           #平台,当前系统的架构
 basearch       #基本平台架构,如果当前系统架构为i586,那么此匹配到基本平台的为i386
 releasever     #该发行版的主版本号
 $YUM0-$YUM9    #用于将与同名的环境变量的值,替换为自身,如果不存在则不替换

yum的配置仓库示例

配置本地源:

    vim /etc/yum.repos.d/centos-local.repo
    [local_1]
    name=local cdrom
    baseurl=file:///media/cdrom
    enabled=1
    gpgcheck=1
    gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-6
    cost=50

    显示仓库列表,以下为成功配置
    [root@centos yum.repos.d]# yum repolist
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Determining fastest mirrors
    local_1                                                                       | 4.0 kB     00:00 ... 
    local_1/primary_db                                                            | 4.4 MB     00:00 ... 
    repo id                                       repo name                                        status
    local_1                                       local iso                                        6,367
    repolist: 6,367



epel源:

    vim /etc/yum.repos.d/epel.repo
    [epel_1]
    name=epel source
    baseurl=http://mirrors.aliyun.com/epel/$releasever/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6
    cost=100

    成功缓存元数据文件,以下为配置成功
    [root@centos yum.repos.d]# yum makecache
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Determining fastest mirrors
    epel_1                                                                                        | 4.3 kB     00:00     
    epel_1/group_gz                                                                               | 150 kB     00:00     
    epel_1/filelists_db                                                                           | 7.8 MB     00:07     
    epel_1/updateinfo                                                                             | 736 kB     00:00     
    epel_1/primary_db                                                                             | 5.9 MB     00:05     
    epel_1/other_db                                                                               | 2.9 MB     00:02     
    Metadata Cache Created

yum的命令使用

yum命令用于管理程序包和程序包组

yum [options] [command] [package ...]
    options:
            -y, --assumeyes         #全部选y
            -q, --quiet             #运行不输出
            --disablerepo=repoidglob    #临时不启用此仓库
            --enablerepo=repoidglob     #临时使用此仓库
            --nogpgcheck                #不检查包完整性和安全性
            --disableplugin=plugins     #不启用此插件
            --noplugins                 #不启用插件

    command:

        安装:
            install package1 [package2] [...]           #安装程序包
            localinstall rpmfile1 [rpmfile2] [...]      #本地安装rpm包,在安装不属于仓库的rpm包时,也能为其解决依赖关系
            localupdate rpmfile1 [rpmfile2] [...]       #本地更新rpm包
            reinstall package1 [package2] [...]         #重新安装

            [root@centos ~]# yum install -y httpd    ///安装httpd程序
            Loaded plugins: fastestmirror, refresh-packagekit, security       <--yum的插件
            Loading mirror speeds from cached hostfile    
            Setting up Install Process
            Resolving Dependencies               <--检查依赖关系
            --> Running transaction check
            ---> Package httpd.x86_64 0:2.2.15-29.el6.centos will be installed
            --> Finished Dependency Resolution

            Dependencies Resolved

            =========================================================================================================================================================
             Package                         Arch                             Version                                        Repository                         Size
            =========================================================================================================================================================
            Installing:
             httpd                           x86_64                           2.2.15-29.el6.centos                           local_1                           821 k

            Transaction Summary
            =========================================================================================================================================================
            Install       1 Package(s)

            Total download size: 821 k
            Installed size: 2.9 M
            Downloading Packages:
            Running rpm_check_debug
            Running Transaction Test
            Transaction Test Succeeded
            Running Transaction
              Installing : httpd-2.2.15-29.el6.centos.x86_64                                                                                                     1/1 
              Verifying  : httpd-2.2.15-29.el6.centos.x86_64                                                                                                     1/1

            Installed:
              httpd.x86_64 0:2.2.15-29.el6.centos

            Complete!


        卸载: 
            remove | erase package1 [package2] [...]    #卸载程序包

            [root@centos ~]# yum remove -y httpd
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Setting up Remove Process
            Resolving Dependencies
            --> Running transaction check
            ---> Package httpd.x86_64 0:2.2.15-29.el6.centos will be erased
            --> Finished Dependency Resolution

            Dependencies Resolved

            =========================================================================================================================================================
             Package                        Arch                            Version                                          Repository                         Size
            =========================================================================================================================================================
            Removing:
            httpd                          x86_64                          2.2.15-29.el6.centos                             @local_1                          2.9 M

            Transaction Summary
            =========================================================================================================================================================
            Remove        1 Package(s)

            Installed size: 2.9 M
            Downloading Packages:
            Running rpm_check_debug
            Running Transaction Test
            Transaction Test Succeeded
            Running Transaction
              Erasing    : httpd-2.2.15-29.el6.centos.x86_64                                                                                                     1/1 
              Verifying  : httpd-2.2.15-29.el6.centos.x86_64                                                                                                     1/1

            Removed:
              httpd.x86_64 0:2.2.15-29.el6.centos

            Complete!

        更新:  
            update [package1] [package2] [...]          #更新程序包
            check-update                                #检查能否更新($?的返回值为100,有更新的程序包;返回值为0,没有更新的程序包;返回值为1,有错误发生)
            downgrade package1 [package2] [...]         #程序包降级


            [root@centos ~]# yum check-update               ///检查有哪些可更新的程序包
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            Obsoleting Packages
            ibus-table-chinese-cangjie.noarch                                1.4.6-1.el6                                     epel_1                                  
                ibus-table-cangjie.noarch                                    1.2.0.20100210-1.el6                            @anaconda-CentOS-201311272149.x86_64/6.5
            ...
            [root@centos ~]# yum update ibus-table-chinese-cangjie.noarch   -y          ///更新其中程序包
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            Setting up Update Process
            Resolving Dependencies
            --> Running transaction check
            ---> Package ibus-table-cangjie.noarch 0:1.2.0.20100210-1.el6 will be obsoleted
            ---> Package ibus-table-chinese-cangjie.noarch 0:1.4.6-1.el6 will be obsoleting
            --> Processing Dependency: ibus-table-chinese = 1.4.6-1.el6 for package: ibus-table-chinese-cangjie-1.4.6-1.el6.noarch
            --> Running transaction check
            ---> Package ibus-table-chinese.noarch 0:1.4.6-1.el6 will be installed
            --> Finished Depende

            Dependencies Resolved
            ...

            注意:当遇到以下错误时,添加--nogpgcheck可解决此次安装问题,如需永久解决,给对应仓库加gpgkey或修改gpgcheck为0.
            warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
            Public key for ibus-table-chinese-cangjie-1.4.6-1.el6.noarch.rpm is not installed


         查询:
            list [...]  
                         yum list available [glob_exp1] [...]       #查询仓库中能安装的程序包
                         yum list updates [glob_exp1] [...]         #查询仓库中能更新的程序包
                         yum list installed [glob_exp1] [...]       #查询仓库已经安装的程序包
                         yum list extras [glob_exp1] [...]          #查询安装在系统但不在仓库中的程序包
                         yum list obsoletes [glob_exp1] [...]       #查询已安装程序包的旧版本
            info [...]                                              #查询程序包的信息
            provides | whatprovides feature1 [feature2] [...]       #根据特性查询由何程序包提供(特性也可是文件)
            search string1 [string2] [...]                          #根据指定strings查询程序包的names and summaries
            deplist package1 [package2] [...]                       #查询此程序包的所有依赖关系
            repolist [all|enabled|disabled]                         #查询或生成配置的仓库列表
            history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]

            #查询用户执行yum历史记录

            [root@centos ~]# yum list available|head                    ///列出可使用程序包
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            Available Packages
            2048-cli.x86_64                             0.9.1-1.el6                  epel_1 
            2048-cli-nocurses.x86_64                    0.9.1-1.el6                  epel_1 
            2ping.noarch                                3.2.1-2.el6                  epel_1 
            389-admin.i686                              1.1.35-1.el6                 epel_1 
            389-admin.x86_64                            1.1.35-1.el6                 epel_1 
            389-admin-console.noarch                    1.1.8-1.el6                  epel_1 
            389-admin-console-doc.noarch                1.1.8-1.el6                  epel_1

            [root@centos ~]# yum list httpd*            ///列出以httpd开头的所有程序包
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            Installed Packages      <--已经安装的包
            httpd-tools.x86_64  
            2.2.15-29.el6.centos                       @centos
            Available Packages    <--可安装的包
            httpd.x86_64              2.2.15-29.el6.centos           local_1
            httpd-devel.i686          2.2.15-29.el6.centos           local_1
            ...

            *** yum whatprovides "*/COMMAND"     可以用来查询输入命令由哪个程序包生成

            [root@centos ~]# yum whatprovides "*/createrepo"
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            createrepo-0.9.9-18.el6.noarch : Creates a common metadata repository    <--此处为程序包名
            Repo        : local_1
            Matched from:
            Filename    : /usr/share/createrepo
            Filename    : /usr/bin/createrepo
            Filename    : /usr/lib/python2.6/site-packages/createrepo

            [root@centos ~]# yum deplist httpd              ///查询httpd程序包的依赖于哪些软件
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            Finding dependencies: 
            package: httpd.x86_64 2.2.15-29.el6.centos
            dependency: /usr/sbin/useradd                    <--依赖的文件
             provider: shadow-utils.x86_64 2:4.1.4.2-13.el6  <--提供依赖文件的程序包
            dependency: libz.so.1()(64bit)
             provider: zlib.x86_64 1.2.3-29.el6
            dependency: system-logos >= 7.92.1-1
             provider: redhat-logos.noarch 60.0.14-12.el6.centos
            ...

            [root@centos ~]# yum history                ///显示用户使用yum的操作历史,查询不算在此
            Loaded plugins: fastestmirror, refresh-packagekit, security
            ID     | Login user               | Date and time    | Action(s)      | Altered
            -------------------------------------------------------------------------------
                 5 | root <root>              | 2016-12-07 14:06 | Install        |    1   
                 4 | root <root>              | 2016-12-05 01:11 | Install        |    4   
                 3 | root <root>              | 2016-11-29 18:59 | Install        |    1   
            history list
            [root@centos ~]# yum history info 3                 ///查看历史操作详细信息
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Transaction ID : 3
            Begin time     : Tue Nov 29 18:59:51 2016
            Begin rpmdb    : 958:baaf47e48562c6ec3caea4724ad15a93040cea94
            End time       :            18:59:52 2016 (1 seconds)
            End rpmdb      : 959:6a212fd01507b473b7b2abbf09e8cf98281e3411
            User           : root <root>
            Return-Code    : Success
            Command Line   : install tree -y                    ///使用的命令
            Transaction performed with:
                Installed     rpm-4.8.0-37.el6.x86_64                       @anaconda-CentOS-201311272149.x86_64/6.5
                Installed     yum-3.2.29-40.el6.centos.noarch               @anaconda-CentOS-201311272149.x86_64/6.5
                Installed     yum-plugin-fastestmirror-1.1.30-14.el6.noarch @anaconda-CentOS-201311272149.x86_64/6.5
            Packages Altered:
                Install tree-1.5.3-2.el6.x86_64 @centos
            history info

            [root@centos ~]# yum repolist all    ///显示配置好的仓库信息,如需缓存,自动下载
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Loading mirror speeds from cached hostfile
            repo id                 repo name                     status
            local_1                 local iso                     enabled:  6,367
            epel_1                  epel source                   enabled: 12,199
            repolist: 18,566

        缓存: 
            clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]    #清楚各种各样由yum产生的缓存
            makecache                       #下载可以使用的仓库的元数据文件


            [root@centos ~]# yum clean all      ///清除所有缓存
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Cleaning repos: local_1 epel_1
            Cleaning up Everything
            Cleaning up list of fastest mirrors
            [root@centos ~]# yum makecache                  ///生成缓存,下载或加载元数据
            Loaded plugins: fastestmirror, refresh-packagekit, security
            Determining fastest mirrors
            local_1                                       | 4.0 kB     00:00 ... 
            local_1/group_gz                              | 220 kB     00:00 ... 
            local_1/filelists_db                          | 5.8 MB     00:00 ... 
            local_1/primary_db                            | 4.4 MB     00:00 ... 
            local_1/other_db                              | 2.7 MB     00:00 ... 
            epel_1                                        | 4.3 kB     00:00     
            epel_1/filelists_db                           | 7.8 MB     00:07     
            epel_1/primary_db                             | 5.9 MB     00:05     
            epel_1/other_db                               | 2.9 MB     00:02     
            Metadata Cache Created


        检查:
            check       #检查本地rpmdb和提供的一些信息

        包组command:
             groupinstall group1 [group2] [...]                 #包组安装
             groupupdate group1 [group2] [...]                  #包组更新
             grouplist [hidden] [groupwildcard] [...]           #显示包组信息(使用hidden选项,显示所有被隐藏的包组)
             groupremove group1 [group2] [...]                  #卸载包组
             groupinfo group1 [...]                             #查询包组信息

            安装CentOS6的开发组件:
            # yum groupinstall  "Development tools" "Server Platform Development" -y

yum中常见问题:

         解决没有repodata目录的方法
            1 使用createrepo命令创建
                createrepo [options] <directory>

                       -c --cachedir <path>    指定需要缓存的rpm包路径

            2 将rpm包复制到能正常使用仓库的Package目录中,重新生成元数据文件
                # yum  clean all; yum makecache

            3 将其它能正常配置的仓库中的repodata目录中文件复制一份

         当用yum卸载程序包时,会出现此类错误
         Error: Trying to remove "yum", which is protected

         其原因为:
         此类包要卸载的依赖项有yum自身的文件或是正在被yum所使用

         解决办法:
         忽略依赖关系进行单独卸载其提示的包.

         本地镜像DVD1跟DVD2是什么:
          CentOS-6.8-x86_64-bin-DVD1.iso 
          CentOS-6.8-x86_64-bin-DVD2.iso 
          由于一个光盘最多只能刻制4G左右大小,而centos的仓库包有十分的多,因此将常用的包以及安装系统的包放在DVD1中,DVD2中的包算是扩展包.

         当执行yum命令时出现以下报错,代表yum被其他进程所占用,需要等待其它执行中的yum命令完成.
            Existing lock /var/run/yum.pid: another copy is running as pid 2000.
            Another app is currently holding the yum lock; waiting for it to exit...

         当遇到如下问题:
         其原因:
            仓库的包太旧,安装的软件包版本太低
         解决办法:
            更新仓库或者卸载新版本的包,再继续安装此包

wKiom1hjG8HRthICAANrYHmrfwg949.png-wh_50



本文转自 撒旦搞时间 51CTO博客,原文链接:http://blog.51cto.com/12074120/1886767,如需转载请自行联系原作者

相关文章
|
5月前
|
Web App开发 应用服务中间件 Linux
yum使用总结
yum使用总结
68 0
|
存储 Linux Shell
|
程序员 Linux 开发工具
|
数据格式 XML
|
Python C语言 Go
yum问题解决
错误信息1:There was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was:No module named urlgrabberPlea...
1312 0