一、什么是yum



Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。


yum工作流程


要用yum程序来管理程序包,得先需要有一个yum仓库。yum和yum仓库之间是通过文件传输协议来实现的。yum仓库的构建是在yum仓库的某个路径下放上一堆的rpm包并使用一个仓库构建程序把这对rpm包的信息抽取出来保存在repodata的目录下当作这个仓库元数据保存起来。客户端每一次使用一个仓库时,首先会联系这个仓库,获取这个仓库的元数据缓存在本地,从而知道这个仓库上到底有哪些程序包,每一个程序包到底依赖于哪个程序,每一个程序包安装时生产哪些文件目录列表等等一些信息。但需要安装数据包时,在本地通过分析已经安装的数据包,未安装的数据包,获取差异性,把本地没有的、此时又需要的数据包通过文件传输协议,从yum仓库中下载下来,然后调用rpm程序工具完成安装


从yum的工作流程可以看出,yum的核心是yum仓库中的各种程序包及仓库程序包信息的元数据repodata,使用yum的重点是构建yum仓库


yum与rpm的关系

rpm为基础包管理器,可以独立工作

yum则是rpm的前端工具,是rpm的补充,不能独立工作。



二、yum的使用

(一)从0开始构建本地的yum仓库

(1) 在基于发行版安装树安装createrepo程序包

# yum install createrepo

createrepo是构建仓库时生存repo的命令。

(2) 确定repository输出方式:

     

      A、本地输出:提供一个放置rpm包的本地路径;

      B、网络输出:提供一个文件服务器,配置好ftp服务或http服务;

          a、配置ftp服务:

                 安装程序包: # yum install vsftpd

                 (系统默认的文件存放路径为:/var/ftp/pub)

                 启动服务:# service vsftpd start

                 关闭防火墙:# service iptables stop

                 如此可以在windows浏览器里输入 ftp://172.16.20.97(换成自己linux的ip地址) 回车,这时会有一个pub目录,进行下面的(4)的createrepo命令后就会在pub目录里有一个repodata了。

这时可以将此时得到的地址,编辑/etc/yum.repos.de/NAME.repo的baseurl了

创建完就可以yum clean all,再 yum makecache,更新repos

工作done!!!

           b、http服务:

                  安装程序包:# yum install httpd

                  (系统默认的文件存放路径:/var/www/html)

                  启动服务:# service httpd start

                  PS:确保防火墙服务关闭;


 (3) 在准备好的目录中放置rpm程序包文件


本地输出的,就放置在自己准备好的目录里;ftp输出的就放置在/var/ftp/pub里;http输出的就放置在/var/www/html里。


 (4) 对此目录运行createrepo命令

          # createrepo /DIR/IN/LOCAL  (/DIR/IN/LOCAL为自己准备好的存储程序包的目录)

          # createrepo /var/ftp/pub   

          # createrepo /var/www/html

运行上述命令后,程序会自动在该目录里生成一个“repodata”文件目录,里面存放了本程序包仓库的元数据。


(5)修改仓库配置文件

  A. 知识补充

配置文件:指向仓库的位置以及相关的各种配置信息;每个yum命令行可以同时指向多个仓库,仓库间可以有优先级等相关的配置;

 

有两部分组成:

主配置文件:/etc/yum.conf

为各仓库指向提供公共配置文件;

各仓库的配置:/etc/yum.repos.d/*.repo

man yum.conf查看详细说明


linux 初学者之yum使用

各仓库配置参数:

a、[repositoryid]

# 对于当前系统的yum来讲,此repositoryid用于唯一标识此repository指向,因此,其必须惟一;

b、name=

# 当前仓库描述信息;

c、baseurl=url://path/to/repository/

    url2://path/to/repository/

    url3://path/to/repository/

# 指明repository的访问路径;通常为一个文件服务器上输出的某repository;(和mirrorslist是有排斥性的)

 

url:

ftp服务

ftp://SERVER/PATH/TO/REPOSITORY

http服务

http://SERVER/PATH/TO/REPOSITORY

本地目录:

file:///PATH/TO/REPOSTIROY

仓库指向的路径:repodata目录所在的父目录

http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/

d、enabled={1|0}

此仓库是否可被使用,不指明的话默认是1

e、gpgcheck={1|0}

是否对程序包做校验,不指明的话默认也为1

f、gpgkey=url://path/to/keyfile

指明gpgkey文件路径;当gpgcheck=1时必须指明gpgkey的路径

g、cost=#

指明当前repository的访问开销,默认为1000;访问消耗越小的越优先允许其访问本仓库


linux 初学者之yum使用

  B. 操作:

     

[[email protected] ~]# vim /etc/yum.repos.d/test.repo  其中test可以换成自己取的易辨识的文件名


然后安装上面说明,设置好repo id,name,baseurl,gpgcheck,enabled基本配置即可。


(6)更新repolist

(6.1)清理缓存

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

                            [程序包|仓库的元数据|过期的缓存|rpm数据库|插件|所有缓存]

                    PS:前面都是清理指定的文件数据,all是清理除目录的其他所有文件数据

命令格式例子: # yum clean all


linux 初学者之yum使用

(6.2)重新创建缓存

      makecache: 缓存创建,自动连接至每一个可用仓库,下载其元数据,将其创建为缓存

    命令格式:# yum makecache 

(6.3)查看所有可用仓库

                 repolist: 列出已经配置的所有可用仓库        (默认是只列出已经启用的,即enabled=1的仓库)

                    repolist [all|enabled|disabled]

       PS:用# yum repolist 命令,系统会自动更新并重建yum 仓库的缓存


(二)yum仓库的使用与维护


(1)程序包查看:

            (1.1)# yum list [all | glob_exp1] [glob_exp2] [...]

[[email protected] ~]# yum list bash

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Installed Packages

bash.x86_64                             4.1.2-29.el6                              @anaconda-CentOS-201410241409.x86_64/6.6

 [[email protected] ~]#


            (1.2)# yum list {available|updates|installed|extras|obsoletes|recent} [glob_exp1] [...]

available: 可安装而尚未安装的

updates:可用于升级的包

installed:已安装过的包

extras:系统已安装但任何一个yum仓库都不存在的包

obsoletes:系统已安装但已被yum仓库废弃的包(有更新的包供升级)

recent:最近刚刚加进仓库的包

           (1.3) # yum grouplist [hidden] [groupwildcard] [...]  程序包组的查看

可以用# yum grouplist查看yum分的各个组:

        Installed Groups:已安装的组

        Installed Language Groups:已安装的语言组

        Available Groups:可用的组

        Available Language Groups:可用的语言组

每个组下面都有列表,可选择安装一个组或者多个组。

 

(2)程序包安装:

           # yum  install package1 [package2] [...]

 

            PS: 只需要提供一个或多个包名(如 bash,zsh,xen);

 

            如果某包有在不同仓库中有多个不同版本,默认会安装最新版本,因此不需要提供版本号、发行号、适用的平台等信息;

 

            如果要安装指定版本:install PACKAGE-VERSION ...

 

(3)重新安装(覆盖安装)

            # yum reinstall package1 [package2] [...]

 

(4)程序包升级:包名+版本号

           # yum  update [package1] [package2] [...]

  upgrade package1 [package2] [...]这个已经不常用了,红帽7已经可以用update代替了

 

(5) 程序包降级:包名+版本号

            # yum downgrade package1 [package2] [...]

 

(6) 检查有哪些升级可用:

            # yum check-update

 

(7)卸载:

           # yum  remove | erase  package1 [package2] [...]

 

            所有依赖于正卸载的程序包的程序包会被一并卸载

 

(8)查询:

            (8.1)查询程序的相关简要信息:

                        # yum info PACKAGE ...

 

            (8.2)在包名和sumary信息中搜索指定的关键字:

                        # yum search KEYWORD ...

 

            (8.3)查询指定文件由哪个程序包安装生成:

                         # yum provides|whatprovides /PATH/TO/SOMEFILE

                          例子:

[[email protected] ~]# yum provides /bin/echo
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
coreutils-8.4-37.el6.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo        : base-test
Matched from:
Filename    : /bin/echo  (后面还有多行显示内容,太长,省略)

 


(9)安装或升级本地的程序包文件:

            # yum localinstall rpmfile1 [rpmfile2] [...]

 

            用于安装仓库中并不存在的程序包文件,这些程序包有可能又依赖于仓库中的某些程序包;

 

            # yum localupdate rpmfile1 [rpmfile2] [...]

       上面安装和升级里的rpmfile1和rpmfile2 要指明有效路径——使用绝对路径或者切换到程序包所在目录里使用命令。


               PS:在红帽7中已经统一到 install和update、remove中了,但仍能用这个命名。

 

(10)包组管理:


           (10.1) 列出所有包组:# yum grouplist

包组一般都多词,中间有空格,所以一个包组需要用引号引起来。否则会被当作多个包组而报错。

[[email protected] ~]# yum groupinfo Compatibility libraries
Loaded plugins: fastestmirror, refresh-packagekit,
security
Setting up Group Process
Loading mirror speeds from cached hostfile
Warning: Group Compatibility does not exist.
Warning: Group libraries does not exist.

            (10.2)显示指定包组详情:# yum groupinfo group1 [...]

包组的信息只能用groupinfo查看,info报错

[[email protected] ~]# yum info "Compatibility libraries"
Loaded plugins: fastestmirror, refresh-packagekit,
security
Loading mirror speeds from cached hostfile
Error: No matching Packages to list

            (10.3)安装:# yum groupinstall group1 [group2] [...]

 

            (10.4)卸载:# yum groupremove group1 [group2] [...]

 

            (10.5)升级:# yum groupupdate group1 [group2] [...]

               

在红帽7中已经统一到install、remove、update中,组名加双引号,引号前加@

            Note: 可直接用install、remove或update来管理包组:

                    @GROUP_NAME

 

                 例子:  #  yum install @"Server Platform Development"

 

三、练习

   创建xen4仓库,分别通过本地及ftphttp服务输出


    练习题解参考见附录