首页 > 代码库 > 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