1. 源码编译介绍
源码安装就是将开发人员写好的源码文件进行手动编译安装。目前开源软件,并不是所有的源代码都打成包,如果想使用开源软件,是需要自己下载进行编译安装。需要进行编译安装的场景:
- 软件提供商没有做打包的操作(也就是编译源码)
- 生产环境需要软件的某些特性,需要编译安装。
但是源码编译安装是比较繁琐的一个过程,好在前辈们已经提供了相关的项目管理工具,这大大降低了编译过程的复杂性
2. 开源程序源代码的获取
项目官方自建站点:
代码托管:
3. 编译源码的项目工具
C、C++的源码编译:
- make项目管理器
- configure脚本-->Makefile.in-->Makefile
相关开发工具
- autoconf:生成configure脚本
- automake:生成Makefile.in
Java的源码编译:
4. C语言源代码编译安装过程
利用编译工具,通常只需要三大步骤:
- ./configure
- make
- make install
第一步:./configure
- 拿到源码包后,解压完成后进入解压目录,阅读目录中的INSTALL/README文件,只需要查看其中如何安装的部分即可;
- 解压后目录中通常还有configure文件(也可能为config)文件。执行
./configure
或者带有选项参数,是检查系统环境是否符合安装要求,并将定义好的安装配置和系统环境信息写入Makefile文件中。里面包含了如何编译、启动的功能、安装路径等信息。
第二步:make
执行make命令进行编译。manke命令会根据Makefile文件进行编译。编译工作主要是调用编译器(如gcc)将源码编译为可执行文件,通常需要调用一些函数库才能产生一个完整的可以执行文件
第三步:make install
将上一步缩编的数据复制到指定的目录下(实际上官方提供可下载的rpm包安装时就是将数据复制到官方编译时所指定的目录中)
4.1 编译安装准备
准备安装相关的依赖包
- 开发工具:make,gcc
- 开发环境:开发库(glibc:标准库),头文件,等
- 软件相关依赖包
4.2 编译安装
configure脚本的通用选项:
- --prefix= # 指定安装的路径
- sysconfdir= # 指定配置文件目录
- enable-feature # 启用某个特性
- --distable-feature # 禁用特性
- --with-function # 启用某个功能
- --without-function # 禁用某个功能
可使用 ./configure --help
查看具体的帮助信息
4.3 安装后的配置
- 二进制程序目录导入PATH环境变量中
shell> echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/apache.sh
shell> chmod +x /etc/profile.d/apache.sh
shell> source /etc/profile.d/apache.sh
- 按需求定制服务启动脚本,且考虑是否加入开机启动项
- 输出头文件和库文件
# 输出头文件
shell> ln -s /usr/local/apache/include /usr/include/apache
# 输出库文件
shell> echo "/usr/local/apache/lib" >/etc/ld.so.conf.d/apache.conf
shell> ldconfig
- 导出man路径
shell> echo "MANPATH /usr/local/apache/man" >> /etc/man.conf
5. 案例练习:阿里云ECS编译安装httpd
5.1 环境信息
[root@node30 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@node30 data]# rpm -ql httpd
未安装软件包 httpd
[root@node30 data]# uname -r
3.10.0-957.el7.x86_64
[root@node30 data]# uname -m
x86_64
5.2 下载httpd源码包
Apache源码包下载地址:http://httpd.apache.org/download.cgi
5.3 安装相关依赖包
root@node30 ~]# yum -y groupinstall "development tools"
[root@node30 ~]# yum -y install pcre-devel openssl-devel expat-devel
[root@node30 ~]# yum -y install gcc make autoconf apr-devel apr-util-devel
5.4 配置编译
[root@node30 httpd-2.4.43]# pwd
/data/httpd-2.4.43
[root@node30 httpd-2.4.43]# ls
ABOUT_APACHE BuildBin.dsp emacs-style LAYOUT NOTICE srclib
acinclude.m4 buildconf httpd.dep libhttpd.dep NWGNUmakefile support
Apache-apr2.dsw CHANGES httpd.dsp libhttpd.dsp os test
Apache.dsw CMakeLists.txt httpd.mak libhttpd.mak README VERSIONING
apache_probes.d config.layout httpd.spec LICENSE README.cmake
ap.d configure include Makefile.in README.platforms
build configure.in INSTALL Makefile.win ROADMAP
BuildAll.dsp docs InstallBin.dsp modules server
[root@node30 httpd-2.4.43]# ./configure --prefix=/data/http \
> syscnotallow=/dat/etc/http \
> --enable-ssl
[root@node30 httpd-2.4.43]# echo $?
0
5.5 编译并安装
[root@node30 httpd-2.4.43]# make -j 4 && make install
[root@node30 httpd-2.4.43]# echo $?
0
5.6 配置环境
[root@node30 http]# echo 'PATH=/data/http/bin:$PATH' > /etc/profile.d/httpd.sh
[root@node30 http]# . /etc/profile.d/httpd.sh
5.7 使用apachectl自带脚本来管理服务
[root@node30 http]# apachectl start
[root@node30 http]# ss -ntl | grep 80
LISTEN 0 128 :::80 :::*
5.8 指定使用apache用户运行Apache程序
[root@node30 http]# useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
[root@node30 http]# vim /data/http/conf/httpd.conf
User apache
Group apache
[root@node30 http]# apachectl restart
5.9 使用客户端测试