相信广大从事运维工作的小伙伴对编译安装都不陌生,这里我简要演示一下编译安装的基本步奏。
在生产环境中,我们往往需要从网上或其他源码包提供点下载所需要的源码包,而这些源码包我们是无法直接安装的,这时我们就需要先把源代码编译成二进制程序包,然后再执行安装。
源码编译安装程序,首先需要依赖环境的支持,既编译开发工具、以及各个被依赖到的程序包的开发组件,另外还需要通过定制的编译参数来进行编译安装。
常见的编译开发工具(包组)有:
Development tools
Server Platform Development
Desktop Platform Development
Debug Tools
被依赖的程序包的开发组件:
编译安装被依赖的程序
安装相关程序的名称中包含devel的子包
源代码程序中会将程序分隔保存在多个文件中,文件间或许存在依赖关系,因此,编译时可能需要按特定次序进行编译;此时,一般会使用项目管理工具(通常也称为构建工具GNU make)对其进行管理;构建工具会调用合适的编译器,并根据配置文件(makefile)中定义的次序对源代码文件进行编译。
需要注意的是:
每个项目的程序员开发完成某版本之后,会使用autoconf为程序代码生成一个脚本文件:configure;其功用为:此脚本会收集当前系统上的开发环境中所依赖各组件的版本、特性等,并检查所依赖的环境是否能满足,最后根据Makefile.in文件生成一个makefile文件。
每个项目的程序员开发完成某版本之后,会使用autoconf为程序代码生成一个makefile模板文件,既Makefile.in。
编译人员的编译安装过程如下:
运行configure脚本:
configure脚本的应用;
--help:查看帮助信息
--prefix:指定默认安装路径,如--prefix=/usr/local/nginx
--sysconfdir:指定配置文件安装路径
--with-CAPABILITY:依赖的程序包
--without-CAPABILETY:
--enable-FEATURE:启用某个特性
--disable-FEATURE:禁用某个特性
2.运行make命令,完成项目构建;
3.运行make install命令,完成安装;
注意:前两步只需要普通用户权限,建议使用普通用户身份进行;最后一步根据安装路径的指定,可能会用到管理员权限。
以上是编译安装的大概过程,接下来给大家讲一下程序的运行环境
程序安装之后想要被运行起来,就必须为其中的二进制文件指定环境变量,否则只能通过绝对路径进行执行,每次这样都要输入很长的一部分路径,当然也可以通过命令别名来操作,但比较两者起来,环境变量还是比较简洁实用的。在系统之上我们通过$PATH环境变量来指定系统中的二进制程序的路径信息,自己编译的程序文件安装路径可能不在这些路径下,因此就需要编译PATH环境变量,加入这些程序文件所在目录;即将export PATH=export_path:$PATH保存于/etc/profile.d/*.sh文件中。
除了这些二进制文件之外,还有一些库文件信息,因为大多数应用程序都依赖于标准库某些共享文件,甚至于某些应用提供的特定的文件库;Linux系统会在特定的路径下为应用查找所依赖的库文件:/lib64,/lib,/usr/lib64,/usr/lib,自己编译安装的程序提供的库文件有可能不在系统搜索路径中,解决办法:
编辑/etc/ld.so.conf.d/*.conf文件,添加新库文件搜索路径至此文件中,每行一个;
执行ldconfig命令,重新生成库映射缓存ld.so.conf
ldconifg 命令:用于生成/etc/ld.so.cache
常见选项有:
-p:打印当前系统ld.so.cache中已经缓存的所有库文件目录及库文件映射列表;
-v:显示命令执行过程的详细信息;
除了二进制文件、库文件外还有一些头文件信息,头文件信息的解决方案有两种方法,如下:
复制所有新生成的头文件至/usr/include目录中
创建链接(以Apache为例)
ln -sv /usr/local/apache/include /usr/include/http
ln -sv /usr/local/apache/include/* /usr/include/
最后还有一些man手册文件,我们可以通过修改man的配置文件/etc/man.config,使用MANPATH指令指向的路径,来让其识别新的帮助信息
说了这么多,下面我们以httpd-2.2.29为例,执行编译安装
首先我们需要将下载到的http-2.2.29.tar.bz2压缩文件解压缩,得到http-2.2.29文件
进入http-2.2.29目录中,首先查看INSTALL文件,这里会给我们提供快速安装指南
然后我们需要查看README文件,这里给我们提供了程序的介绍
然后在执行configure之前,我们先使用./configure --help 命令来查看帮助
而后执行./configuer --prefix=/usr/local/http2 --sysconfdir-/etc/http2
执行完后查看执行make
然后执行make install命令
安装完成后cd 到之前我们指定的安装目录下/usr/local,查看是否有Apachectl文件
接下来我们使用netstat -atn命令查看启动的网络
发现没有HTTP的80端口号,接下来我们执行./apachectl start命令,启用服务,然后再次使用netstat -tan命令,发现服务已经启动
接下来我们就可以使用浏览器访问了,首先我们使用yum install links安装links浏览器
顺便提醒一下,如果本机的防火墙开启时是无法访问的,我们可以使用iptables -vnL查看防火墙相关信息,然后使用iptables -F临时清空防火墙数据,这样就能实现访问了。
为了以后使用的方便,送佛送到西,我们需要定义程序的运行环境