Apache 2.4 について

今回は、Apache 2.4系をソースインストールする方法についてご紹介します。

最新のソースファイルをダウンロードして make install するだけなんじゃない? と思っていたのですが、実際にやってみたら意外と面倒くさかったので、依存関係関連で必要なものは事前にダウンロード・配置した上で、なるべくスムーズにインストールできるように手順をまとめて見ました。

まず、Apache 2.4系をソースインストールするためには、PCRE と APR が必要です。

これを知らずに Apache を configure したら何回も依存関係エラーで失敗し、その都度調べて・解決を繰り返しました。

詳細は後ほど詳しく説明しますが、Apache 2.4系をソースコンパイル・インストールするために必要なファイルは以下の通りです。

名称 ソースファイル名 備考
PCRE pcre-8.38.tar.gz Perl 5 互換性ライブラリ
APR apr-1.5.2.tar.gz Apache ウェブサーバのサポートライブラリ / ユーティリティライブラリ
apr-util-1.5.4.tar.gz
Apache httpd-2.4.18.tar.gz ウェブサーバ

PCRE (Perl Compatible Regular Expressions) は、Perl 5 互換の正規表現を C言語で実装したライブラリのことです。 (BSD ライセンス)

APR (Apache Portable Runtime) は、Apache ウェブサーバのサポートライブラリのことで、一般的な OS に存在する機能を現在使っている OS がサポートしていない場合には、この APR が代わりにその機能を提供してくれます。 (クロスプラットフォーム)

以下は、本家サイト。

この例では、上記のソースファイルを wget でダウンロードする手順になっています。

もし、最新のファイルがほしい場合には、以下の URL (FTP) からダウンロードしたいファイル名を事前に確認しておいて、ファイル名を読み替えてください。

作業の流れ

作業の流れ、及びポイントは、以下の通りです。

  • ダウンロードしたソースファイルの置き場は、/usr/local/src
  • Apache 2.4 をインストールするためには、PCRE と APR が必要
  • PCRE を コンパイルするためには、gcc-c++ が必要 (yum で入れとく)
  • PCRE と APR と Apache 2.4 ソースファイルを解凍
  • PCRE を make インストール
  • 解凍された APR ディレクトリを Apache 2.4/srclib ディレクトリに配置
  • Apache 2.4 を configure する際に、--with-included オプションを使って、APR ソースを参照させる
  • Apache 2.4 make インストール

ちなみに、APR は、事前に make インストールしても大丈夫ですが、make インストールせずに Apache の configure 時に APR ソースファイルを参照するようにした方がやり方としてはスッキリすると思います。

PCRE は make install する

PCRE は、Apache の configure 時に --with-included オプションが効かないため、個別に make インストールする必要があります。

そうしないと Apache の configure 時に以下のエラーで失敗します。

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

Apache 2.4 インストール

Step 1. gcc-c++ インストール

PCRE をコンパイルするためには、gcc-c++ が必要なので、gcc-c++ を yum でインストールしておきます。

以下の例は、make に必要なパッケージに加えて、gcc-c++ をインストールします。

make と gcc-c++ インストールRaw Code(S)Raw Code(T)
# yum -y install make gcc gcc-c++

Step 2. 各ソースファイルのダウンロード・解凍・配置

PCRE、APR、HTTPD ソースファイルをダウンロードし解凍します。

解凍した APR は、この例で言うと httpd-2.4.18/srclib ディレクトリ直下に配置する必要があります。

また、APR を配置する際にディレクトリ名に付いているバージョンは不要なので、mv する際にバージョンをとってください。

pcre、apr、httpd ダウンロードRaw Code(S)Raw Code(T)
# cd /usr/local/src/

# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz

# wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.5.2.tar.gz
# wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.5.4.tar.gz

# wget http://archive.apache.org/dist/httpd/httpd-2.4.18.tar.gz
pcre、apr、httpd 解凍Raw Code(S)Raw Code(T)
# pwd
/usr/local/src/

# tar xvzf ./pcre-8.38.tar.gz

# tar xvzf ./apr-1.5.2.tar.gz
# tar xvzf ./apr-util-1.5.4.tar.gz

# tar xvzf ./httpd-2.4.18.tar.gz

# ls -l
合計 10784
drwxr-xr-x 27 1000  1000    4096  4月 25 21:04 2015 apr-1.5.2
-rw-r--r--  1 root root  1031613  3月 24 15:36 2016 apr-1.5.2.tar.gz
drwxr-xr-x 19 1000  1000    4096  9月 17 08:30 2014 apr-util-1.5.4
-rw-r--r--  1 root root   874044  3月 24 15:36 2016 apr-util-1.5.4.tar.gz
drwxr-xr-x 11  501 games    4096 12月  9 05:31 2015 httpd-2.4.18
-rw-r--r--  1 root root  7051797  3月  3 13:29 2016 httpd-2.4.18.tar.gz
drwxr-xr-x  9 1169  1169   12288  3月 24 15:50 2016 pcre-8.38
-rw-r--r--  1 root root  2053336  3月 24 15:37 2016 pcre-8.38.tar.gz
pcre インストールRaw Code(S)Raw Code(T)
# pwd
/usr/local/src/

# cd ./pcre-8.38/

# ./configure

・・・

pcre-8.38 configuration summary:

    Install prefix .................. : /usr/local
    C preprocessor .................. : gcc -E
    C compiler ...................... : gcc
    C++ preprocessor ................ : g++ -E
    C++ compiler .................... : g++
    Linker .......................... : /usr/bin/ld -m elf_x86_64
    C preprocessor flags ............ :
    C compiler flags ................ : -g -O2 -fvisibility=hidden
    C++ compiler flags .............. : -O2 -fvisibility=hidden -fvisibility-inlines-hidden
    Linker flags .................... :
    Extra libraries ................. :

    Build 8 bit pcre library ........ : yes
    Build 16 bit pcre library ....... : no
    Build 32 bit pcre library ....... : no
    Build C++ library ............... : yes
    Enable JIT compiling support .... : no
    Enable UTF-8/16/32 support ...... : no
    Unicode properties .............. : no
    Newline char/sequence ........... : lf
    \R matches only ANYCRLF ......... : no
    EBCDIC coding ................... : no
    EBCDIC code for NL .............. : n/a
    Rebuild char tables ............. : no
    Use stack recursion ............. : yes
    POSIX mem threshold ............. : 10
    Internal link size .............. : 2
    Nested parentheses limit ........ : 250
    Match limit ..................... : 10000000
    Match limit recursion ........... : MATCH_LIMIT
    Build shared libs ............... : yes
    Build static libs ............... : yes
    Use JIT in pcregrep ............. : no
    Buffer size for pcregrep ........ : 20480
    Link pcregrep with libz ......... : no
    Link pcregrep with libbz2 ....... : no
    Link pcretest with libedit ...... : no
    Link pcretest with libreadline .. : no
    Valgrind support ................ : no
    Code coverage ................... : no

# make
# make install
# cd ..

# pwd
/usr/local/src/

# mv ./apr-1.5.2 ./httpd-2.4.18/srclib/apr
# mv ./apr-util-1.5.4 ./httpd-2.4.18/srclib/apr-util

# ls -l ./httpd-2.4.18/srclib/
合計 12
-rw-r--r--  1  501   501   121  2月 11 23:08 2005 Makefile.in
drwxr-xr-x 27 1000  1000  4096  4月 25 21:04 2015 apr
drwxr-xr-x 19 1000  1000  4096  9月 17 08:30 2014 apr-util

Step 3. Apache 2.4 インストール

これで Apache 2.4 をインストールする準備が終わったので、configure・make install して見ます。

configure する際には、先ほど配置した APR のソースファイルを参照するように --with-included-apr オプションを指定する必要があります。

インストール先指定について

この例では、インストール先を指定していません。

インストール先をしなかった場合には、デフォルトで /usr/local/apache2/ にインストールされます。 インストール先を指定したい場合には、以下のように --prefix オプションを使ってください。

--prefix=/opt/apache2

apache 2.4 : make インストールRaw Code(S)Raw Code(T)
# cd /usr/local/src/httpd-2.4.18

# ./configure --with-included-apr

・・・

config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands

# make
# make install

Step 4. Apache 2.4 インストール確認

インストールが終わったので、ファイル構造、バージョンなどを確認します。

Apache 2.4 : インストール後の確認Raw Code(S)Raw Code(T)
━━━━━━━━━━━━━━━━━━━━━━━━
インストール先
    bin    : 実行バイナリ
    conf   : コンフィグ類
    htdocs : ドキュメントルート (デフォルト)
    logs   : ログ
━━━━━━━━━━━━━━━━━━━━━━━━
# ls -l /usr/local/apache2/
合計 60
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 bin
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 build
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 cgi-bin
drwxr-xr-x  4 root root  4096  3月 24 15:58 2016 conf
drwxr-xr-x  3 root root  4096  3月 24 15:58 2016 error
drwxr-xr-x  2 root root  4096  3月 24 15:51 2016 htdocs
drwxr-xr-x  3 root root  4096  3月 24 15:58 2016 icons
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 include
drwxr-xr-x  3 root root  4096  3月 24 15:58 2016 lib
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 logs
drwxr-xr-x  4 root root  4096  3月 24 15:58 2016 man
drwxr-xr-x 14 root root 12288 12月  9 05:31 2015 manual
drwxr-xr-x  2 root root  4096  3月 24 15:58 2016 modules

━━━━━━━━━━━━━━━━━━━━━━━━
実行バイナリ
    ab        : Apache ベンチマークツール
    apachectl : 起動スクリプト
    httpd     : デーモンファイル
━━━━━━━━━━━━━━━━━━━━━━━━
# ls -l /usr/local/apache2/bin
合計 2428
-rwxr-xr-x 1 root root   80791  3月 24 15:58 2016 ab
-rwxr-xr-x 1 root root    3437  3月 24 15:56 2016 apachectl
-rwxr-xr-x 1 root root    6977  3月 24 15:58 2016 apr-1-config
-rwxr-xr-x 1 root root    6576  3月 24 15:58 2016 apu-1-config
-rwxr-xr-x 1 root root   23515  3月 24 15:56 2016 apxs
-rwxr-xr-x 1 root root   12229  3月 24 15:58 2016 checkgid
-rwxr-xr-x 1 root root    8925  3月 24 15:56 2016 dbmmanage
-rw-r--r-- 1 root root    1073  3月 24 15:56 2016 envvars
-rw-r--r-- 1 root root    1073  3月 24 15:56 2016 envvars-std
-rwxr-xr-x 1 root root   20160  3月 24 15:58 2016 fcgistarter
-rwxr-xr-x 1 root root   66594  3月 24 15:58 2016 htcacheclean
-rwxr-xr-x 1 root root   40690  3月 24 15:58 2016 htdbm
-rwxr-xr-x 1 root root   22247  3月 24 15:58 2016 htdigest
-rwxr-xr-x 1 root root   41314  3月 24 15:58 2016 htpasswd
-rwxr-xr-x 1 root root 2041604  3月 24 15:58 2016 httpd
-rwxr-xr-x 1 root root   19472  3月 24 15:58 2016 httxt2dbm
-rwxr-xr-x 1 root root   21884  3月 24 15:58 2016 logresolve
-rwxr-xr-x 1 root root   34577  3月 24 15:58 2016 rotatelogs

━━━━━━━━━━━━━━━━━━━━━━━━
コンフィグディレクトリ
    httpd.conf : コンフィグファイル
━━━━━━━━━━━━━━━━━━━━━━━━
# ls -l /usr/local/apache2/conf/
合計 96
drwxr-xr-x 2 root root  4096  3月 24 15:58 2016 extra
-rw-r--r-- 1 root root 17754  3月 24 15:58 2016 httpd.conf
-rw-r--r-- 1 root root 13077  3月 24 15:58 2016 magic
-rw-r--r-- 1 root root 53011  3月 24 15:58 2016 mime.types
drwxr-xr-x 3 root root  4096  3月 24 15:58 2016 original

━━━━━━━━━━━━━━━━━━━━━━━━
Apache バージョン確認
━━━━━━━━━━━━━━━━━━━━━━━━
# /usr/local/apache2/bin/httpd -v
Server version: Apache/2.4.18 (Unix)
Server built:   Mar 24 2016 15:57:19

Step 5. デフォルトコンフィグ

デフォルト状態のドキュメントルートは /usr/local/apache2/htdocs になっています。

/usr/local/apache2/conf/httpd.confRaw Code(S)Raw Code(T)
# cat /usr/local/apache2/conf/httpd.conf
ServerRoot "/usr/local/apache2"
Listen 80
・・・
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
・・・

動作確認

とりあえず、ウェブサーバとして動くかどうか確認するために、サービスを起動した上で、ウェブブラウザを使って URL へ接続してみます。

まずは、サービス起動から。 正常なら何も表示されません。

Apache 2.4 サービス起動、及びプロセス確認Raw Code(S)Raw Code(T)
# /usr/local/apache2/bin/apachectl start

# ps -ef | grep "httpd"
root      3027     1  0 16:01 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
daemon    3117  3027  0 16:01 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
daemon    3118  3027  0 16:01 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
daemon    3119  3027  0 16:01 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
root      3202  1767  0 16:02 pts/0    00:00:00 grep httpd

次は、ドキュメントルート内に HTML ファイルが存在することを確認し、curl コマンドで index.html へアクセスできることを確認します。

以下は、ウェブサーバの IP アドレスが 100.100.100.100 の場合の例です。

index.html 確認Raw Code(S)Raw Code(T)
# ls -l /usr/local/apache2/htdocs/
合計 4
-rw-r--r-- 1 root root 45  6月 12 03:53 2007 index.html

# cat /usr/local/apache2/htdocs/index.html
<html><body><h1>It works!</h1></body></html>

# curl http://100.100.100.100
<html><body><h1>It works!</h1></body></html>

後は、ウェブブラウザ経由で http://100.100.100.100 へ接続し問題なく表示されることを確認します。

Apache 2.4 動作確認

終わりに

サービス起動時に以下のようにエラーが表示されることがあります。

Apache 2.4 サービス起動エラーRaw Code(S)Raw Code(T)
# /usr/local/apache2/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

デフォルト状態だと、コンフィグファイルに ServerName 設定が入ってないため表示されるエラーメッセージなので、/usr/local/apache2/conf/httpd.conf を開き、ServerName に IP アドレス、もしくはドメイン名 (FQDN) を設定すると直ります。

/usr/local/apache2/conf/httpd.confRaw Code(S)Raw Code(T)
#ServerName www.example.com:80
ServerName 100.100.100.100:80
サービス再起動Raw Code(S)Raw Code(T)
# /usr/local/apache2/bin/apachectl restart

以上、Apache 2.4 ソースインストール でした。