zoukankan      html  css  js  c++  java
  • yum仓库管理

    yum在线管理

      rpm包的管理分为 rpm命令管理和yum在线管理,rpm命令管理由于可能需要解决各种依赖问题,在安装软件的时候可能显得比较麻烦,然而,yum在线管理正好和它相反。Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。SO,SO,SO它用起来是相当的方便,特别适合初学者使用。 不过yum的安装源可以是网上的,也可以是光盘上的呢,要是我们使用网络上的yum源,那么,这些yum源来自于哪里呢?在我们的/etc/yum.repo.d/目录下,我们可以看到我们可以使用的yum源,如果/etc/yum.repos.d/里的所有文件不改动,默认启用网络yum源,如果把除CentOS-Media.repo以外的yum源暂时修改,并将CentOS-Media.repo里面的内容做下修改,就能启用本地光盘yum源

    一般,只要我们的网络连通,  上面的yum源都是合法的yum源。一般在有网络的情况下,默认会从“Base”yum源中下载我们需要的rpm包以及各种依赖包进行自动安装,在没有网络的情况下,则会选择“Media”yum源——本地光盘yum源.

    /etc/yum.repos.d/
    CentOS-Base.repo
    CentOS-Debuginfo.repo
    CentOS-Media.repo
    CentOS-Vault.repo

    其中CentOS-Base.repo用于网络yum源的配置
    CentOS-Media.repo 用于光盘yum源的配置


    除了上面的方法外,我们还可以自己手动写一个yum源配置,方法十分的简单,首先我们要在 创建一个后缀为repo的文件,至于这个文件的名字,我们可以自己随意起名,比如我起的名字是:

    [root@CT71 ~]#vim locate.repo

    接下来我们需要知道在这个文件里面都写什么东西:

    [base]        容器名称,一定要放在[]里(必须写,一般第一个我们默认写成base)
    name         容器说明,可以自己写(可以不写)
    mirrorlist      镜像站点,可以注释掉(可以不写)
    baseurl      我们yum源的地址。默认是centOS官方的yum源服务器,是可以使用的(必须写)
    enabled       如果enabled=1或者不写,此容器都是生效的,enabled=0容器无效(默认是1)
    gpgcheck       如果是1 则RPM数字证书生效,如果是0不生效
    gpgkey          数字证书的公钥文件保存位置,不用管
    enablegroups={1|0}开启组
    failovermethod={roundrobin|priority}
    roundrobin: 意为随机挑选,默认值
    priority:按顺序访问
    cost= 默认为1000

    在上面的说明中,baseurl的值就是我们的yum源的路径,它不能识别空格,所以路径中有空格的要用“”进行转译,我们所要获取的软件包都是从这个路径里面来的,由于yum的最大作用就是为了解决我们的依赖问题,所以在我们的路径打开后我们需要能够看到一个名字为repodata的目录,这里面记录的就是我们安装文件需要的依赖,要想repo可以使用,其实很简单,我们以一个简单的例子试下就知道了:

    挂载光驱:

    [root@CT71 yum.repos.d]#df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda2       52403200 4811976  47591224  10% /
    /dev/sda3       52403200  339132  52064068   1% /app
    /dev/sda1        1038336  172128    866208  17% /boot
    /dev/sr0         8086368 8086368         0 100% /mnt/cdrom
    [root@CT71 yum.repos.d]#
    [root@CT71 yum.repos.d]#ll /mnt/cdrom/
    total 1550
    -rw-r--r--. 1 root root      14 Dec  5  2016 CentOS_BuildTag
    drwxr-xr-x. 3 root root    2048 Dec  5  2016 EFI
    -rw-r--r--. 1 root root     215 Dec 10  2015 EULA
    -rw-r--r--. 1 root root   18009 Dec 10  2015 GPL
    drwxr-xr-x. 3 root root    2048 Dec  5  2016 images
    drwxr-xr-x. 2 root root    2048 Dec  5  2016 isolinux
    drwxr-xr-x. 2 root root    2048 Dec  5  2016 LiveOS
    drwxrwxr-x. 2 root root 1548288 Dec  5  2016 Packages
    drwxrwxr-x. 2 root root    4096 Dec  5  2016 repodata
    -rw-r--r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7 ------------------------------------校验码
    -rw-r--r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
    -r--r--r--. 1 root root    2883 Dec  5  2016 TRANS.TBL
      1 [base]
      2 name=my own yum
      3 baseurl=file:///mnt/cdrom/
    [root@CT71 yum.repos.d]#yum repolist
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    repo id                                     repo name                                      status
    base                                        my own yum                                     9,363
    repolist: 9,363

      是不是感觉很简单,但是这样是有一个问题的,那就是我们无法对安装包进行各种验证,无法保证我们的安装包是安全的,也是是说我们需要对我们安装的包进行校验,校验,就是要验证包来源的合法性和完整性。这很重要,能够保证我们安装的软件没有被人修改过,我们上面做的那个小示例是没有进行校验的,是存在安全性问题的。

      rpm包的校验是基于非对称加密方式的,通过秘钥对我们的软件包进行校验,如果人为的修改软件包,就无法针对秘钥验证成功手动验证方式我们参考rpm包管理。这里我们就说一下如何在域名配置中添加校验:

      我们在上面的代码中有一个校验码,一般的yum仓库都会有这个校验码,用于我们在安装软件的时候进行校验。我们以一个小例子说明如何写这个repo:

      1 [base]
      2 name=my own yum
      3 baseurl=file:///mnt/cdrom/
      4 enable=1
      5 gpgcheck=1
      6 gpgkey=file:///mnt/cdrom/

    这里面的gpgcheck就是打开软件校验,默认情况下是打开的,这里就是为了让大家看明白,gpgkey是我们的包校验码的地址(空格一样要进行转译),我写的依然是我上面挂载的光驱里面的,没毛病。我们在下面的图片中一样可以看到官方是如何写repo的。

     我们在上面的图片中似乎还发现了变量。比如$releasever ,$basearch 这有什么用呢?最大的好处就是便于移植。

    $releasever: 当前OS的发行版的主版本号
    $arch: 平台, i386,i486,i586,x86_64
    $basearch:基础平台; i386, x86_64
    $YUM0-$YUM9:自定义变量

    这是变量代表的含义,要是我们的yum仓库就是按照平台路径进行存放的话,我们使用变量,无论什么仓库我们都不用再更改我们编写的仓库路径,它们自己都可以通过路径找到我们想要的软件包,很是方便的。

    除了系统自带的repo和我们自己写的repo,我们也可以到一些镜像网站上去找,比如说阿里云的:http://mirrors.aliyun.com/repo/ 等。

    我在上述的网站上下载了一个yum源,我们来看一下它们都写了什么:

    # CentOS-Base.repo
    #
    # The mirror system uses the connecting IP address of the client and the
    # update status of each mirror to pick mirrors that are updated to and
    # geographically close to the client.  You should use this for CentOS updates
    # unless you are manually picking other mirrors.
    #
    # If the mirrorlist= does not work for you, as a fall back you can try the 
    # remarked out baseurl= line instead.
    #
    #
     
    [base]
    name=CentOS-$releasever - Base - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
     
    #released updates 
    [updates]
    name=CentOS-$releasever - Updates - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
     
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
    gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
     
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
    gpgcheck=1
    enabled=0
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
     
    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib - mirrors.aliyun.com
    failovermethod=priority
    baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
            http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
    gpgcheck=1
    enabled=0
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

     除了手动设置repo外,其实我们也可以进行自动设置,设置命令如下:

    yum-config-manager --add-repo= 源地址

    例如:

       yum-config-manager --add-repo=http://172.17.0.1/centos/6

    [root@CT6 ~]# yum-config-manager --add-repo=http://172.17.0.1/centos/6
      aded plugins: fastestmirror, refresh-packagekit
    adding repo from: http://172.17.0.1/centos/6
    
    [172.17.0.1_centos_6]
    name=added from: http://172.17.0.1/centos/6
    baseurl=http://172.17.0.1/centos/6
    enabled=1
    
    
    [root@CT6 ~]# cd /etc/yum.
    yum.conf     yum.repos.d/ 
    [root@CT6 ~]# cd /etc/yum.repos.d/
    [root@CT6 yum.repos.d]# ls
    172.17.0.1_centos_6.repo  own.repo  tmp
    [root@CT6 yum.repos.d]# vim 172.17.0.1_centos_6.repo 
      1 
      2 [172.17.0.1_centos_6]
      3 name=added from: http://172.17.0.1/centos/6
      4 baseurl=http://172.17.0.1/centos/6
      5 enabled=1
      6 
    ~    

    从上面我们可以看出了,自动设置的话,文件名和repo里面的name也是自动设置的,感觉不是很好,但是也节省了一定的时间,我们也可是使用这个命令对repo仓库进行开启关闭:

    yum-config-manager --disable “仓库名" 禁用仓库
    yum-config-manager --enable “仓库名启用仓库

     

    还有一种情况就是我们将很多的软件包搜集到一起来创建repo仓库,这样就有一个问题,仓库软件都有,但是不能解决依赖关系,因为依赖关系是记录咋repodata中的,这是我们可以执行一天命令来创建依赖关系:

    [root@CT6 ~]# createrepo /app/packages/ 
    Spawning worker 0 with 120 pkgs
    Workers Finished
    Gathering worker results
    
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete

    yum命令的使用

    yum查询

    查询yum可用的rpm包
    yum list[会列出所有]
    yum list httpd [只会查找与httpd有关的]                  
    yum list {available|installed|updates}

    yum search 包名
    [会查询和查询的RPM包相关的包(依赖)]

    查看指定包所依赖的capabilities:
      yum deplist package1 [package2] [...]

    [root@CT6 ~]# yum deplist httpd
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Finding dependencies: 
    Loading mirror speeds from cached hostfile
    package: httpd.x86_64 2.2.15-59.el6.centos
      dependency: httpd-tools = 2.2.15-59.el6.centos
       provider: httpd-tools.x86_64 2.2.15-59.el6.centos
       provider: httpd-tools.x86_64 2.2.15-59.el6.centos
      dependency: libc.so.6(GLIBC_2.4)(64bit)
       provider: glibc.x86_64 2.12-1.209.el6
       provider: glibc.x86_64 2.12-1.209.el6
      dependency: libz.so.1()(64bit)
       provider: zlib.x86_64 1.2.3-29.el6
       provider: zlib.x86_64 1.2.3-29.el6
      dependency: rtld(GNU_HASH)
       provider: glibc.x86_64 2.12-1.209.el6
       provider: glibc.i686 2.12-1.209.el6

    查看yum事务历史:
      yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
      yum history  查找yum最近的安装历史
      yum history info 6 查看安装详情
      yum history undo 6 反向卸载安装软件

    [root@CT6 ~]# yum history
    Loaded plugins: fastestmirror, refresh-packagekit, security
    ID     | Login user               | Date and time    | Action(s)      | Altered
    -------------------------------------------------------------------------------
        12 | root <root>              | 2017-08-15 08:29 | Install        |    1   
        11 | root <root>              | 2017-08-14 20:14 | Erase          |    1   
        10 | root <root>              | 2017-08-14 20:14 | Erase          |    1   
         9 | root <root>              | 2017-08-14 20:07 | Install        |    1   
         8 | root <root>              | 2017-08-14 20:05 | Install        |    1   
         7 | root <root>              | 2017-08-14 20:04 | Install        |    1 P<
         6 | root <root>              | 2017-08-13 19:36 | Install        |    3 ><
         5 | root <root>              | 2017-07-19 18:44 | Install        |    1 > 
         4 |  <Tom>                   | 2017-07-18 11:50 | Install        |    5  <
         3 | System <unset>           | 2017-07-12 05:37 | Install        |    1 > 
         2 | System <unset>           | 2017-07-11 23:45 | Install        |    1   
         1 | System <unset>           | 2017-07-11 15:55 | Install        | 1244   
    history list
    [root@CT6 ~]# yum history info 12
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Transaction ID : 12
    Begin time     : Tue Aug 15 08:29:53 2017
    Begin rpmdb    : 1257:211112be8617ed0957f7b0a6ac8c58ddf512daef
    End time       :            08:30:01 2017 (8 seconds)
    End rpmdb      : 1258:d7b72327970bf0c2cff30b31a3cf6c87bea8c4b5
    User           : root <root>
    Return-Code    : Success
    Command Line   : -y -q install httpd
    Transaction performed with:
        Installed     rpm-4.8.0-55.el6.x86_64                       @anaconda-CentOS-201703281317.x86_64/6.9
        Installed     yum-3.2.29-81.el6.centos.noarch               @anaconda-CentOS-201703281317.x86_64/6.9
        Installed     yum-plugin-fastestmirror-1.1.30-40.el6.noarch @anaconda-CentOS-201703281317.x86_64/6.9
    Packages Altered:
        Install httpd-2.2.15-59.el6.centos.x86_64 @172.17.0.1_centos_6
    history info
    [root@CT6 ~]# yum history undo 12
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Undoing transaction 12, from Tue Aug 15 08:29:53 2017
        Install httpd-2.2.15-59.el6.centos.x86_64 @172.17.0.1_centos_6
    Resolving Dependencies
    --> Running transaction check
    ---> Package httpd.x86_64 0:2.2.15-59.el6.centos will be erased
    --> Processing Dependency: httpd-mmn = 20051115 for package: php-5.3.3-49.el6.x86_64
    --> Processing Dependency: httpd >= 2.2.0 for package: gnome-user-share-2.28.2-3.el6.x86_64
    --> Running transaction check
    ---> Package gnome-user-share.x86_64 0:2.28.2-3.el6 will be erased
    ---> Package php.x86_64 0:5.3.3-49.el6 will be erased
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ============================================================================================
     Package         Arch   Version              Repository                                Size
    ============================================================================================
    Removing:
     httpd           x86_64 2.2.15-59.el6.centos @172.17.0.1_centos_6                     3.0 M
    Removing for dependencies:
     gnome-user-share
                     x86_64 2.28.2-3.el6         @anaconda-CentOS-201703281317.x86_64/6.9 1.1 M
     php             x86_64 5.3.3-49.el6         @base                                    3.5 M
    
    Transaction Summary
    ============================================================================================
    Remove        3 Package(s)
    
    Installed size: 7.6 M
    Is this ok [y/N]: y
    Downloading Packages:
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Erasing    : gnome-user-share-2.28.2-3.el6.x86_64                                     1/3 
      Erasing    : php-5.3.3-49.el6.x86_64                                                  2/3 
      Erasing    : httpd-2.2.15-59.el6.centos.x86_64                                        3/3 
      Verifying  : php-5.3.3-49.el6.x86_64                                                  1/3 
      Verifying  : gnome-user-share-2.28.2-3.el6.x86_64                                     2/3 
      Verifying  : httpd-2.2.15-59.el6.centos.x86_64                                        3/3 
    
    Removed:
      httpd.x86_64 0:2.2.15-59.el6.centos                                                       
    
    Dependency Removed:
      gnome-user-share.x86_64 0:2.28.2-3.el6              php.x86_64 0:5.3.3-49.el6             
    
    Complete!

    yum的安装日志放在:/var/log/yum.log


     

    yum安装

    yum -y install 包名如果不加参数y ,在安装过程中会问你要不要继续,但是加上y之后,就全部自动安装
    -q:静默模式
    --nogpgcheck:禁止进行gpg check
    --disablerepo=repoidglob:临时禁用此处指定的repo
    --enablerepo=repoidglob:临时启用此处指定的repo
    --noplugins:禁用所有插件
    在一会要介绍的源码安装中,前提必须安装gcc,因为源码需要编译,关于源码安装,一会再说,现在说的是,gcc的安装需要很多依赖,所以最好使用yum网络安装。

    yum升级

    yum -y update 包名

    检查可用升级:
    yum check-update

    yum downgrade package  [降级] 

    要是yum -y update后面没有跟包名,那就意味着所有的东西都会升级,包括内核。可是有时候内核需要在本地进行一定的配置才能使用,如果在远程执行这样的命令,可能无论如何都链接不上,只能让在本地的人配置后才能使用,这样就非常的麻烦。

    yum卸载

    yum -y remove | erase  包名

    按照安装的顺序进行卸载a>b>c
    这样卸载是连依赖包一起给卸载掉的,但是要注意,这些依赖包也许不光这个软件本身依赖,还有可能系统也在依赖,所以,卸载后可能会造成系统崩溃,所以,安装的软件包,最好不要卸载。

    查看yum信息

    yum info [...]
    查看指定的特性(可以是某文件)是由哪个程序包所提供:
      yum provides | whatprovides feature1 

    [root@CT6 ~]# yum info httpd
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    Available Packages
    Name        : httpd
    Arch        : x86_64
    Version     : 2.2.15
    Release     : 59.el6.centos
    Size        : 834 k
    Repo        : 172.17.0.1_centos_6
    Summary     : Apache HTTP Server
    URL         : http://httpd.apache.org/
    License     : ASL 2.0
    Description : The Apache HTTP Server is a powerful, efficient, and extensible
                : web server.

    yum缓存

    清理本地缓存:
    清除/var/cache/yum/$basearch/$releasever缓存
    yum clean [ packages | metadata | expire-cache |rpmdb | plugins | all ]

    我们使用最多的就是yum clean all

    构建缓存

    yum makecache 

    由于缓存清空后一般会自动建立,所以我们很少会用到这个命令

    安装及升级本地程序包

    有时候我们不是从yum仓库安装的软件,而是在网上下载的软件包,这时候我们可以采用下面的命令,可以很好的解决安装本地程序包的依赖问题

      yum localinstall rpmfile1 [rpmfile2] [...]
        (install替代)
      yum localupdate rpmfile1 [rpmfile2] [...]
        (update替代)

    软件组的查询安装

    yum中不仅有单个的RPM包可以安装,还可以安装软件组,比如 语言,桌面,等等都是一组软件,我们可以很方便的把一组软件安装上去,同时卸载的时候,也可以把这组软件都给卸载掉

    软件组的查询

    yum grouplist
    [可以查出所有可以安装的软件组]

    软件组安装

    yum groupinstall 软件包组
    在安装的时候,如果软件组名字之间有空格一定要用“”包起来

    软件包组更新

    yum groupupdate group1 [group2] [...]

    软件包信息查询

    yum groupinfo group1 [...]

    [root@CT6 ~]# yum groupinfo "Web Server"
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Setting up Group Process
    Loading mirror speeds from cached hostfile
    
    Group: Web Server
     Description: Allows the system to act as a web server, and run Perl and Python web applications.
     Mandatory Packages:
       httpd
     Default Packages:
       crypto-utils
       httpd-manual
       mod_perl
       mod_ssl
       mod_wsgi
       webalizer
     Optional Packages:
       certmonger
       libmemcached
       memcached
       mod_auth_kerb
       mod_auth_mellon
       mod_auth_mysql
       mod_auth_pgsql
       mod_authnz_pam
       mod_authz_ldap
       mod_intercept_form_submit
       mod_lookup_identity
       mod_nss
       mod_revocator
       perl-CGI
       perl-CGI-Session
       perl-Cache-Memcached
       python-memcached
       squid

    软件组删除

    yum groupremove 软件包组

     

  • 相关阅读:
    代码重构~提取方法
    代码重构~提取到类
    不说技术~有时,开发者还是应该讲究一点!
    代码重构~封装成员变量
    将不确定变为确定~LINQ查询包含对不同数据上下文上所定义项的引用
    真实的用户,真实的中国互联网
    John Resig: JavaScript's Chuck Norris
    chrome插件IE tab使用技巧
    人生的疆域与生存的幻象—阅读丰富人生
    WPF 创建多行TextBox
  • 原文地址:https://www.cnblogs.com/duzhaoqi/p/6926050.html
Copyright © 2011-2022 走看看