ラベル proxy の投稿を表示しています。 すべての投稿を表示
ラベル proxy の投稿を表示しています。 すべての投稿を表示

2008年3月16日日曜日

Ubuntuのpolipoでデイスクキャッシュサイズを制限する

えー、なんか polipo が大人気なようで。紹介した身としてとてもうれしい。
でもなんかpolipo入れればネットが速くなる魔法のソフトのような理解をしている方もいるみたい。polipoはあくまでもproxyサーバーなので。そこのとこをひとつよろしくね。

さて、MacユーザやWindowsユーザの苦労を尻目に快適に動いている我等が ubuntu でのpolipoなのですが、先日ニコニコ動画を連続視聴していましたら、急にストリームが受信できなくなって、なんでかなーと調べたら、polipoのキャッシュを保存してあるHDDのパーティションの使用率が100%になっていました。(^_^;)
 いやあ、あせったあせった。
 polipo にはディスクキャッシュのサイズを指定する設定がないみたい。そんなわけでディスクキャッシュを切り詰める、polipo_trimcache というツールがあるので、さくっと落として利用。

インストール

wget http://ely.ath.cx/~piranha/software/polipo_trimcache/polipo_trimcache-0.2.py
sudo mv polipo_trimcache-0.2.py /usr/local/bin
cd /usr/local/bin
sudo ln -s polipo_trimcache-0.2.py polipo_trimcache
polipo_trimcache は/usr/local/bin に放り込みました。~/bin に入れてそこからリンクを貼ってもいいかもしれません。

使い方

sudo polipo_trimcache /var/cache/polipo 1000M
のように使います。上の例は、サイズを1Gに指定しています。

 それで、後は上のコマンドを定期的にシェルスクリプトで動かせばいいわけですが、今回のように動画連続視聴でキャッシュいっぱいとか、いつハードディスクが満杯になるかわかりません。
 いろいろ考えたんですが、 quota 使うとか、dfを10秒ごとに回して使用量をチェックするとか。

 んでまあ、ファイルのイベントを通知する inotify を利用することにしました。
 キャッシュディレクトリを監視し、新規にファイルが作られたら、HDDの空き容量をチェックして、指定した閾値以上になったら polipo_trimcache を実行します。
 事前に polipo_trimcache と inotify が必要なので入れておきます。
sudo apt-get install inotify-tools
入れたら以下のスクリプトを polipo-diskcache-check.sh として保存します。実行属性を付けてね。

#!/bin/sh
# last updated : 2008/03/19 02:44:25 JST
# $Id: polipo-diskcache-check.sh,v 1.2 2008/03/18 18:04:30 yama Exp $
# polipo のキャッシュのあるパーティションの使用率が指定した
# パーセントを越えるとキャッシュを指定したサイズまで削除する。
#

# 設定
# キャッシュのあるディレクトリを指定する。
CacheDir="/var/cache/polipo"
# キャッシュのあるパーティションの使用割合(パーセントで指定する)
LimitDiskSize=84
# 指定サイズまで切り詰める。
CacheSize="1200M"
# polipo_trimcach の指定。
polipo_trimcache='/usr/local/bin/polipo_trimcache'
#---------------------------------------------------

#echo "初期値は、" $LimitDiskSize "%です。"
while inotifywait -q -q -r -e create $CacheDir ; do
AB=`df --sync /var | awk '/^\/dev/{sub(/\%/,"", $5);print $5}'`
if [ $AB -gt $LimitDiskSize ]; then
nice -n 15 $polipo_trimcache $CacheDir $CacheSize &> /dev/null
fi
done


 あとはこいつを実行すれば、キャッシュがHDDを圧迫しそうになったら自動的にお掃除してくれます。
 /etc/init.d/polipo を修正して同時に起動するようにしておくと楽でしょう。

2008/03/19 追記:

 具体的には、/etc/init.d/polipo の40行目あたり、

case "$1" in
start)
echo -n "Starting $DESC: "
$PPCTL start

の下に
polipo-diskcache-check.sh &
と追記。
45行目あたり、

stop)
echo -n "Stopping $DESC: "
$PPCTL stop
の下に
killall polipo-diskcache-check.sh inotifywait
を追記します。
 後は、
sudo /etc/init.d/polipo restart
としてpolipoを再起動し、
ps aux | grep polipo
と、psコマンドでちゃんと動いているか確認してみてください。

 いやあ便利べんり。ubuntu 最高。

2008年2月17日日曜日

Ubuntuで polipo を使ってニコニコ動画を快適にキャッシュしよう

ニコニコ動画 や youtube やら Stage6 などでたくさんの動画を観ていると、すぐにウェブブラウザのキャッシュから溢れて、決っして少なくないサイズの動画データを再びダウンするはめになり、あまり快適とは言えません。
うちの環境ではfirefoxでキャッシュを500Mぐらいに取ってあるんですが、どうもフラッシュはうまくキャッシングされないようで、複数の動画を行ったりきたりしていると再度ダウンするはめになり、非常にストレスを感じていました。

windowsだとnicocacheなるニコニコ動画専用のキャッシュツールがあるみたいでうらやましく思っていたり、かといって本格的な squid を立ち上げるのもなあ、と思いながら放置してたんですが、個人使用に特化したパーソナルなproxyサーバー、 polipo というのを知りました。

polipo はなんでも個人向けに特化したproxyサーバーらしく、特徴は、
  • 小型で軽快
  • HTTP1.0のアクセスをHTTP1.1に変えてくれる
  • 個人で使用することを考えられている
  • 設定項目が豊富
とのことで、さっそく導入してみました。

インストール

sudo apt-get install polipo
これだけです。インストールされると自動的にデーモンとして動きはじめます。

設定

  • polioの設定・動作確認
    polioの各種設定やステータスを確認したい場合は、http://localhost:8123 にウェブブラウザからアクセスすればOKです。とりあえず、特に設定することはないでしょう。
  • ブラウザでの設定
    Firefoxでの説明をします。メニューの編集設定で、詳細をクリックし、ネットワークタブを選択します。その中の接続設定をクリックし、手動でプロキシを設定するにチェックを入れて、HTTPプロキシに、localhost、右のポートに、8123を設定します。
    すべてのプロトコルでこのプロキシを使用する、はお好みで。
    後は検証のためFirefoxのキャッシュを12MBぐらいに縮小して念のためFirefoxを再起動。



さっそく大きめの動画データを複数視聴。きちんとキャッシュされていて超快適w さらにFirefoxのキャッシュを12MBとしたことでFirefox自体の動作も軽くなりました。ん〜素晴しい。
ちなみにキャッシュ置き場はデフォルトでは、/var/cache/polipo/ になっているので、占有サイズを知りたければ、
sudo du -sh /var/cache/polipo/
とすれば分かります。
みなさんも快適なウェブブラウズ環境を構築して楽しんでください。

2008/02/18:追記:

 nicocacheはjavaで書かれているようで、linuxでも動きそうですね。でもproxyはやっぱりネイティブで動き、メモリ消費の少ないpolipoの方がいいですね。
 さらにLAN内のPCもpolipoを見るように設定しました。実際かなりレスポンスがよくなり、もっと早くにporoxy鯖立てておけばよかったと思います。
というかFfirefoxのキャッシュ、バカですよね。

2008/02/28:追記:

 polipo をLAN内で公開する場合は、/etc/polipo/config 内の、
# 公開するpolipoのIPアドレス。
proxyAddress = "0.0.0.0"
# 接続許可するIPアドレス。
allowedClients = 127.0.0.1, 192.168.0.22
あたりを有効にします。IPアドレス固定で運用しているなら、proxyAddress = を決め打ちでいいでしょう。