从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安装软件有下面三种方法:
- 使用YUM 来在线安装软件,基本和 “软件商店”的概念类似, 只需要在yum的容器中找到相应的软件(rpm包),然后直接安装(或升级)就OK了,过程比较简单。
- 下载相应的RPM软件包,然后用RPM命令安装。
- 下载软件的源码的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安装包。 运行 下面的命令就可以了。
[code]
rpm -ivh google-chrome-33.xxxx.rpm
[/code]
几个参数的意义:
-i: install 安装
-v: verbose 显示详细信息
-h: hash 显示安装进度
需要说明的是: 采用rpm来安装软件有不少情况下会出现“软件依赖“的问题, 也就是说在安装软件A的过程中,可能会提示需要某个软件或库文件B,等你安装B的时候,可能又会提示缺少C。出现这种情况会比较痛苦,只能依次安装了。有时候依赖关系太多的话,只能放弃。
说到这里,我们再介绍RPM几个常见的命令和用法。 升级某个软件:
[code]
rpm -Uvh abc.xxx.rpm //abc这个软件的新版本会覆盖原来的版本,如果原来没有安装,直接安装
[/code]
查询某个软件是否安装
[code]
rpm -q httpd //查询是否安装了apache服务
rpm -qa | grep pam //查询是否安装了包含pam这个名字的软件
rpm -qi httpd //列出目前安装的apache服务的详细信息
rpm -qR httpd //列出apache的软件依赖关系
[/code]
卸载软件
[code]
rpm -e httpd //卸载apache
[/code]
虽然用RPM包来安装软件免去了编译源代码的麻烦,但软件之间的属性依赖问题并没有解决,有的时候,为了安装某个软件,你不得不先要安装N个其他的软件才行。
YUM
为了解决软件依赖的问题,已经为了给用户提供一种更加方便简单的软件安装方法, YUM被开发出来了。 YUM 是Yellowdog Updater Modified 的缩写. YUM 是建立在RPM的基础之上的, 为用户提供软件安装,升级,卸载的功能。YUM最大的好处是解决了软件依赖的问题。YUM 把很多软件的RPM包放在RPM 容器(repository)中, 用YUM 方式来安装软件的时候,会自动分析你要安装的软件的依赖关系,并会自动帮你安装必须的“依赖软件”, 这样就解决了最为困扰用户的软件依赖的问题。
我们先来看一下YUM的基本用法: 查询功能:
[code]
yum list/search /info xxx
例如:yum list httpd //检查apache是否已经安装
yum info httpd //查看apache的详细信息, 类似 rpm -qi httpd
yum search httpd //查询和 apache (httpd)相关的软件
[/code]
安装升级:
[code]
yum install httpd
yum update httpd
[/code]
卸载软件
[code]
yum remove httpd
[/code]
我们再来介绍一下YUM容器(repository)的概念。YUM容器类似一个软件仓库的概念,不但有各个软件的RPM安装包,还记录了他们之间的依赖关系。
我们这里以CentOS的例子来进一步说明 YUM repositories的概念和设置。 进入/etc/yum.repos.d目录中,你可以看到有形如CentOS-Base.repo等若干个repository的文件。 vim /etc/yum.repos.d/CentOS-Base.repo 内容大致如下
[code]
[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
[/code]
这里具体说明一下, 这个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安装的知识。
[code]
#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
[/code]
安装完毕后,可以运行 yum repolist来看看epel是否已经启动了。