上章我们提到,rpm包之间存在依赖关系,有时这些依赖关系很复杂,使用rpm命令安装程序包时,手动解决起来太麻烦。而yum工具能够很好地解决这一让人头疼的问题
一、什么是yum
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装
二、yum的工作机制
①yum是基于C/S架构的
②yum仓库:
rpm包提供方提供多个rpm包,然后分析并记录与包相关的元数据,如包名、版本信息、各包所包含的文件列表、包之间的依赖关系、包分组信息等。存放这些rpm包和元数据文件的位置就被称为repository或yum库。
元数据文件格式:centos5: xml, centos6,7: sqlite
createrepo: 生成yum仓库元数据文件的工具
③yum客户端:
第一步:当客户端需要安装软件时,会主动向yum仓库获取元数据,并缓存于本地(/var/cache/yum)
第二步:yum客户端程序在本地分析元数据文件,并结合本地RPM资料库做出要安装的程序包的决策
第三步:根据决策联系yum仓库,下载各程序包缓存于本地后,一并进行安装
三、使用yum工具前的准备工作
3.1、确保有yum repository可用
①yum库分类
base库:通常为系统发行版所提供的程序包
updates库:一些升级包
extra库:额外程序包
epel库:
客户端可指定多个yum库,并可定义各yum库的使用优先级
②yum库的来源
提供yum库的除了有本地光盘,还有线上的一些文件服务器,如ftp,ntp,http,nfs;另外我们也可以在本地或线上自建yum库。repodata目录所在的父目录就是一个可用仓库。
ftp://server/path/to/repository
http://server/path/to/repository
nfs://server/nfs_path
file:///path/to/repository
file:///media/cdrom
如下图,该yum库的地址为http://mirrors.163.com/centos/6/os/x86_64/。repodata目录中存放的是元数据文件,Packages为rpm包目录
3.2、yum客户端
提供repos配置文件,指明仓库访问路径及各种属性信息
■主配置文件(中心配置文件):/etc/yum.conf
[[email protected] ~]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever #缓存目录 keepcache=0 #是否保留缓存 debuglevel=2 #调试级别 logfile=/var/log/yum.log #yum日志文件 exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release ... # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
■一个或几个相关仓库的配置信息可保存为一个文件,以.repo为后缀,位于/etc/yum.repos.d目录中
■在.repo文件中指定yum仓库的格式:
[REPOSITORY_ID]
name=Some name for this repository
baseurl=url://server1/path/to/reposity #仓库地址,必须指向repodata目录所在的父目录
url://server2/path/to/reposity #可指定多个仓库,注意多个仓库的书写格式
mirrorlist=URL to a file #mirrorlist指向一个包含baseurl列表的文件
enabled={0|1}:是否启用该仓库,默认为启用
gpgcheck={0|1}:是否检测包来源合法性
gpgkey=URL:密钥所在位置
cost=N:指定访问此仓库的开销,默认为1000。开销越小,越先被使用,由此实现了多个仓库的使用顺序差异。如果在所有的仓库配置文件中都没指定该项或者指定的值相同,则依照它们在/etc/yum.repos.d目录中的存放顺序使用
示例:配置本地挂载的光盘作为yum仓库
[[email protected] ~]# mount /dev/cdrom /media/cdrom mount: block device /dev/sr0 is write-protected, mounting read-only [[email protected] ~]# ls /media/cdrom CentOS_BuildTag EULA images Packages repodata RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6 EFI GPL isolinux RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL [[email protected] ~]# cd /etc/yum.repos.d/ [[email protected] yum.repos.d]# vim dvd.repo [base] name=Centos6.5-x86_64-dvd baseurl=file:///media/cdrom gpgcheck=1 gpgkey=file:///media/cdrom/RPM-GPG-KEY-CentOS-6 cost=1 [[email protected] yum.repos.d]# ls CentOS6-Base-163.repo CentOS-Base.repo.backup CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo dvd.repo
■yum配置文件中可用的四个宏:
$releasever: 程序的版本,对yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;
$arch: 系统架构
$basearch: 系统基本架构,如i686,i586等的基本架构为i386;
$YUM0-9: 在系统中定义的环境变量,可以在yum中使用;
当我们在yum仓库配置文件中使用宏时,一个配置文件可适用于不同的平台和系统版本。例如http://mirrors.163.com/centos/$releasever/os/$basearch/,在i386平台的Centos5.5系统上会被替换为http://mirrors.163.com/centos/5/os/i386/;在x86_64平台的Centos6.5上会被替换为http://mirrors.163.com/centos/6/os/x86_64/
获取当前系统相应变量替换结果的办法:
# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum,pprint
>>> yb = yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, refresh-packagekit
{‘arch‘: ‘ia32e‘,
‘basearch‘: ‘x86_64‘,
‘releasever‘: ‘6‘,
‘uuid‘: ‘ea249181-2f82-4c40-8c42-d51b3fce319a‘}
>>> quit()
[[email protected] yum.repos.d]# cat CentOS6-Base-163.repo ... [base] name=CentOS-$releasever - Base - 163.com baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates - 163.com baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 ...
■自建yum仓库
(1)自建基于光盘镜像的yum库,见上方示例
(2)在中心服务器上提供yum库,以http为例
①安装httpd程序,并启动服务
rpm -ivh httpd-XX或者yum install httpd
service httpd start
chkconfig httpd on
②httpd的文档根目录为/var/www/html:
创建子目录,存放某些rpm包
③为仓库生成元数据文件,以使能够作为仓库使用
rpm -ivh createrepo-XX或者yum install createrepo
createrepo /path/to/rpm_repo/
④ 配置yum客户端使用此仓库即可
[[email protected] ~]# yum -y install httpd createrepo ... Complete! [[email protected] ~]# service httpd start Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using localhost.localdomain for ServerName [ OK ] [[email protected] ~]# chkconfig httpd on [[email protected] ~]# ss -tnl ... LISTEN 0 128 :::80 :::* ... [[email protected] ~]# cp -r zabbix-2.4 /var/www/html/ [[email protected] ~]# cd /var/www/html/ [[email protected] html]# mv zabbix-2.4 zabbix [[email protected] html]# ls zabbix zabbix-2.4.0-1.el6.x86_64.rpm zabbix-proxy-pgsql-2.4.0-1.el6.x86_64.rpm zabbix-server-pgsql-2.4.0-1.el6.x86_64.rpm ... [[email protected] html]# createrepo zabbix Spawning worker 0 with 17 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [[email protected] html]# ls zabbix repodata zabbix-proxy-mysql-2.4.0-1.el6.x86_64.rpm zabbix-server-mysql-2.4.0-1.el6.x86_64.rpm [[email protected] html]# cd /etc/yum.repos.d/ [[email protected] yum.repos.d]# vim testhttp.repo [zabbix] name=zabbix repo base=http://192.168.30.20/zabbix gpgcheck=0 [[email protected] yum.repos.d]# yum clean all #当指定了新的仓库后,一般应刷新缓存 ... [[email protected] yum.repos.d]# yum repolist ... repo id repo name status base CentOS-6 - Base - 163.com 0 extras CentOS-6 - Extras - 163.com 0 updates CentOS-6 - Updates - 163.com 0 zabbix zabbix repo 0 repolist: 0 [[email protected] yum.repos.d]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
三、yum命令的使用
常用选项:
-y:对所有提问都回答yes
-q:静默模式
-v:详细模式
--disablerepo=[repo]:安装时禁用某些yum仓库
--skip-broken:忽略依赖问题
--nogpgcheck:不对包做验证
1、列出repository
yum repolist {enabled|disabled|all},默认为enabled
[[email protected] ~]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile repo id repo name status base CentOS-6 - Base - 163.com 6,575 extras CentOS-6 - Extras - 163.com 44 updates CentOS-6 - Updates - 163.com 470 repolist: 7,089 [[email protected] ~]# yum repolist disabled Loaded plugins: fastestmirror, refresh-packagekit, security Repository base is listed more than once in the configuration repo id repo name C6.0-base CentOS-6.0 - Base C6.0-centosplus CentOS-6.0 - CentOSPlus ...
2、包管理
①列出rpm包
yum list {all|installed|available},默认为all
yum list {all|installed|available} | grep ‘PATTERN‘
yum list KEYWORD*
[[email protected] ~]# yum list httpd* Loaded plugins: fastestmirror, refresh-packagekit, security Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Installed Packages httpd.x86_64 2.2.15-47.el6.centos @updates httpd-tools.x86_64 2.2.15-47.el6.centos @updates Available Packages httpd-devel.i686 2.2.15-47.el6.centos updates httpd-devel.x86_64 2.2.15-47.el6.centos updates httpd-manual.noarch 2.2.15-47.el6.centos updates
②显示包的描述信息(安装或未安装的包都可显示)
yum info package_name #相当于rpm -qi pkg_name,但rpm命令不能查看未安装的包的描述信息
[[email protected] ~]# yum info ftp Loaded plugins: fastestmirror, refresh-packagekit, security Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Available Packages Name : ftp Arch : x86_64 Version : 0.17 Release : 54.el6 Size : 58 k Repo : base Summary : The standard UNIX FTP (File Transfer Protocol) client URL : ftp://ftp.uk.linux.org/pub/linux/Networking/netkit License : BSD with advertising Description : The ftp package provides the standard UNIX command-line FTP (File : Transfer Protocol) client. FTP is a widely used protocol for : transferring files over the Internet and for archiving files. : : If your system is on a network, you should install ftp in order to do : file transfers.
③安装程序包
yum install package_name #会自动解决依赖关系
yum reinstall package_name #重新安装
[[email protected] ~]# yum -y install php ... Installed: php.x86_64 0:5.3.3-46.el6_6 Dependency Installed: php-cli.x86_64 0:5.3.3-46.el6_6 php-common.x86_64 0:5.3.3-46.el6_6 Complete!
④升级/降级
yum check-update: 检查可用的升级包
yum update [package_name] #升级所有或指定的包
yum downgrade package_name
#可指定升/降级到指定的版本,如yum update httpd-2.2.15
[[email protected] ~]# rpm -q mysql mysql-5.1.71-1.el6.x86_64 [[email protected] ~]# yum -y update mysql ... Updated: mysql.x86_64 0:5.1.73-5.el6_6 Complete! [[email protected] ~]# rpm -q mysql mysql-5.1.73-5.el6_6.x86_64 [[email protected] ~]# yum -y downgrade mysql ... Removed: mysql.x86_64 0:5.1.73-5.el6_6 Installed: mysql.x86_64 0:5.1.71-1.el6 Complete! [[email protected] ~]# rpm -q mysql mysql-5.1.71-1.el6.x86_64
⑤卸载包
yum remove|erase package_name #会将被依赖的包一并卸载
[[email protected] ~]# yum remove mysql-libs ... Removed: mysql-libs.x86_64 0:5.1.71-1.el6 mysql-libs.x86_64 0:5.1.73-5.el6_6 Dependency Removed: mysql.x86_64 0:5.1.71-1.el6 #将依赖此包的mysql包卸载 Complete!
⑥查询某文件是由哪个包安装生成的
yum whatprovides|provides /path/to/somefile
[[email protected] ~]# yum provides /var/www/html ... httpd-2.2.15-45.el6.centos.x86_64 : Apache HTTP Server Repo : base Matched from: Filename : /var/www/html httpd-2.2.15-47.el6.centos.x86_64 : Apache HTTP Server Repo : installed Matched from: Other : Provides-match: /var/www/html
⑦特殊场景:从其它处获得一个rpm包,如果此包依赖于其它包(在仓库中),如何安装?
无需从其它库中下载依赖的包手动解决依赖关系,可使用yum命令直接安装
yum install /path/to/pkg_file
[[email protected] ~]# yum install mysql-5.1.73-5.el6_6.x86_64.rpm ... Installing: mysql x86_64 5.1.73-5.el6_6 /mysql-5.1.73-5.el6_6.x86_64 2.4 M Installing for dependencies: mysql-libs x86_64 5.1.73-5.el6_6 base 1.2 M ... Complete!
3、包组管理
①列出所有的包组
yum grouplist
[[email protected] ~]# yum grouplist ... Installed Groups: Additional Development Debugging Tools ... Installed Language Groups: Arabic Support [ar] Armenian Support [hy] ... Available Groups: Backup Client Backup Server ... Available Language Groups: Afrikaans Support [af] Albanian Support [sq] ...
②显示包组的信息:例如组中包含的程序包列表
yum groupinfo "GROUP NAME"
CentOS6 跟开发相关的包组:
Development Tools
Server Platform Development
Desktop Platform Development
[[email protected] ~]# yum groupinfo "Development tools" ... Group: Development tools Description: A basic development environment. Mandatory Packages: autoconf automake ... Default Packages: byacc cscope ... Optional Packages: ElectricFence PyYAML ...
③安装包组
yum groupinstall "GROUP_NAME"
[[email protected] ~]# yum groupinstall "Development tools" Installed: autoconf.noarch 0:2.63-5.1.el6 automake.noarch 0:1.11.1-4.el6 bison.x86_64 0:2.4.1-5.el6 byacc.x86_64 0:1.9.20070509-7.el6 ... Dependency Installed: cloog-ppl.x86_64 0:0.15.7-1.2.el6 cpp.x86_64 0:4.4.7-16.el6 gettext-devel.x86_64 0:0.17-18.el6 ...
④升级包组
yum groupupdate "group_name"
⑤卸载包组
yum groupremove "GROUP_NAME"
4、清理缓存
yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}
[[email protected] ~]# yum clean all Loaded plugins: fastestmirror, refresh-packagekit, security Repository base is listed more than once in the configuration Cleaning repos: base extras updates Cleaning up Everything Cleaning up list of fastest mirrors [[email protected] ~]# tree /var/cache/yum #可看到/var/cache/yum各子目录中的内容都被清空 /var/cache/yum ├── timedhosts.txt └── x86_64 └── 6 ├── base │ ├── gen │ └── packages ├── extras │ └── packages ├── local │ ├── gen │ └── packages └── updates └── packages 12 directories, 1 file