Redhat/CentOS 软件安装之RPM和YUM

By | 2014/05/15

从Windows 转到 Linux的同学,一个比较烦恼的事情就是如何安装软件的问题,在Windows环境中,下载安装程序,双击,下一步,下一步。。。done!基本闭着眼就能完成。  而在Linux下,有时候即使你到了官方下载页面,上面往往也罗列了各种各样的下载链接,比如 Ubuntu RPM包,  Redhat RPM包,  源码文件 (还可能分32bit, 64bit),  Git/SVN源码地址, SRPM包等。 新手往往面对这些选项往往不知所措。 我们就在这里整理一下在Linux (尤其实在Redhat系列产品)上安装软件的方法。

首先要明确的是:

1)不同的软件的安装方法是并不相同的。有的软件只能通过特定的方法来安装。

2) 在不同的Linux发行版本上安装同一个软件的方法也未必相同, 因此有的时候,你在网上找到的在Ubuntu上安装某个软件的方法,也许在CentOS上并不能成功。

为了简化问题,我们这里只讨论Redhat/CentOS/Fedora/SuSE这一系列的软件安装问题 – Debian/Ubuntu的软件安装具体的命令虽略有不同,但原理是一样的。 基本上, Redhat/CentOS安装软件有下面三种方法:

  1. 使用YUM 来在线安装软件,基本和 “软件商店”的概念类似, 只需要在yum的容器中找到相应的软件(rpm包),然后直接安装(或升级)就OK了,过程比较简单。
  2. 下载相应的RPM软件包,然后用RPM命令安装。
  3. 下载软件的源码的Tarball, 在自己的机器上编译和安装。这种方法相对来说比较麻烦。

由于1,2两种方式都是通过编译好的rpm包来安装,我们在这篇文章中一起介绍一下, 编译源码的方式在 Redhat/CentOS安装软件(2) – 源码编译中介绍。 我们这里先来介绍一下RPM ,然后再引出YUM.

RPM

RPM是 Redhat Package Manager的缩写,是Linux上的一种软件打包和管理的工具。 因为Linux的不同发行版(distribution),甚至同一发行版的不同版本之间往往有很多的不同, 开发者在某个Linux发行版下开发和编译的程序,直接放到另外一个Linux下有非常大的可能性无法运行。 因此早期的Linux的软件都是通过源码来分发,使用者基本都是通过在自己的Linux平台上重新编译源代码来安装软件。  但是这种编译源代码的方式比较繁琐和复杂,普通用户往往也难以掌握。后来 Redhat推出了RPM这个软件打包的方式。就是在特定的Linux平台上把软件编译好,然后把与这个软件相关的文件和库打包成一个文件(RPM包), 但需要注意的是: 通常不同的distribution所发布的RPM包往往不能用于其他的Linux的distributions上面。 例如,针对Redhat的RPM包往往无法直接在OpenSUSE上进行安装。因此,在使用RPM方式进行安装的时候,必须选择和你使用的平台一致的RPM安装包。

我们这里举个在Fedora上安装Google Chrome浏览器的例子来说明一下如何用RPM包来安装软件: 首先到Google chrome的官方网站上下载Chrome Browser的rpm安装包。 运行 下面的命令就可以了。


rpm -ivh google-chrome-33.xxxx.rpm

几个参数的意义:

-i: install 安装

-v: verbose 显示详细信息

-h: hash 显示安装进度

需要说明的是: 采用rpm来安装软件有不少情况下会出现“软件依赖“的问题, 也就是说在安装软件A的过程中,可能会提示需要某个软件或库文件B,等你安装B的时候,可能又会提示缺少C。出现这种情况会比较痛苦,只能依次安装了。有时候依赖关系太多的话,只能放弃。

说到这里,我们再介绍RPM几个常见的命令和用法。 升级某个软件:


rpm -Uvh   abc.xxx.rpm             //abc这个软件的新版本会覆盖原来的版本,如果原来没有安装,直接安装

查询某个软件是否安装

rpm -q httpd                    //查询是否安装了apache服务
rpm -qa | grep pam              //查询是否安装了包含pam这个名字的软件
rpm -qi httpd                   //列出目前安装的apache服务的详细信息
rpm -qR httpd                   //列出apache的软件依赖关系

卸载软件

rpm -e httpd   //卸载apache

虽然用RPM包来安装软件免去了编译源代码的麻烦,但软件之间的属性依赖问题并没有解决,有的时候,为了安装某个软件,你不得不先要安装N个其他的软件才行。

YUM

为了解决软件依赖的问题,已经为了给用户提供一种更加方便简单的软件安装方法, YUM被开发出来了。 YUM 是Yellowdog Updater Modified 的缩写. YUM 是建立在RPM的基础之上的, 为用户提供软件安装,升级,卸载的功能。YUM最大的好处是解决了软件依赖的问题。YUM 把很多软件的RPM包放在RPM 容器(repository)中, 用YUM 方式来安装软件的时候,会自动分析你要安装的软件的依赖关系,并会自动帮你安装必须的“依赖软件”, 这样就解决了最为困扰用户的软件依赖的问题。

我们先来看一下YUM的基本用法: 查询功能:


yum list/search /info   xxx

例如:yum list httpd   //检查apache是否已经安装

yum info httpd  //查看apache的详细信息, 类似 rpm -qi httpd

yum search httpd  //查询和 apache (httpd)相关的软件

安装升级:


yum install httpd

yum update httpd

卸载软件


yum remove httpd

我们再来介绍一下YUM容器(repository)的概念。YUM容器类似一个软件仓库的概念,不但有各个软件的RPM安装包,还记录了他们之间的依赖关系。

我们这里以CentOS的例子来进一步说明 YUM repositories的概念和设置。 进入/etc/yum.repos.d目录中,你可以看到有形如CentOS-Base.repo等若干个repository的文件。 vim  /etc/yum.repos.d/CentOS-Base.repo 内容大致如下


[base]                           #repository ID
name=CentOS-$releasever - Base               #名字,Human readable name ,
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
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/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages

[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

这里具体说明一下, 这个repo文件中实际上包含了多个repository, 其中

[base] [updates]等是 Repository ID,用来标识特定的容器(repository),

name是对这个Repository的说明,仅供我们阅读用

mirrorlist 和baseurl都是用来指明repository的地址,不同的是,采用mirrorlist这种方式,会帮你自动选择一个离你最近的镜像作为你的repository的地址,而baseurl是指定唯一的固定地址。建议使用mirrorlist.

gpgcheck 和gpgkey是用来指定RPM的数字签名证书的,是安全方面的概念,一般不要修改了。

enable = 0/1 是否使用该repository,缺省为1.

这里需要格外提到的一个repository是EPEL (Extra Packages for Enterpriese Linux), 缺省情况下,这个repository有可能是没有安装的,而实际上很多非常有用的软件都位于EPEL这个repository中,因此我还是建议你启用这个repository.

那如何启用epel这个repository呢,当然是在repo文件中增加相关的设置就OK 了。但手动写repo文件实在比较费劲,要查阅各个地址和参数。 还好, epel这个repository可以通过RPM的方式来安装,就省去了你手动写repo文件的麻烦了。现在可以回顾一下本文中关于rpm安装的知识。

#for CentOS 6
wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm

#for CentOS 5
wget http://epel.mirror.net.in/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.noarch.rpm

安装完毕后,可以运行 yum repolist来看看epel是否已经启动了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.