时间:2017.11.30
作者:李强
参考:man,info,magedu讲义,神奇的internet
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好
操作环境:CentOS Linux release 7.4.1708
我们我们编译的对象是什么是一些源码
c,c++
java
perl
python
等的源码
源码如何去获取。
开源项目可能有哪些人开发,
项目基金会:FSF,ASF等,他们会有自己的官网供下组
项目组:几个人等
小程序:个人
因为不会为一个程序单独建一个站点供大家下载所以,针对这些开源项目的源码,会集中放置在某些网站中去,
当然这些网站是由大公司维护的,比如google等,
https://code.google.com/(这个被墙了)
https://sourceforge.net/
https://github.com/
通过gcc可以编译c但是一个软件可能由几万个c文件来组成而且不同文件的编译顺序也是有甘系的
所以就有了GNU/make 项目管理工具来编译,这个工具可有yum grouplist development tools 包组提供这个功能。
通过我们获取源码为package-version.tar.[gz|bz2|xz]等格式的文件,里面有
configure
makefile.in
程序员通过aufoconf:工具来生成configure脚本。configure 通常会定义安装的目录和提供的特性或功能等等。结果就是根据make.in 来生成makefile文件
automake:生成make.in 配合configure脚本来生成makefile文件
然后通过make命令来编译软件
然后通过make install 来完成文件的复制,把各个文件复制到软件定义的指定目录。
重要的过程就是在configure的地方你要知道你需要软件的哪些特性等要自定义软件。
编译安装说白了就是自定义软件安装。什么安装目录啊,什么功能特性啊,比如我就不要ssl啊,我就放一个html网页自己玩,结果我要把ngix,apache所有的功能都装上没必要。我就要支持ntfs啊,自定义版本,不使用发行版本。发行版本的用户软件或者操作系统软件。
所以我们编译的步骤就是
1、准备编译环境
- 安装make,gcc等工具通过使用yum groups install "development tools" 获取。
- 不通软件再通过.configure 检查编译环境的时候也会需要安装一些deps 组件,这里可以提前安装完毕,一般都是那些不会改变,当然也可以执行configure去检查编译环境缺什么补什么,一般都需要缺的后面加上-devl
2、获取编译软件,定义编译工作路径
mkdir workstation ,在哪里干活。
然后wget 获取相关的源码,
cd workstation ,进入目录,tar -xf package-version.tar.gz|bz2|xz 解压到当前路径
然后ls package-version 检查configure和make.in 文件是否存在
查看README和INSTALL文件,了解如何编译这个软件。
然后.configure 运行脚本,检查编译环境同时定义相关安装选项和功能
configure 脚本的通用功能:
1)、定义安装路径:
--prefix=/usr/local/package-name
--sysconfdir=/etc/package-name
2)、指启用或禁用相关特性
--enable-feature:例如--enable-so
--disable-feature:例如--disable-socket
3)、指定所依赖功能,
不同的软件的configure可能后面跟的并不一样,因为他们的特性 不会一样,所以可以查看源码目录里的README文件,或者configure 后面加--help会有帮助。
3、编译安装完成后,我们需要修改一些配置,
头文件
ln -sv /usr/local/package-name/include /usr/include/package-name
库文件
vi /etc/ld.so/config.d/package-name.conf
/usr/local/package-name/modules
让系统去重新加载库
ldconfig
二进制文件
vi /etc/profile.d/package-name.sh
PATH=/usr/local/package-name/man/bin|sbin;$PATH
重新生成PATH变量
. /etc/profile.d/package-name.sh
帮助文件
vi /etc/man_db.conf
MANDB_MAP /usr/local/package-name/man
注意的是:
因为编译的文件,如果没有uninstall的脚本是不能自动卸载的,就像windows下你把目录清空了,但是它的注册表信息还在,在linux下也一样,你的一些配置文件也还在成为了垃圾文件。因此我们最好只指定--prefix=/usr/local/package-name --sysconfdir=/etc/package-name,一个是自己的软件的安装路径,一个配置文件的路径,其他的都放置在你的--prefix指定的安装目录下,便于维护。最好是能在安装目录下记录下各项操作,这样方便以后卸载。或者自己创建一个install和unstall的自动化编译和卸载脚本放在安装目录下。
因为httpd服务需要使用80端口,如果你的端口被占用会导致你的apachectl start 无法启动
下面我们来编译apache软件。
1、准备编译环境
2、下在安装源码
3、三步骤
4、修改相关配置文件。试运行。