2012/03/31 Apacheスタートスクリプト読書会だん


みなさんこんにちわ。少しだけ遅くなってしまいましたが、Apacheスタートスクリプト読書会をやってきましたのでレポートします。さっそく上田会長がこんな記事こんな記事でレポートを書かれているので、全体の流れはおわかりいただけたかと思いますので、私は違う視点から書いてみたいと思います。当日の発表資料はこちらになります。

また、冒頭に @hi_saito さんによるawkでアクセスログ解析のライトニングトークもありました。

何を読んだの?

CentOS release 5.8 (Final) にインストールした最新版のApache (httpd) のスタートスクリプト /etc/init.d/httpd および /usr/sbin/apachectl を読んでみました。読書会開催時の最新パッケージは httpd-2.2.3-63.el5.centos.1 です。時間があれば、 /etc/sysconfig/httpd や /etc/init.d/functions も読みたかったのですが、そこまでの時間が取れず・・・。

気になった関数

上から順に読んでいって、1箇所気になる関数を発見。末尾のcase文には出てこない「check13」関数なのですが、これが何のためにあるのか非常に気になりました。ソースは以下。

[cc lang='text' ]
# check for 1.3 configuration
check13 () {
CONFFILE=/etc/httpd/conf/httpd.conf
GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
GONE="${GONE}AccessConfig|ResourceConfig)"
if LANG=C grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
echo
echo 1>&2 " Apache 1.3 configuration directives found"
echo 1>&2 " please read /usr/share/doc/httpd-2.2.3/migration.html"
failure "Apache 1.3 config directives test"
echo
exit 1
fi
}
[/cc]

これなんですが、Apache1.3で使っているディレクティブをhttpd.confから探して、GONE変数にリストアップされているものが見つかったら異常終了させるというやつです。例えば、80番ポートでhttpを待ち受ける場合、

[cc lang='text' ]
Listen 80
[/cc]

[cc lang='text' ]
Listen 192.168.0.1:80
[/cc]

などのように書きますが、Apache1.3の頃の癖で

[cc lang='text' ]
Port 80
[/cc]

と書いてApacheを起動しようとすると、check13関数によって「それ違うよー」と怒られてしまうんですね。

頭痛が痛い

次にstart関数まで読み進めて気がついたのですが、ここで先程のcheck13関数が出てきて、古臭いディレクティブのチェックに引っかかったら異常終了しまs・・・あれ?

[cc lang='text' ]
start() {
echo -n $"Starting $prog: "
check13 || exit 1
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
[/cc]

check13関数でexit 1してるのに、またexit 1してる!(start関数の3行目に注目。「check13 || exit 1」) なんぞこれwww 頭痛が痛いって言ってるようなものじゃないかwww 「check13で異常終了したら異常終了する」ってドヤ顔で言われてもなあ・・・まるで頭痛が痛いと言われているようなものだw

ここまで読み進めたところでタイムアップとなりましたが、普段気づかない発見があるなど非常に有意義な勉強会となりました。また読書会シリーズをやりたいと思います。





02:46 2012/04/04 追記

ブログを書いてくださった方々




[hichonのBlog]

http://hichon.cocolog-nifty.com/blog/2012/03/apache-bc76.html


[わからん]

http://d.hatena.ne.jp/kitokitoki/20120331/p2


[Happy Hacking Life]

http://d.hatena.ne.jp/nsymtksjp/20120323/1332453218