Apache2.4.3をソースからインストール

apache2.4.3をソースからインストールしたのでメモ

ソース取得から展開まで

ソースは、Apacheのサイトから取得する。

# cd /usr/local/src/
# ls
# wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.3.tar.gz
# ls
httpd-2.4.3.tar.gz
# tar xvfz httpd-2.4.3.tar.gz
# rm -rf httpd-2.4.3.tar.gz

必要なライブラリ群のインストール

必要なライブラリをインストールする。gccとかmakeとか

./configure でエラー見て確認でいいのだろうか、、?
yumの開発ツール一括インストールすれば一気に入るけど、余計なものもたくさん入ってしまう。
必要なのはほとんど入ってるっぽいので、Development toolsのくだりは飛ばし。

# yum grouplist | grep Development
Development tools
Additional Development
Desktop Platform Development
Server Platform Development
# yum groupupdate "Development tools"
# yum groupinfo "Development tools"
# yum groupinstall "Development tools"

APRとAPR utilをインストールする。

# wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.4.6.tar.gz
# tar xvfz apr-1.4.6.tar.gz
# rm apr-1.4.6.tar.gz
# cd apr-1.4.6/
# ./configure
# make
# make install
# wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.5.1.tar.gz
# tar xvfz apr-util-1.5.1.tar.gz
# cd apr-util-1.5.1
# ./configure --with-apr=/usr/local/apr/
# make
# make install

pcreをインストールする。

# yum install pcre-devel

コンパイルからインストール

Apacheには、様々な機能がありそれらを静的もしくは動的に組み込むことができる。

  • 静的に組み込むとは、コンパイル時に組み込むことを指す。
  • 動的に組み込むとは、起動時に呼び出すよう設定することを指す。

使用の有無にかかわらずLoadModuleされている機能は必ず読み込む。
違いは、コンパイルし直さなくても設定ファイルを編集して再起動することによって動作の有無を変更できる点にある。
動的機能を利用するためには、mod_soを静的に取り込む必要がある。
間違ってたらゴメンナサイ、、、(._.)
今回は、mod_soとmod_sslmod_rewriteを静的に取り込み、その他を動的オブジェクトとして取り込む。( --enable-mods-shared=allで全てがはいるわけではないっぽい)
その前に、opensslのバージョンが古いみたいなので怒られたのでインストールする。

# yum install openssl-devel
# ./configure --enable-so --enable-ssl --enable-module=rewrite --enable-mods-shared=all
# make
# make install

※ 環境によって、足りないライブラリは異なるのでその都度インストールすること。

起動スクリプトとサービス登録

# cp /usr/local/src/httpd-2.4.3/build/rpm/httpd.init /etc/init.d/httpd
# chkconfig --add httpd
# chkconfig httpd on
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#vi /etc/init.d/httpd
# パスを変更
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
CONFFILE=/usr/local/apache2/conf/httpd.conf
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}

起動確認

# /etc/init.d/httpd start
Starting httpd: [ OK ]

ブラウザからIt worksが表示されることを確認する。

バージョン確認

# /usr/local/apache2/bin/httpd -v
Server version: Apache/2.4.3 (Unix)
Server built: Oct 8 2012 21:09:07

実行ユーザの設定

サーバーが不正にアクセスされた場合でも被害を最小限に抑えるために、必要最低限の権限を持ったユーザーでサーバを実行する。
Apache用ユーザーを作成してそのユーザーがサーバーのリクエストに応答するように設定する。
ちなみに、root権限で立ち上げた後、設定ファイルのユーザで子プロセスを起動してるよう。

# groupadd apache
# useradd -g apache -d /var/empty/apache -s /sbin/nologin apache
# vi /usr/local/apache2/conf/httpd.conf

# apacheユーザとグループに変更
User apache
Group apache

# chown -R apache:apache /usr/local/apache2/htdocs/*
# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
# ps axuwf | grep httpd
root 30293 0.0 0.0 6380 660 pts/0 S+ 22:33 0:00 \_ grep httpd
root 30179 0.0 0.1 75576 2912 ? Ss 22:11 0:00 /usr/local/apache2/bin/httpd
apache 30181 0.0 0.2 485372 5136 ? Sl 22:11 0:00 \_ /usr/local/apache2/bin/httpd
apache 30182 0.0 0.2 485372 5152 ? Sl 22:11 0:00 \_ /usr/local/apache2/bin/httpd
apache 30183 0.0 0.2 419836 4616 ? Sl 22:11 0:00 \_ /usr/local/apache2/bin/httpd

ログローテート

accsess_logとerror_logをログローテートさせる。
今回は月1でログローテート。

/usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log {
missingok
notifempty
monthly
sharedscripts
postrotate
/sbin/service httpd graceful 2> /dev/null || true
endscript
}

調べまくってわっと書いたので、間違いたくさんあるかも知れませんがご容赦くださいmm