什么是源码安装?一开始接触到Linux时候感觉很疑惑,安装不就是跟Windows中安装软件一样,下一步-->更改安装位置-->下一步么,用什么源码安装?现在有了些初步的了解,写出来算是做个笔记,与大家分享学习成果吧。
每个程序开发过程中或因考虑不充分出现一些漏洞,或者有些程序模块是你用不到的, 是否只能程序开发者才能解决问题呢?在Linux中不是这样的,每个人可以根据自己的喜好、要求随意改动源代码,自行修改程序为你所用。这样的源码不必再有专门的安装包,可直接编译安装,这就是源码安装的基本思想。
什么是可执行文件?一个文件能不能执行看的是有没有执行权限,但是Linux真正能识别的是二进制文件。而软件编辑一般都是使用人能看懂的文本编辑工具所编辑的纯文本文件,如果想让Linux能识别这个纯文本文件的内容,就需要用一些手段将其转换成二进制文件,这个过程就称为编译。用如下图描述整个过程:
源码安装起始就是将纯文本文件通过调用外部的一些函数关系,编译成Linux能看的懂得二进制程序。
查看configure脚本内容
在源码包目录下使用./configure --help 命令查看该源代码包安装的配置说明。注意,不同的源代码选项是不相同的,需要逐一查看。
案例——C代码编译安装三个步骤:
第一步环境检查:编码安装需要提供开发工具,及开发环境:开发库,头文件吗,glibc:标准库……
a、开发工具:make (创建makefile) ,gcc (C编译器)是否均已安装
~]# yum installed make
~]# yum installed gcc 查看是否安装
b、CentOS6包组工具:“Development Tools”,“Server Platform Development ”,查看这两个包组是否安装。
[root@CentOS6-01httpd-2.2.29]#yum grouplist
此命令将分成了如下几个组:
Istalled Groups :已安装的包组
Istalled Language Groups :已安装的语言包组
Available Groups:可安装的包组
AvailableLanguage Groups:可安装的语言包组
我查找的两个包组均在 Available Groups 包组中,说明需要安装此两个包组。
[root@CentOS6-01httpd-2.2.29]#yum groupinstall "Development Tools" -y
[root@CentOS6-01httpd-2.2.29]#yum groupinstall "Server Platform Development" -y
获取安装源代码文件之后,首先查看里边的INSTALL 或者README 文件,了解安装详细信息。
第二步环境测试:./configure 测试内容包含第一步内容。
通常是软件的一个检测程序(configure),用来测试当前环境是否满足软件运行。测试完毕后通过选项传递参数、指定启用特性、安装路径、参考用户的指定内容以及Makefile.in生成一个Makefile的规则文件。检测的数据如下:是否有适合编译程序可以编译本软件的程序代码
是否已存在 本软件所需要的函数库或其他需要的相关证书
操作系统平台是否适合本软件,包括Linux的内核版本
内核的头文件是否存在
看文件中的 configure文件,并依据文件中的内容进行configure脚本配置。
进入到源码包目录,使用./configure --help命令。
configure脚本内容
选项:指定安装位置、指定启用特性
--prefix=/PATH/TO/SOMEWHERE: 指定默认目录安装,如果未指明则将会在默认路径下/usr/local/ 下边安装,生成lib,bin 等文件。
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE 依赖到的程序包
Optional Feature :可选特性
--disable-FEATURE 禁用此特性
--enable-FEATURE[ARG] 启用某特性
Some influential environment variables
此文件中说明了安装步骤,1、./configure --prefix-PREFIX 2、make 3、make install 4、PREFIX/bin/apachectl start。同时在安装前须查看此源码包中安装说明信息——INSTALL,不同的源代码包中的说明文件不一样,有的可能是README。
介绍完基础信息后,下面我们开始进行测试。执行如下命令:
[root@CentOS6-01httpd-2.2.29]#./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2
如果测试结果没有报错,就可以开始编译了。
第三步源码编译:使用make命令
程序编译并不是easy的事儿,如果将几万条的源码一一编译成二进制,其繁琐性可想而知。而我们可以使用make这个工具解决这个问题。当运行make时,make在当前目录下搜索Makefile这个文件,而Makefile中记录了源码如何编译的详细信息。make会自动判别源码是否经过变动更新执行文件,就是调用配置文件及各处理器进行处理的过程。
[root@CentOS6-01httpd-2.2.29]# make
在编译过程中可以看到使用gcc编译过程等信息
第四步拷贝文件:将编译完的文件拷贝到指定目录下,in目录中会生成库文件、头文件、帮助文件、二进制文件、模块文件等。
[root@CentOS6-01httpd-2.2.29]# make install
至此源码包已经编译安装完成,接下来试试安装的软件是否可用。在bin下的apachectl脚本能控制apache服务启动的。启动该程序后用netstat -ntl 查看80 端口被监控,则说明apache已经正常的运行了。别高兴太早,这还不算完。要想程序开机就能使用还得需要如下的步骤:
1、导出程序二进制文件至PATH环境变量中;在/etc/profile.d 中编辑一个apache2.sh文件,脚本内容将程序安装路径设定为环境变量,即:export PATH=/usr/local/apache2/bin。重新登录shell即可。
2、导出库文件路径,在/etc/ld.so.conf.d/中创建一个以程序名.conf 命名的文件,在其中添加新的库文件所在的目录(/usr/local/apache2)。
然后让系统重新 生成缓存即执行ldconfig -v 命令。
3、导出头文件,将安装程序头文件/usr/local/apache2/include 在/usr/include 中创建一个连接文件,可以将其中的每个文件都创建连接,也可以将整个目录创建连接。本次创建的整个目录连接。
[root@CentOS6-01man]# ln -sv /usr/local/apache2/include/ /usr/include/apache2
4、导出帮助文件:
编辑/etc/man.config,在其中添加"MANPATH /usr/local/apache2/man"自此完成了所有的配置工作。
如果在configure中将安装路径选择默认,上边的第2、3条可以省略了,因为默认会在安装在/usr/local中,其库文件、头文件都会在/usr 中。