详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别


Posted in Servers onJuly 15, 2022

源码包编译实例

下面通过编译安装httpd来深入理解源码包安装(httpd-2.4.54)

下载编译工具,httpd以及其两个依赖包的源码包

//源码包建议到官方网站下载

[root@lnh ~]# mkdir xbz
[root@lnh ~]# cd xbz/
[root@lnh xbz]# dnf -y install gcc gcc-c++ make wget
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
[root@lnh xbz]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz

安装apr

[root@lnh xbz]# ls
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
[root@lnh xbz]# tar -xf apr-1.7.0.tar.gz 
[root@lnh xbz]# ls 
apr-1.7.0  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
//将apr解压到当前目录
[root@lnh xbz]# cd apr-1.7.0/
[root@lnh apr-1.7.0]# ls
apr-config.in  build-outputs.mk  helpers       misc           strings
apr.dep        CHANGES           include       mmap           support
apr.dsp        CMakeLists.txt    libapr.dep    network_io     tables
apr.dsw        config.layout     libapr.dsp    NOTICE         test
apr.mak        configure         libapr.mak    NWGNUmakefile  threadproc
apr.pc.in      configure.in      libapr.rc     passwd         time
apr.spec       docs              LICENSE       poll           tools
atomic         dso               locks         random         user
build          emacs-mode        Makefile.in   README
build.conf     encoding          Makefile.win  README.cmake
buildconf      file_io           memory        shmem
//进入这个源码包可以看见里面被解压出来的东西
[root@lnh apr-1.7.0]# ./configure --prefix=/usr/local/src/apr
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
//生成Makefile
一般常用的有 --prefix=PREFIX 这个选项的意思是定义软件包安装到哪里
建议,源码包都是安装在/opt/目录下或者/usr/local/src目录下面
[root@lnh apr-1.7.0]# make
...
gcc -E -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I./include -I/root/xbz/apr-1.7.0/include/arch/unix -I./include/arch/unix -I/root/xbz/apr-1.7.0/include/arch/unix -I/root/xbz/apr-1.7.0/include -I/root/xbz/apr-1.7.0/include/private -I/root/xbz/apr-1.7.0/include/private  export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$/d' >> apr.exp
sed 's,^\(location=\).*$,\1installed,' < apr-1-config > apr-config.out
sed -e 's,^\(apr_build.*=\).*$,\1/usr/local/src/apr/build-1,' -e 's,^\(top_build.*=\).*$,\1/usr/local/src/apr/build-1,' < build/apr_rules.mk > build/apr_rules.out
make[1]: Leaving directory '/root/xbz/apr-1.7.0'
//编译生成Makefile,此处虽然出现了make[1]: Leaving directory '/root/xbz/apr-1.7.0',但是没关系可以继续进行下一步安装
[root@lnh apr-1.7.0]# make install
...
/usr/bin/install -c -m 755 /root/xbz/apr-1.7.0/build/mkdir.sh /usr/local/src/apr/build-1
for f in make_exports.awk make_var_export.awk; do \
    /usr/bin/install -c -m 644 /root/xbz/apr-1.7.0/build/${f} /usr/local/src/apr/build-1; \
done
/usr/bin/install -c -m 644 build/apr_rules.out /usr/local/src/apr/build-1/apr_rules.mk
/usr/bin/install -c -m 755 apr-config.out /usr/local/src/apr/bin/apr-1-config
//进行安装
[root@lnh apr-1.7.0]# cd /usr/local/src/apr/
[root@lnh apr]# ls
bin  build-1  include  lib
//进入apr的路径进行查看,默认情况下,系统搜索库文件的路径只有/lib,/usr/lib,我们需要进行修改在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中。此时库文件增添的搜索路径重启后有效,若要使用增添的路径立即生效则要使用ldconfig命令
[root@lnh apr]# cd /etc/ld.so.conf.d/
[root@lnh ld.so.conf.d]# echo /usr/local/src/apr/lib/ >apr.conf
[root@lnh ld.so.conf.d]# cd -
/usr/local/src/apr
//切换到前一个工作目录
[root@lnh apr]# ldconfig 
//使命令生效
[root@lnh apr]# ln -s /usr/local/src/apr/include/ /usr/include/apr
[root@lnh apr]# ll /usr/include/apr/
total 4
drwxr-xr-x. 2 root root 4096 Jul 12 20:18 apr-1
lrwxrwxrwx. 1 root root   27 Jul 12 20:44 include -> /usr/local/src/apr/include/
将头文件软链接到/usr/include目录下

折叠

安装apr-util

[root@lnh xbz]# dnf -y install expat-devel libxml2-devel pcre-devel
//需要先安装这个依赖
[root@lnh xbz]# ls
apr-1.7.0  apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
[root@lnh xbz]# tar -xf apr-util-1.6.1.tar.gz 
[root@lnh xbz]# ls
apr-1.7.0         apr-util-1.6.1         httpd-2.4.54.tar.gz
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz
//解压到当前目录
[root@lnh xbz]# cd apr-util-1.6.1/
[root@lnh apr-util-1.6.1]# ls
aprutil.dep       CHANGES            include         NWGNUmakefile
aprutil.dsp       CMakeLists.txt     ldap            README
aprutil.dsw       config.layout      libaprutil.dep  README.cmake
aprutil.mak       configure          libaprutil.dsp  README.FREETDS
apr-util.pc.in    configure.in       libaprutil.mak  redis
apr-util.spec     crypto             libaprutil.rc   renames_pending
apu-config.in     dbd                LICENSE         strmatch
buckets           dbm                Makefile.in     test
build             docs               Makefile.win    uri
build.conf        encoding           memcache        xlate
buildconf         export_vars.sh.in  misc            xml
build-outputs.mk  hooks              NOTICE
//进入源码包查看被解压出来的东西
[root@lnh apr-util-1.6.1]# ./configure --prefix=/usr/local/src/apr-util --with-apr=/usr/local/src/apr
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating export_vars.sh
config.status: creating build/pkg/pkginfo
config.status: creating apr-util.pc
config.status: creating apu-1-config
config.status: creating include/private/apu_select_dbm.h
config.status: creating include/apr_ldap.h
config.status: creating include/apu.h
config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: executing default commands
//生成Makefile文件,需要伴随着上一个指定的依赖
[root@lnh apr-util-1.6.1]# make
...
gcc -E -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I/root/xbz/apr-util-1.6.1/include -I/root/xbz/apr-util-1.6.1/include/private  -I/usr/local/src/apr/include/apr-1    exports.c | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$/\1/' >> aprutil.exp
gcc -E -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I/root/xbz/apr-util-1.6.1/include -I/root/xbz/apr-util-1.6.1/include/private  -I/usr/local/src/apr/include/apr-1    export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$/d' >> aprutil.exp
sed 's,^\(location=\).*$,\1installed,' < apu-1-config > apu-config.out
make[1]: Leaving directory '/root/xbz/apr-util-1.6.1'
//编译生成的Makefile文件,出现make[1]: Leaving directory '/root/xbz/apr-util-1.6.1'这个没有关系可以继续进行下一步安装
[root@lnh apr-util-1.6.1]# make install
...
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/usr/bin/install -c -m 644 aprutil.exp /usr/local/src/apr-util/lib
/usr/bin/install -c -m 755 apu-config.out /usr/local/src/apr-util/bin/apu-1-config
//进行安装
[root@lnh apr-util-1.6.1]# cd /usr/local/src/apr-util/
[root@lnh apr-util]# ls
bin  include  lib
//切换到apr-util安装目录进行查看,默认情况下,系统搜索库文件的路径只有/lib,/usr/lib,我们需要进行修改在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中。此时库文件增添的搜索路径重启后有效,若要使用增添的路径立即生效则要使用ldconfig命令
[root@lnh apr-util]# cd /etc/ld.so.conf.d/
[root@lnh ld.so.conf.d]# echo /usr/local/src/apr-util/ >apr-util.conf 
[root@lnh ld.so.conf.d]# cd -
/usr/local/src/apr-util
//切换到上一个工作目录
[root@lnh apr-util]# ln -s /usr/local/src/apr-util/include/ /usr/include/apr
-util
//将头文件软链接到/usr/include目录下

折叠

安装httpd

[root@lnh xbz]# tar -xf httpd-2.4.54.tar.gz 
[root@lnh xbz]# ls
apr-1.7.0         apr-util-1.6.1         httpd-2.4.54
apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.54.tar.gz
//解压到当前目录
[root@lnh xbz]# cd httpd-2.4.54/
[root@lnh httpd-2.4.54]# ls
ABOUT_APACHE     CMakeLists.txt  InstallBin.dsp  README
acinclude.m4     config.layout   LAYOUT          README.CHANGES
Apache-apr2.dsw  configure       libhttpd.dep    README.cmake
Apache.dsw       configure.in    libhttpd.dsp    README.platforms
apache_probes.d  docs            libhttpd.mak    ROADMAP
ap.d             emacs-style     LICENSE         server
build            httpd.dep       Makefile.in     srclib
BuildAll.dsp     httpd.dsp       Makefile.win    support
BuildBin.dsp     httpd.mak       modules         test
buildconf        httpd.spec      NOTICE          VERSIONING
CHANGES          include         NWGNUmakefile
changes-entries  INSTALL         os
//查看被解压出来的东西
[root@lnh httpd-2.4.54]# ./configure --prefix=/usr/local/src/httpd --with-apr=/usr/local/src/apr --with-apr-util=/usr/local/src/apr-util
...
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
configure: summary of build options:

    Server Version: 2.4.54
    Install prefix: /usr/local/src/httpd
    C compiler:     gcc
    CFLAGS:          -g -O2 -pthread  
    CPPFLAGS:        -DLINUX -D_REENTRANT -D_GNU_SOURCE  
    LDFLAGS:           
    LIBS:             
    C preprocessor: gcc -E

//生成Makefile文件
[root@lnh httpd-2.4.54]# make
...
/usr/local/src/apr/build-1/libtool --silent --mode=link gcc  -g -O2 -pthread           -o mod_rewrite.la -rpath /usr/local/src/httpd/modules -module -avoid-version  mod_rewrite.lo 
make[4]: Leaving directory '/root/xbz/httpd-2.4.54/modules/mappers'
make[3]: Leaving directory '/root/xbz/httpd-2.4.54/modules/mappers'
make[2]: Leaving directory '/root/xbz/httpd-2.4.54/modules'
make[2]: Entering directory '/root/xbz/httpd-2.4.54/support'
make[2]: Leaving directory '/root/xbz/httpd-2.4.54/support'

make[1]: Leaving directory '/root/xbz/httpd-2.4.54'
//编译生成Makefile文件,出现的一些没有读取到的问题没有关系,继续进行下一步
[root@lnh httpd-2.4.54]# make install
...
Installing man pages and online manual
mkdir /usr/local/src/httpd/man
mkdir /usr/local/src/httpd/man/man1
mkdir /usr/local/src/httpd/man/man8
mkdir /usr/local/src/httpd/manual
make[1]: Leaving directory '/root/xbz/httpd-2.4.54'
//进行安装
[root@lnh httpd-2.4.54]# cd /usr/local/src/httpd/
[root@lnh httpd]# ls
bin    cgi-bin  error   icons    logs  manual
build  conf     htdocs  include  man   modules
//切换到httpd的安装目录进行查看,默认情况下,系统搜索库文件的路径只有/lib,/usr/lib
[root@lnh httpd]# ln -s /usr/local/src/httpd/include/ /usr/include/httpd
[root@lnh httpd]# ll  /usr/include/httpd
lrwxrwxrwx. 1 root root 29 Jul 12 21:23 /usr/include/httpd -> /usr/local/src/httpd/include/
//将头文件软链接到/usr/include目录下
[root@lnh httpd]# echo "export PATH=$PATH:/usr/local/src/httpd/bin" > /etc/profile.d/httpd.sh
[root@lnh httpd]# source /etc/profile.d/httpd.sh 
//配置httpd的全局环境变量,并生成效果
[root@lnh httpd]# which httpd 
/usr/local/src/httpd/bin/httpd
[root@lnh httpd]# vim /etc/man_db.conf
MANDATORY_MANPATH                 /usr/man
MANDATORY_MANPATH                 /usr/share/man
MANDATORY_MANPATH                 /usr/local/share/man
MANDATORY_MANPATH                 /usr/local/src/httpd/man
//添加后面这一行
[root@lnh ~]# httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe57:f6f5%ens33. Set the 'ServerName' directive globally to suppress this message
httpd (pid 35719) already running
//启动服务
[root@lnh ~]# ss -antl
State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port  Process  
LISTEN  0       128            0.0.0.0:22            0.0.0.0:*              
LISTEN  0       128                  *:80                  *:*              
LISTEN  0       128               [::]:22               [::]:*
//查看端口              
[root@lnh ~]# systemctl stop firewalld.service
//关闭防火墙

折叠

服务80端口

详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别

源码编译报错信息处理

checking for APR... no
configure: error: APR not found.  Please read the documentation.
//解决方案
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
提前把这两个依赖包安装好才可以进行生成Makefile文件

无法进行生成两个依赖包的Makefile文件
//解决方案
[root@lnh xbz]# dnf -y install gcc gcc-c++ make wget
提前下载编译工具

init程序的三种风格

  • SysV⻛格:init(centos5),实现系统初始化时,随后的初始化操作都是借助于脚本来实现的,(/etc/inittab)
  • Upstart风格:init(centos6),由ubuntu研发的,通过总线形式以接近于并行的方式工作,效率比SysV高,配置文件(/etc/inittab,/etc/init/*.conf)
  • Systemd风格:systemd(centos7),启动速度快,系统引导时实现服务并行启动,比前两者的效率都高,配置文件(/usr/lib/systemd/system,/etc/systemd/system)

init程序三种风格的特点

SysV⻛格特点:

  • 脚本中含有大量的命令,每个命令都要启动一个进程,命令执行完以后就要终止这个进程。如此一来,系统初始化时将大量的创建进程,销毁进程,工作效率会非常低
  • 服务间可能会存在依赖关系,必须严格按照一定的顺序来启动服务,前一个服务没启动完后面的服务就无法执行启动过程。不能并行进行

Upstart风格特点:

  • 基于总线方式能够让进程间互相通信的一个应用程序
  • 不用等服务启动完成,只要一初始化就可以把自己的状态返回给其他进程

Systemd风格特点:

  • 启动速度比SysV和Upstart都快
  • 不需要通过任何脚本来启动服务,systemd自身就可以启动服务,其本身就是一个强大的解释器,启动服务时不需要sh/bash的参与
  • systemd不真正在系统初始化时去启动任何一个服务只要服务没用到,它告诉你启动了,实际上并没有启动。仅当第一次去访问时才会真正启动服务

到此这篇关于apache编译安装httpd-2.4.54以及三种风格的init程序特点和区别的文章就介绍到这了,更多相关apache编译安装httpd-2.4.54内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Servers 相关文章推荐
nginx简单配置多个server的方法
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
使用goaccess分析nginx日志的详细方法
Jul 09 Servers
Nginx进程调度问题详解
Sep 25 Servers
如何Tomcat中使用ipv6地址
May 06 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
May 25 Servers
Nginx本地配置SSL访问的实例教程
May 30 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
django项目、vue项目部署云服务器的详细过程
Jul 23 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 Servers
Apache Kafka 分区重分配的实现原理解析
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 #Servers
Nginx代理Redis哨兵主从配置的实现
Jul 15 #Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 #Servers
搭建zabbix监控以及邮件报警的超级详细教学
Jul 15 #Servers
nginx七层负载均衡配置详解
Jul 15 #Servers
Linux安装Docker详细教程
Jul 07 #Servers
You might like
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
Python实现栈的方法
2015/05/26 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
django foreignkey(外键)的实现
2019/07/29 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
优秀演讲稿范文
2013/12/29 职场文书
挂科检讨书范文
2014/02/20 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
学生上课说话检讨书
2014/10/25 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
python中subplot大小的设置步骤
2021/06/28 Python