27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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でも同様に操作可能です。

2024年8月現在では、Apacheは「2.4.62」です。
また、SSL対応をさせる場合は、OpenSSLのインストールが必要です。
OpenSSLのインストールに関しては、
RockyLinux 9.xとUbuntu22.xにOpenSSL 3.1.xをインストールする(ソースからビルド)
を参照してください。

ダウンロード先

APR関連

実践環境バージョン情報

ソフトウェア バージョン
apr 1.7.5
apr-util 1.6.3
Expat XML Parser 2.6.2
PCRE2 10.44
zlib 1.3.1
apache http server 2.4.62
OS RockyLinux 8.4 and RockyLinux 9.4

##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.5.tar.gz
tar xvzf apr-1.7.5.tar.gz
cd apr-1.7.5
./configure
make -j 8
make install

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

cd /usr/local/src
wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-2.6.4.tar.gz
tar xvzf expat-2.6.4.tar.gz
cd expat-2.6.4
./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_zfm3hoHyp58CXruxGg3jmmRXrYsIqfrabhQDUg#GZ_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.44/pcre2-10.44.tar.gz
tar xvzf pcre2-10.44.tar.gz
cd pcre2-10.44
./configure
make -j 8
make install

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

bash:zlib
cd /usr/local/src
wget https://zlib.net/zlib-1.3.1.tar.gz
tar xvzf zlib-1.3.1.tar.gz
cd zlib-1.3.1
./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.62.tar.gz
tar xvzf httpd-2.4.62.tar.gz
cd httpd-2.4.62
#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を持ってくる

この作業は、現在のapache2.4でも行わないと、正しくsystemdのスクリプトが動作しない。
/usr/local/apache2/modules/mod_systemd.so
が存在していても作業を行う。

あらかじめ「systemd-devel-219-62.el7.x86_64.rpm」がインストールされているかを確認しておきましょう。(これが入ってないと、sd-daemon.hがないといわれてコンパイルに失敗します)

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

参考

27
28
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
27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?