1、yum的相关概念


yum是rpm的前端管理工具,实现在前端自动解决程序包依赖关系

yum是一个C/S架构的工具,客户端通过yum仓库实现程序包的安装,yum仓库必须是一个文件服务器,其内存放了需要安装的所有rpm包


yum的工作方式

     (1)当用户使用yum命令安装程序包时,会根据yum的本地配置文件所指向的yum仓库的访问地址(URL),通过配置文件中的设定去连接yum仓库所在的主机;

     (2)yum仓库中存放有每个程序包的元数据信息以及程序包之间的依赖关系,当yum客户端需要通过仓库获取程序包时,会首先将yum仓库中存放程序包信息的文件下载至本地的缓存空间中,通过分析此文件获取程序包之间的依赖关系以及查询本地是否有已安装的程序包,而后通过仓库去下载未安装的程序包;

     (3)程序包下载完之后同样存放在缓存空间中,然后执行rpm包的安装操作,首先先安装依赖包,安装完成后yum会自动删除缓存中存放的程序包,但程序包的元数据文件不会删除;

     (4)下次要通过仓库安装新的程序包时,直接分析本地的元数据文件,但仓库中的程序包有可能会改变,仓库中还有一个记录了每个元数据文件的特征码的特殊文件,客户端通过下载这个文件,分析文件的各程序包的特征码特征码和本地缓存的元数据文件中程序包的特征码是否一致,如果一致,则说明仓库中的程序包未发生改变,否则,说明仓库中程序包发生了改变,客户端会重新下载元数据文件而后下载程序包。

    程序包管理之yum_yum          


dnf

     dnf相对于yum更换了依赖关系解析器后端,效率更高。实现对yum工具的升级

CentOS系列常用前端工具: yum, dnf


YUM: 早期由yellow dog研发, Yellowdog Update Modifier


yum repository: 简称为yum repo 仓库 repodate所在目录即为yum源

     存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);

     仓库文件服务器:

          ftp://

          http://

          nfs://

          file:///  本地仓库,例如光盘


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


2、yum的配置文件及yum仓库


yum客户端:

     配置文件

          /etc/yum.conf:为所有仓库提供公共配置

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

     仓库的指向的定义

          [repositoryID] 仓库ID

          name=Some name for this repository 仓库简要功能描述

          baseurl=url://path/to/repository/ 仓库的访问路径

          enabled={1|0} 是否启用此仓库,默认为启用

          gpgcheck={1|0} 是否检查包的来源合法性和完整性

          gpgkey=URL 指明gpg密钥文件的URL

          enablegroups={1|0} 是否支持程序包组管理,默认支持

          failovermethod={roundrobin|priority} 故障转移方式(多个baseurl){轮循|优先级}  默认为:roundrobin,意为随机挑选;

          cost=# 开销值,默认为1000,如果多个仓库中都有同一个程序包,优先选择哪个


例如

1、先用确保系统安装了yum工具程序包,安装后方可使用yum命令

程序包管理之yum_yum_02


2、/etc/yum.repos.d/目录下存放有CentOS自行提供的指向互联网的仓库指向

程序包管理之yum_yum_03


3、自行制定新的yum仓库指向,注意.repo仓库不能同名

程序包管理之yum_yum_04程序包管理之yum_yum_05


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


3、yum命令的用法:


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] 



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


4、显示仓库列表:


     repolist [all|enabled|disabled] 显示所有/启用/禁用的yum仓库,默认显示启用的


例如

1、列出系统上已启用的yum仓库,首次查询会加载元数据等文件

程序包管理之yum_yum_06

程序包管理之yum_yum_07

2、列出系统上所有的yum仓库,包括已启用的和被禁用的

程序包管理之yum_yum_08



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


5、显示程序包:

     list

          # yum list [all | glob_exp1] [glob_exp2] [...]

               显示所有或匹配条件的程序包

          # yum list {available|installed|updates} [glob_exp1] [...]

               显示仓库中有但尚未安装的/已安装的/可升级的程序包


例如

1、显示所有yum仓库中的程序包,@表示已安装过的包,@anaconda表示安装系统时安装的包

程序包管理之yum_yum_09

程序包管理之yum_yum_10


2、显示所有以httpd开头的名称的程序包

程序包管理之yum_yum_11


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


6、安装程序包:

          install package1 [package2] [...]

     重新安装程序包

          reinstall package1 [package2] [...]  


例如

1、安装php-common程序包,会自动安装所要依赖的包,使用-y直接确认安装

程序包管理之yum_yum_12...

程序包管理之yum_yum_13


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


7、升级程序包:

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

     降级程序包:

          downgrade package1 [package2] [...]  


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


8、检查可用升级:

     check-update


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


9、卸载程序包:

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

     注意卸载程序包时,依赖于此包的程序包也会被卸载


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


10、查看程序包的信息:

     info [...]


例如:查看gcc程序包的信息。类似于rpm -qi

程序包管理之yum_yum_14



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

11、查看指定的特性(可以是某文件)是由哪个程序包所提供:

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


例如:查看gcc程序包所提供了哪些CAPABILITY

程序包管理之yum_yum_15


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


12、清理本地缓存:

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

          清理本地缓存中的 程序包/元数据/过期缓存/rpm数据库/插件/所有


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


13、构建缓存:

     makecache 创建缓存时需要遍历各yum仓库


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


14、搜索程序包及其信息:

     search string1 [string2] [...]

     以指定的关键字搜索程序包名及summary信息;


例如:搜索bash程序包及其相关信息

程序包管理之yum_yum_16


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


15、查看指定包所依赖的capabilities:

     deplist package1 [package2] [...]


例如:显示gcc所依赖的capability

程序包管理之yum_yum_17


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


16、查看yum事务历史:

     history [info|list|packages-list|packages-info|summary|addon-   info|redo|undo|rollback|new|sync|stats]


注意:安装/升级/卸载等yum命令的执行都会启动yum事务,使用yum history可以显示事务历史

例如:查看yum事务历史,可以显示相关用户的操作等信息

程序包管理之yum_yum_18

卸载cpp程序包,再次查看yum事务历史,就会看到刚才的操作历史了

程序包管理之yum_yum_19

程序包管理之yum_yum_20

程序包管理之yum_yum_21



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


17、安装及升级本地程序包:

可以自动解决依赖关系,实际上使用install就可以解决依赖了

     * localinstall rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use install)

     * localupdate rpmfile1 [rpmfile2] [...]

          (maintained for legacy reasons only - use update)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


18、包组管理的相关命令:

     * groupinstall group1 [group2] [...]  安装指定包组

     * groupupdate group1 [group2] [...]

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

     * groupremove group1 [group2] [...]

     * groupinfo group1 [...]


例如

1、显示所有包组

程序包管理之yum_yum_22


2、安装Development tools包组,会自动安装包组内的程序包

程序包管理之yum_yum_23


3、查看Development tools包组的信息

程序包管理之yum_yum_24


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


19、如何使用光盘当作本地yum仓库:

     (1) 挂载光盘至某目录,例如/media/cdrom

          # mount -r -t iso9660 /dev/cdrom /media/cdrom

     (2) 创建配置文件

          [CentOS7]

          name=

          baseurl= file:///media/cdrom

          gpgcheck=

          enabled=


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


20、yum的命令行选项:

     --nogpgcheck:禁止检查gpg密钥;

     -y: 自动回答为“yes”;

     -q:静默模式;

     --disablerepo=repoidglob:临时禁用此处指定的repo;

     --enablerepo=repoidglob:临时启用此处指定的repo;

     --noplugins:禁用所有插件;


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


21、yum的repo配置文件中可用的变量:

     $releasever: 当前OS的发行版的主版本号;

     $arch: 平台;

     $basearch:基础平台;

     $YUM0-$YUM9 :用户自定义

     例如

     http://mirrors.magedu.com/centos/$releasever/$basearch/os


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


22、创建yum仓库:

     createrepo [options] <directory>


例如

1、先安装createrepo程序(CentOS 7自带)

程序包管理之yum_yum_25


2、下载多个rpm包当做yum仓库

程序包管理之yum_yum_26


3、使用createrepo命令创建yum仓库在/yum/repo目录中,创建仓库时会读取当前目录下所有的rpm包的元数据而后生成repodata目录

程序包管理之yum_yum_27


4、repodata中文件使用UUID方式命名,存放了所有rpm包的元数据信息,repomd.xml就是存放其他几个文件的特征码的特殊文件

程序包管理之yum_yum_28


5、之后就可以修改配置文件指定生成的yum仓库指向

程序包管理之yum_yum_29

程序包管理之yum_yum_30


6、使用yum repolist可以查看到新生成的yum源,之后就可以使用生成的yum仓库来下载并安装rpm包了

程序包管理之yum_yum_31