上一篇我们介绍了软件包管理器后端工具rpm,现在我们来看一下软件包管理器前端工具yum。先来介绍下yum吧。
yum:Yellowdog Update Modifier。yum是一种C/S的架构。是一种依赖于rpm的前端软件包管理工具。工作模式为C/S模式。其服务器工作过程完全依赖于yum仓库。
yum repository:yum仓库,是一种用来存放所有我们需要用到的rpm包的场所,或者说是文件服务。该文件服务可以是ftp,web,或本地某个file。不管哪种配置机制,其工作机制都是相同的。
yum
有自己的客户端,其工作机制依赖于其配置文件。在配置文件中可以为
yum
指定服务器在什么地方,该服务器可以是
ftp
,
web
,
file
任一个都可以,说白了就是
yum
仓库,在配置文件中还必须指明
yum
仓库名称,简要描述信息,访问位置及当前的
yum
仓库是否要使用等属性。当我们使用
yum
安装软件包时,
yum
客户端会试图通过网络去请求到对方主机上或到某个
yum
仓库中获得这个
yum
仓库中所有可以获得的文件列表。当我们使用
yum
去安装某个软件包的时候,这个软件包一定位于我们配置众多的可以使用的
yum
仓库中的某一个中。
上一篇已经提到过,
rpm
对处理具有依赖关系的软件包很不方便,但
yum
却可以很方便的处理这种关系。当我们安装的软件包需要另外一个或几个软件包提供的功能或库文件时,
yum
会去
yum
仓库自动为我们找到安装该软件包所需的所有的软件包,找到后下载到本地,然后跟该软件包一块安装。比方说:我们安装软件包
X
,但安装
X
需要先安装软件包
L
、
M
、
N
、
Y
、
Z
,使用
yum
安装时,
yum
检索发现我们系统上已经安装了
Y
和
Z
,其他三个还没有安装,
yum
就会自动去
yum
仓库查找这三个文件,找到后下载到本地,然后跟软件包
X
一块安装。
每当我们需要安装某个
yum
包时,如果
yum
都从新从
yum
仓库下载至本地,这样看起来回很浪费带宽,也会使
yum
的效率极低,所以,
yum
为我们提供了元数据文件,我们每次使用
yum
时所下载的文件都会缓存到该文件中,以后的每次操作都会先从这里查找。下面介绍
yum
仓库中的元数据文件。
yum
仓库中的元数据文件包括如下几个:
primary.xml.gz:当前仓库所有RPM包的列表、包含有各包之间的依赖关系、每个RPM包安装生成的文件列表,是最关键的文件;
filelists.xml.gz:当前仓库中所有RPM包的所有文件列表;
other.xml.gz:额外信息,RPM包的修改日志;
repomd.xml:记录的是上面三个文件的时间戳和校验和;
comps-rhel5-server-core.xml:RPM包分组信息。
上面我们提到,
yum
可以为我们提供如此强大的功能,而
yum
所有的工作是机制依赖于
yum
仓库的,即
repo
文件,那我们如何为
yum
定义
repo
文件,怎样定义
repo
文件呢?其实,系统有个文件夹,里边存放有
yum
仓库文件,我们只需在
/etc/yum.repos.d/
目录下创建
.repo
的文件,编辑并输入如下内容就可以使用了。文件内容格式如下:
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled=[1|0]
gpgcheck=[1|0]
gpgkey=
如:在该
/etc/yum.repos.d/
目录下,创建一个文件名为
Server.repo
结尾的文件,编辑输入如下内容:
- [Base]
- name=RHEL5 Server
- baseurl=ftp://172.16.0.1/pub/Server
- enabled=1
- gpgcheck=0
这样,我们的yum仓库Server就创建成功了。用ls查看下,可以看到该目录下多了一个文件,那就是Server.repo。当我们有多个yum仓库来源时,比方说我baseurl有好几个,ftp一个,http一个,还有本地某个文件file中,可以再同一个.repo文件中写入多个,但每个格式都必须相同。如:我想在上边一个基础上再添加一个,则可在该文件中输入如下内容,这两个是在同一个文件中哦!命令如下:
- [Base]
- name=RHEL5 CDROM Server
- baseurl=file:///media/yum/Server
- enable=1
- gpgcheck=0
-
- [Name]
- name=RHEL5 CDROM VT
- baseurl=file:///media/yum/VT
- enable=1
- gpgcheck=0
yum
还为我们提供了
yum
命令,下面看一下
yum
的用法及各个选项吧。因为
yum
在安装软件包时会考虑所有依赖关系,因此,在执行
yum
命令时,会显示很多信息,所以我们只给出部分命令的截图。
yum [options] [command] [package ...]
-y
:自动回答为
yes
--nogpgcheck
:忽略
gpg
检查
yum
的各选项包括如下几个:
list
:
列表
all
available
:
可用的,仓库中有但尚未安装的
installed: 已经安装的
updates
:可用的升级
因
rpm
包太多,截图很不方便,这里只给出命令,不在给出截图。命令如下:
-
假如我们想显示
yum
开头的
rpm
包,可使用如下命令:
-
clean
:清理缓存
[ packages | headers | metadata | dbcache | all ]
如:我们清除下本机
yum
缓存,命令及代码如下所示:
-
repolist
:显示
repo
列表及其简要信息
all
enabled
:默认
disabled
采用其默认选项,我们现在去显示下
repo
列表及简要信息,命令及执行结果如下所示:
-
install
:安装
使用格式为:
# yum install PACKAGE_NAME
现在我们去安装
mysql-server.i386.rpm
包,我们知道当有依赖关系时,系统会自动为我们搜索所有这样的包,下载至本地,然后几个包一块安装。命令及执行结果如下,截图太大,只给出部分截图:
-
update
:升级
update_to
:升级为指定版本
remove|erase
:卸载,会卸载所有依赖该包的软件包,要慎用,所以这里我们不在演示效果。只给出命令
# yum remove php53-pdo
info
:查询信息,当我们想查询某个
rpm
包时可以使用该命令。如:我们查询下有关
zsh
包的信息,命令及执行结果如下所示:
-
provides|whatprovides
:查看指定文件或特性是有哪个包生成的,如我们来查看下
/etc/inittab
是由哪个包生成的。命令及执行结果如下所示:
-
如何创建
yum
仓库:
createrepo,我们必须先安装该rpm包才能使用其提供的功能,这里不再演示。
练习:
写一个脚本,完成以下功能
:
说明:此脚本能于同一个repo文件中创建多个Yum源的指向;
1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存在,否则,报错;
2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;
3、repo name以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;
4、enabled默认为1,而gpgcheck默认设定为0;
5、此脚本会循环执行多次,除非用户为repo id指定为quit
;
参考答案:
-
- REPOFILE=/etc/yum.repos.d/$1
- if [ -e $REPOFILE ];then
- echo "$1 exists."
- exit3
- fi
-
- read -p "repo_id:" REPOID
- until [ $REPOID == 'quit' ];do
- echo "[$REPOID]" >> $REPOFILE
- read -p "repo_name:" REPONAME
- echo "name=$REPONAME" >> REPOFILE
- read -p "baseurl:" BASEURL
- echo "baseurl=$BASEURL" >> REPOFILE
- echo -e "enabled=1\ngpgcheck=0" >> $REPOFILE
- read -p "repo_id:" REPOID
- done