2004年1月。
ローカル環境の HTTP サーバとして、
これまでは Windows 版 Apache を使っていたが、
これを Cygwin + Apache (Cygwin版) に変更した。
若干難儀した箇所があったので自分用にメモ。
(一応自分用だけどヘンなところが冗長。その割にところどころ情報不足)
追記: ここでは Apache 1.3 について記述してある。 Apache 2 (2.2) の場合はまた若干手順が違うので 「インストールメモ:Cygwin + Apache2 on Windows XP」 の方 (に書いてある参照サイト達) を参照のこと。
相変わらずウソを書いてる可能性があるのでご注意。
Windows版の場合、設定ファイル (httpd.conf、 .htaccess) や CGI などのパス記述にドライブレター (C: など) が必要だが、
Cygwin版の場合はこれが不要。
なので、
HTML コンテンツを UNIX 上の Web サーバにアップロードする前にローカルでチェックしたい、
などの用途には Cygwin版 Apache の方がなにかと便利。
(特に CGI の動作もローカルでチェックできるのとできないのの差は大きい、と思う)
これが今回 Windows版から Cygwin版に乗り換えた最大 (かつ唯一?) の理由。
追記: Cygwin版 Apache の CGI からは、
ドライブレター付パスもちゃんと認識される模様。
う〜ん…なんかちゃんと把握してなかった。
例えば Cygwin の bash 上から「cd c:/」と入れると、
ちゃんと「/cygdrive/c/」に移動するんだ。
ずっと Cygwin からはドライブレターは使えないモノと思い込んでいた…。(^^;
ただ Windows版は普通にインストールして起動させれば、
あとは Windows 起動時に自動的にサービスが起動するようになるが、
Cygwin版の場合は別途 cygrunsrv というプログラムが必要。
cygrunsrv を使うこと自体大した手間ではないが、
この形での「Windows のサービスへの登録」にはちょっとクセがあるようなのでそこんとこだけ注意。
なお cygrunsrv は Cygwin の setup からインストールできる。
既に Windows用 Apache がインストール・動作している場合はサービスを止めてアンインストールしとく。
Cygwin 用の setup.exe で最新版をインストール。
Cygwin版 Apache の最新版のバージョン番号は一般的 (?) にリリースされているものより古いが、
セキュリティ面の手当てなどは済んでいるので心配無用、らしい…。
cygrunsrv --help の出力。↓
Usage: cygrunsrv [OPTION]...
Main options: Exactly one is required.
-I, --install <svc_name> Installes a new service named <svc_name>.
-R, --remove <svc_name> Removes a service named <svc_name>.
-S, --start <svc_name> Starts a service named <svc_name>.
-E, --stop <svc_name> Stops a service named <svc_name>.
-Q, --query <svc_name> Queries a service named <svc_name>.
Required install options:
-p, --path <app_path> Application path which is run as a service.
Miscellaneous install options:
-a, --args <args> Optional string with command line options which
is given to the service application on startup.
-c, --chdir <directory> Optional directory which will be used as working
directory for the application.
-e, --env <VAR=VALUE> Optional environment strings which are added
to the environment when service is started.
You can add up to 255 environment strings using
the `--env' option.
Note: /bin is always added to $PATH to allow all
started applications to find at least cygwin1.dll.
-d, --disp <display name> Optional string which contains the display name
of the service. Defaults to service name.
-f, --desc <description> Optional string which contains the service description.
-t, --type [auto|manual] Optional start type of service. Defaults to `auto'.
-u, --user <user name> Optional user name to start service as.
Defaults to SYSTEM account.
-w, --passwd <password> Optional password for user. Only needed
if a user is given. If a user has an empty
password, enter `-w '. If a user is given but
no password, cygrunsrv will ask for a password
interactively.
-s, --termsig <signal> Optional signal to send to service application
when service is stopped. <signal> can be a number
or a signal name such as HUP, INT, QUIT, etc.
Default is TERM.
-y, --dep <svc_name2> Optional name of service that must be started
before this new service. The --dep option may
be given up to 16 times, listing another dependent
service each time.
-0, --stdin <file> Optional input file used for stdin redirection.
Default is /dev/null.
-1, --stdout <file> Optional output file used for stdout redirection.
Default is /var/log/<svc_name>.log.
-2, --stderr <file> Optional output file used for stderr redirection.
Default is /var/log/<svc_name>.log.
-o, --shutdown Stop service application during system shutdown.
-i, --interactive Allow service to interact with the desktop.
Informative output:
-h, --help print this help, then exit.
-v, --version print cygrunsrv program version number, then exit.
cygrunsrv でキックするアプリケーションは、
デーモンを fork せずそのまま動作するプロセスとして起動する必要があるらしい。
Apache の場合、 -k オプションをつけて起動する。
2004-2-16 追記 : apache 1.3.29-2 でのオプション変更 "-k" -> "-F" (2004.02.13) (Discypus.jp Wiki Cygwin/apache) によると、
Cygwin 版 Apache 1.3.29-1 以降では -k のかわりに -F を使うよう仕様が変更になったとのこと。
(元々 -k は Cygwin版 Apache 独自の起動オプションだったそうで、
本家で同機能のオプションが -F としてサポートされたんでそっちに合わせるようになったらすぃ)
httpd.conf を適宜編集。
Apache がエラーなくちゃんと起動し、サーバとして動作することを確認する。
(「apachectl start」「apachectl stop」を使用)
Cygwin の shell (bash) 上から、 cygrunsrv で Apache を Windows のサービスに登録する。
cygrunsrv -I apache -p /usr/sbin/httpd -a -k
(↑前出の理由により、 Apache 1.3.29-1 以降では -k のかわりに -F を使用のコト)
“apache”は登録したいサービス名 (テキトー) 。
“/usr/sbin/httpd”は Cygwin版 Apache のデフォルトの (Cygwin 上から見た) インストール先。
“-k” (Apache 1.3.29-1 以降は “-F”) は Apache をデーモンではなく通常プロセスとして起動させるための (Apache の) オプション。
Windows の「コントロールパネル」→「管理ツール」→「サービス」を開き、 「apache」のサービス名でデーモン (つーかサービス) が登録されて動いていることを確認。
「apachectl start」では問題なく起動するのに、
5. の段階で「cygrunsrv 〜」ではちゃんと起動せずエラーメッセージを吐き出して終了しちゃう場合。
基本的には、エラーログ
/cygwin/var/log/apache/error_log (← httpd.conf のデフォルト設定ではこのパス・ファイル名) や、
Windows の「イベント ビュア」→「アプリケーションログ」などを見てエラーの原因を探す。
User Guest
Group Guests
/var/log/apache/access_log (ファイル名は httpd.conf での設定によって別名の場合あり) のパーミッションが、
644 になっていたりすると書き出しができないらしいので、
これを 666 に設定する。 (chmod +w /var/log/apache/access_log)
ワシの場合、以上の 2点でとりあえずちゃんと起動するようになった。
logrotate などを使ってログを随時入れ換える場合などは、 ログファイルのパーミッションはどうすればいいのかとか別に対処しなくてもいいのかとか、 そのへんのことはちゃんと追求していないが、 まァ外部公開用ではない (localhost からしかアクセスしない) サーバなので、 大してログもたまらないし、 サービスをいつ止めても誰も困らないので、 適宜手動で削除するなりなんなりしてその都度テキトーに対処予定。
以上。