linux-igd(upnpd) runs on daemontools

2004/09/27 このページの内容は linux-igd 0.92 を対象としており、古いです。
本ページの内容(upnpd を daemontools で動かす)を含んだ、CVS における最新版の linux-igd を元にしたページを掲載しましたので、そちらをご覧下さい。(そのページ: linux-igd-0.99, libupnp-1.2.1a パッケージの利用方法)

linux-igdの必要性

linux-igd(Linux UPnP Internet Gateway Device)は、Linux上でUPnPサービスを行うためのデーモンです。
linux-igd自体の説明はgoogleで調べればたくさん出てきますので、ここではしません。
だけど、なぜ必要か位は書いておきます。(わたし的に)
実は、うちではLinuxがルータ代りになっています。これは、kernel-mode PPPoEを使ってるくらいだからわかると思います。
そこで、最近IP電話をやろうと思い、VoIPアダプタをレンタルしました。
もちろん、Linuxの配下に接続されています。
VoIPアダプタはUPnPルータを必要としますと書いてありましたが、ほんとかなぁ?と思いシカト。
導入する前の考えとしては、
と思っていました。
が、しかし、VoIPアダプタは本当にUPnPのリクエストをLAN内に飛ばし、その応答がかえってくるまでずっと、VoIPのサーバに接続しに行こうとすらしなかったのです。(※VoIPのサーバにRegistするまでIP電話は使用できません)
で、結局UPnPをLinuxに実装する必要性があると感じられたためlinux-igdを導入しました。

upnpdをコンパイルして動かしてみた

linux-igdのソースをとってきてコンパイルすると、upnpdというのがインストールされます。
これが、UPnPサービスを行うデーモンなわけです。
まぁ簡単に、upnpd ppp0 eth?とかやって動くわけです。
IP電話もしっかりと動くし問題ないと思ったんですが、こいつはfork()してバックグラウンドで動くため、daemontoolsで監視できないでわないか!

Don't fork upnpd

というわけで、forkの部分を消したわけです。
それ用のパッチ(for linux-igd 0.92)(コメントアウトするだけ)。
$ tar -zvxf linuxigd-0.92.tgz
$ cd linux-igd
$ patch < hogehoge/linuxigd-0.92.dontfork.patch
$ make
$ su
# make install
upnpd ppp0 eth?とやって、フォアグラウンドで動作すればOKです。

upnpd runs on daemontools

最後は、daemontools上で動かせば終了です。
スクリプト例としては、exec env - "/usr/bin" upnpd ppp0 eth? 2>&1
とかやって置けば動作するでしょう。
ログはmultilogではなくて、syslogに吐かれます(そこまでソース変えるのは嫌ですし)。
まぁ、とにかく、これでupnpdがダウンしたりしても、自動で再起動しますし、マシンをリブートしても自動でupnpdが立ち上がります。
2003/11/17注記 linux-igdの現行のリリース版にはメモリリークを起こすバグがあるようですので、新しいバージョンをインストールするか、定期的にupnpdを再起動した方がいいと思います。(svc -t /service/upnpdみたいな)
もどる

by 2001- (C) Watanabe Keiji <<Send Mail>>