Linux基础之软件源码包的安装(Tarball的安装)

软件源码包安装背景html

    接触过Linux的人都知道要在Linux上安装软件一般使用rpm或yum,这两种工具的出现确实大大减小咱们在Linux系统上安装软件的工做量,可是rpm及yum的安装的软件都是基于某种平台事先编译好的成品,这个成品中制做者考虑种种因素可能会对这个软件的功能进行必定程度的剪裁,也就是说现成的rpm包或yum包不是最全的软件包。而若是咱们想要添加这个软件的rpm或yum中未包含的功能该怎么办?为了解决这个问题,咱们就要使用软件源码包进行安装。
程序员




什么是软件源码包?apache

    Linux软件的源代码分发是指提供了该软件全部程序源代码的发布形式,须要用户本身编译成可执行的二进制码并进行安装。其优势是配置灵活,能够随意去掉或保留某些功能/模vim

块,适应多种硬件/操做系统平台及编译环境缺点是难度较大,通常不适合初学者使用缓存


源码包格式有两种:bash

1.*.src.rpm形式的源代码软件包less

2.*.tar.gz/*.xz/*.bz2形式的源代码软件包ide




软件源码包的安装函数

1.*.src.rpm形式的源代码软件包工具

    (该类型因为仍是以rpm功能实现的软件安装,这里只是简单介绍下其方法,具体如何实验就再也不演示。

    假设此*.src.rpm文件在/usr/local/src下,在该目录下执行rpmbuild --rebuild  *.src.rpm,若命令顺利执行则会在/usr/src/dist/RPMS下出现*.rpm

大体过程以下:

安装

  rpm -rebuild *.src.rpm会自动根据所在平台转换成相应的平台rpm包


  cd /usr/src/dist/RPMS


  rpm -ivh *.rpm

卸载

  rpm -e packagename


2.*.tar.gz/*.xz/*.bz2形式的源代码软件包

    以tar.gz或tgz或tar.bz2等格式结尾的软件包通常都是以源代码方式发布的软件,安装这类软件首先须要对软件进行解压:


  # tar -zxvf filename.tar.gz


  # tar -Jxvf filename.tar.xz


  # tar -jxvf filename.tar.bz2


  解压之后,就能够进入解压后的目录:


  # cd filename/


  对于这类文档,常见的安装步骤是:配置、编译和安装3步,其中最麻烦的就是配置,由于全部和软件安装相关的配置都是在这一步指定的:好比软件安装位置等。


  配置./configure


  编译make


  安装make install


  卸载make uninstall 或手动删除


  说明:建议解压后先阅读说明文件(ReadMe和Install),了解安装的需求,有必要时还需改动编译配置。有些软件包的源代码在编译安装后能够用make uninstall命令来进行卸载,若是不提供此功能,则软件的卸载必须手动进行。因为软件可能将文件分散地安装在系统的多个目录中,每每很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路径:./configure --prefix=目录名,这样可使用“rm -rf 软件目录名”命令来进行干净完全的卸载。




Tarball形式的源代码软件包安装实验详解


该实验以httpd-2.2.29.tar.bz2为例进行实验

实验环境CentOS 7.2

实验准备

一、确认httpd-2.2.29.tar.bz2已下载,一般会把源码包保存在/usr/local/src路径下

二、确认make工具存在,rpm -q make检查便可,若不存在安装之。

三、为确保编译环境没有问题,咱们最好使用yum groupinstall "Development Tools"将开发环境部署好,新手建议安装Development Tools,不过事实上该包的安装只须要gcc这个组件系统中存在便可,所以也能够只进行yum install gcc。至于yum仓库如何设置本文在此不介绍。

wKiom1e-ovKwfoBmAAAckf9DEXI841.gif

……………………………………………………………………………………………………………………

实验步骤

一、解压httpd-2.2.29.tar.bz2,查看源文件夹的文件及其个数

wKioL1e-o7HQQ3mbAABCxzion4Y424.gif

刚加压过的httpd-2.2.29有40个文件。


二、咱们先看看INSTALL、README文件

[root@localhost httpd-2.2.29]# cat INSTALL | less


wKiom1e-pKfxiyxhAABDh3a9K88085.gif

该文件主要介绍此源码包的安装步骤

[root@localhost httpd-2.2.29]# cat README | less


wKioL1e-pQahONsgAABEG28bAIg262.gif

该文件主要介绍个这个软件,是什么,做用,功能等信息。


三、./configure --help查看配置的使用帮助信息

这里面的信息涉及软件安装位置,配置文件存放位置等等。根据须要进行选择,这里面比INSTALL安装文件要全。

wKioL1e-pnHSRnw1AABSp_QGL7I394.gif


四、设置软件安装路径/usr/local/apache2配置文件路径/etc/apache2,由于是实验这里就再也不指定其余额外设置。现实工做中根据实际状况进行选择。

[root@localhost httpd-2.2.29]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/apache2


等待几分钟,环境检测结束。

wKiom1e-qCujIz-aAAA-r8ijuck674.gif

首先咱们echo $?能够知道第一步的命令成功执行,在命令成功执行后,源文件多了5个文件分别为:config.logconfig.niceconfig.statusMakefilemodules.c

.c结尾的为原始码config.log是在检测过程当中产生的日志,config.niceconfig.status均为检测后产生的成功及状态信息。

其中Makefile对于下一步的编译相当重要,它里面包含了编译工做的预设行为,(好比程序之间的连接顺序,哪一个先执行哪一个后执行)make的编译过程就是按照Makefile文件进行的

wKioL1e-qs6jGVRYAABRL-fJpNM258.gif

以上为截取的Makefile文件的部份内容。


五、编译,以 make 这个程序并使用该目录下的 Makefile 作为他的参数配置文件,来进行 make (编译或其余)的动做。

直接键入make命令便可,等待几分钟直至编译结束。

wKioL1e-xAeRL2fuAAA-rAOMbCU843.gif

这步进行结束后,又多了4个文件modules.lo、modules.o、httpd、buildmark.o

.lo或.o结束的文件是源码经gcc编译后产生的目标文件

httpd这个文件的做用是为产生httpd的连接库的暂时性脚本,其英文解释以下图。

wKiom1e-sMSiHkZpAABU6KbbLu0711.gif


六、make install 这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关亍 install 的项目,将上一个步骤所编译完成的数据给他安装到预约的目录中。


安装到这里源码包安装已经结束,只不过如今还有些问题:1)咱们没法man apachectl这个命令2)apachectl这个命令无法使用tab补全。怎么办?

看来咱们虽然安装了,可是作的还不够完善


下面咱们来解决上面的两个问题。

安装后的配置

先按咱们指定的安装路径找到已安装的软件

wKiom1e-sp-AfxRpAAASlsM7aMQ452.gif

要解决man问题,咱们须要将该软件中的man目录及其所在路径加入/etc/man_db.conf文件。

一、man apachectl问题

编辑/etc/man_db.conf,并将软件man目录的路径加入该文件

wKiom1e-s1_jP7OTAABZSn3CsLc035.gif

以后咱们须要重读/etc/man_db.conf文件

source /etc/man_db.conf便可

以后man apachectl成功显示其帮助文档。


二、解决tab补全命令问题

编辑文件/etc/profile.d/NAME.sh

在此文件中添加以下内容export PATH=$PATH:/PATH/TO/BIN/

wKioL1e-tIqBLQIOAAARF7dhYQg989.gif

以后重读此文件便可解决tab补全命令问题。


看样子,咱们的安装到此已经圆满结束,不过还有一点的小缺憾,不过对于如今这种实验环境确实可有可无,若是是在实际工做中,咱们还要考虑库文件,及头文件问题。由于实际工做中这个服务并非以个体出现的而是与不少服务协同工做,所以免不了会涉及开发问题,及函数库读取效能问题。


有关开发的配置

如何提高函数库读取效能?

将经常使用的动态函数库先加载至内存当中能够解决函数库读取效能问题,不过如何将其加载到内存中?这两步就涉及到ldconfig命令及/etc/ld.so.conf.d/目录

编辑/etc/ld.so.conf.d/NAME.conf,将须要模块的库文件所在目录添加至此文件中,以后让系统从新生成缓存,使用ldconfig命令便可。

[root@localhost ld.so.conf.d]# vim apache2.conf 
[root@localhost ld.so.conf.d]# ldconfig 
[root@localhost ld.so.conf.d]# cat apache2.conf 
/usr/local/apache2/lib

对于开发人员他们会用到各类各样的头文件,系统为了方便期间会将头文件统一到一个目录便于程序员调用,这个目录通常为/usr/include

因此为了从此开发方便,咱们还会将软件的头文件夹给映射至该目录

[root@localhost ld.so.conf.d]# ln -sv /usr/local/apache2/include/ /usr/include/
"/usr/include/include" -> "/usr/local/apache2/include/"

wKiom1e-uWfSnUorAAAoxjYp9RM292.gif

源码包的安装至此已经结束,整个安装过程,其实只要前期准备完善,制定好相应的安装策略,好比安装路径,配置文件路径等问题,整个安装过程其实挺简单。




本文查找资料

http://baike.so.com/doc/5725732-5938469.html gcc的相关资料

http://www.cnblogs.com/einyboy/archive/2012/09/13/2683015.html  rpm源码包相关资料