YUM 简介(类似于yum-conda,rpm-pip)
YUM 的全称是 Yellowdog Updater, Modified,它是一个 C/S 架构的软件,能够对基于 RPM 格式的软件包进行管理,它提供了包括自动解决依赖关系,软件包的分组,软件包的升级等功能。 2013 年 7 月 10 日, yum 工具的开发者 Seth Vidal 先生因为车祸不幸去世, 我们为计算机领域失去这位专家感到惋惜。
构成一个完整的 yum 服务,需要以下部分:
- yum 服务器上的服务仓库(存储 rpm 文件和索引文件)
- 提供 rpm 和索引下载的网络服务(http 或者 ftp)
- 客户端的 yum 命令行工具
- 客户端仓库配置信息和插件扩展模
- 1. YUM: Yellowdog Update Modifier
-
完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在
2.工作模式:C/S 架构
Server端(yum仓库):依赖关系库、原文件、校验码文件
Client端:yum客户端程序、配置文件(连接Server路径信息)
3.设计缺陷:
某一次安装过程中半途终止,再次重启后将无法解决程序间的依赖关系
yum升级版dnf就是为了解决此类问题
2.yum repository: yum repo,yum仓库
存储rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata);
yum 的配置
yum 仓库的配置
搭建一个简单的 yum 仓库
搭建一个简单的 yum 仓库,只需要:
- 将 rpm 软件包放在某个目录下
- 对此目录使用 createrepo 命令,对 rpm 包生成索引信息
- 使用 http 或者 ftp 将此目录提供给客户端下载
yum 客户端配置
要使用 yum 需要在客户端配置好 yum 仓库的位置(这里的仓库可以是本地文件系统上的,也可以是远程的)。
yum 命令行使用相关的配置在 /etc/yum.conf
中,这里可以定义 yum 命令使用的配置,如是否使用缓存,缓存文件路径等。这个文件的设定一般不需要改动。
用于指明 yum 仓库的配置文件在 /etc/yum.repos.d/*.repo
中,这些文件以 .repo
为后缀名。
仓库配置的可用选项有:
-
[repositoryid]
-
# 对于当前系统的yum来讲,此repositoryid用于惟一标识此repository指向,因此,其必须惟一;
-
name=
-
# 当前仓库描述信息;
-
baseurl=url://path/to/repository/
-
# 指明repository的访问路径;通常为一个文件服务器上输出的某repository;url 可以是 ftp,http 或者本地文件系统的 url
-
enabled={1|0}
-
此仓库是否可被使用
-
gpgcheck={1|0}
-
是否对程序包做校验
-
gpgkey=url://path/to/keyfile
-
指明gpgkey文件路径;
-
cost=#
-
指明当前repository的访问开销,默认为1000;
下面是一个配置范例:
-
[root@bogon yum.repos.d]# cat nginx.repo
-
# nginx.repo
-
[nginx]
-
name=nginx repo
-
baseurl=http://nginx.org/packages/centos/6/$basearch/
-
gpgcheck=0
-
enabled=1
这里的 baseurl
中使用了 $basearch
变量,使得这个配置文件更具有通用性。在 *.repo
文件中常用的变量有:
-
$releasever
-
当前 OS 发行版的主版本号,如对 CentOS 6.6 系统,这个值为 6
-
$arch
-
当前系统的平台,如 i386, x86_64 等
-
$basearch
-
基础平台,如 x86_64 和 amd64 平台的基础平台同为 x86_64
yum 客户端命令的使用
仓库管理
repolist
:列出已经配置的所有可用仓库
yum repolist [all|enabled|disabled]
缓存管理
clean
清理缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
makecache
缓存创建
yum makecache
将会自动连接至每一个可用仓库,下载其元数据,并将其创建为缓存。
程序包查看
yum list [all]
查看所有仓库的可用软件包,还可以跟上包名查看特定的软件包,包名可以使用通配符匹配,如列出所有以 zlib
开头的软件包:
-
[root@bogon ~]# yum list zlib*
-
Loaded plugins: downloadonly, fastestmirror, refresh-packagekit, security
-
Loading mirror speeds from cached hostfile
-
base | 3.7 kB 00:00
-
extras | 3.4 kB 00:00
-
Installed Packages
-
zlib.x86_64 1.2.3-29.el6 @anaconda-CentOS-201410241409.x86_64/6.6
-
Available Packages
-
zlib.i686 1.2.3-29.el6 base
-
zlib-devel.i686 1.2.3-29.el6 base
-
zlib-devel.x86_64 1.2.3-29.el6 base
-
zlib-static.x86_64 1.2.3-29.el6 base
可以单独查看所有已安装,可升级,可用软件包,使用
yum list {available|updates|installed|extras|obsoletes} [glob_exp1] [...]
查看软件包组,使用 grouplist
yum grouplist [glob_exp]
程序包安装
安装使用 install
子命令,并跟上需要安装的包名
yum install package1 [package2] [...]
例如,安装 mysql-server
软件包:
yum install mysql-server
在安装过程中,程序会交互式的提示是否确认安装,需要按 y
进行确认,如果需要不提示,可以使用 -y
选项,如 yum -y install mysql-server
如果一个软件包有多个版本可用,yum 默认安装最新的那个,如果向指定版本,那么在包名后跟上想要安装的版本号
yum install PACKAGE-VERSION
重新安装
重新安装使用 reinstall
,其使用方式和 install
相同。
程序包升级
软件包的升级使用 update
子命令,并接上需要升级的包名
yum update [package1] [package2] [...]
程序包降级
软件包降级使用 downgrade
子命令,并跟上需要降级的包名
yum downgrade package1 [package2] [...]
检查可用升级
使用 yum check-update
检查有哪些包可以升级
卸载
卸载使用 remove
子命令
yum remove package1 [package2] [...]
如果一个软件包被其他软件包依赖,那么卸载它的时候依赖此软件包的其他软件包也将被卸载。卸载也可以使用-y
表示非交互式模式。
查询
查询软件包的概要信息,使用 info
子命令
yum info PACKAGE
在软件包的包名和概要中搜索某个关键字,使用 search
子命令。
yum search KEYWORD
查询某个文件由哪个软件包所安装生成,使用 provides
子命令,如查询 /usr/bin/passwd
有哪个软件包所生成:
-
[root@bogon ~]# yum provides /usr/bin/passwd
-
Loaded plugins: downloadonly, fastestmirror, refresh-packagekit, security
-
Loading mirror speeds from cached hostfile
-
passwd-0.77-4.el6_2.2.x86_64 : An utility for setting or changing passwords using PAM
-
Repo: base
-
Matched from:
-
Filename: /usr/bin/passwd
查询的文件还可以使用通配符进行通配。
安装或升级本地的软件包
安装本地软件包使用 localinstall
子命令,也可以直接使用 install
子命令,安装本地软件包指定的软件包的文件名。
包租管理
列出所有包组:grouplist
显示指定包组详情:groupinfo group1 [...]
安装包组:groupinstall
卸载:groupremove
升级:groupupdate
这些子命令的用法和安装普通软件包时的用法是相同的。安装包租是也可以使用 install
,remove
或 update
来管理,如安装 Development tools
软件包:
yum install @Development tools
yum 命令的可用选项
-y
:自动在交互式回答 "yes"
--disablerepo=
:临时禁用在配置文件中配置并启动的某仓库
--enablerepo=
:临时启用指定的某仓库
--nogpgcheck=
:禁止做包校验
yum 插件
yum 还能够支持插件的安装,能够扩展 yum 的功能,这里列举 yum-downloadonly
插件,这个插件的功能是使用 yum 下载一个 rpm 包到某个目录中而不安装它。
下载插件:
yum install yum-downloadonly
使用 --downloadonly
选项来下载 rpm 包而不安装:
yum install --downloadonly --downloaddir=<directory> <package>
YUM客户端配置
1.yum配置文件路径
/etc/yum.conf:为所有yum仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
2./etc/yum.conf主配置定义
[root@localhost ~]# man 5 yum.conf #可获得yum.conf的详解
[root@localhost ~]# cat /etc/yum.conf
[main] #通用主配置段
cachedir=/var/cache/yum/$basearch/$releasever # 缓存文件路径
keepcache=0 # 缓存到本地的文件是否保存
debuglevel=2 # 调试级别
logfile=/var/log/yum.log # 安装的日志文件
exactarch=1 # 精确严格的平台release匹配
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/bu #追踪bug路径
distroverpkg=centos-release # 当前发行版版本号从哪儿获取
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
3.仓库(*.repo)配置文件定义:
[repositoryID] #仓库ID,唯一标识别,不能重复
name=Some name for this repository # 完整的仓库名称
baseurl=url://path/to/repository/ # yum仓库指明的访问路径
enabled={1|0} #是否启用此yum仓库,默认启用
gpgcheck={1|0} #是否检查完整性和来源合法性
gpgkey=URL #秘钥文件位置,可能是对方仓库提供
enablegroups={1|0} #是否基于组来批量管理程序包
failovermethod={roundrobin|priority} #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机
cost=# #设置开销,默认为1000
说明:
1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理
2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:/// 指明URL路径
3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写
多个访问路径间联系是镜像相同,目的是为了做备用访问
4)更多选项使用man 5 yum.conf查看,基本配置只需前三行就可以
5)发行版光盘镜像安装可能会自动配置网络镜像URL地址
三、yum命令的用法
yum [options] [command] [package ...]
1.OPTIONS
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q: 静默模式,不输出显示信息;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
2.常用COMMAND
(1)显示仓库列表:repolist
# yum repolist [all|enabled|disabled] [所有|可用的|不可用]
(2)显示程序包:list
# yum list [all | glob_exp1] [glob_exp2] [...] [所有的|符合glob通配条件的]
# yum list {available|installed|updates} [glob_exp1] [...] 可用尚未安装的,已经安装的,可升级的
(3)安装程序包:install
# yum install package1 [package2] [...]
# yum reinstall package1 [package2] [...] (重新安装)
(4)卸载程序包:此时依赖于此安装包也会被卸载
yum remove | erase package1 [package2] [...]
(5)升、降级安装程序包:update、downgrade
# yum update [package1] [package2] [...] 升级操作
# yum downgrade package1 [package2] [...] 降级操作
(6)检查可用升级:check-uodate
# yum check-update
(7)查看程序包简要信息:info
# yum info [package1] [package2] [...]
(8)查看指定的特性(可以是某文件)是由哪个程序包所提供:provides
yum provides | whatprovides feature1 [feature2] [...]
(9)清理本地缓存:clean
# yum clean <packages | metadata | expire-cache | rpmdb | plugins | all >
包、源数据、过期缓存、rpmdb、插件、所有
包安装完了会自动清除、而元数据(依赖关系等)不会自动,但下次yum安装会自动重新校验
(10)构建缓存:重新yum安装会自动创建缓存数据:makecache
# yum makecache
(11)以指定的关键字搜索程序包名及summary信息:search
# yum search string1 [string2] [...]
(12)查看指定包所依赖的功能(capabilities):
# yum deplist package1 [package2] [...]
(13)查看yum事务历史:history
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
3.COMMAND:安装及升级本地程序包
指定安装本地的*.rpm,但是会根据yum源现有依赖关系,解决此安装可能出现的依赖关系
# yum localinstall rpmfile1 [rpmfile2] [...]
# yum localupdate rpmfile1 [rpmfile2] [...]
4.COMMAND:包组管理的相关命令:
包组:一堆程序的一个集合,用于一起安装,因为某些程序安装需要依赖包组内容
# yum groupinstall group1 [group2] [...] 安装包组
# yum groupupdate group1 [group2] [...] 升级包组
# yum grouplist [hidden] [groupwildcard] [...] 显示包组列表
# yum groupremove group1 [group2] [...] 移除包组
# yum groupinfo group1 [...] 显示包组信息
四、创建yum仓库
1.使用光盘当作本地yum仓库:
光盘的镜像本身就是一个yum源,自己安装系统时候选择安装工具时就是借助yum自动安装
(1)挂载光盘至某目录,例如/media/cdrom # mount -r [-t iso9660] /dev/cdrom /media/cdrom
(2)创建配置文件
[ID]
name=
baseurl=file:///… …
gpgcheck=
2.yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台,同一系列最基本的架构,如32、64;
$YUM0-$YUM9 可做自定义
3.手动创建yum仓库:
(1)安装工具:createrepo
(2)下载所需要的所有文件到本地某个路径
(3)创建关联关系: createrepo - Create repomd (xml-rpm-metadata) repository
命令:createrepo [options] <directory>
当完成狗会生成repodata即可
(4)配置yum源文件,创建*.rope写入信息即可