一、前言
RPM安装软件有一个很繁琐的问题,那就是包与包之间的依赖关系,如果想正常安装和使用软件程序,就必须根据要求一步一步的解决软件之间的依赖关系。那么如果程序使用的包很多,将会很消耗使用人的时间和精力。那么有没有办法解决这一问题呢?
在RPM中我们介绍了RPM软件会记录软件之间的安装信息,其中也包括了软件之间的依赖属性。那么如果我们在安装前就分析这个列表,那么在安装时就能根据软件之间的关系将所需的软件一次性安装起来,这样就能解决这一问题,这就是 YUM 的机制。
二、yum的介绍
yum(Yellow dog Updater Modified)是CentOS中属于RPM前段软件包管理器,能从指定的服务器中下载RPM包,并自动分析和处理RPM包之间的依赖关系,最后将依次所依赖的软件包都安装了,而无需繁琐的一个一个安装。
三、yum repository:yum仓库
yum仓库的组成部分
3.1、数据
- 包含所有的软件包文件
3.2、元数据
- 指的是数据文件:包括每个包的包名、版本信息、各包所包含的文件列表、包与包之间的依赖关系、包的分组信息
小扩展:元数据是怎么来的呢?
使用createrepo工具,能够简洁的快速的将我们所指定的存放大量RPM包的目录,里面所有的RPM包信息都读出来,分析他的依赖关系并生成元数据。所以createrepo可以理解为它是制作yum元数据的工具。 在光盘里其实也有这个元数据,路径在光盘中的 [[email protected] mnt]# cd repodata/ 里,然后是以 sqlite文件后缀 备注:centos5 是以 xml 后缀,centos6、7是以sqlite数据库的方式存储的
四、yum的配置文件介绍
yum的配置文件有2个: 主配置文件 + 仓库配置文件
4.1、主配置文件路径 /etc/yum.conf
[main] cachedir=/var/cache/yum/$basearch/$releasever #下载RPM包的缓存目录 keepcache=0 #RPM缓存的程序包安装完成后是否保存,0表示不保存,1表示保存 buglevel=2 #调试级别 取值范围 0 - 10,默认值为2 logfile=/var/log/yum.log #yum相关日志存放路径 exactarch=1 #是否要平台完全匹配才能安装 obsoletes=1 #需不需要检查已过期的仓库 gpgcheck=1 #是否检查包的完整性和合法性 plugins=1 #是否允许支持yum的插件功能,0 表示不允许 ,1表示允许,建议允许,一般会用yum-fastestmirror这个插件 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 #指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包
4.2、仓库配置文件路径 /etc/yum.repos.d/.repo
仓库文件可以有多个,而且一个或几个相关的仓库的配置信息也可保存为一个文件,并且所以的仓库文件名都以 .repo结尾。
[REPOID] #容器名字,必须是唯一的 name= #some name for this repository仓库的名字,仅作一个标识 baseurl= #指定真正仓库所在的路径,可以指多个仓库 #例如:baseurl=file:///media/cdrom # ftp://172.168.1.1/path #备注第二行不能顶格写,否则会出错 mirrorlist= #列出容器可以使用站点,如果不想使用,可以再前面加 # 注释 enabled= {0 | 1} #指是否启用这个仓库,0表示不启用,1表示启用 gpgcheck= {0 | 1} #是否要检测软件包的合法性,0表示不检测,1表示不检查 gpgkey= #软件包的公钥文件所在路径,例如:gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6 cost= #仓库优先级,比如一个软件包在多个仓库都有,那应该选择哪个安装呢?就是根据这个优先级,默认是100,数字越小表示越优先使用
备注:默认各仓库的用法:
base库:通常为系统发行版所提供的程序包(就是光盘) updates库:存放更新包 extra库:存放额外包 epel库:epel库文件 库本身有优先级的,但是仅是在客户端有,服务器端是没有优先级的
小贴士:yum可支持多个协议,包括 ftp、http、nfs和本地文件共享服务
所以仓库配置文件中的 baseurl 一项可以有多个写法,下面是各写法的格式
1)ftp
格式:ftp://server/path/to/repository
2)http
格式:http://server/path/to/repository
3)nfs
格式:nft://server/nfs_path
4)本地文件共享服务
格式:file:///path/to/repository
五、yum安装步骤
六、yum命令的使用
6.1、yum查询功能
yum [option] [需要查询的信息][参数] -y:默认yum需要是交互模式,-y表示自动提供yes响应 -q:静默模式 search:搜索某个软件名或关键字 list:列出所有yum所管理的软件包和名称 info:同上,也类似rpm -qai provides:查找该命令是由软件安装生成的,类似rpm -df的功能 repolist:列出所有可用的repo
例如:
[[email protected] ~]# yum provides bash
[[email protected] ~]# yum repolist
例如:
[[email protected] yum.repos.d]# yum install zlib-static
6.2、安装、升级、降级、卸载功能
yum [option] [需要查询的信息][参数] install:后面接需要安装的软件 reinstall:后面接需要重新安装的软件 update:后面接需要升级到的软件 check-update:检查可用的升级包 downgrade:后面接需要降级到的版本 remove:卸载软件 erase:功能同上,卸载 --disablerepo=repoid 临时禁用此处指定的repo --enablerepo=repoid 临时启动此处启用的repo --noplugins:禁用所有插件
例如:
[[email protected] yum.repos.d]# yum install zlib-static
6.3、和软件组相关的功能
yum [组功能] [软件组] grouplist:列出所有可使用的组列表 groupinfo:后面接group name,可用了解该group内含所有组的名称 groupinstall:安装整组的软件 groupremove:删除某个组的软件
例如:
[[email protected] yum.repos.d]# yum grouplist #所有的包组未一一列举,若想安装某组可使用groupinstall直接安装 Installed Groups: #已经安装的软件组 Additional Development Base Console internet tools Development tools Installed Language Groups: #已经安装的语言组 Arabic Support [ar] Armenian Support [hy] Georgian Support [ka] Available Groups: #有效软件组包文件 Backup Client Backup Server Available Language Groups: #有效的语言组包文件 Afrikaans Support [af] Albanian Support [sq]
6.4、清理缓存
yum clean { all | package | headers } all:将所有的数据删除,包括元数据和软件文件 package:将所有已下载的软件文件删除 headers:删除所有下载的元数据文件
例如:
[[email protected] yum.repos.d]# yum clean all #这样将会清除所有的已下载的元数据和软件文件 Loaded plugins: fastestmirror, security Cleaning repos: base extras updates Cleaning up Everything Cleaning up list of fastest mirrors
6.5、yum历史命令
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo] history:列出历史事务 redo:重新执行事务 undo:撤销事务
例如:
yum history info 15 //查看yum history id为15 的 操作 yum history undo 15 //撤销yum history id为15 的 操作
日志文件:/var/log/yum.log
6.6、yum内置变量
$releaserver
:代表系统的版本,对Yum而言指的是redhat-releaser版本,指向发行版的主版本号;只替换为主版本号,如RedHat 6.5 ,则替换为6
$basearch
:系统基本架构,如果是i686,i586等基本架构就为i386
$arch
:系统架构
比如我现在的系统是CentOS6.5,系统架构是x86_64,则
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
会自动替换为
baseurl=http://mirrors.163.com/centos/6/os/x86_64
六、如何自建yum仓库
6.1、引言:
虽然系统自带的仓库已经很常用,只要连接到互联网我们就能很容易有获取到互联网的yum仓库。但是如果是在企业内网,企业内部不允许访问互联网,又或者如果企业服务器众多,如果都要从互联网去获取yum仓库,那将很占用带宽。基于这种情况,我们就需要自己在企业内部创建yum仓库。
6.2、自建仓库需要使用的命令介绍
createrepo(create repo):创建仓库,在自建仓库时,使用命令createrepo会自动帮我们生成repodata文件作为软件的仓库,而其目录下有四个必要文件:filelists.xml.gz,other.xml.gz,primary.xml.gz和repomd.xml,其中最重要的是repomd.xml文件。一般出现的找不到repodata目录或文件的错误的原因通常有三个:一是路径问题;二是没有生成repodate目录;三是*.repo配置文件冲突(这个需要特意注意)。
小贴士:createrepo命令默认是没有安装,所以我们需要提前安装,createrepo的安装包为“createrepo-0.9.9-17.el6.noarch.rpm”,可以使用RPM或yum先将此程序包安装。
安装方法:
#yum -y install createrepo 或 rpm -ivh createrepo-0.9.9-17.el6.noarch.rpm (路径一定要写对)
6.3、自建yum仓库有2种方法
- 1)、基于关盘镜像创建yum仓库
- 2)、根据服务自建提供yum仓库的服务器(ftp、http、nfs)
6.4、基于关盘镜像创建yum仓库
6.4.1、先将光盘挂载至/mnt目录下
mount /dev/cdrom /mnt
6.4.2、配置yum仓库文件
[[email protected] yum.repos.d]# vim /etc/yum.repos.d/local-media.repo #如果local-media.repo不存在,请直接创建 [Meida-repo] name=This is Local media repo baseurl= #指向光盘镜像路径 enabled=1 #是否启动该仓库 gpgcheck=0 #是否检查包完整性 [[email protected] yum.repos.d]# yum clean all #清除所有的包缓存和元数据 [[email protected] yum.repos.d]# yum list #列出所有的仓库和程序包
6.5、根据服务自建提供yum仓库的服务器(这里以http服务为例)
6.5.1、首先安装http服务
yum -y install httpd 或 rpm -ivh httpd
6.5.2、关闭Linux防火墙和Selinux
#防火墙和Selinux可能会影响用户访问HTTP,所以这里需要将其禁用 [[email protected] yum.repos.d]# service iptables stop #关闭防火墙服务 [[email protected] ~]# chkconfig iptables off #关闭防火墙自动启动 [[email protected] yum.repos.d]# getenforce #查看Selinux状态 Enforcing表示启用 Permissive表示不启用 Enforcing [[email protected] yum.repos.d]# setenforce 0 #关闭Selinux 0表示关闭 1表示开启 [[email protected] yum.repos.d]# getenforce Permissive [[email protected] ~]# vim /etc/selinux/config #关闭Selinux开机启动,编辑confg文件,将其中SELINUX字段改为如下设置 SELINUX=disabled
6.5.3、启动httpd服务和开机自动服务
[[email protected] yum.repos.d]# service httpd start #开启httpd服务 [[email protected] yum.repos.d]# chkconfig on #设置httpd服务开机自动启动 [[email protected] ~]# netstat -tunlp | grep http #查看http服务是否已启用 tcp 0 0 :::80 :::* LISTEN 1532/httpd
6.5.4、编辑httpd的文档目录
#httpd默认的目录文档路径为/var/www/html [[email protected] html]# mkdir /var/www/html/rpm-repo #创建仓库路径 [[email protected] rpm-repo]# cp -a /mnt/Packages/xcb* /var/www/html/rpm-repo/ #拷贝RPM程序包为测试使用
6.5.5、使用createrepo配置yum仓库
[[email protected] rpm-repo]# createrepo /var/www/html/rpm-repo/
6.5.6、验证和查看http仓库的文件
6.5.7、配置和验证yum仓库
[[email protected] yum.repos.d]# vim /etc/yum.repos.d/local.repo #编辑yum仓库文件,让仓库路径指向http的yum仓库 [http-repo] name=http yum repo baseurl=http://192.168.80.150/rpm-repo enabled=1 gpgcheck=0 [[email protected] ~]# yum list