Apache2.2.0を導入

最近2.1シリーズが開発されているなぁと見ていたが既に2.2.0がリリースされていたのでインストールをしてみることにしました。元々準備しているサーバーではメモリーも少なくスワップ行きになりそうで恐いのですがどの道必要になってくるので導入。

最終構成としては、セキュリティレベルを上げるためのSUEXECとSSL通信(これはゲーム用アカウントの認証に使用)

とは言っても新しいバージョンになるので最初は標準インストール。

# tar zxf httpd-2.2.0.tar.gz
# cd httpd-2.2.0
# ./configure –prefix=/usr/local/apache
# make
# make install

インストール終了後はどのような構成か確認。
# /usr/local/apache/bin/httpd -V
Server version: Apache/2.2.0
Server built: Feb 12 2006 00:39:58
Server’s Module Magic Number: 20051115:0
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=”server/mpm/prefork”
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=”/usr/local/apache”
-D SUEXEC_BIN=”/usr/local/apache/bin/suexec”
-D DEFAULT_PIDLOG=”logs/httpd.pid”
-D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
-D DEFAULT_LOCKFILE=”logs/accept.lock”
-D DEFAULT_ERRORLOG=”logs/error_log”
-D AP_TYPES_CONFIG_FILE=”conf/mime.types”
-D SERVER_CONFIG_FILE=”conf/httpd.conf”

# /usr/local/apache/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c

dateコマンドで前日を取得

日付をファイル名に含んだログファイルをバッチ処理する際に前日の計算が必要になります。最初は前日の計算でネット検索していましたが、今日の日付から閏年まで考慮して自前で計算するスクリプトばかり出てきたので、なんとかもっとスマートな方法は無いかとdateコマンドの仕様を探って見つけた方法を紹介。

Linuxの場合
date –date ‘1 day ago’

FreeBSDの場合
date -v -1d

で前日を取得できます。
これをログファイルのフォーマットに合わせてシェルスクリプトに定義すると、

Linuxの場合
date=`date –date ‘1 day ago’ +%Y-%m-%d`
logfile=access_log.$date

FreeBSDの場合
date=`date -v -1d +%Y-%m-%d`
logfile=access_log.$date

で解決します。

diffとpatch

これは便利いいなー。今時はcvsというツールもあるが、そっちの方はまだよく使い方が判ってないので暫くはdiffで。

まず、hello.cの中のprintf文で表示するテキストの内容を変えてみる。差分を取るためには2つファイルが必要になるのでhello.cとコピーした後編集したファイルのhello2.cを作成。

# cp hello.c hello2.c
# vi hello2.c

次にdiffコマンドを使い差分をとる、因みにオプション無しの場合はファイル情報が出力されなかったのでpatchの当て方が判らなかったので-cか-uを使用する。両者の違いは次の通り。

# diff -u hello.c hello2.c
— hello.c Fri Dec 23 17:56:29 2005
+++ hello2.c Fri Dec 23 17:58:05 2005
@@ -2,7 +2,7 @@

int main()
{
– printf(“Hello, world!n”);
+ printf(“ハローワールド!n”);
return 0;
}

# diff -c hello.c hello2.c
*** hello.c Fri Dec 23 17:56:29 2005
— hello2.c Fri Dec 23 17:58:05 2005
***************
*** 2,8 ****

int main()
{
! printf(“Hello, world!n”);
return 0;
}

— 2,8 —-

int main()
{
! printf(“ハローワールド!n”);
return 0;
}

-cだと2つのソース全てを書き出してかなり冗長している。これなら-uでいいかな。通常はこれを差分ファイルとして保存するのでコマンドは『diff -c hello.c hello2.c > hello.diff』の様にする。

そして、実際にhello.cをhello2.cの状態にするには、
# patch < hello.c
でOK。もう一度同じコマンドを使用すると確認を要求されるがpacheを当てる前に戻してくれる。