CentOS8にApache2.4.43をソースインストールする方法

投稿者: | 2020-05-09

今回は、Webサーバとして有名なApacheをCentOS8にソースインストールし最初に入っている「It works!」のページを表示する方法について説明します。

実施環境・導入バージョン

OSCentOS 8 最小限のインストール
Apache2.4.43
OpenSSL1.1.1g
Nghttp21.40.0
Brotli1.0.7
APR1.7.0
APR-util1.6.1

事前準備

初めに、ApacheおよびApacheのインストールに必要なツール等のコンパイルに必要なものをインストールします。

・ソースファイルのダウンロード用
# dnf install -y wget

・gcc、make等の開発者ツール、コンパイルに必要なネットワーク関連ツール
# dnf groupinstall -y base development network-tools

・OpenSSL、Apacheのコンパイル用
# dnf install -y zlib-devel perl-core pcre-devel expat-devel

・OpenSSLインストール後のdnfが起動しなくなる現象回避用
# dnf install -y lksctp-tools lksctp-tools-devel

・Nghttp2コンパイル用
# dnf install -y jansson-devel libev-devel c-ares-devel

・Brotiコンパイル用
# dnf install -y cmake  

・Apacheコンパイル用
# dnf install -y pcre-devel expat-devel

OpenSSLのインストール

Nghttp2とApacheのコンパイル、SSL用としてOpenSSLをソースインストールします。OpenSSLのソースファイルは、下記サイトからリンクをコピーすることができます。

・OpenSSLのソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
# tar zxf openssl-1.1.1g.tar.gz
# cd openssl-1.1.1g/

・インストール場所を/usr/local/opensslに指定しMakefileを作成、コンパイル、インストール、
#./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl/shared enable-md2 enable-rc5 sctp zlib -fPIC 
# make
# make install

※参考
今回はインストールしたOpenSSLを共有ライブラリに設定していませんが、ソースインストールしたOpenSSLを共有ライブラリにする場合はOpenSSHのソースインストールも必要となります。OpenSSHのソースインストールについては下記ページを参照してください。
・CentOS8にOpenSSLとOpenSSHをソースインストールする方法
https://www.kdkwakaba.com/archives/408

Nghttp2のインストール

次に、Apacheのコンパイルに必要なNghttp2をインストールします。Nghttp2のソースファイルは、下記サイトからリンクをコピーすることができます。

・Nghttp2のソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget https://github.com/nghttp2/nghttp2/releases/download/v1.40.0/nghttp2-1.40.0.tar.gz 
# tar zxf nghttp2-1.40.0.tar.gz
# cd nghttp2-1.40.0/

・OpenSSLを指定しMakefileを作成、コンパイル、インストール
# env OPENSSL_CFLAGS="-I/usr/local/openssl/include" OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto" ./configure -enable-app 
# make
# make install

Brotliのインストール

次に、Apacheのコンパイルに必要なBrotliをインストールします。Nghttp2のソースファイルは、下記サイトからリンクをコピーすることができます。

Brotliのコンパイルはmakeではなくcmakeを使用するため注意が必要です。

・Brotliのソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget https://github.com/google/brotli/archive/v1.0.7.tar.gz
# tar zxf v1.0.7.tar.gz 
# cd brotli-1.0.7/

・コンパイル用のフォルダを作成し移動しコンパイル、インストール
# mkdir build && cd build
# ../configure-cmake
# make
# make install

APR、ARP-utilのインストール

次に、Apacheのインストールに必要なAPR、APR-utilをインストールします。APR、APR-utilのソースファイルは、下記サイトからリンクをコピーすることができます。

・APRのソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget http://ftp.riken.jp/net/apache//apr/apr-1.7.0.tar.gz
# tar zxf apr-1.7.0.tar.gz
# cd apr-1.7.0/

・Makefileを作成、コンパイル、インストール
# ./configure
# make
# make install

・APR-utilのソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget http://ftp.riken.jp/net/apache//apr/apr-util-1.6.1.tar.gz
# tar xvzf apr-util-1.6.1.tar.gz
# cd apr-util-1.6.1/

・インストールしたAPRを使いMakefileを作成、コンパイル、インストール
# ./configure --with-apr=/usr/local/apr
# make
# make install

Apacheのインストール

Apache本体をソースインストールする準備が整いましたので、Apacheをインストールします。Apacheのソースファイルは、下記サイトからリンクをコピーすることができます。

・Apacheのソースファイルをダウンロードし解凍、解凍したフォルダに移動
# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//httpd/httpd-2.4.43.tar.gz 
# tar zxf httpd-2.4.43.tar.gz
# cd httpd-2.4.43/

・Apacheインストールに必要なオプションを指定しMakefileを作成、コンパイル、インストール 
# ./configure \
  --enable-http2 \
  --enable-brotli \
  --with-brotli=/usr/local/lib \
  --enable-ssl \
  --with-ssl=/usr/local/openssl \
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr \
  --enable-so \
  --enable-mods-shared=all \
  --enable-mpms-shared=all
# make
# make install

Unitファイル作成

Apacheをソースインストールした場合、Unitファイルが作成されないため、起動・停止・再起動用のユニットファイルを作成します。Unitファイル作成後はUnitファイルを再読み込みします。

・ApacheのUnitファイルを作成
# vi /usr/lib/systemd/system/httpd.service

■httpd.service
-------------------------------------------------
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop
 
[Install]
WantedBy=multi-user.target
-------------------------------------------------

・Unitファイルを再読み込み
# systemctl daemon-reload

firewallの許可

Apacheでページを表示させるためにはfirewallの80番ポートを開放する必要があります。今回はfirewallでhttpサービスを設定します。

・firewallでhttpを許可する
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --reload

Apacheの起動、動作確認

firewall設定後、Apacheを起動し再起動後も自動的にサービスが起動するように設定します。

・Apacheを起動し、再起動後も自動的に起動する
# systemctl start httpd
# systemctl enable httpd

※参考
Apacheの起動後に「systemctl status httpd」でApacheの状態を確認すると「AH00558: httpd: Could not reliably determine the server’s fully qualified domain name~」というログが出力されます。これは、Apacheの初期設定でServerNameが設定されていないことによるログのため、今回は無視して問題ありません。

Apache起動後、ブラウザを開き「http://<サーバのIPアドレス>」にアクセスし、以下の「It works!」が表示されればインストール完了です。