小兔网

由于 Linux 操作系统开放源代码,因此在其上安装的软件大部分也都是开源软件,例如 Apache、Tomcat 和 PHP 等。开源软件基本都提供源码下载,可采用源码安装的方式安装软件。

注意,本节使用的源码包,指的是软件所有源代码的压缩包,其后缀名为 ".tar.gz" 或 ".tar.bz2";而 SRPM 源码包本质上属于 RPM 包,也就是源码的RPM包,其文件后缀为 ".src.rpm"。虽然都叫源码包,但不是一码事。

软件的源代码,也就是软件的原始数据,任何人都可以通过源代码查看该软件的设计架构和实现方法,但软件源代码无法再计算机中直接运行安装,需要将源代码通过编译转换为计算机可以识别的机器语言,然后才可以安装。

Linux 系统中,绝大多数软件的源代码都是用 C 语言编写的,少部分用 C++(或其他语言)编写。因此要想安装源码包,必须安装 gcc 编译器(如果涉及 C++ 源码程序,还需要安装 gcc-c++)。

安装 gcc 之前,可先使用如下命令看看是否已经安装:

[root@localhost ~]# rpm -q gcc
gcc-4.4.6-4.el6.i686

如果未安装,考虑到安装 gcc 所依赖的软件包太多,推荐大家使用 yum 安装 gcc。具体安装方式可阅读《Linux yum命令》一节。

除了安装编译器,还需要安装 make 编译命令。要知道,编译源码包可不像编译一个 hello.c 文件那样轻松,包中含大量的源码文件,且文件之间有着非常复杂的关联,直接决定着各文件编译的先后顺序,因此手动编译费时费力,而使用 make 命令可以完成对源码包的自动编译。

同样,在安装 make 命令之前,可使用如下命令查看其是否已经安装:

[root@localhost yum. repos.d]# rpm -q make
make-3.81-20.el6.i686

如果未安装,可使用 yum -y install make 命令直接安装 make。

安装好了 gcc 编译器和 make 编译工具,接下来学习使用源码包安装软件。

Linux源码包安装软件

本节仍然以安装 apache 为例,安装过程分为如下几步:

  1. 下载 apache 源码包。该软件的源码包可通过官方网站 http://httpd.apache.org/download.cgi#apache24 下载,得到的源码包格式为压缩包( ".tar.gz" 或 ".tar.bz2" )。

    将各种文件分门别类保存在对应的目录中,应该成为合格 Linux 管理员约定俗成的习惯。Linux 系统中用于保存源代码的位置主要有 2 个,分别是 "/usr/src" 和 "/usr/local/src",其中 "/usr/src" 用来保存内核源代码,"/usr/local/src" 用来保存用户下载的源代码。
  2. 将源码包进行解压缩,使用命令如下:

    [root@localhost ~]#tar -zxvf httpd-2.2.9.tar.gz|more

  3. 进入解压目录,执行如下命令:

    [root@localhost ~]# ls
    anaconda-ks.cfg httpd-2.2.9 httpd-2.2.9.tar.gz install.log install.log.syslog
    [root@localhost ~]# cd httpd-2.2.9

  4. ./configure 软件配置与检查。这一步主要完成以下 3 项任务:
    • 检测系统环境是否符合安装要求。
    • 定义需要的功能选项。通过 "./configure--prefix=安装路径" 可以指定安装路径。注意,configure 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用 "./configure" 方式执行("./" 代表在当前目录下)。

      "./configure" 支持的功能选项较多,可执行 "./configure--help" 命令查询其支持的功能,例如:

      [root@localhost httpd-2.2.9]#./configure --help|more
      #查询apache支持的选项功能(不是必需步骤)

    • 把系统环境的检测结果和定义好的功能选项写入 Makefile 文件,因为后续的编译和安装需要依赖这个文件的内容。

    此步具体执行代码如下:

    [root@localhost httpd-2.2.9]# ./configure --prefix=/usr/local/apache2
    checking for chosen layout...Apache
    checking for working mkdir -p…yes
    checking build system type...i686-pc-linux-gnu
    checking host system type...i686-pc-linux-gnu
    checking target system typa...i686-pc-linux-gnu
    …省略部分输出…

    --prefix 选项的含义为指定安装目录。

    此命令没有加载其他功能,只是指定安装目录。需要说明的是,"/usr/local/apache2" 目录不需要手工建立,安装完成后会自动建立(这个目录是否生成也是检测软件是否正确安装的重要标志)。
  5. make 编译。make 会调用 gcc 编译器,并读取 Makefile 文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。

    执行的编译命令如下:

    [root@localhost httpd-2.2.9]# make

    编程过程较为耗时,需要有足够的耐心。
  6. 正式开始安装软件,这里通常会写清程序的安装位置,如果没有,则建议读者把安装的执行过程保存下来,以备将来删除软件时使用。安装指令如下:

    [root@localhost httpd-2.2.9]# make install

    整个过程不报错,即为安装成功。

    安装源码包过程中,如果出现“error”(或“warning”)且安装过程停止,表示安装失败;反之,如果仅出现警告信息,但安装过程还在继续,这并不是安装失败,顶多使软件部分功能无法使用。
     

注意,如果在 "./configure" 或 "make" 编译中报错,则在重新执行命令前一定要执行 make clean 命令,它会清空 Makefile 文件或编译产生的 ".o" 头文件。

Linux源码包卸载

通过源码包方式安装的各个软件,其安装文件独自保存在 /usr/local/ 目录下的各子目录中。例如,apache 所有的安装文件都保存在 /usr/local/apache2 目录下。这就为源码包的卸载提供了便利。

源码包的卸载,只需要找到软件的安装位置,直接删除所在目录即可,不会遗留任何垃圾文件。需要读者注意的是,在删除软件之前,应先将软件停止服务。

以删除 apache 为例,只需关闭 apache 服务后执行如下命令即可:

[root@localhost ~]# rm -rf /usr/local/apache2/