源码包编译

时间:2022-11-23 11:00:57


1. 源码编译介绍

源码安装就是将开发人员写好的源码文件进行手动编译安装。目前开源软件,并不是所有的源代码都打成包,如果想使用开源软件,是需要自己下载进行编译安装。需要进行编译安装的场景:

  1. 软件提供商没有做打包的操作(也就是编译源码)
  2. 生产环境需要软件的某些特性,需要编译安装。

但是源码编译安装是比较繁琐的一个过程,好在前辈们已经提供了相关的项目管理工具,这大大降低了编译过程的复杂性


2. 开源程序源代码的获取

项目官方自建站点:

代码托管:


3. 编译源码的项目工具

C、C++的源码编译:

  • make项目管理器
  • configure脚本-->Makefile.in-->Makefile

相关开发工具

  • autoconf:生成configure脚本
  • automake:生成Makefile.in

Java的源码编译:

  • Maven(这里暂时不做过多的介绍)


4. C语言源代码编译安装过程

利用编译工具,通常只需要三大步骤:

  • ./configure
  • make
  • make install

第一步:​​./configure​

  1. 拿到源码包后,解压完成后进入解压目录,阅读目录中的INSTALL/README文件,只需要查看其中如何安装的部分即可;

源码包编译

  1. 解压后目录中通常还有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 安装后的配置

  1. 二进制程序目录导入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
  1. 按需求定制服务启动脚本,且考虑是否加入开机启动项
  2. 输出头文件和库文件

# 输出头文件
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
  1. 导出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 使用客户端测试

源码包编译