程序包管理之编译安装:

源码:c, c++

perl源码:

python源码:


应用程序:项目组

软件基金会:FSF,ASF

项目组:主导者,contributor

小项目:一个人维护

商业公司支持:开源版/企业版


SourceForge.net

github.com

code.google.com


源程序:

项目工程:把代码分散于多个源代码文件

GNU/make


autoconf: configure脚本 

检查编译环境是否编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等;

结果:会根据Makefile.in文件生成makefile文件

automake: 用户生成Makefile.in文件,一般是源码人提供了

用于结合configure脚本生成makefile文件

makefile文件是make命令的配置文件



编译安装的步骤:

1、拿到源代码,并解压:

# tar xf package-version.tar.{gz|bz2|xz}

注意:展开后的目录名通常为package-version

2、切换至源码目录中

# cd package-version

3、执行configure脚本,检查编译环境

# ./configure

4、编译

# make

5、安装

# make install



configure脚本的通用功能:

我们需要定义的配置:

1、指定安装路径:

--prefix=/usr/local/package_name 指定统一安装路径,其下放配置文件等

--sysconfdir=/etc/package_name 配置文件路径

2、指定启用/禁用的特性:

--enable-feature: 例如--enable-fpm 这个表示启用fpm功能

--disable-feature: 例如 --disable-socket 禁用socket功能

3、指定所依赖功能、程序或文件

--with-function:启用某功能

--without-function:禁用某功能


不同的程序,其configure脚本功能不同,要获取帮助:

./configure --help

因为有些命令不尽相同

程序在打包时,有的程序的rpm包依附在devel的子包里

例如安装nginx时,需要的pcre的库,但是已经安装了,因为有些该pcre的库是在devel包里面


练习:

1、编译安装nginx, 并启动之;

2、编译安装axel,并试用之;

这是一个linux上使用的下载工具,类似迅雷

axel -o /tmp -n 3 下载路径

3、编译安装httpd,并启动之;


新安装的软件有些配置和lib都在自己的目录下,如需内核识别,需如下配置:

二进制程序:

/usr/local/apache/bin

# vim /etc/profile.d/apache.sh

PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH

export PATH


头文件输出给系统:

# ln -sv /usr/local/apache/include /usr/include/httpd


库文件输出:

/etc/ld.so.conf.d 这个目录是内核找lib库的位置,因此如果要把其他的库加入需要在其下添加其他库路径

# vim /etc/ld.so.conf.d/httpd.conf

在这个新建http.conf文件,里面输入/usr/local/apache/lib,如下

[root@xuanxuan ld.so.conf.d]# cat mysql-i386.conf

/usr/lib/mysql

让系统重新生成库文件路径缓存

# ldconfig   该缓存是存在/etc/ld.so.cache中

缓存的lib路径都存在这里,供内核动态使用


导出man文件:

# vim /etc/man.config

MANPATH /usr/local/apache/man

# 还有一种是使用man -M +路径


总结:源码编译安装

前提:准备好开发环境

编译过程:

./configure

make

make install

输出:

头文件

库文件

二进制程序

man文档


例子:

源码编译安装httpd-2.4.17.tar.gz

[root@xuanxuan software]# tar -xf httpd-2.4.17.tar.gz 

[root@xuanxuan software]# ls

axel-2.0  axel-2.0.tar.bz2  httpd-2.4.17  httpd-2.4.17.tar.gz  nginx-1.8.0  nginx-1.8.0.tar.gz

[root@xuanxuan software]# cd httpd-2.4.17

这里需要注意的是要预先编译安装apr和apr-util

在安装编译httpd时,需要在后面指明依赖程序的位置,如下

[root@xuanxuan httpd-2.4.17]# ./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util


我这里安装的位置都在/usr/local/httpd下,因此启动也在这里面的bin目录下。

过程比较简单就不赘述了