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 nghttp2
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に依存しているソフトウェアは多いので、こればかりは一体いつリリースしてもらえるのか不明です。。。