程序包
程序包管理之编译源代码安装
为什么要进行源代码编译安装?
1.对应的程序包并不能直接获取到;
2.已经编译好的二进制中,尚不包含我们所需要的功能;
3.已经编译好的二进制中,包含的功能太多,我们并不需要;
1.想要使用某个程序包,但是找不到可用的二进制包;
2.想要使用的程序包有二进制格式的,我们所需要的的功能或特性并没有被编译;
程序的源代码包有两种格式:
原始的源代码包:name-VERSION.tar.gz
tar xf命令释放包中的源码文件
rpm封装的源代码包:name-VERSION.release.src.rpm
rpm -ivh 将源代码文件安装到某个目录中;
源代码程序包的组织形式:
多个源代码文件,
同一个文件的不同代码段或者式不同文件的不同代码段之间可能有依赖关系;
在编译源代码的时候,必须要首先编译某些代码段,或者说必须先编译某个文件中的代码段,然后才能进行后续的编译;
在源代码文件之间可能存在跨文件的依赖关系,这种依赖关系只有其作者最为清楚
程序员为了让用户能够比较轻松的了解文件与文件之间,代码段与代码段之间的依赖关系,他们会编写说明性文档;
后来程序员会为每一个源代码文件附加一个头部信息,用以说明文件和代码段的依赖关系,程序员开发了一个工具专门提取此类信息并汇总,结合程序员给提供的配置末班,有针对性的生成按章的说明文档,其中包括:此次编译调用哪个预处理器? 如何进行预处理? 调用哪个编译器? 调用哪个汇编器? 如何进行汇编? 程序需要安装在那个路径下?
源代码项目管理工具
C/C++: make
java:maven
python:buildout
说明性的文档:makefile 这样的文件并不是固定不变的,而是根据用户进行选择而进行不断变化的
makefile文件用makefile.in(makefile.win)的模板生成的
利用configure脚本,接受用户的选择,并且configure脚本会将所有接收来的信息汇总到makefile.in模板上,替换模板中相应的内容,从而生成makefile文件
程序员编写源代码,并且给源代码文件增加头部信息;提供Makefile.in的模版文件;
需要autoconf工具,生成configure脚本;
需要automake工具,并利用configure脚本接受来的所有参数,创建makefile文件
有了正确的makefile文件,可以使用make命令来进行源代码编译
预处理-->编译-->汇编-->链接-->生成可执行的二进制文件
安装二进制文件--将二进制文件复制到正确的目录路径中 在现在的源代码编译过程中如果在源代码包中已经有了configure脚本,我们还需要做下列工作
1.使用./configure脚本根据用户所提供的选项信息生成makefile文件
2.make
3.make install
建议:在真正的安装程序包之前最好先查看源代码包中的install的文件,如果没有这个文件,则查看readme的文件;
如何获得开源程序的源代码包
1.发布程序的官方站点 apache.org mariadb.org kernel.org
2.代码托管站点
SourceForge
Github.com
code.google.com
在Linux系统上进行源代码编译安装的前提:
1.编译开发环境必须符合要求
centos6系统
yum groupinstall"Development tolls" "server platform development"
centos7系统
yum groups install "Development tolls"
2.编译器要符合要求
gcc,cpp,make,automake...
3.编译时所用到的标准库要完备 glibc,c标准库
满足上述条件之后,接下来可以进行源代码编译安装
1.运行configure脚本
大量的选项:置顶安装过程中所用到的各种路径,启动或关闭的特性等
--help:获取该程序包所支持的所有选项
选项的分类
安装路径选项
--prefix=路径(/PATH/TO/SOFTWARE_INSTALL)
系统类型选项
如果所有的系统类型选项都不选择,则默认在本机的默认操作系统和本级的平台架构基础之上进行编译,也可以在编译的时候选择其他文件系统和其他的平台类型,这种情况通常称为交叉编译;
可选特性选项:
--disable-FEATURE
--enable-FEATURE
在编译源代码的时候,选择启用或禁用某项功能或特性
可选程序包选项:
在编译源代码的时候,源代码中的某些特性可能会依赖其他外部程序包
--with-PACKAGE
--without-PACKAGE
选择使用或不使用外部程序包
上述命令及选项之后会在源代码目录中自动创建出makefile文件
2.make [-j] #(不能超过处理器核心数)
3.make install
源代码安装之后,要做收尾工作
1.到处二进制程序所在的目录到PATH变量中;
在/etc/profile.d/name.sh
export PATH=/PATH/TO/BINARY:$PATH
source /etc/profile.d/name.sh
2.导出库文件:
编辑/etc/ld.so.conf.d/name.conf
/PATH/TO/SOFTWARE_LIBRARY
ldconfig [-v]
3.导出头文件:
创建对应的符号链接
ln -sv /PATH/TO/HEAD_FILE /uer/include/name
4.导出帮助文件
centos7中默认已经导出帮助文件
centos6
编辑/etc/man.config文件,在该文件中添加一个新行
MANPATH=/PATH/TO/MAN_FILE
举例安装httpd-2.4.18
1.首先要解决开发工具环境;
yum groupinstall "Development tools"
2.使用适合httpd-2.4.18版本的apr及apr-util工具;
安装apr工具
~]# tar xf apr-1.5.2.tar.bz2 -C /usr/src
~]# cd /usr/src/apr-1.5.2
~]# ./configure --prefix=/usr/local/apr-1.5.2
~]# make
~]# make install
安装arp-util工具
~]# tar xf apr-util-1.5.4.tar.bz2 -C /usr/src
~]# cd /usr/src/apr-util-1.5.4
~]# ./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2
~]# make
~]# make install
3.需要安装pcre-devel以满足httpd的正则表达式使用需求;
yum -y install pcre-devel
编译安装httpd:
~]# tar xf httpd-2.4.18.tar.gz -C /usr/src
~]# cd /usr/src/httpd-2.4.18
~]# ./configure --with-apr=/usr/local/apr-1.5.2 --with-apr-util=/usr/local/apr-util-1.5.4
~]# make
~]# make install
收尾:
1.导出二进制文件:
vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache2/bin:$PATH
source /etc/profile.d/httpd.sh
2.导出库文件:
vim /etc/ld.so.conf.d/httpd-x86_64.conf
/usr/local/apache2/modules
ldconfig -v
3.导出头文件:
ln -sv /usr/local/apache2/include /usr/include/httpd