2006年9月13日水曜日

[Palm][Blazer][VersaMail]せっかく初めから付いているので、何とかして、BlazerとVersaMailを実用レベルにしよう大作戦!

初めはBlazerの日本語の文字化けを直そうとDelegateでWebプロキシを立てたけど、それだけではなんなので、ついでに、VersaMail用のPOPプロキシおよびSMTPプロキシにもしてしまえ!ということで備忘録。

これで一応BlazerおよびVersaMailが日本語で使用可能!かな・・・

用意したもの
・サーバ
・Debian GNU/LINUX 3.1 Sarge
・Delegate9.2.4

やってる事
・Blazer
- 文字コード変換(* -> Shift_JIS)
- 画像圧縮(jpeg,gif,png,bmp)

・VersaMail
- POP文字コード変換(* -> Shift_JIS)
- SMTP文字コード変換(? -> iso-2022-jp)


1. ファイル取得

$ wget http://www.delegate.org/anonftp/DeleGate/delegate9.2.4.tar.gz

--14:51:26-- http://www.delegate.org/anonftp/DeleGate/delegate9.2.4.tar.gz
=> `delegate9.2.4.tar.gz.1'
www.delegate.org をDNSに問いあわせています... 210.155.199.28
www.delegate.org[210.155.199.28]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1,608,014 [application/octet-stream]

100%[==============================================>] 1,608,014 65.37K/s ETA 00:00

14:51:50 (65.61 KB/s) - `delegate9.2.4.tar.gz.1' を保存しました [1608014/1608014]



2. 解凍・インストール

$ tar -zxvf ./delegate9.2.4.tar.gz
$ cd ./delegate9.2.4/src/

$ vi Makefile
-変更-
ADMIN = undef
ADMIN = hogehoge@hoge.net
-END-

$ make

$ su
# cp ./delegated /usr/bin/



3. ユーザ作成

# vi /etc/passwd
-追記-
delegate:x:8080:8080:delegate daemon:/var/spool/delegate:/bin/sh
-END-

# vi /etc/group
-追記-
delegate:x:8080:
-END-



4. Delegateディレクトリ作成

# mkdir /var/spool/delegate
# chown -R delegate:delegate /var/spool/delegate
# chmod -R 755 /var/spool/delegate

# mkdir -p /var/spool/delegate/lib/codemap
# chown -R delegate:delegate /var/spool/delegate/lib
# chmod -R 755 /var/spool/delegate/lib



5. コードマップダウンロード

# cd /var/spool/delegate/lib/codemap

# wget ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
# wget ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/JAPANESE.TXT
# wget ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT
# wget ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT
# wget ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT

# chown delegate:delegate /var/spool/delegate/lib/codemap/*



6. 起動スクリプト作成


# vi /var/spool/delegate/start.sh
-新規-
if [ -f /usr/sbin/delegated ]
then
/usr/sbin/delegated -P8080 -r -S \
SERVER=http \
CHARCODE=shift_jis \
ADMIN=hoge@hoge.net \
OWNER=delegate/delegate \
DGROOT=/var/spool/delegate \
CACHE="do" \
EXPIRE=2d \
CRON="5 5 * * * -expire 3" \
FTOCL=/var/spool/delegate/blazer.cfi \
HTTPCONF=acc-encoding: -thrugzip \
HTTPCONF=gen-encoding:gzip \
RELIABLE=許可するドメイン・IPアドレス \
RELIABLE=*.access-internet.ne.jp \
RELIABLE=192.168.0.0/24 \
AUTH=viagen:- \
STLS="mitm" \
RELAY=vhost,proxy \
> /var/spool/delegate/start.msg 2>&1

/usr/sbin/delegated -P8081 -r -S \
SERVER=http \
CHARCODE=shift_jis \
ADMIN=hoge@hoge.net \
OWNER=delegate/delegate \
DGROOT=/var/spool/delegate \
CACHE="do" \
EXPIRE=2d \
CRON="5 5 * * * -expire 3" \
FTOCL=/var/spool/delegate/blazer.cfi \
HTTPCONF=acc-encoding: -thrugzip \
HTTPCONF=gen-encoding:gzip \
RELIABLE=* \
STLS="mitm" \
RELAY=vhost,proxy \
AUTH=viagen:- \
AUTH=proxy:pauth \
AUTHORIZER=-blazer.user \
>> /var/spool/delegate/start.msg 2>&1

/usr/sbin/delegated -P8110 -r -S \
SERVER=pop \
CHARCODE=shift_jis \
MIMECONV=all \
ADMIN=hoge@hoge.net \
OWNER=delegate/delegate \
DGROOT=/var/spool/delegate \
RELIABLE=許可するドメイン・IPアドレス \
RELIABLE=*.access-internet.ne.jp \
RELIABLE=192.168.0.0/24 \
>> /var/spool/delegate/start.msg 2>&1

/usr/sbin/delegated -P8025 -r -S \
SERVER=smtp://メールサーバ/ \
CHARCODE=iso-2022-jp \
MIMECONV=all \
ADMIN=hoge@hoge.net \
OWNER=delegate/delegate \
DGROOT=/var/spool/delegate \
RELIABLE=許可するドメイン・IPアドレス \
RELIABLE=*.access-internet.ne.jp \
RELIABLE=192.168.0.0/24 \
AUTHORIZER=-blazer.user \
>> /var/spool/delegate/start.msg 2>&1


fi
-END-

# chown delegate:delegate /var/spool/delegate/start.sh
# chmod 755 /var/spool/delegate/start.sh


blazerはプロキシ認証のユーザ名パスワードを記憶できないので、常時使用は送信元を特定してパスなしでアクセス(1つ目の設定)。それ以外はプロキシ認証でアクセス(2つめの設定)。

3つ目がPOP用で4つ目がSMTP用の設定。SMTPのサーバはこのプロキシサーバからアクセスできるSMTPサーバを指定すればOK!


7. プロキシ認証用ユーザ作成

# su delegate
$ /usr/sbin/delegated -Fauth -a user:password -blazer.user DGROOT=/var/spool/delegate



8. 自動起動設定

# vi /etc/init.d/rc
-追記-
# delegate
/var/spool/delegate/start.sh
-END-



9. CFI スクリプト作成

# vi /var/spool/delegate/blazer.cfi
-新規-
#!cfi

Content-Type: image/jpeg
Body-Filter: /usr/bin/convert -quality 25 +profile "*" - jpeg:-
# -quality n: 再圧縮レベルをn(0†100)に設定する
# +profile "*": すべての属性データを削除する
--
Content-Type: image/gif
Body-Filter: /usr/bin/convert +adjoin - gif:- | /usr/bin/convert -colors 8 +dither -colors
pace Transparent +profile "*" - gif:-
# +adjoin: アニメーションGIFの1枚目のみを切り出す
# -colors n: 色数をn色まで減色する
# -colorspace Transparent: 透過GIFを無効にする
# +dither: ディザを無効にする
# +profile "*": すべての属性データを削除する
--
Content-Type: image/png
Body-Filter: /usr/bin/convert -colors 8 +dither -colorspace Transparent -quality 100 +prof
ile "*" - png:-
# -colors n: 色をn色まで減色する
# -colorspace Transparent: 透過PNGを無効にする
# -quality 90: 圧縮レベルを9に、圧縮方式を0に設定する
# +dither: ディザを無効にする
# +profile "*": すべての属性データを削除する
--
Content-Type: image/bmp
Body-Filter: /usr/bin/convert -colors 4 +dither +profile "*" - bmp:-
# -colors n: 色をn色まで減色する
# +dither: ディザを無効にする
# +profile "*": すべての属性データを削除する
--
Content-Type: text/
Output/Content-Type: text/html; charset=Shift_JIS
Filter: /usr/bin/nkf -s | sed -f /var/spool/delegate/blazer.sed
--
Content-Type: application/xhtml+xml
Output/Content-Type: application/xhtml+xml; charset=Shift_JIS
Filter: /usr/bin/nkf -s | sed -f /var/spool/delegate/blazer.sed
-END-

# chown delegate:delegate /var/spool/delegate/blazer.cfi


正直、Japonや、J-OSを使っている方は、

/usr/bin/nkf -s

は要らないかも・・・私がやっているのは、ほとんど、CJKOSの半角カタカナ対策の為だけです。SJIS変換自体は、Delegateがやってくれています。


10. Blazer用HTML書き換えスクリプト作成

・ハイスペックなサーバの場合
# vi /var/spool/delegate/blazer.sed
-新規-
s/\(<[Hh][Ee][Aa][Dd]>\)/\1<meta http-equiv="Content-Type" content="text\/html; charset=Shift_JIS">/
s/\(<form.*action=.*search\.yahoo\.co\.jp.*>\)/\1<input type="hidden" name="ei" value="SJIS">/
s/\(<.*=.*\)[Uu][Tt][Ff].*8\(.*>\)/\1Shift_JIS\2/g
s/\(<.*=.*\)[Ee][Uu][Cc].*[Jj][Pp]\(.*>\)/\1Shift_JIS\2/g
-END-

# chown delegate:delegate /var/spool/delegate/blazer.sed


・ロースペックなサーバの場合(部分文字化けあり)
# vi /var/spool/delegate/blazer.sed
-新規-
s/\(<[Hh][Ee][Aa][Dd]>\)/\1<meta http-equiv="Content-Type" content="text\/html; charset=Shift_JIS">/
s/\(<form.*action=.*search\.yahoo\.co\.jp.*>\)/\1<input type="hidden" name="ei" value="SJIS">/
-END-

# chown delegate:delegate /var/spool/delegate/blazer.sed


どうも、文字コードをSJISに使用が、プロキシサーバがContent-Typeを送ろうが、metaタグでHTMLに書かれてなければ、文字コードを誤認識するみたい。なので、強制的に、HEADタグの後ろにmetaタグを挿入している。
二つ目の分は、Yahooの文字化け対策です。
3つ目と4つ目はHTMLのBody部で局所的に外部HTMLをCharSet指定で呼んでいる部分を置換してます。ただ、結構負荷が掛かるので、ハイスペックなサーバじゃないと、ちょっときつい・・・


10. Delegateサーバの再起動(設定変更時等・・・)


# /var/spool/delegate/start.sh





これで、Blazerの場合プロキシ設定で、プロキシサーバとポート番号を指定すればOK。プロキシ認証を使用する場合は、アクセス時にユーザ名とパスワードを入力する。おそらくSSLなサイトもこれでOKなはず。

VersaMailの場合は、普通と違う設定にするのは、POP,SMTPサーバがこのプロキシサーバのホスト名で、ユーザ名(アカウント名)のところが、「ユーザ名@本当のPOPサーバ名」になる(「@」で挟む)。あと、上記の設定の場合ポート番号も変更しているので、合わせて変更する。SMTPに監視は、ここではプロキシ認証と同じユーザ名とパスワードでSMTP認証させているので、Advanced設定でESMTPにチェック入れてユーザ名とパスワードの入力する。

これで、Blazer,VersaMail共に受信時は全てSJISに変換されて、ほとんど文字化けはしなくなる。VersaMailの送信時もプロキシによって適切にJISエンコードされるので、おそらく問題ないだろう!

POPとSMTPに関してもRELIABLEを入れてるが、HTTPみたいにホットスポット意識するなら要らないかも・・・でもその場合は、POPの接続先サーバを固定しておかないとまずいかも・・

問題は、誰もが自宅サーバを用意できる訳じゃないところかなー・・・だれか、有志で、ASP的にサービスやってくれないですか?



0 件のコメント:

コメントを投稿