英語版Tungsten T5をJaPonで日本語化してみたのだが、付属のWebブラウザがShiftJISしか認識しやがらないので、delegateを使って文字コード変換サーバーを立ち上げてみる。
重要なのは、ダイジェスト認証によって第三者の不正利用を防ぐこと。
1.delegateのインストール
delegateは汚いプログラムらしく、FreeBSDのportsはdistfilesももっていないので、本家のhttp://www.delegate.org/からportsのバージョンにあったものを持ってくる。FreeBSDのportsはbz2を要求してたので、gunzip後にbzip2してbz2なアーカイブに変換した。
portinstall -M FORCE_BUILD=YES delegate
で一発オッケー。
2.delegate立ち上げshスクリプトの変更
/usr/local/etc/rc.d/delegate.shを用意する。
—-
#!/bin/sh
umask 027
if [ -x /usr/local/sbin/delegated ]; then
echo -n ‘ delegated’
/usr/local/sbin/delegated -P8800 -Txt
ADMIN=postmaster@bam-system.ddo.jp
CHARCODE=SJIS
CACHEDIR=/var/spool/delegate-nobody/cache
EXPIRE=1d
AUTH=proxy:pauth AUTHORIZER=-dgauth CRYPT=pass:proxyuser
RELIABLE=”-a/*”
SERVER=http
PROXY=localhost:8880
> /dev/null 2>&1
/usr/local/sbin/delegated -P8880 -Txt
ADMIN=postmaster@bam-system.ddo.jp
CHARCODE=JIS
CACHE=no
RELIABLE=”localhost”
SERVER=http
> /dev/null 2>&1
fi
—-
/var/spool/delegate-nobody/cacheをnobody:nobodyで掘っておかないと怒られるので注意。
CRYPTエントリーのproxyuserはdigest化のためのキーワードなので自由に選ぶ。
3.ユーザーの登録
登録は
delegated -Fauth -a username:password -dgauth CRYPT=pass:proxyuser
削除は
delegated -Fauth -d username -dgauth CRYPT=pass:proxyuser
4.実行
再起動すればdelegatedが起動する。ファイヤーウォールで8800を通すのを忘れないこと。
これでJISとEUCについては変換出来たのだが、UTF8についてはどうも変換出来ない。
一度CHARCODE=UTF8に変更して起動すると変換テーブルをとってくるのでそれはちゃんとやってるんだがなあ。
どうも二段串にしないとダメという話もあるが、要調査。
どうやら、変換はうまく行ってなかったらしい。で、修正した内容にエントリー変更。
ミソはクライアントからの要求を受け付ける認証サーバーと、実際にコードを変換するサーバーの二重起動しておくこと。コード変換のバグなのか、二段串にしないと一部の文字コードは最後まで変換されないくさい。
普通のブラウザならこのプロクシーでうまいこと全てShift-JISに変換できるのに、PalmのBlazerが一部のページでうまく閲覧できないのは何でかな〜と思っていたら、どうやらBlazer+JaPonの環境だとMETAタグで文字コードが指定されてるとご判別するらしい。↓動向要チェック。
http://ryun.info/~hanzawa/diary/?date=20051031
うむむ、META除去のフィルタを書かねばならんのかな?
フィルター公開して〜とおねだりして、しばらくやりとりした後に物欲帳さんとこの2005-11-15のエントリーで解消。
http://ryun.info/~hanzawa/diary/?date=20051115
HEAD中に文字エンコードを明記したMETAタグを導入すると同時に、余計な文字コードが書いてあるタグを除去するフィルターを入れることで、Proxyを通しても起きる文字化けが解消。
8800ポートの起動時設定に
FTOCL=/usr/local/etc/delegate/filter.cfi
を書き足し、filter.cfiを用意する。
#!cfi
Content-Type: text/
Output/Content-Type: text/html; charset=Shift_JIS
Filter: /usr/local/etc/delegate/metaadd.pl
物欲帳さんとこでいただいたスクリプトはmetaadd.plという名前に変更した。
あとは、同一ページ上に違うサーバーのコンテンツを呼び出す場合に何度もProxyのパスワードを要求される問題だけだな。
いまんとこ、digest認証のrealmをdgauth.realmの様に明記すれば治るんじゃないかと思ってるけど、テスト未了。