CentOS 6 に Apache 2.4 をインストールする

:warning: 注意 (2015-07-31 記載)
================================

当記事は CentOS 6 を対象とした古い記事であり、内容が間違ったままになっている場合もあります。

CentOS 7 を利用している場合は、代わりに [CentOS 7 に Apache と MariaDB 10.0 をインストールし SFTP 接続] をご覧ください。

[CentOS 7 に Apache と MariaDB 10.0 をインストールし SFTP 接続]: http://qiita.com/100/items/5a07ab0abcabd1296ef8 "CentOS の公式 yum リポジトリで Apache 2.4 の RPM パッケージが提供されているので、それをインストールします。さくらの VPS の場合はすでにインストールされていますが、有効化と起動は必要です。"

----------------------------------------------------------------------



導入
====

<b>[Apache HTTP Server 2.4](http://httpd.apache.org/download.cgi#apache24 "Download - The Apache HTTP Server Project")</b>、及び<b>Apache 2.4</b>.7 以降の起動に必要な<b>[APR 1.5](http://apr.apache.org/download.cgi#apr1 "Download - The Apache Portable Runtime Project")</b>、<b>[APR-util 1.5](http://apr.apache.org/download.cgi#aprutil1 "Download - The Apache Portable Runtime Project")</b>は、標準のYumリポジトリなどには存在せず、<b>Apache</b>はRPMパッケージなどを提供していません。したがって、<b>CentOS</b>上でソースパッケージをビルドし、RPMパッケージを作成する必要があります。

この記事は[CentOS 6.4 に Apache 2.4.4 をインストールする:100の人のブロマガ - ブロマガ](http://ch.nicovideo.jp/pokemori/blomaga/ar202050)の修正版です。

実運用環境と同じOSがインストールされている開発環境があれば、<b>Apache</b>のRPMパッケージ作成までは開発環境で行うと良いでしょう。



ビルドの準備
============

選択した[パッケージグループ](https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-pkgselection-s390.html "23.17. パッケージグループの選択 — インストールガイド — Red Hat Enterprise Linux 6")によっては、RPMのビルド環境が整っていないかもしれません。コマンドが見つからなかったりビルドに失敗するようであれば、[rpmbuildコマンド](http://www.rpm.org/max-rpm-snapshot/ch-rpm-b-command.html "rpmbuild Command Reference")や[GCC](http://ja.wikipedia.org/wiki/GNU%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 "GNUコンパイラコレクション - Wikipedia")をインストールします。

```sh
sudo yum install rpm-build gcc
```



APRのビルドとインストール 
==========================

依存パッケージのインストールに`yum-builddep`コマンドを利用するので、そのコマンドが含まれる<b>[YumUtils](http://yum.baseurl.org/wiki/YumUtils "YumUtils - yum - Trac")</b>をインストールしておきます。このパッケージにはあとで利用する`yumdownloader`コマンドも含まれています。

```sh
sudo yum install yum-utils
```

署名の検証に必要な<b>Apache</b>の公開鍵を取り込んでおきます。

```sh
# Apacheの公開鍵を取得
wget https://www.apache.org/dist/httpd/KEYS
# 取り込む
gpg --import KEYS
# ファイルの削除
rm KEYS
```

ソースパッケージは、ミラーサイトからダウンロードします。[APRのダウンロードページ](http://apr.apache.org/download.cgi#mirror "Download - The Apache Portable Runtime Project")から、最寄りのミラーサイトのダウンロードURLを取得できます。

`/etc/services`のポート番号指定が、`ftp 21/tcp`、`ssh 22/tcp`となっていなければ、ビルドの最後でテストに失敗します。ポート番号を変更している場合、一時的にデフォルトのポート番号に書き換えておいてください。

```sh
# 旧バージョンのRPMパッケージを作成していれば、削除しておく
rm ~/rpmbuild/RPMS/*/apr{,-devel}-[0-9]*.rpm
# 最新バージョン番号の取得
APR_VERSION=$(wget https://www.apache.org/dist/apr/ --output-document=- | sed --quiet --regexp-extended '/<a name="apr">/ s/.+ ([.0-9]+) .+/\1/p')
# ソースファイルの取得
wget ftp://ftp.riken.go.jp/net/apache/apr/apr-$APR_VERSION.tar.bz2 --directory-prefix ~/rpmbuild/SOURCES
# 署名の取得
wget https://www.apache.org/dist/apr/apr-$APR_VERSION.tar.bz2.asc
# 署名の検証
gpg --verify apr-$APR_VERSION.tar.bz2.asc ~/rpmbuild/SOURCES/apr-$APR_VERSION.tar.bz2
# ソースRPMパッケージの作成
rpmbuild -ts --rmsource ~/rpmbuild/SOURCES/apr-*
# ビルドに必要なパッケージのインストール
sudo yum-builddep ~/rpmbuild/SRPMS/apr-*.src.rpm
# ビルド
rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/apr-*.src.rpm
# 署名ファイル、ソースRPMパッケージの削除
rm apr-*.asc ~/rpmbuild/SRPMS/apr-*.src.rpm

# インストール
sudo rpm --upgrade --verbose --hash ~/rpmbuild/RPMS/*/apr{,-devel}-[0-9]*.rpm
```

途中、`gpg`コマンドで署名を検証しています。`gpg: “Jeff Trawick (CODE SIGNING KEY) <trawick@apache.org>”からの正しい署名`などと表示されれば、ダウンロードしたファイルに誤りはないということです。[^3]



APR-utilのビルドとインストール 
===============================

<b>APR-util</b>のビルドに必要な<b>[FreeTDS](http://www.freetds.org/ "FreeTDS.org")</b>は、標準のYumリポジトリに存在しません。先に<b>[EPELリポジトリ](https://fedoraproject.org/wiki/EPEL/ja "EPEL/ja - FedoraProject")</b>からインストールしておきます。

```sh
# EPEL6リポジトリの公開鍵を取り込む
sudo rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
# EPEL6リポジトリを追加する
sudo rpm --upgrade --verbose --hash https://dl.fedoraproject.org/pub/epel/6/$(uname --hardware-platform)/epel-release-6-8.noarch.rpm
# EPELリポジトリを無効化する
sudo yum-config-manager --disable epel
# EPELリポジトリを一時的に有効化してFreeTDSをインストールする
sudo yum install freetds --enablerepo=epel
```

```sh
# 旧バージョンのRPMパッケージを作成していれば、削除しておく
rm ~/rpmbuild/RPMS/*/apr-util-*.rpm
# 最新バージョン番号の取得
APR_UTIL_VERSION=$(wget https://www.apache.org/dist/apr/ --output-document=- | sed --quiet --regexp-extended '/<a name="aprutil">/ s/.+ ([.0-9]+) .+/\1/p')
# ソースファイルの取得
wget ftp://ftp.riken.go.jp/net/apache/apr/apr-util-$APR_UTIL_VERSION.tar.bz2 --directory-prefix ~/rpmbuild/SOURCES
# 署名ファイルの取得
wget https://www.apache.org/dist/apr/apr-util-$APR_UTIL_VERSION.tar.bz2.asc
# 署名の検証
gpg --verify apr-util-$APR_UTIL_VERSION.tar.bz2.asc ~/rpmbuild/SOURCES/apr-util-$APR_UTIL_VERSION.tar.bz2
# ソースRPMパッケージの作成
rpmbuild -ts --rmsource ~/rpmbuild/SOURCES/apr-util-*
# ビルドに必要なパッケージのインストール
sudo yum-builddep ~/rpmbuild/SRPMS/apr-util-*.src.rpm
# ビルド
rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/apr-util-*.src.rpm
# 署名ファイル、ソースRPMパッケージの削除
rm apr-util-*.asc ~/rpmbuild/SRPMS/apr-util-*.src.rpm

# インストール
sudo rpm --upgrade --verbose --hash ~/rpmbuild/RPMS/*/apr-util-*.rpm
```



distcacheのビルドとインストール 
================================

<b>[distcache](http://distcache.sourceforge.net/)</b>は、<b>Apache</b>のビルドに必要なパッケージですが、<b>APR 1.5</b>、<b>APR-util 1.5</b>と同じく標準のYumリポジトリなどには存在しません。また、<b>distcache</b>のソースファイルには、SPECファイルが含まれていません。そこで、[Fedoraリリース](http://fedoraproject.org/wiki/Releases "Releases - FedoraProject")のソースRPMパッケージを利用します。[^4] [^5]

まず[廃止されたパッケージ署名鍵](https://getfedora.org/keys/obsolete.html)から目的の公開鍵が置かれているURLを捜し、取り込みます。

```sh
# Fedora18の公開鍵を取り込む
sudo rpm --import https://fedoraproject.org/static/DE7F38BD.txt
```

以下のリポジトリ定義ファイルを新規作成し、リポジトリを追加します。リポジトリ定義ファイル (\*.repo) でシンタックスハイライトを有効化する場合は、[*.repo のシンタックスハイライト](http://qiita.com/100/items/5a07ab0abcabd1296ef8#-repo-%E3%81%AE%E3%82%B7%E3%83%B3%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B9%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88)を参照してください。



```ini:/etc/yum.repos.d/fedora.repo
[fedora-source-18]
name=Fedora 18 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/18/Fedora/source/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-source-18&arch=$arch
failovermethod=priority
enabled=0
```

```sh
# 旧バージョンのRPMパッケージを作成していれば、削除しておく
rm ~/rpmbuild/RPMS/*/distcache-*.rpm
# ソースRPMパッケージの取得
yumdownloader --source --enablerepo=fedora-source-18 distcache --destdir ~/rpmbuild/SRPMS
# 署名の検証
rpm --checksig ~/rpmbuild/SRPMS/distcache-*.src.rpm
# ビルドに必要なパッケージのインストール
sudo yum-builddep ~/rpmbuild/SRPMS/distcache-*.src.rpm
# ビルド
rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/distcache-*.src.rpm
# ソースRPMパッケージの削除
rm ~/rpmbuild/SRPMS/distcache-*.src.rpm

# インストール
sudo rpm --upgrade --verbose --hash ~/rpmbuild/RPMS/*/distcache-*.rpm
```

途中、`rpm`コマンドで署名を検証しています。`distcache-1.4.5-23.src.rpm: rsa sha1 (md5) pgp md5 OK`などと表示されれば問題ありません。署名の検証ができなかったときは、`pgp`が返りません。[^6]



Apacheのビルドとインストール 
=============================

[Apacheのダウンロードページ](http://httpd.apache.org/download.cgi "Download - The Apache HTTP Server Project")から、最寄りのミラーサイトのダウンロードURLを取得できます。

```sh
# 旧バージョンのRPMパッケージを作成していれば、削除しておく
rm ~/rpmbuild/RPMS/*/{httpd,mod_authnz_ldap,mod_lua,mod_proxy_html,mod_socache_dc,mod_ssl}-*.rpm
# 最新バージョン番号の取得
HTTPD_VERSION=$(wget https://www.apache.org/dist/httpd/ --output-document=- | sed --quiet --regexp-extended '/CURRENT-IS-/ s/.+>CURRENT-IS-([.0-9]+)<.+/\1/p')
# ソースファイルの取得
wget ftp://ftp.riken.go.jp/net/apache/httpd/httpd-$HTTPD_VERSION.tar.bz2 --directory-prefix ~/rpmbuild/SOURCES
# 署名ファイルの取得
wget https://www.apache.org/dist/httpd/httpd-$HTTPD_VERSION.tar.bz2.asc
# 署名の検証
gpg --verify httpd-$HTTPD_VERSION.tar.bz2.asc ~/rpmbuild/SOURCES/httpd-$HTTPD_VERSION.tar.bz2
# ソースRPMパッケージの作成
rpmbuild -ts --rmsource ~/rpmbuild/SOURCES/httpd-*
# ビルドに必要なパッケージのインストール
sudo yum-builddep ~/rpmbuild/SRPMS/httpd-*.src.rpm
# ビルド
rpmbuild --rebuild --clean ~/rpmbuild/SRPMS/httpd-*.src.rpm
# 署名ファイル、ソースRPMパッケージの削除
rm httpd-*.asc ~/rpmbuild/SRPMS/httpd-*.src.rpm

# index.htmlが存在すれば退避
cp /var/www/html/index.html ./
# インストール
sudo rpm --upgrade --verbose --hash ~/rpmbuild/RPMS/*/httpd{,-tools,-devel}-[0-9]*.rpm
# index.htmlを復元
sudo rm /var/www/html/index.html
sudo mv --force index.html /var/www/html/
```

実運用環境には、`apr`、`apr-util`、`httpd`、`httpd-tools`の4つのRPMパッケージをコピーし、インストールします。

```sh
# index.htmlが存在すれば退避
cp /var/www/html/index.html ./
# インストール
sudo rpm --upgrade --verbose --hash {apr,httpd}-*.rpm
# index.htmlを復元
sudo rm /var/www/html/index.html
sudo mv index.html /var/www/html/
```



Apacheの操作
============

| コマンド                              | 効果 |
|---------------------------------------|------|
| `apachectl -v`                        | バージョンを表示します。 |
| `apachectl configtest`                | 設定ファイルに文法ミスが無いか確認します。 |
| `sudo apachectl start`                | サービスを開始します。 |
| `sudo apachectl stop`                 | サービスを終了します。 |
| `sudo service httpd reload`           | 設定ファイルを再読み込みします。 |
| `sudo apachectl graceful`             | [緩やかに再起動](http://httpd.apache.org/docs/current/stopping.html#graceful "停止と再起動 - Apache HTTP サーバ")します。クライアントと通信中の子プロセスを強制終了せず、通信が終わったプロセスから順に新しいプロセスに置き換えていきます。 |
| `sudo apachectl restart`              | サービスを再起動します。 |
| `sudo service httpd restart`          | 親プロセスも含めて、サービスを完全に再起動します。 |
| `sudo tail /var/log/httpd/error_log`  | `tail`コマンドでエラーログの末尾10行を表示します。一般ユーザーには`/var/log/httpd`以下の読み込み権限が与えられていないため、エラーログやアクセスログの読み取りにはroot権限が必要です。 |
| `sudo tail /var/log/httpd/access_log` | `tail`コマンドでアクセスログの末尾10行を表示します。 |



参考ページ
==========

[^3]: [GnuPGの署名を確認する [[GnuPGのチュートリアル]]](http://www.confrage.com/security/pgp/pgp3_02.html)
[^4]: [CentOS6の練習-#10（Apacheのrpmを作る）。 | o6asan's soliloquy-part2](http://o6asan.com/blog-j/2012/08/23/centos6%E3%81%AE%E7%B7%B4%E7%BF%92-10%EF%BC%88apache%E3%81%AErpm%E3%82%92%E4%BD%9C%E3%82%8B%EF%BC%89%E3%80%82/)
[^5]: [CentOS 6.2 用に Apache 2.4.1 の RPM を作成する - akishin999の日記](http://d.hatena.ne.jp/akishin999/20120226/1330229289)
[^6]: [＠IT：rpmコマンドで警告が表示される](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/487warningrpm.html)