用过rpm安装过软件的同学应该体验过“软件依赖”这个可怕的东西,一旦遇上了装一个软件可能会被逼疯!特别是遇到循环依赖的时候,压根就不知道怎么解决。还好RedHat还有YUM这个好东西,它可以帮我们自动解决软件依赖的问题,实现一键安装。前提是要联上网(或者使用光盘也行)。
YUM的原理
YUM的原理还比较复杂,重点在于理解“容器”的概念。
我们知道rpm安装有软件依赖的问题,rpm机制也会记录依赖属性(rpm -qR即可查询),那如果我们先把一个软件的依赖属性做成一张表(header),在安装软件的时候先到这个表中查找,同时与系统中已安装的软件进行比较,发现没有安装的软件就都下载安装起来,那这样依赖问题不就圆满解决了吗!【这就是YUM的原理】
CentOS发布软件的时候,将新的软件放置在YUM服务器中,然后分析软件的依赖属性并记录成列表(会放在repodata这个目录下)。 把这些列表数据和软件(packages)本身所在的路径就称作容器。即:
容器=repodata+软件+其他数据
反正容器里面一定有软件和repodata这个目录(因为存放着软件的依赖属性)。
当要安装后升级软件的时候,主机会先从指定的YUM服务器的容器下载列表(下载到/var/cache/yum),通过列表与本机RPM数据库已存在的软件进行比较,然后就可以实现一键安装了。(下载好安装包后依然是用rpm来安装)
YUM语法
yum [option] [action]
option:
查询:
-y:自动相应yes
--installroot=/path/:将软件安装在指定路径
action:
search:搜索某个软件
list:列出YUM服务器中所有的软件名称与版本(类似rpm -qa)
info:列出详细信息(即如rpm -qai)
安装、升级删除:
install:后接要安装的软件名
update:接要升级的软件名(如果后面没有参数,即为整个系统升级)
remove:删除软件
软件组功能:
grouplist:列出所有可使用的软件组,如(Desktop、Development Tools)
groupinfo:查询组的详细信息
groupinstall:安装一组软件
groupremove:删除一组软件
清除:
clean packages:将已下载的软件包删除
clean headers:将已下载的依赖列表删除
clean all:将所有容器数据都删除
容器:
repolist all:列出目前YUM使用的所有容器
YUM配置文件
YUM很智能的,它会自动分析离你主机最近的镜像站点,然后使用它作为YUM源。但我们总有自己配置YUM源的时候。
我们先来看看YUM的配置文件。
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
adobe-linux-x86_64.repo CentOS-Debuginfo.repo CentOS-Vault.repo
CentOS-Base.repo CentOS-Media.repo
我们可以看到/etc/yum.repos.d/目录下有几个文件,这里的每个文件里都包含了一个或多个容器,存为多个文件只是为了方便标识罢了。如CentOS-Media.repo就是用来指定光盘作为YUM源的。
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
......(省略)
我们可以看到其中有多个容器,每一个都有几个重要的项目:
[base]:代表容器的名字,在一个系统里面容器名需独一无二。否则YUM会不知道使用哪个源。
name=:容器的comment
mirrorlist=:列出这个容器可以使用的镜像站点列表。因为可以在baseurl里直接指定镜像站点,所以这个可以不要。
baseurl=:这里直接指定容器的实际地址。(即该网址目录下要有repodata这个文件夹)
enabled=1:表示启用这个容器,0表示禁用。注释掉的话默认即为启用。
gpgcheck=1:开启rpm数字签名机制
gpgkey=:数字签名公钥路径
更换YUM源
YUM很智能的,它会自动分析离你主机最近的镜像站点,然后使用它作为YUM源。但我们总有自己配置YUM源的时候。
以鸟哥在书里举的例子来说好了,他给我们提供了一个台湾的镜像站:
http://free.nchc.org.tw/drbl-core/i386/RPMS.drbl-stable/
1、在/etc/yum/repos.d/下新建一个文件(必须以.repo结尾)
2、
[root@localhoat ~]# vim /etc/yum/repos.d/drbl.repo
[drbl]
name=Test site
baseurl=http://free.nchc.org.tw/drbl-core/i386/RPMS.drbl-stable/
enable=1
gpgcheck=0
3、用yum repolist all查看drbl的导入情况。
......(省略)
debug CentOS-6 - Debuginfo disabled
drbl Test site enabled: 22
extras CentOS-6 - Extras enabled: 62
updates CentOS-6 - Updates enabled: 289
repolist: 7,071
其中enable的表示该容器是启用的,后面跟的数字是该容器里拥有的软件个数。
使用光盘作为YUM源
我们也可以使用挂载光盘来作为YUM源,我们知道CentOS-Media.repo就是用来指定光盘作为YUM源的。只需要这样:
1、挂载光盘
2、/etc/yum.repo.d/文件下的所有文件(除CentOS-Media.repo)都更名为.bak。因为如果容器名不以.repo结尾,yum无法识别。(或者把其他文件里的enable=1都注释掉,但改个名字更方便~)
3、将CentOS-Media.repo中的enable=1注释掉即可