Linux 编译安装源代码包

来源:互联网 发布:杭州远方光电知乎 编辑:程序博客网 时间:2024/05/16 01:22

在Linux系统管理中,通过本地编译源代码的方式安装软件包,是普遍采用的一种方式。

优点

这种方式以灵活定制著称,主要具备以下优点:

  • 定制软件包版本

在一些情况下,我们对软件包的版本有定制化的要求:

  1. 安装最新版本的软件包以使用其新特性
  2. 安装特定版本的软件包以满足特殊开发需要
  3. 安装过时版本的软件包以使用较老的开发管理工具

虽然像apt-get/yum这样基于deb/rpm的软件包管理器也提供定制软件包版本等功能,但由于deb/rpm中收录的软件包版本有限(最新/过旧的没有),直接通过编译源代码来安装特定版本的软件包仍是不可替代的。

  • 安装软件库中没有的软件

deb/rpm软件库中的软件并不是一应俱全的,要安装软件库中没有的软件只能通过编译源代码的方式进行。这种软件一般是小众的开源软件、待发行的开源社区工具、处于开发测试阶段的软件等。

  • 完美匹配本地环境

谁也无法保证异地编译的软件能在本地环境完美运行,在发行版林立、定制性极强的Linux世界里更是如此。因此,最稳妥的办法就是本地编译,本地编译至少能够保证软件包运行所依赖的环境完整,从而最大程度地减少软件运行不正常情况的发生。

  • 多版本并存

Linux中,软件包多版本并存是支持且不可避免的。
以python为例,vim等工具需要依赖较旧的python版本,此时,若舍弃旧版本盲目提升python版本,就会导致vim等工具无法正常使用。
在这种情况下,安装多个版本的python是一个很好的选择。(对于python而言,更好的选择应该是virtualenv)

  • 脱机安装

出于安全等因素考虑,企业网络一般会限制对外网的访问,在这种网络环境下,本地编译源代码进行脱机安装是迫不得已的选择。

缺点

  • 复杂

毋庸置疑,这种方式操作较为复杂,需要较多的Linux系统管理知识。

  • 依赖性关系

Linux中,软件包的依赖关系特别复杂,安装某一软件包往往意味着一系列依赖性软件包的安装。
apt-get/rpm会自行分析处理软件包依赖关系,从而简化安装过程。
本地编译安装源代码包就需要自己处理这些依赖关系了,事无巨细,亲力亲为。

一般步骤

1.下载待安装源代码软件包

 wget url

2.解压缩

 tar -jxvf xx.tar.bz2 tar -zxvf xx.tar.gz

3.进入解压缩后目录

 cd xx

4.编译环境检查与软件安装配置

./configure

检查编译环境和软件包依赖关系,同时配置软件安装选项。

--prefix=软件要安装的路径

指定软件安装路径,默认路径为/usr/local。

5.编译源代码

 make

编译源代码,生成目标文件,依赖gcc即其他编译环境。

6.安装到本机

 make install

注意事项

  • 安装说明高于一切

编译源代码包本身就是一种定制性很强的操作,具体的安装步骤直接与软件包相关。
标准的发行版软件源代码包内都会有安装说明文件,README/INSTALL。
该文件内一般会写明软件安装配置的具体步骤,以及软件依赖关系。该文件在安装过程中具有绝对地位,高于任何教程。所谓教程,包括我博客中的那些,不过是结合实践,对README/INSTALL文件做的简化和归纳。

  • 善用echo $?

echo $? 用于检查上一条命令的退出状态,正常退出返回值为0。
编译安装的过程很复杂,不便直接看出执行结果,在每个步骤执行完毕后用echo $?是最为经济的办法。

  • 提前处理软件包依赖

软件包依赖关系需要在安装前处理完毕,即先安装依赖性软件包再安装目标软件。
软件包依赖一般没有补救的机会。

  • 多版本并存

编译安装软件包之前,推荐检查Linux是否已经安装有该软件包的其他版本。

rpm -qa

列出所有安装的rpm package,通过其他方式安装的软件包不在范围内。

which xx

查找xx命令的位置,软件包一般会提供配套的命令,通过查找这些命令也可以判断软件包是否已存在。

thanks

0 0
原创粉丝点击