MacOSX(10.3.x) で Zebedee を自動起動
自宅サーバへのトンネルをちょっと掘り直して Zebedee をもうちょっと便利に使うことにした。今まで ssh の多段 port forward だったので遅いうえに接続が面倒だったのだ。(その割にちゃんと朝の儀式になっていたのだけど。)
インストールと設定
しかし OS X で Zebedee を使ったことがなかったのでメモ。バージョンは 2.4.1A.
Zebedee の build は(個人的には何度もやってるってのもあるけど)とても簡単である。Zebedee のソース、ライブラリのソースを一カ所に落としてきてアーカイブを紐解き、
- Zebedee 以外のものは make だけ
で済む。
Zebedee については思うところがあったので、Makefile で
76c76
< ROOTDIR = /usr
---
> ROOTDIR = /usr/local
と修正を加える。で、
make OS=macosx; sudo make OS=macosx install
としてインストールする。bash では
export MANPATH=/usr/local/man:$MANPATH
として man が引けるようにしておく。設定ファイルは FreeBSD 使いとしては
/usr/local/etc/zebedee
に置きたいんだけど、ここは
/usr/local/lib/zebedee
で我慢しとく。Zebedee の設定ファイルの書き方はその辺の Web を見てください。
自動起動の設定
最初は xinetd を考えていたんだけど、xinetd 自体がよく分かっていない1ので面倒だなと思っていたところ、/System/Library/StartupItems/IPServices/IPServices とか眺めると何やら inetd 互換で動いているようで、そうすると /etc/services とかいじる必要があるんだけど、Zebedee の listen port って一つじゃない2し、xinetd 使うのはかえって面倒な気がしてきた。
そこで、システム起動時にcannaserverを起動する を参考に、OSX の作法に則ることに方針変更。
/System/Library/StartupItems/Zebedee
を掘って、
/System/Library/StartupItems/Zebedee/StartupParameters.plist
/System/Library/StartupItems/Zebedee/Zebedee
を用意。中身は
Zebedee
が
#!/bin/sh
##
# Zebedee.
##
. /etc/rc.common
# host XXXX.XXX.XXX
# 環境にもよるけど、DDNS だと反映が遅くて朝イチのトンネル作成に失敗することが
# ある。キャッシュさせるために一度名前解決しておくとよい。
exec="/usr/local/bin/zebedee -f /usr/local/lib/zebedee/client.zbd"
# ↑ 自分の設定に書き換える。
# 最後に & を置かない場合はちゃんと設定ファイルの中で detached true しておく。
pid=`ps ax | \grep zebedee | \grep -v "grep zebedee" | awk "{printf(\"%i\",\$1)}"`
StartService ()
{
if [ "${ZEBEDEE:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Starting Zebedee IP tunnel"
exec $exec
fi
}
StopService ()
{
ConsoleMessage "Stopping Zebedee"
kill -TERM $pid
}
RestartService ()
{
if [ "${ZEBEDEE:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Restarting Zebedee"
if [ -n $pid ]; then
kill -HUP $pid
else
exec $exec
fi
else
StopService
fi
}
RunService "$1"
なんか pid ファイルについて考えるのが面倒くさくなったので stop や restart のところで ps から 始まって何度も外部のコマンドを呼ぶ、ださいスクリプトになったけど気にしない。
StartupParameters.plist
が
{
Descrption = "Zebedee";
Provides =("ZEBEDEE");
OrederPreference="None";
Messages =
{
start = "Starting ZEBEDEE";
stop = "Stopping ZEBEDEE";
};
}
最後に、
/etc/hostconfig
に
ZEBEDEE=-YES-
を書き足して完成。
しかし、OSX でのこの方法って Linux で言う /etc/rc.d/ や FreeBSD の /usr/local/etc/rc.d/ に当たるものなんだろうけど、面倒くせぇなぁ。