戻る

Cygwinで便利!

ソースから make を行う関係上、できたバイナリの動作は
Cygwin のバージョンにかなり依存するようです。
不安定な Cygwin のバージョンでもサービス化や起動はできますが、
最初のパケットを受けた瞬間にサービスが落ちたりします (-_-;

どのバージョンが確実に動くかというの問いの全てには答えられませんが、
Cygwin 1.3.12 と 1.3.22 と 1.5.7 と 1.5.9 では完璧な動作を確認をしました。
記述については Cygwin 1.5.9 上での情報を元に行います。
また、このページでの作業は Administrators に所属しているユーザで
行うことを想定しています。
戻る

syslog-ng を使う

なぜ syslog-ng を使うのか

Cygwin のログは Windows NT / 2000 系の場合
イベントログに出力され、普通の状態なら syslog サーバは必要ありません。
しかし、Linux / UNIX / ルータ / L3SW / L4SW などをもっていて、
別途 syslog でログを集めたいとなると別です。
そういう場合には syslog サーバはリモートにログを残す標準ですし必須です。
Cygwin の標準で準備されていないので ソース から make して作っちゃいましょう。
どうせ make するのですから、高機能なものにしましょう。
ってわけで白羽の矢が立ったのが syslog-ng です。
syslog-ng を標準の syslog サーバと比べると
  1. フィルタの機能が強力(自由に定義できる)
  2. 出力ファイルの状態も詳しく定義できる
  3. もちろんMB(マルチバイト=日本語)にも対応
  4. 当然、任意の文字コードに対応
  5. TCP での syslog 転送が出来る
なんて感じのメリットがあります。
これに対抗できるのは Windows 上ではWinsyslogぐらいで
かなりおすすめの syslog です。

必要なソースの準備 (syslog-ng 本体とライブラリ)

まずは問答無用で syslog-ng のソースが必須です。
これがないと話が始まりません。
ただし、1.6.x 及び 1.9.x は make できませんでしたので、
以下のリンクから 1.4.x の syslog-ng 本体と 0.2.x のライブラリを取得してください。
このとき、ブラウザやサーバによっては gz の圧縮が解凍された、
tar パッケージになることがあるので、注意しておいてください。

http://www.balabit.com/downloads/syslog-ng/1.4/
http://www.balabit.com/downloads/libol/0.2/

ここでは、libol-0.2.24.tar.gz syslog-ng-1.4.17.tar.gz を
ダウンロードしたとして話を続けます。
# ちなみに 1.9.x は Glib を使うのですが、Glib を準備しても正常に make 出来ませんでした。
# 1.6.x は BIND を make してヘッダファイルまで準備したのですが正常に make できませんでした。

./configure ; make ; make install

ソースが準備できたら、make しましょう。
「make ってなにやらよくわかんないっ!」って人は、
二つのファイルを同じディレクトリに置いて、そこをカレントディレクトリにして
その後は私が書いているとおりに実行すれば多分大丈夫です。

まずはライブラリを作ります。
$ tar zxvf libol-0.2.24.tar.gz
$ cd libol-0.2.24
$ ./configure
$ make
$ cd ..

次に syslog-ng 本体を作ってインストールです。
$ tar zxvf syslog-ng-1.4.17.tar.gz
$ cd syslog-ng-1.4.17
$ ./configure --with-libol=../libol-0.2.24
$ make
$ make install
$ strip /usr/local/sbin/syslog-ng.exe

プロンプトが帰ってくれば完了です。
ログがとりたければご自由にどうぞ。
(私は make install だけログをとります)

Windows 上のサービスにインストール

make install までがすんだら、syslog-ng を Windows 上のサービスにインストールしましょう。

以下のコマンドを実行すればインストールできます。
$ cygrunsrv -I syslog-ng -d "CYGWIN syslog-ng" \
> -p /usr/local/sbin/syslog-ng \
> -a -d -e "CYGWIN=ntsec nosmbntsec"

以上で、syslog-ng が "CYGWIN syslog-ng" という名前でサービスに登録されました。

実際に使う

インストールが完了したら設定をしましょう。
まずは設定ファイルの準備からです。
以下のファイルを /etc/syslog-ng/syslog-ng.conf として配置してください。

設定のテンプレート用 syslog-ng.conf

その後は owner/group とパーミッションの設定です。
(以下のものは標準の設定より、より現実的なパーミッションです)
/var/log の内容(抜粋)
drwxrwxr-x+   4 SYSTEM   admins      4096 Feb  8 02:57 ./
drwxr-xr-x+  11 admin    admins      4096 Feb  8 02:11 ../
drwxrwxr-x+   2 SYSTEM   admins         0 Feb  8 02:13 syslog-ng/
'ls -l' で表示される属性の一番右に "+" がついているのは
owner / group / other の rwx で表示できる以外のアクセス権が
ついていることを示していて、大雑把にいうと
NTFS 上のアクセス権設定で SYSTEM アカウントに
アクセス権 (フルコントロール) がついているということです。
# 詳しく知りたい方は getfacl と setfacl を調べてください

ですので、まずは上記のディレクトリ配下に相当する
Windows 上のフォルダに対して、NTFS で SYSTEM ユーザに
フルコントロールのアクセス権を設定します。
その後、chown chmod で上記のようなアクセス権設定としましょう。
おそらく以上で起動できるようになると思います。


動作が確認できたら、Web 等で記述方法を読みながら
/etc/syslog-ng/syslog-ng.conf を改めて設定しましょう。
配布したままの設定では
任意のホストから送られたsyslogすべてを受信します。
そのままの設定でホストが Internet などで公開されてると、
悲しい目を見る可能性があります。
配布している syslog-ng.conf には実際に使用する際の情報源を
いっぱい引用しているので参考にして正しく設定してください。

ちなみに、Cygwinは内部で発生する syslog はイベントログに書き込むように
なっており、変更はできません(方法を知りません)。
ですから、
source stdlog { unix-stream("/dev/log"); }; なんて事をしてはいけません。

トラブルに対処する

syslog-ng を使う際に、「サービスを起動できない」という問題がたまにあります。
この場合はほぼ間違いなく owner/group 及び パーミッションの設定ミスです。

syslog-ng の本体を構成するものがある場所、
ログの出力先などをよく確認してください。

特に気をつけなければならない点として、
Windows 上のフォルダに対して、NTFS で SYSTEM ユーザに
アクセス権が必要だという点です。
make install でインストールすると、
NTFS での アクセス権の継承が起こりませんので
サービスが起動しないときは GUI でも確認することが必須です。

戻る

syslog-ng を使わなくなったら

Windows 上のサービスからアンインストール

Cygwin をアンインストールするときや、
syslog-ng を使わなくなったときなどはサービスからアンインストールしましょう。

以下のコマンドでアンインストールができます。
$ cygrunsrv -R syslog-ng
サービスから名前が消えていることを確認してください。
Valid XHTML 1.0 Strict Valid CSS!
戻る