一、使用场景
很多时候下载的rpm包所提供的功能并不符合我们的需要,或者只需要使用其中一部分功能的时候,就需要进行源码安装。源码安装前,首先使用 yum grouplist 确认 Development tools 和 Server Platform Development这两个组已经被安装。
二、相关知识详解
1.make工具
所有的程序都需要gcc编译后才能执行,项目的开发者为了简化使用者的编译步骤,当时用make工具后,make会调用gcc对程序进行编译,所以说make是一种项目编译工具,而编译本身需要开发环境,所以就能解释为什么必须存在Development tools 和 Server Platform Development这两个组,同时编译过程还需要能够调用相关程序的头文件和库文件,库文件的表现形式为xxxx-devl.rpm。
2.Makefile文件的产生过程
打开源码包我们会看到一个可执行文件configure,同时包内还有Makefile.in文件,通过他们可以产生Makefile文件,下面就这个过程做详细描述。
(1)生成configure脚本
项目的制作者会使用一个autoconf的开发工具,使用这个开发工具对项目中的每一个原代码执行后会生成一个configure脚本,使用该脚本来检查编译环境是否满足需求、定义编译时启用哪些功能和安装路径等。
(2)生成Makefile.in文件
Makefile.in文件则是通过automake工具生成的,结合configure脚本生成Makefile文件。
(3)生成Makefile文件
当执行configure脚本后,configure脚本会根据Makefile.in文件产生Makefile文件,而定义编译时启用哪些功能和安装路径等也会保存在该文件中,该文件也是使用make命令时的配置文件。
三、安装步骤
我们以安装httpd-2.2.31为例,进行说明。详细的步骤为:
1.下载源码包后使用 tar -xf httpd-2.2.31.tar.gz 解压
2.使用less INSTALL 查看安装步骤(每个程序的说明文件不一样,有的是READ,有的是INSTALL)
3.使用 ./configure --help 查看configure脚本使用帮助,根据情况删减功能,此处以自定义安装和配置文件位置为例,使用./configure --prefix=/usr/local/apache --sysconfdir=/etc/apache 检查环境并生成Makefile文件
4.待检查完确认没有报错后,输入make安装,此时的make会调用gcc进行编译
5.然后使用 make install 命令安装,等待安装结束
6.在/usr/local/apache/bin路径下,使用 apachectl start 启动服务
7.使用 netstat -nlt 查看80端口是否已侦听
8.打开浏览器,输入服务器地址看到显示It works!配置完成
四、后续步骤
安装完源码包服务正常启动后工作并没有结束,我们知道一个程序大体上可以分为:二进制程序、头文件、库文件、man帮助手册四部分组成,而我们在安装时自定义的路径系统未必能自动识别,所以就需要做输出重定向。
1.二进制程序
使用 vim /etc/profile.d/apache.sh 将/usr/local/apache/bin,/usr/local/apache/sbin,添加进默认路径并对子进程生效
然后重启服务器或者使用 source /etc/profile.d/apache.sh 重读配置文件,确认/usr/local/apache/bin,/usr/local/apache/sbin已经成功添加到PATH变量中
2.头文件输出
至于为什么要输出头文件,因为在对该程序做二次开发时,需要进行调用,此时的调用不同于运行时调用程序的二进制代码(ABI),开发时的调用则是调用该程序头文件的包含,而头文件中包括了函数的入口及指针的类型等信息(API)。
使用 ln -sv /usr/local/apache/include /usr/include/apache 创建一个软连接将apache的头文件跳转至/usr/local/apache/include
3.库文件数出
vim /etc/ld.so.conf.d/apache.conf,创建一个apache.comf文件 ,/usr/local/apache/lib 把库文件路径写进去,如果有多个库,一行一个
而后使用 ldconfig -v 查看库文件路径是否正确识别
4.man文档输出
使用 vim /etc/man.config 在MANPATH路径下添加apache的man文件路径,至此,操作全部完成
本文转自 qiao645 51CTO博客,原文链接:http://blog.51cto.com/arkling/1787062