首页 > 代码库 > yum

yum

rpm的前端工具: 

 yellow dog---一款发行版Linux 使用rpm作为默认的程序包管理工具

yum的弊端

 yum在安装、升级或卸载程序包时,是开启事务,在事务提交之前,是不会在文件系统上做任何改变,但是rpm数据库已经被更新;

 Redhat将Fedora捐赠给开源社区,Fedora就是Redhat系统的试验场;

 dnf是为了解决yum的问题而在Fedora系统中开始试验的新的程序包管理器的前段工具

 URL: yum定位软件仓库及仓库中程序包文件的主要标识方式;

yum:

 yum是C/S结构;其中服务器也称为软件仓库(yum repository),客户端需要书写URL以指定服务器及程序包路径;

 在服务器上,软件仓库其实就是一个目录,在目录中包含了程序包文件及元数据文件;

 元数据文件统一的存放于repodata的目录中;也可以说,repodata目录所在的路径即为软件仓库的路径;

 yum服务器是yum repository(yum程序包仓库,yum repo)

  1.所有程序包的元数据(metadata)---单独路径存放(repodata)

    所有程序包文件名称的清单

    所有程序包的版本号

    所有程序包的校验信息

    所有程序包的依赖关系 

  2.为数众多的程序包文件

yum的客户端:

 利用配置文件指向正确的yum仓库(yum源)

 利用URL机制完成指向

  一个标准的URL:

   scheme://[username@]hostname[:port]/document[parameters][method]

   /var/yum/myrepo/*.rpm

   /var/yum/myrepo/repodata/

 可能在yum配置文件中使用的URL有下列几种:

  ftp://hostname/PATH/TO/REPODATA

  http://hostname/PATH/TO/REPODATA

  nfs://hostname/PATH/TO/REPODATA

 本地的yum仓库

  file:///PATH/TO/REPODATA

配置网卡的配置文件:

NAME=eno33554984

DEVICE=eno33554984

BOOTPROTO=dhcp

NM_CONTROLLED=no

ONBOOT=yes

如何制作软件仓库(yum服务器端)

 createrepo

  createrepo [options] <directory>

  例:createrepo /PATH/TO/NAME_RPM_FILES

如何设置yum客户端

 yum的主配置文件: 

  /etc/yum.conf

  只提供yum仓库指向信息的公共配置内容;

  注意:该文件一般情况下,不进行任何修改;

  片段配置文件:

    /etc/yum.repos.d/*.repo

    每一个以.repo为后缀名的文件,即为一个仓库文件;这样的每个文件中可以配置指向一个或多个yum仓库;

    yum程序在查找yum仓库的时候,根据这些配置文件来查找的;每一次可能会找到多个yum仓库,从所有可以使用的仓库中查找最新版本的程序包并缓存到本地进行安装,升级等操作;

    同类的多个仓库被称为镜像;只要有一个可用即可;

    不同类的仓库也可以同时存在多个,yum可以同时使用这些仓库;

  # PUT YOUR REPOS HERE OR IN separate files named file.repo

  # in /etc/yum.repos.d

 用户可以将其自己定义的yum源的指向信息存放在这个配置文件中,也可以是以file.repo的方式命名之后存放在/etc/yum.repos.d中的独立文件;

 格式:

  类似于.ini格式片段式配置文件;

  [repository_id]

  注意:

  1.整个repository必须为一段字符串,其中只能包括字母数字下划线或.号;不允许出现特殊符号

  2.每一段配置信息从[]开始,到下一对[]结束

  3.每个配置文件中,可以包含多个repoid,每个repoid指向一个或多个yum源,但是repoid必须全局唯一;

  /etc/yum.conf文件中默认的内容

 [main]

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

man /etc/yum.conf

想要更加全面的信息,可以使用man 5 yum.conf获取

注意:此文件一般无需修改,如果想要建立自己的yum源的指向,可以在/etc/yum.repos.d目录中创建以.repo为后缀名的文件,在其中也安装上述格式填写即可

通常自定义repo文件的格式

[repository_id]

name=ful name of repository

baseurl=schema://host/path/to/repodata

        schema2://host/path/to/repodata

        schema3://host/path/to/repodata

schema:

    http[s]、ftp、nfs:网络服务器指向

    file:本地服务器指向

#mirrorlist=mirror_url

enabled={1|0} 0表示禁用此仓库指向,1表示启用;如果没有enabled语句,默认为启用状态默认是1启用 

gpgcheck={1|0}

 0表示不进行程序包认证,1表示认证;如果为1,需要指定认证所需要的公钥文件,需要使用gpgkey语句;gpgkey=/path/to/public_key

 例子:gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

failovermethod={roundrobin|priority}

故障倒换方法:

    roundrobin:随机查找,默认的方法;

    priority:按照顺序依次选择

enablegroups={1|0}

cost=num,默认所有仓库的开销值都是1000;

例:

本地关平yum源的指向配置

[root@mylab1 yum.repos.d]# cat local.repo 

[local]

name=dvd

baseurl=file:///mnt/cdrom

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

互联网Fedora-EPEL yum源指向配置

[root@mylab1 yum.repos.d]# cat myepel.repo 

[myepel]

name=define by myself for epel

baseurl=https://dl.fedoraproject.org/pub/epel/7/x86_64/

enabled=1

gpgcheck=0

yum命令的使用:

  yum [options] [command] [package ...]

  常用选项

  -y:所有的问题都以yes来回答

  -q:安静模式,在使用yum时不输出任何信息

  --enablerepo=repoidglob

  --disablerepo=repoidglob  

  在此次yum事务中,明确规定使用或禁用某个repoid;在使用了这样的选项之后,仓库指向文件中的enabled语句的作用将失效;

  --noplugins:

  在某一次yum执行过程中,明确指出不使用任何插件

  --enablerepo=*epel*

  --nogpgcheck:此次yum事务中,明确规定不进行程序包元整;在仓库指向文件中的gpgcheck=1语句会失效;

  命令

   command is one of:

        * install package1 [package2] [...]

        安装程序包

        注意:

         1.可以通过同一个repo文件或不同的repo文件指向一个或多个yum源,如果要安装的程序包,在多个仓库中都存在,yum会默认安装版本最高的那个程序包;如果不打算安装最新版本的,可以在安装时,直接写出对应的版本号,如:yum install gcc-4.4.7

         2.一次yum操作可以安装多个程序包,yum会为所有我们选择的程序包解决依赖关系问题 

         1.如果只是给出程序包名称,yum搜索所有仓库,并找到最新版本缓存安装;

         2.如果给出程序包的名称及版本,则查找安装指定版本的程序包;

        3.如果给出的程序包是完整的程序包名,则只是查找某一个程序包;

        4.程序包名称可以使用globbing,(* ? [] [^])

        * update [package1] [package2] [...]

        * update-to [package1] [package2] [...]

        * update-minimal [package1] [package2] [...]

        * check-update

        * upgrade [package1] [package2] [...]

        * upgrade-to [package1] [package2] [...]

        升级程序包:

        downgrade package1 [package2] [...]

        程序包不同版本之间的更迭

        * remove | erase package1 [package2] [...]

        卸载程序包:

        * list [...]

        显示:

         可以显示所有的程序包,已安装的程序包,未安装但是可用的程序包,可以更新的程序包

         list{availiable|installed|updates|all}[glob_expr1]

         yum list LIST OPTIONS

         LIST OPTIONS:

          all: 显示所有的程序包,包括已经安装的和尚未安装但可用的;

          注意:

           anaconda:CentOS系统的安装器,在安装操作系统的时候一并安装的程序包;

           installed:显示所有已经安装的程序包;

          available:显示所有尚未安装但可以安装的程序包;

          updates:显示所有可以升级更新的程序包;


        * info [...]

         显示程序包相关信息

         yum info LIST OPTIONS

         LIST OPTIONS:

          all: 显示所有的程序包,包括已经安装的和尚未安装但可用的;

          注意:

          anaconda:CentOS系统的安装器,在安装操作系统的时候一并安装的程序包;

          installed:显示所有已经安装的程序包;

          available:显示所有尚未安装但可以安装的程序包;

          updates:显示所有可以升级更新的程序包

        * provides | whatprovides feature1 [feature2] [...]

         查看指定的特性(可以是一个文件)是由哪个程序包提供的

        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

        清除本地缓存         

        * makecache [fast]

        构建缓存

        * groups [...]

        程序包组的管理方案

        * search string1 [string2] [...]

        模糊搜索,根据关键字进行匹配,搜索程序包名称及所谓的summary信息(汇总信息)

        如果想要搜索全部信息,可以使用search all

        * shell [filename]

        为yum提供的交互式操作界面

        * 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] [...]

        根据repodata中的信息,显示制定程序包中所有依赖关系;默认是enabled

        * repolist [all|enabled|disabled]

        显示客户端上指定的yum源的指向信息;默认是enabled

        * repoinfo [all|enabled|disabled]

        * repository-packages <enabled-repoid>  <install|remove|remove-or-reinstall|remove-or-dis‐

       tribution-synchronization> [package2] [...]

        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]

        *history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll‐back|new|sync|stats]

        查询所有影响了rpmdb的事务

        * load-transaction [txfile]

        查询和加载所有的事务信息

        * updateinfo [summary | list | info | remove-pkgs-ts |  exclude-updates  |  exclude-all  |

       check-running-kernel]

        * fssnapshot [summary | list | have-space | create | delete]

        * fs [filters | refilter | refilter-cleanup | du]

        * check

        * help [command]

程序包组管理

  CentOS6:

    * groupinstall group1 [group2] [...]

    * groupupdate group1 [group2] [...]

    * grouplist [hidden] [groupwildcard] [...]

    * groupremove group1 [group2] [...]

    * groupinfo group1 [...]

      程序包组的管理方案:

  CentOS7:

    groups [list|info|summary|install|upgrade|remove|mark] [GROUP]

    为了兼容性考虑,为上述命令建立了别名:

    别名:group, grouplist, groupinfo, groupinstall, groupupdate, groupremove, grouperase

     autoremove [package1] [...]

      自动卸载: 

常用的第三方yum仓库,Fedora EPEL,

到官方站点或镜像站点中,下载epel-release程序包,并且使用rpm命令安装至对应的Linux发行版本,在/etc/yum.repos.d目录中,会多出一个epel.repo的文件;更新repolist即可使用;

 要求Linux虚拟机能够连接互联网;

yum的repo配置文件中常用的变量:

 $releasever:当前操作系统的发行版本号的主版本号,6 7

 $arch:平台类型

 $basearch:基础平台类型 x86_64

 $YUM0~$YUM9:10个内置的可以由用户自定义的变量

引用变量的目的:

 为了能够让多种类型的客户端可以正确的找到适合其使用的yum仓库中的程序包 

 yum-cofig-manager 帮助制作配置文件  --add-repo

 epel源:epel-release-VERSION.rpm

 上传到Linux,使用rpm -ivh epel-release-VERSION.noarch.rpm

  就会直接生成一个epel.repo文件

  创建本地yum仓库:

  createrepo /PATH/TO/PACKAGES


yum