做为运维人员来讲,很多时候我们直接使用别人给我们提供的RPM包来安装程序时,总达不到自己理想的效果,第一,编译开启的功能并不是自己想要的;第二,用不上最新的源代码,因为RPM包的源代码总会滞后于最新的源代码。所以做为运维人员来讲,掌握源码包的编译安装是必须的。那么今天就给大家分享一下如何使用源代码编译安装。常见的RPM包都是Application-VERSION-release.src.rpm格式的源码包解包后使用rpmbuild命令制作成二进制格式的rpm包-->用制作好的Application-VERSION-release.arch.rpm包安装,而纯源代码则是需要预处理-->编译-->汇编-->链接-->最后再进行安装。
一、源代码特点
多文件:文件中的代码之间,很可能存在跨文件依赖关系
项目管理器
C、C++:make (configure --> Makefile.in --> makefile)
java: maven
二、开源程序源代码的获取途径
官方自建站点:
apache.org (ASF:Apache Software Foundation)
mariadb.org
...
代码托管:
SourceForge.net
Github.com
code.google.com
c/c++编译器: gcc (GNU C Complier)
三、编译C源代码的环境
安装:
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库
实现:通过“包组”提供开发组件
CentOS 6:
Development Tools
Server Platform Development
CentOS 7:
Development Tools
Development and Creative Workstation
四、C代码编译安装四步骤
注意:安装前查看INSTALL,README两个说明文件
(一)./configure
(二)make:根据makefile文件,构建应用程序
(三)make install:复制文件到相应路径
(四)安装后的环境配置
五、第一步:运行configure脚本定义编译选项
1、通过选项传递参数给configure脚本,指定启用特性、安装路径等;执行时会参考用户指定的选项,以及makefile.in文件中的配置生成makefile文件
没有configure脚本时,自制configure脚本的工具:
autoconf: 生成configure脚本
如果没有makefile.in文件
自制Makefile.in的工具:
automake:生成Makefile.in
2、检查依赖到的外部环境,如依赖的软件包
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH: 指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
System types:支持交叉编译
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包,
--with-PACKAGE[=ARG],依赖包
--without-PACKAGE,禁用依赖关系
六、第二步:运行make命令正式编译
视机器性能好坏,等待编译完成的时间不等,如果编译的是内核或者大型程序源码,需要等待的时间比较长属正常情况
七、第三步:运行make install进行复制安装
在此过程中主要做的工作是把第二步中编译好的文件分门别类的放到各自的目录下去,并且给需要执行权限的程序自动添加执行权限
八、第四步:安装后的环境配置
(1) 二进制的程序路径添加至系统环境变量中,方便日后直接以程序名启动或配置程序功能
建立配置文件:/etc/profile.d/program_name.sh
写入export PATH=/PATH/TO/BIN:$PATH
让环境变量立即生效:.或source /etc/profile.d/program_name.sh
(2) 共享出手动编译安装程序的库文件,以便存在依赖于此程序库文件的程序能够正常搜寻到库文件
建立配置文件:/etc/ld.so.conf.d/program_name.conf
添加程序库文件所在目录路径至此文件中
让系统重新生成库文件缓存:ldconfig [-v] /etc/ld.so.conf.d/program_name.conf
(3) 共享出手动编译安装程序的头文件,以便其它程序调用
添加软链接到头文件共享目录/usr/include下面
1,为头文件的目录直接创建链接
ln -sv /prefix/program_name/include /usr/include/program_name
2,为每个头文件都创建一个链接
ln -sv /prefix/program_name/include/* /usr/include
(4) 添加man手册搜索路径,以便于能够正常使用man帮助手册
编辑配置文件,添加一行:
1,CentOS6:etc/man.config 添加:MANPATH_MAP/prefix/program_name//prefix/program_name/man
2,CentOS7:/etc/man_db.conf 添加:MANDB_MAP /prefix/program_name/man /var/cache/man/program_name
我也看过很多人写的编译安装步骤是三步,今天我分享给大家的是四步,实际上如果你编译安装只做了前三步,严格的来讲,你的这个程序安装是不完整的,因为一个程序完整安装后,第一环境变量是配置好了的,是可以直接以程序名来启动或配置程序的;第二,该程序的库文件是需要共享出来的,否则即使你安装该程序后,依赖于该程序的其它程序依然无法建立依赖关系;第三,该程序的头文件需要共享出来的,其它程序才可调用;第四,一个完整的程序,没有使用帮助或者搜索不到帮助手册都是不正常的。所以我希望大家在学习了本博文之后,编译安装的同时一定要记得做好第四步,否则就是一个不完整的安装。
本文出自 “爱情防火墙” 博客,请务必保留此出处http://183530300.blog.51cto.com/894387/1842408