从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安装包。 运行 下面的命令就可以了。
1 | rpm -ivh google-chrome-33.xxxx.rpm |
几个参数的意义:
-i: install 安装
-v: verbose 显示详细信息
-h: hash 显示安装进度
需要说明的是: 采用rpm来安装软件有不少情况下会出现“软件依赖“的问题, 也就是说在安装软件A的过程中,可能会提示需要某个软件或库文件B,等你安装B的时候,可能又会提示缺少C。出现这种情况会比较痛苦,只能依次安装了。有时候依赖关系太多的话,只能放弃。
说到这里,我们再介绍RPM几个常见的命令和用法。 升级某个软件:
1 | rpm -Uvh abc.xxx.rpm //abc这个软件的新版本会覆盖原来的版本,如果原来没有安装,直接安装 |
查询某个软件是否安装
1 | rpm -q httpd //查询是否安装了apache服务 |
2 | rpm -qa | grep pam //查询是否安装了包含pam这个名字的软件 |
3 | rpm -qi httpd //列出目前安装的apache服务的详细信息 |
4 | rpm -qR httpd //列出apache的软件依赖关系 |
卸载软件
1 | rpm -e httpd //卸载apache |
虽然用RPM包来安装软件免去了编译源代码的麻烦,但软件之间的属性依赖问题并没有解决,有的时候,为了安装某个软件,你不得不先要安装N个其他的软件才行。
YUM
为了解决软件依赖的问题,已经为了给用户提供一种更加方便简单的软件安装方法, YUM被开发出来了。 YUM 是Yellowdog Updater Modified 的缩写. YUM 是建立在RPM的基础之上的, 为用户提供软件安装,升级,卸载的功能。YUM最大的好处是解决了软件依赖的问题。YUM 把很多软件的RPM包放在RPM 容器(repository)中, 用YUM 方式来安装软件的时候,会自动分析你要安装的软件的依赖关系,并会自动帮你安装必须的“依赖软件”, 这样就解决了最为困扰用户的软件依赖的问题。
我们先来看一下YUM的基本用法: 查询功能:
1 | yum list/search /info xxx |
3 | 例如:yum list httpd //检查apache是否已经安装 |
5 | yum info httpd //查看apache的详细信息, 类似 rpm -qi httpd |
7 | yum search httpd //查询和 apache (httpd)相关的软件 |
安装升级:
卸载软件
我们再来介绍一下YUM容器(repository)的概念。YUM容器类似一个软件仓库的概念,不但有各个软件的RPM安装包,还记录了他们之间的依赖关系。
我们这里以CentOS的例子来进一步说明 YUM repositories的概念和设置。 进入/etc/yum.repos.d目录中,你可以看到有形如CentOS-Base.repo等若干个repository的文件。 vim /etc/yum.repos.d/CentOS-Base.repo 内容大致如下
2 | name=CentOS-$releasever - Base #名字,Human readable name , |
3 | mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os |
4 | #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ |
6 | gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
10 | name=CentOS-$releasever - Updates |
11 | mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates |
12 | #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ |
14 | gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
16 | #additional packages that may be useful |
18 | name=CentOS-$releasever - Extras |
19 | mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras |
20 | #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ |
22 | gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
24 | #additional packages that extend functionality of existing packages |
27 | name=CentOS-$releasever - Plus |
28 | mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus |
29 | #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ |
32 | gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
34 | #contrib - packages by Centos Users |
36 | name=CentOS-$releasever - Contrib |
37 | mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib |
38 | #baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/ |
41 | 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安装的知识。
2 | wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm |
3 | rpm -Uvh epel-release-6-8.noarch.rpm |
6 | wget http://epel.mirror.net.in/epel/5/i386/epel-release-5-4.noarch.rpm |
7 | rpm -Uvh epel-release-5-4.noarch.rpm |
安装完毕后,可以运行 yum repolist来看看epel是否已经启动了。