LoginSignup
22
25

Apache2.4をインストールする(ソースからコンパイル) for RockeyLinux 9.x / Ubuntu 22.04.x(systemd対応)

Last updated at Posted at 2016-09-22

世界で最も使われているWebServer、Apache http server。
CentOS7になり、systemdになった背景から、rpmではなくソースからコンパイルをすると、起動スクリプトが応答なしになる問題が報告されています。
今回はこの問題を回避するため、起動スクリプトをCentOS7.2の純正のものから変更することで対応します。
2016年12月24日更新分で、mod_systemdをバックポートすることで、systemdに対応させる形に変更しました。
RockyLinuxで行っておりますが、その他のRHEL互換OSでも同様に操作可能です。

2023年12月現在では、Apacheは「2.4.58」です。
また、SSL対応をさせる場合は、OpenSSLのインストールが必要です。
OpenSSLのインストールに関しては、
OpenSSL(1.0.x)をインストールする(ソースからコンパイル)for RockeyLinux 8.4
を参照してください。
また、zlibも必要となります。こちらはOS標準で入っているのであればそれを利用可能ですが、インストールされていない場合は、zlibをインストール(ソースからコンパイル)for CentOS7.2を参照してください。

ダウンロード先

APR関連

実践環境バージョン情報

ソフトウェア バージョン
apr 1.7.4
apr-util 1.6.1
Expat XML Parser 2.4.3
PCRE 8.45
zlib 1.3
apache http server 2.4.57
OS RockyLinux 8.4 and RockyLinux 9.0

##rpmでOS標準の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をインストールします。

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

2.Expat XML Parserをインストールします。

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をインストールします。

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のみのインストールでOKです。

pcre
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のみでOK!)

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

5.zlibをインストールする

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

6.Systemd-develのインストール

#RHEL系
dnf install systemd-devel

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

7.Apacheをインストールします

apache2.4
cd /usr/local/src
wget https://dlcdn.apache.org/httpd/httpd-2.4.58.tar.gz
tar xvzf httpd-2.4.58.tar.gz
cd httpd-2.4.58
#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がないといわれてコンパイルに失敗します)

mod_systemd.cをダウンロードする
cd /usr/local/src/httpd-2.4.58/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

#RockyLinuxやAlmaLinux8/9 では以下を実行
cd /usr/local/src/httpd-2.4.58/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.起動スクリプトを用意する

httpd.service
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

参考

22
25
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
25