Raspberry Pi 2でサーバ作ってみる(9) 〜Apacheビルド その1〜

参考にしたサイト
サーバー管理 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

ApacheSamba同様、Raspberry Piではメジャーな使い方ですね。
ただ、apt-getで入れるやり方が多くて、ソースからビルドしているのは少なめ。
※もともと他のディストリでもビルドしてるのは少ないですが。。。

自分はもともとCentOSでサーバを作っていたので、Debian系でApacheをソースからビルドするのは初めて。
といってもそんな変わらないかなーと思い、とりあえずやってみることに。

まずはユーザを追加します。

#ユーザの追加
groupadd -g 501 apache
useradd -M -u 501 -g apache -s /bin/false apache

SSLを使うことを考え、OpenSSLをビルドしておきます。

#ソースを取得して解凍
wget https://www.openssl.org/source/openssl-1.0.2d.tar.gz
tar -xvzf openssl-1.0.2d.tar.gz; mv openssl-1.0.2d openssl
#コンパイルとmake
cd openssl
./config \
  -fPIC \
  shared \
  zlib
make; make install
#インストールされたか確認
openssl version
#元の場所に戻る
cd ../

次に、必要なモジュールをインストールしておきます。
CentOSの時と名前が違っていた。
自明かもしれない: Apache 2.4 系をソースからインストールします

#必要なモジュール
apt-get -y install libpcre3 libpcre3-dev

いよいよApacheをビルドしていきます。まずはソースの取得。
Apache本体以外に、ビルド時のエラーを回避するため、APRの最新版をソースに組み込んでおきます。

#ソースダウンロード
#Apache本体
wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.16.tar.gz
#解凍してhttpdという名前のフォルダにしておく
tar -xvzf httpd-2.4.16.tar.gz; mv httpd-2.4.16 httpd
#APR
wget http://ftp.riken.jp/net/apache/apr/apr-1.5.2.tar.gz
#解凍してApacheのソースに移動させる
tar -xvzf apr-1.5.2.tar.gz; mv apr-1.5.2 httpd/srclib/apr
#APR-Util
wget http://ftp.riken.jp/net/apache/apr/apr-util-1.5.4.tar.gz
#こちらも解凍してApacheのソースに移動させる
tar -xvzf apr-util-1.5.4.tar.gz; mv apr-util-1.5.4 httpd/srclib/apr-util

いよいよビルド。ビルドオプションは次の通り。
mod_rewriteとmod_proxy、mod_sslを適用しています。

cd httpd
#ビルド
./configure \
 --enable-so \
 --enable-rewrite=shared \
 --enable-proxy=shared \
 --enable-proxy-ajp \
 --enable-ssl \
 --with-ssl=/usr/local/ssl \
 --with-included-apr
#make & インストール
make; make install

エラーがなくインストールできたら、次は設定です。

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ if (pre.className.indexOf("gist") !== -1) { return } var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)