ごく一部で話題になり初めてるようですが、polipoは個人用にネットワークの高速化に特化したプロキシーサーバーで、実際試してみたところ、光の自宅回線ですら、mixiやFlickrが劇的に快適になったので、感動のあまり、Mac用GUIを作成しちゃいました。ということなので、polipoを導入してみました。
Mac OS用のGUIはこちらのページに任せるとして、polipoのインストールの方を・・・。
Polipo is a small and fast caching web proxy (a web cache, an HTTP proxy, a proxy server). While Polipo was designed to be used by one person or a small group of people, there is nothing that prevents it from being used by a larger group.
tarballをとってきて、解凍した後に、
$ make all $ sudo make installであっさりインストールできてしまう。
このままだと再起動時にサービスが起動しないので、ドキュメントを確認してみる。
The /System/Library/StartupItems directory is reserved for startup items that ship with Mac OS X. All other startup items should be placed in the /Library/StartupItems directory. Note that this directory does not exist by default and may need to be created during installation of the startup item.しばらくMacを使っていない間に、launchdで管理するようになっていたとは・・・。
lookupdとかは、過去の遺物ですか。
気を取り直して、起動スクリプトを書いてみる。
$ sudo mkdir /Library/StartupItems/Polipo
$ cat > /Library/StartupItems/Polipo
#!/bin/sh
. /etc/rc.common
PATH=$PATH:/usr/local/bin;
# The start subroutine
StartService() {
# polipo daemonise=true logFile="/var/log/polipo.log"
polipo logFile="/var/log/polipo.log" &
}
# The stop subroutine
StopService() {
killall polipo
# killall -9 mydaemon
}
# The restart subroutine
RestartService() {
# killall -HUP polipo
StopService
StartService
}
RunService "$1"
^D
$ cat > /Library/StartupItems/Polipo/StartupParameters.plist
<plist version="1.0">
<dict>
<key>Description</key>
<string>a caching web proxy</string>
<key>Messages</key>
<dict>
<key>start</key>
<string>Starting Polipo</string>
<key>stop</key>
<string>Stopping Polipo</string>
</dict>
<key>OrderPreference</key>
<string>None</string>
<key>Provides</key>
<array>
<string>Polipo</string>
</array>
<key>Uses</key>
<array>
<string>Network</string>
</array>
</dict>
</plist>
^D
$ chmod 755 /Library/StartupItems/Polipo/Polipo
操作はSystemStarter経由でするのが正しいらしい。
$ /sbin/SystemStarter start "Polipo" $ ps awx|grep polipo 53075 ?? S 0:01.28 polipo logFile=/var/log/polipo.log 53148 s000 R+ 0:00.00 grep polipo $ sudo /sbin/SystemStarter restart "Polipo" $ ps awx|grep polipo 53153 ?? S 0:00.00 polipo logFile=/var/log/polipo.log 53155 s000 S+ 0:00.00 grep polipo後はdolipoを起動していれば、ネットワークが切り替わったらpolipoのdaemonを再起動してくれるらしい・・・が、Dolipoがうまく動いていない。
RestartをしてもpolipoのPIDが変わっていない。普通に考えて、一般ユーザーがSuperユーザーのプロセスをコントロールできるとも思えない。
と、ここまで書いてて気がついた・・・。一般ユーザーであげればいいじゃん!
$ polipo & [1] 528 Disabling disk cache: No such file or directory Established listening socket on port 8123. $ ps awx|grep polipo 528 s000 SN 0:00.00 polipo 530 s000 R+ 0:00.00 grep polipoここで、DolipoでRestartしてみる。
[1] + done polipo $ ps awx|grep polipo 535 ?? Ss 0:00.01 /Applications/dolipo.app/Contents/Resources/polipo -c config 537 s000 R+ 0:00.00 grep polipoDolipoはただのGUIのフロントエンドではなく、polipoを内蔵していたという落ちですか。
しかも、某データセンターで働いていたときに刷り込まれた、「再起動時にもちゃんとあがるよう起動スクリプトを設置して、再起動時にちゃんとdaemonが上がるか確認する」という鉄則が今でも抜けないらしい・・・。
今後の方針としては、
1. polipoはSystemStarter経由で起動し、ネットワークが切り替わったときに自動的にRestartさせる
2. 一般ユーザーでDolipoのパッケージ内のpolipoを使用する
が考えられるけど、1の方が好きだな・・・。ネットワークが切り替わる時のhookにあたるようなものを探さねば。
普通に考えればDolipoで何にも問題ないんだけど、
- メニューバーが埋まるのが少し嫌
- どうせならCUIで完結したい