« Mavericksでautofsの再接続が効かなくなった件 | ホーム | uncachable でも polipo がキャッシュ作るバグ »

2014年7月 3日

polipo 更新した

polipo 更新した

ある朝インターネットをしようとしたら dolipo が起動しなくなっていた。まあそれは一回 preference 消して直ったんだけど、ちょうどいい機会なので Homebrew から最新の1.1.1をインストールしてみた。

環境は MacBook Air Mid 2012 / OS X 10.9.4。

$ brew update
$ brew install polipo

config 書いて。

$ vim config

uncachableFile = "~/Dropbox/settings/polipo/uncachable"
logFile = "~/Dropbox/settings/polipo/polipo.log"
allowedClients = "127.0.0.1"
disableIndexing = false
disableServersList = false
dnsUseGethostbyname = true
dontCacheRedirects = true
dontCacheCookies = true

uncachable 書いて。

$ vim uncachable

\?
/cgi-bin/
\.(php[345]?|[sp]html|cgi|pl|py|[aj]sp)$
\.(dmg|zip|rar|lzh|lha|sitx?|gz|tar|bz2?|xpi|jar|exe|msi|tgz|z)$
^xn--[0-9a-z]+
^http://vod-live2\.skyperfectv\.co\.jp/.+

~/Library/LaunchAgents に自動起動用 launchd.plist を投下。

$ vim ~/Library/LaunchAgents/org.retlet.polipo

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
    <dict>
        <key>KeepAlive</key>
        <dict>
            <key>SuccessfulExit</key>
            <false/>
        </dict>
        <key>Label</key>
        <string>org.retlet.polipo</string>
        <key>ProgramArguments</key>
        <array>
            <string>polipo</string>
            <string>-c</string>
            <string>~/Dropbox/settings/polipo/config</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>EnableGlobbing</key>
        <true/>
    </dict>
</plist>

polipo の PATH が通ってないので /etc/launchd.conf に書いて。

$ sudo vim /etc/launchd.conf 

setenv PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

キャッシュが爆発するので dolipo で使われてた polipo_trimcache-0.2.py を毎日実行するように。

$ vim ~/Library/LaunchAgents/org.retlet.polipo_trimcache

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>org.retlet.polipo_trimcache</string>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>6</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
        <key>ProgramArguments</key>
        <array>
            <string>python</string>
            <string>~/Dropbox/settings/polipo/polipo_trimcache-0.2.py</string>
            <string>/usr/local/var/cache/polipo</string>
            <string>2G</string>
        </array>
        <key>EnableGlobbing</key>
        <true/>
    </dict>
</plist>

念のため再起動用スクリプトを用意して。

$ vim polipo_restart.sh

#!/bin/sh

launchctl stop org.retlet.polipo
launchctl start org.retlet.polipo

ネットワークが変わったら自動で実行するように。

$ vim ~/Library/LaunchAgents/org.retlet.polipo_restart

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>org.retlet.polipo_restart</string>
        <key>RunAtLoad</key>
        <true/>
        <key>WatchPaths</key>
        <array>
            <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
        </array>
        <key>EnableGlobbing</key>
        <true/>
        <key>Program</key>
        <string>~/Dropbox/settings/polipo/polipo_restart.sh</string>
    </dict>
</plist>

再起動スクリプトが動いてなかったので直した。

$ chmod u+x polipo_restart.sh
$ vim ~/Library/LaunchAgents/org.retlet.polipo_restart

        <key>ProgramArguments</key>
        <string>~/Dropbox/settings/polipo/polipo_restart.sh</string>

実行権限が必要だったのと(なくても動作するコマンドもあってよくわからない)、EnableGlobbing でも Program だと ~ を解釈してくれないっぽいので ProgramArguments にした。

ついでに、dolipo で不具合が出てたサイトを proxy.pac でプロキシ経由しないように指定してたのを、最新になって色々改善されてるかもしれないから一旦全部コメントアウトした。

$ vim proxy.pac

function FindProxyForURL(url, host)
{
// variable strings to return
var proxy_yes = "PROXY 127.0.0.1:8123; DIRECT";
var proxy_no  = "DIRECT";

    if (isPlainHostName(host)||
        url.substring(0, 4) == "ftp:"||
        url.substring(0, 4) == "mms:"||
        //dnsDomainIs(host, "www.qnap.com")||
        //dnsDomainIs(host, ".soundcloud.com")||
        //dnsDomainIs(host, "akamaitechnologies.com")||
        //dnsDomainIs(host, "adobe.com")||
        //dnsDomainIs(host, "apple.com")||
        //dnsDomainIs(host, "assets.tumblr.com")||
        //dnsDomainIs(host, "pipes.yahoo.com")||
        //dnsDomainIs(host, "goko.com")||
        //dnsDomainIs(host, "playdominion.com")||
        //dnsDomainIs(host, "2ch.net")||
        //dnsDomainIs(host, "nicovideo.jp")||
        //dnsDomainIs(host, "ustream.tv")||
        //dnsDomainIs(host, "facebook.com")||
        //dnsDomainIs(host, "fbcdn.net")||
        //shExpMatch(url, "http://www.google.com/calendar/*")||
        localHostOrDomainIs(host, "idisk.mac.com")||
        isInNet(host, "10.0.0.0", "255.0.0.0")||
        isInNet(host, "127.0.0.0", "255.0.0.0")||
        isInNet(host, "169.254.0.0", "255.255.0.0")||
        isInNet(host, "192.168.0.0", "255.255.0.0")
       ){ return proxy_no; }

return proxy_yes;
}

今のところ問題なさそう。

トラックバック(0)

トラックバックURL: http://retlet.net/cgi-bin/mt5/mt-tb.cgi/93