CentOS7にApache2.4最新版をyum installする

Updated / Published

CentOS7.3(1611)にyumでApache2.4をインストールしようとした場合、2017年1月の現時点ではApache2.4.6系の古いバージョンが通常インストールされてしまいます。HTTP/2の処理をするmod_http2はApache2.4.17のバージョンからのため、HTTP/2を導入するにはこれ以降のバージョンが必要です。2017年1月執筆時点ではApache2.4.25(mod_http2 のサービス運用妨害の脆弱性 - CVE-2016-8740にも対応済)が最新版です。Apache2.4.25をCentOS7にインストールする方法をGoogleで検索しても、ソースコードからインストールする手順を公開しているところしか見当たらなかったため、本稿では最新のRPMパッケージを揃えているIUSをyumのリポジトリに追加して、yumでApache2.4の最新版をより安全にインストールする手順についてご紹介します。

最新RPMパッケージを揃えるIUS

CentOS公式サイトからも承認リポジトリとして掲載されているApacheの最新版を提供している外部リポジトリに、RHELとCentOS用の最新ソフトウェアのRPMパッケージを提供する活動をしているIUSというコミュニティプロジェクトがあります。

IUSのプロジェクト目標 として新しいバージョンがリリースされれば、更新されたRPMパッケージを即座にリリースするよ!と掲げられてあるように、最新のRPMパッケージを揃えてくれており、IUSのリポジトリを利用することでCentOS7用にもApache2.4の最新版をインストールすることができます。

2017年1月執筆時点での最新はApache2.4.25ですが、この記事をご覧の時点でより新しいバージョンがリリースされているかどうかはIUSのアーカイブページからご確認ください。

1.IUSのリポジトリをインストールする

yum installに続いて、CentOS7用のリポジトリ設定のURLを指定します。

yum -y install https://centos7.iuscommunity.org/ius-release.rpm

2.IUSのリポジトリをデフォルトからはずす

IUSのリポジトリがインストールされると、初期設定では、yumコマンドの実行時にIUSのリポジトリが自動的に使用されるようになっています。IUSはCentOSから正式に承認されているリポジトリのため信頼性は高いと思われますが、それでもCentOSの正式なパッケージを配布するリポジトリではありませんので、カーネルを含めて基本的なパッケージのアップデートやインストール時は、対象にならないようにデフォルトから外しておくのが良いでしょう。

vi /etc/yum.repos.d/ius.repo
[ius]
...
enabled=0 #enabled=1から変更
...

必要パッケージの事前インストール

httpdへのインストールへと移りたいところですが、事前に必要になるパッケージがあるので、それらをインストールします。

Nghttp2のインストール

Apache2.4でHTTP/2の処理をするmod_http2には、コアエンジンとしてNghttp2が必要になるので、これを事前にインストールします。Nghttp2は、頻繁に更新されているのですが、あくまでもオープンなリポジトリのRPMでインストール管理したい場合、バージョンは古いですがepelのリポジトリしか配布していないため、epelからインストールします。

ちなみに、さくらVPSのCentOS7では、epelのリポジトリが初期設定からインストールされており、自動的に使用されるようになっていました。

yum --enablerepo=epel -y install libnghttp2

epelのリポジトリがない場合は、epelのリポジトリを追加してからインストールしてください。また、インストール後の/etc/yum.repos.d/epel.repoにあるenabled=1を必要に応じて書き換えておいてください。

yum -y install epel-release
vi /etc/yum.repos.d/epel.repo
[epel]
...
enabled=0
...

/etc/mime.typesのインストール

もうひとつ、事前にインストールが必要になるパッケージがあります。/etc/mime.typesパッケージです。/etc/mime.typesパッケージはmailcapパッケージの中に含まれています。baseリポジトリからインストールできます。

yum -y install mailcap

これで準備は整いました。

IUSリポジトリからyum install

まず、すでにApacheをインストールしている場合は、この時点で削除しておいてください。その際、service httpd stopを行なってからyum removeします。他の依存関係のパッケージもこのとき削除されるので、何が削除されたかをメモをとっておき、再度インストールするようにしましょう。

service httpd stop
yum remove httpd

バージョンの違う同じパッケージ名で重複を起こさないように、今回使用するリポジトリをIUSに絞ります。IUSのリポジトリのみを利用するには無効化するdisablerepoオプションとIUSリポジトリを有効にするenablerepoのオプションをつけて、yum installを実行します(他のリポジトリを有効にしている方はdisablerepoオプションに適宜追加してください)。

yum --disablerepo=base,extras,updates --enablerepo=ius install httpd

Apache2.4最新版がインストールできることが確認できるはずです。2017年1月時点では、

インストール:
  httpd24u.x86_64  2.4.25-1.ius.centos7

となります。yでインストールを実行し、インストールが完了したらバージョンを確認します。

httpd -v
Server version: Apache/2.4.25 (CentOS)
Server built:   Dec 20 2016 15:15:56

他にmod_sslも忘れずにIUSのリポジトリからインストールしておきましょう。httpd-develも必要な場合は、事前にopenldap-devel, expat-develが必要になるので、インストールしておきます。

yum -y install openldap-devel expat-devel
yum --disablerepo=base,extras,updates --enablerepo=ius -y install httpd-devel mod_ssl

以上、CentOS7にApache2.4最新版を簡単にyum installすることができました。新しいバージョンが出たときも、RPMで管理しておけば以下のupdateだけで完了します。

yum --disablerepo=base,extras,updates --enablerepo=ius -y update

完全なHTTP/2対応にはOpenSSL1.0.2系を待つのみ

Apache2.4最新版がインストールできたことで、HTTP/2が導入できるのかというと、残念ながらそうではありません。HTTP/2には、ALPNに対応したOpenSSL1.0.2系が必要です。ALPNは、暗号化接続開始の際にクライアントからHTTP/1.1で接続できるのかHTTP/2で接続できるのかといったプロトコルのリストをサーバ側に送信してもらい、サーバ側がどのプロトコルで接続するかを選択する仕組みです。その逆の仕組みにNPNというものがあり、こちらはサーバ側がHTTP/1.1、HTTP/2などの接続可能なプロトコルのリストをクライアントに送信し、クライアント側がどのプロトコルで接続するかを選択します。

OpenSSLは1.0.1dからNPNをサポートしていますが、ALPNはOpenSSL1.0.2からであり、CentOSからリリースされているOpenSSLのバージョンはOpenSSL1.0.1eとなっています。CentOS以外の各LinuxディストリビューションもOpenSSL1.0.1系止まりが多く、OpenSSL1.0.2系はまだUbuntu16.04とFedora25ぐらいです。CentOSでは、あくまでもRPM管理のみで完全なHTTP/2を実現させたい場合、ALPNに対応したOpenSSL1.0.2系が正式リリースされるのを待つしかありません。OpenSSL1.0.1系が2016年12月31日をもってサポートを終了した(以降、脆弱性が出てきても更新しない)のですが、OpenSSLに依存しているソフトウェアは多いので、こればかりは一体いつリリースしてもらえるのか不明です。。。