在Rocky Linux 9.x / Ubuntu 22.04.x上安装Apache 2.4(从源代码编译)(支持systemd)

世界上最常用的Web服务器是Apache http server。由于CentOS7变为systemd,从源代码编译而不是使用rpm时,启动脚本可能会出现无响应的问题。为了解决这个问题,我们将使用CentOS7.2原生的启动脚本进行更改。在2016年12月24日的更新中,通过进行mod_systemd的回溯,将其改为与systemd兼容的形式。虽然我们是在RockyLinux上进行操作,但其他兼容RHEL的操作系统也可以采取相同的操作。

2023年5月目前,Apache版本為「2.4.57」。
如果要啟用SSL支持,需要安裝OpenSSL。
關於OpenSSL的安裝,請參考在RockeyLinux 8.4上安裝OpenSSL(1.0.x)(從源碼編譯)指南。
此外,還需要zlib。如果您的操作系統已經內建zlib,則可以直接使用,但如果未安裝,請參考在CentOS 7.2上安裝zlib(從源碼編譯)指南。

请下载到指定位置。

APR相关

http://apr.apache.org/
Apache HTTP Server

http://httpd.apache.org/
PCRE

http://www.pcre.org/
zlib
http://www.zlib.net/

实际环境版本信息

ソフトウェアバージョンapr1.7.4apr-util1.6.1Expat XML Parser2.4.3PCRE8.45zlib1.2.11apache http server2.4.57OSRockyLinux 8.4 and RockyLinux 9.0

如果使用rpm包管理系统安装了操作系统的标准Apache版本,需要卸载它。

rpm -e httpd-devel-2.4.6-45.el7.centos.x86_64
rpm -e httpd-manual-2.4.6-45.el7.centos.noarch
rpm -e mod_ssl-2.4.6-45.el7.centos.x86_64
rpm -e mod_fcgid-2.3.9-4.el7.x86_64
rpm -e httpd-2.4.6-45.el7.centos.x86_64
rpm -e httpd-tools-2.4.6-45.el7.centos.x86_64

安装步骤

1. 安装apr。

cd /usr/local/src
wget https://dlcdn.apache.org//apr/apr-1.7.4.tar.gz
tar xvzf apr-1.7.4.tar.gz
cd apr-1.7.4
./configure
make -j 8
make install

安装 Expat XML 解析器。

cd /usr/local/src
wget https://github.com/libexpat/libexpat/releases/download/R_2_5_0/expat-2.5.0.tar.gz
tar xvzf expat-2.5.0.tar.gz
cd expat-2.5.0
./configure
make -j 8
make install

3. 进行apr-util的安装。

cd /usr/local/src
wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
tar xvzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
./configure --with-apr=/usr/local/apr \
--with-openssl=/usr/local/ssl
make -j 8
make install

4. 安装PCRE

接下来,我们将安装PCRE。
对于Apache 2.4.56迁移,只需安装PCRE2即可。

cd /usr/local/src
wget "https://downloads.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz?ts=gAAAAABkK_XztgvJ7mhpizK6AGN7erWqfpNYfQjfHoqVpEGHak8u8_zfm3hoHyp58CXruxGg3jmmRXrYsIqfrabhQDUgeGZ_jQ%3D%3D&r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2Fpcre%2F8.45%2Fpcre-8.45.tar.gz%2Fdownload"

tar xvzf pcre-8.45.tar.gz
cd pcre-8.45
./configure
make
make install

安装PCRE2。(从2.4.56版本开始,只需安装PCRE2!)

cd /usr/local/src
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.gz
tar xvzf pcre2-10.42.tar.gz
cd pcre2-10.42
./configure
make -j 8
make install

安装zlib库

cd /usr/local/src
wget https://zlib.net/zlib-1.2.13.tar.gz
tar xvzf zlib-1.2.13.tar.gz
cd zlib-1.2.13
./configure
make
make install

6. 安装Systemd-devel

#RHEL系
dnf install systemd-devel

#Ubuntu
sudo apt-get install -y libsystemd-dev

7. 安装Apache

cd /usr/local/src
wget https://dlcdn.apache.org/httpd/httpd-2.4.57.tar.gz
tar xvzf httpd-2.4.57.tar.gz
cd httpd-2.4.57
#PCRE2のソースの場所を選択
./configure \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-pcre=/usr/local/bin/pcre2-config
--enable-mods-shared=reallyall \
--enable-ssl \
--with-ssl=/usr/local/ssl \
--enable-proxy \
--enable-proxy-ajp \
--enable-dav \
--enable-dav-fs \
--enable-headers \
--enable-rewrite=shared \
--enable-deflate \
--with-pcre=/usr/local \
--enable-systemd
make -j 4
make install

请拿来8.mod_systemd.c

在编译之前,请先确认是否预先安装了 “systemd-devel-219-62.el7.x86_64.rpm”。(如果没有安装该软件包,将导致编译失败,提示缺少 sd-daemon.h 文件)

cd /usr/local/src/httpd-2.4.57/modules/arch/unix
#wget https://raw.githubusercontent.com/apache/httpd/trunk/modules/arch/unix/mod_systemd.c

#aspxを使ってコンパイル
/usr/local/apache2/bin/apxs -c mod_systemd.c -I /usr/include/systemd/sd-daemon.h

#libtoolにおまじない
#CentOS7移行 or Ubuntでは以下を実行
libtool \
--silent \
--mode=compile gcc -std=gnu99 -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong \
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_LARGEFILE64_SOURCE  -DLINUX -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/local/apache2/include  -I/usr/local/apache2/include   -I/usr/local/apache2/include -I/usr/local/apr/include/apr-1  -c -o mod_systemd.lo mod_systemd.c && touch mod_systemd.slo

libtool \
--silent \
--mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64   -o mod_systemd.la  -rpath /usr/local/apache2/modules -module -avoid-version    mod_systemd.lo


libtool \
--silent \
--mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64   -o mod_systemd.la  -rpath /usr/local/apache2/modules -module -avoid-version    mod_systemd.lo -lsystemd-daemon

#モジュールを登録
/usr/local/apache2/bin/apxs -i -a -n systemd mod_systemd.la


#ubuntiは、libtoolを入れる
apt install libtool-bin

#CentOS8では以下を実行
cd /usr/local/src/httpd-2.4.57/modules/arch/unix
dnf install systemd-devel

libtool \
--silent \
--mode=compile gcc -std=gnu99 -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong \
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_LARGEFILE64_SOURCE  -DLINUX -D_REENTRANT -D_GNU_SOURCE \
-pthread -I/usr/local/apache2/include -I/usr/local/apr/include/apr-1 -c -o mod_systemd.lo mod_systemd.c && touch mod_systemd.slo
libtool \
--silent \
--mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache2/modules -module -avoid-version mod_systemd.lo
libtool \
--silent \
--mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache2/modules -module -avoid-version mod_systemd.lo -lsystemd
/usr/local/apache2/bin/apxs -i -a -n systemd mod_systemd.la


9. 准备启动脚本

cat > /usr/lib/systemd/system/httpd.service << EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
#EnvironmentFile=/usr/local/apache2/conf/httpd.conf
Environment=LD_LIBRARY_PATH=/usr/local/ssl/lib:/usr/local/lib:/usr/local/lib64:/usr/lib
ExecStart=/usr/local/apache2/bin/httpd \$OPTIONS -DFOREGROUND
ExecReload=/usr/local/bin/httpd \$OPTIONS -k graceful
ExecStop=/bin/kill -WINCH \${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOF

10. 最后,在注册启动和自动启动时完成操作。

systemctl daemon-reload
systemctl start httpd
systemctl enable httpd

请在母语中将以下内容改述为中文,只需一个选项:

参考资料

    • http://unix.stackexchange.com/questions/262051/help-to-install-apache-module-mod-systemd

 

    • http://kazmax.zpp.jp/apache/apache3.html

 

    http://linux.systemv.pe.kr/apache-source-install/
广告
将在 10 秒后关闭
bannerAds