CentOS
http2
CentOS6

CentOS 6.9環境にhttp2環境を構築しましょう

More than 1 year has passed since last update.

案外まだまだ国内のクラウドの会社だとCentOS6系しかない場合も有るかと思います。
CentOS7ならもっと簡単なhttp2環境の導入をCentOS6.9を利用してインストールしていきます。
(インストールを始める想定環境はCentOS6.9をminimalにてインストールした場合になります)
この手順に沿えばエラーなくインストール出来るかと思います。

ファイルのダウンロードの際にディレクトリを適宜ダウンロード用のディレクトリへ戻って下さい。
(ここでは cd ..といったコマンドは割愛します)

各種インストールの為の前準備

まずは必要なライブラリを入れるためにEPELを有効にします。

yum install epel-release

各種ライブラリなどのインストールに必要なライブラリをインストールします

yum install perl glib jemalloc jemalloc-devel libxml2-devel python-devel expat-devel pcre-devel wget gcc

これで前準備は大丈夫です。

pkg-configのインストール

pkg-configを利用するのでインストールを行います。

ソースファイルをダウンロード

wget https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz

インストール

tar -zxvf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --with-internal-glib
make
make install

c-aresのインストール

nghttp2で使うc-aresをインストールします。
※c-aresとはDNSへの問い合わせを非同期で行う事が出来るCのライブラリです。

ソースファイルをダウンロード

wget https://c-ares.haxx.se/download/c-ares-1.13.0.tar.gz

インストール
tar -zxvf c-ares-1.13.0.tar.gz
cd c-ares-1.13.0
./configure
make
make install

libevのインストール

こちらもnghttp2で使うlibevをインストールします
※libevは非同期処理を行う為のライブラリです

ソースファイルをダウンロード

wget http://dist.schmorp.de/libev/libev-4.24.tar.gz

インストール

tar -zxvf libev-4.24.tar.gz
cd libev-4.24
./configure
make
make install

openssl 1.0.2系のインストール

http2に対応させるためopenssl 1.0.2系をインストールします。

ソースファイルをダウンロード

(現時点では1.0.2系の最新は1.0.2mになります)
wget https://www.openssl.org/source/openssl-1.0.2m.tar.gz

インストール

既存のopensslとの競合があるのでインストールディレクトリを変更してインストールします。
tar -zxvf openssl-1.0.2m.tar.gz
cd openssl-1.0.2m
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl -fPIC shared
make
make install

pkg-config用のファイルをpkg-configのライブラリパスにコピーします

cp /usr/local/openssl/lib/pkgconfig/libcrypto.pc /usr/local/lib/pkgconfig
cp /usr/local/openssl/lib/pkgconfig/libssl.pc /usr/local/lib/pkgconfig
cp /usr/local/openssl/lib/pkgconfig/openssl.pc /usr/local/lib/pkgconfig

libxml2のインストール

ソースファイルをダウンロード

wget ftp://xmlsoft.org/libxml2/libxml2-2.9.6.tar.gz

インストール

tar -zxvf libxml2-2.9.6.tar.gz
cd libxml2-2.9.6
./configure
make
make install

janssonのインストール

※janssonとはC言語用のJSONパーサーです。

ソースファイルをダウンロード

wget http://www.digip.org/jansson/releases/jansson-2.10.tar.gz

インストール

tar -zxvf jansson-2.10.tar.gz
cd jansson-2.10
./configure
make
make install

libeventのインストール

※libeventは非同期でのイベント通知ライブラリです。

ソースファイルをダウンロード

wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

インストール

サンプルはいらないので除外してインストールします
tar -zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --disable-samples
make
make install

devtoolを利用してgccのバージョン2のインストール

centos6.9の標準だとgccのバージョンが古いためdevtoolを利用してgccのバージョン2をインストールします

リポジトリを設定します。

`wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo

インストールします

yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++ devtoolset-2-gcc-gfortran`

切り替える際には
scl enable devtoolset-2 bash
をコマンドで入れるか、bash_profileに上記コマンドを入れる必要があります。
(但しbash_profileに入れてしまうと、常にgccのバージョンが新しい状態になるので注意が必要です)

nghttp2のインストール

ソースファイルのダウンロード

wget https://github.com/nghttp2/nghttp2/releases/download/v1.28.0/nghttp2-1.28.0.tar.gz

gccのバージョンが古いままだとインストール失敗しますので、上げて無ければバージョンを上げておきます
scl enable devtoolset-2 bash

インストールします。

tar -zxvf nghttp2-1.28.0.tar.gz
cd nghttp2-1.28.0

こちらもサンプルはいらない為外しておきます
env CPPFLAGS="" OPENSSL_CFLAGS="-I/usr/local/openssl/include" OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto" LIBCARES_CFLAGS="-I/usr/local/include" LIBCARES_LIBS="-L/usr/local/lib -lcares" ZLIB_CFLAGS="-I/usr/include" ZLIB_LIBS="-lz" CFLAGS="-std=gnu11" CPPFLAGS="-I/usr/local/include -I/usr/include " ./configure --disable-examples
make
make install

apr及びapr-utilのインストール

apacheにopenssl1.0.2対応の為にapr及びapr-utilをインストールします。

ダウンロードします

wget http://ftp.kddilabs.jp/infosystems/apache//apr/apr-1.6.3.tar.gz
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-util-1.6.1.tar.gz

ライブラリへのパスを変更するためbash(適宜お使いのshellに変えて下さい)の設定を作ります
vi .bash_profile_ssl

if [ -n $LD_LIBRARY_PATH ]; then
echo "Add /usr/local/openssl/lib."
export LD_LIBRARY_PATH=/usr/local/openssl/lib:${LD_LIBRARY_PATH}
fi

設定を読み込みます
. ~/.bash_profile_ssl

aprをインストールします

tar -zxvf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure
make
make install

apr-utilのインストールします

その際に先ほどいれたaprのパス及び、自分でいれたopenssl1.0.2へのパスを設定します。
tar -zxvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --with-apr=/usr/local/apr --with-openssl=/usr/local/openssl
make
make install

Apache2.4のインストール

今までインストールした各ライブラリなどを組み込む形でapacheをインストールします。

ソースファイルをダウンロードします。

wget http://ftp.kddilabs.jp/infosystems/apache//httpd/httpd-2.4.29.tar.gz

インストールします

configureを行う際に、あらかじめインストールしていたnghttp2、apr、apr-utilを設定します。
tar -zxvf httpd-2.4.29.tar.gz
cd httpd-2.4.29
./configure --enable-http2 --enable-nghttp2-staticlib-deps --with-ssl=/usr/local/openssl/ --enable-so --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-include-apr=/usr/local/apr/include/ --enable-mpms-shared=all --enable-mods-shared=all --with-crypto

make
make install

環境構築完了!

これでインストールは完了になります。
apacheの設定を記述し、起動すればhttp2環境のできあがりです。
次回はPHPのインストール及びApache等の設定周りをご紹介できればと思います。