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/ に当たるものなんだろうけど、面倒くせぇなぁ。

  1. RedHat系はほとんど使わないんで 

  2. 今回は一つじゃない設定にした 

More