Mailman 2.1.x+j について                    菊地時夫 (modified by Yasuhito FUTATSUKI ) *** 注意 *** 2.1.23+j3 より言語として試験的に ja_JP.UTF-8 および ja_JP.eucJPを 追加可能なように準備を進めておりますが、全くテストをしておりませんので 事故が起きて困る環境では使用しないで下さい。(普通にビルド/インストール しただけの状態では利用できません。利用可能にする方法については後述します。) また、運用中のサーバあるいはMLでサーバの言語あるいはMLの言語を 変更した場合には一部の設定やアーカイブ等では言語毎の符号化文字集合で 設定が保存されており、かつ、自動では設定内容は変換されないために 予期せぬ文字化けが起こる事態が想定されます。言語を変更して移行する ためのガイドは追って作成するつもりでいます。 *** 注意おわり *** **簡単に言うと** *これは何?* 日本語のメーリングリストの運用でよく問題になる、文字コードの 問題をできるだけ修正しようとするもの。 *推奨設定* mm_cfg.py に以下を追加する。 GLOBAL_PIPELINE.insert(1, 'iso2022jpfix') **もっと詳しく** *何が問題なの?* 日本語のメールは ISO-2022-JP で出すべきだという習慣が長い 事続いているが、つい使ってしまう機種依存文字の問題があり、 「嘘つき」ISO-2022-JP が蔓延している。JIS になくて Unicode に入っている文字を使いたければメールの charset を UTF-8 にすればよいのだが、一部に Unicode の利用につい て強い反対もある。 Mailman は投稿されたメールをそのまま配送するのではなく、 管理者の設定によってヘッダやフッタを付加したり、「まとめ読み」 にまとめたり、「保存書庫」に HTML 形式で保存公開したりする。 また、一方で Python 付属の charset codec は規格に忠実で 「嘘つき」ISO-2022-JP をエラーとして扱う。 (これは、NKF やその他の「日本語」コード変換ツールと違って 直接 JIS<->EUC<->SJIS 変換するのでなく、一旦 Unicode に変換しているためで、機種依存文字の変換先が不定ではどうにも ならないからであろう) このため、投稿メールに機種依存文字が混じっていると、ヘッダ/ フッタの付加時などに文字化けを誘発することになる。 *解決法* これまでに、1.機種依存文字を全て ? にしてしまう。2.機種依 存文字を意味的に近い文字に変換する {例 ① -> (1)} の方法 を試して来たが、質問があれば教えるということで、公式的には一 切サポートしてなかった。ここでは、ヘッダ/フッタの付加時に、 charset の優先順位を与える事で、できる限りリストのポリシー に合った修正が可能になるようにするとともに、投稿口のところで 必要に応じた「嘘つき ISO-2022-JP」から UTF-8 への変換が できるようにハンドラモジュールを追加した。本機能の実現には pykf (https://pypi.python.org/pypi/pykf/) が必要となるため、 あらかじめ導入しておく必要がある。 *インストール* python 2.6 以上 (not python 3.x) および pykf モジュール、 cCharset(またはcharset)モジュールが必要。本家2.1.18より dnspython (http://www.dnspython.org/) 必要になった。 通常の mailman と同様の手順でインストール。 Handlers に iso2022jpfix.py が入る。 * dnspython : http://www.dnspython.org/ * pykf : https://pypi.python.org/pypi/pykf * cChardet : https://pypi.python.org/pypi/cchardet * chardet : https://pypi.python.org/pypi/chardet **必要モジュールに関する既知の問題** pykf または cChardet(またはchardet) モジュールが egg 形式 あるいは egg を unzip した状態でインストールされている場合、 configure で作成される misc/Makefile の install-packages: target が正しく実行できない、あるいは mailman が正しく動作 しない問題が見つかっています。 当該 Python モジュールを egg ではなく展開状態された実体の パスが標準の(あるいはmailman実行時の)モジュールパスで 見つかるようにするか、configure 時にその実体のあるパスを --with-pykf-prefix, --with-chardet-prefix で渡すことを 試してみてください。 もし、どうしても egg 形式のモジュールを使用したい場合には 代替策として configure に --disable-module-symlinks を 渡してみてください。(ただし、これを行った場合には cron 等で 実行される script で site モジュールのインポートを無効化 した場合には、これら外部モジュールを import なくなる問題が 残ります。) *設定の詳細* (あなたのポリシーと責任で) 1.Defaults.py に設定可能なパラメータを追加してある。 # Charset order in Decorate.py DECORATE_LCSET = 1 DECORATE_MCSET = 2 DECORATE_CHARSETS = [DECORATE_LCSET, \ DECORATE_MCSET, 'utf-8'] フッタ/ヘッダの追加時に LCSET (リストの文字コード), MCSET (メールの文字コード), UTF-8 の順で変換を試みる。 UTF-8 の使用が嫌なら mm_cfg.py でこれを取り除けば良い。 (結果については、設定者の責任です) 2.mm_cfg.py に以下を追加する。 GLOBAL_PIPELINE.insert(1, 'iso2022jpfix') 「嘘つきISO-2022-JP」を(問答無用で)UTF-8 に変換する。 *どうしてもポリシーが合わない人は* 0. Decorate.py を使わない (それでも archive, digest は、問題がでる) (Obsoleteな) 解決法の 1,2 を試す。 ヒント: 1. email/charset.py を書き変えて使用する 2. behave.py を使う ** 言語設定 ja_JP.eucJP および ja_JP.UTF-8 について ** * 背景 * 歴史上の経緯により Mailman での言語設定 ja (日本語)においては Web UI に EUC-JP を、E-Mail 送信では ISO-2022-JP を使用することを 選択していた。ところが、咋今の状況をみるに、もはやそれぞれに UTF-8 を選択しない理由はレガシーな環境のサポートのために限られると 考えられるほどに Unicode/UTF-8 の普及が進んでいる。(註*) そこで、遅蒔きながら Mailman の言語設定 ja でもそれぞれを UTF-8 で 処理を行うように移行を行おうと考え、緩やかな移行を目指すべく 新たな言語設定 ja_JP.UTF-8 および ja_JP.eucJP を導入する。 (註*) 菊地時夫氏も2010年6月時点で失敗したと嘆いています http://www.is.kochi-u.ac.jp/sango/Members/tkikuchi/30e130e2/jis-3092623b305930633066.html * 言語設定 ja_JP.eucJP * ja_JP.eucJP は現行とまったく同様の設定であり Web UI に EUC-JP、 E-Mail 送信に ISO-2022-JP を用いる。これは、従来のメーリングリストの 扱いを変えずにそのまま運用したい場合(移行の手間をかけたくない、 あるいはレガシーな環境のサポートが引続き必要)に ja の charset の 扱いを変更する前にこちらの言語設定へと移行をすることを意図して 新設したものである。 * 言語設定 ja_JP.UTF-8 * ja_JP.UTF-8 は Web UI と E-Mail 送信の双方に UTF-8 を用いる。 これは、ja の charset の扱いを変更する前に UTF-8 への移行を行う ために新設したものである。 なお、いずれの言語設定においてもメーリングリストへの投稿については 言語設定の如何によらず通常配送においては charset の変更が行われるわけでは ないのは従来の通りである。 * ja_JP.eucJP または/および ja_JP.UTF-8 を有効化するには * 現時点ではまだどちらの言語設定についても十分なテストが出来ていないこと、 十分な説明文書がないことから通常通りビルド/インストールしただけでは 使用できないようにしている。(新しい言語設定に関わる不具合、トラブルの ない言語設定移行の手順等フィードバックを歓迎する) これらの言語設定を有効にするには、mm_cfg.py に以下の設定を追加する。 if not LC_DESCRIPTIONS.has_key('ja_JP.eucJP'): add_language('ja_JP.eucJP','Japanese (ISO-2022-JP/EUC-JP)','euc-jp','ltr') if not LC_DESCRIPTIONS.has_key('ja_JP.UTF-8'): add_language('ja_JP.UTF-8','Japanese (UTF-8)','utf-8','ltr') なお、一度有効化した言語設定を無効化したい場合にはDEFAULT_SERVER_LANGUAGEや リストの言語設定、メンバーの個人設定などに無効化したい言語が設定されて いないことを確認した後に行うこと。 **Web UIにおける会員リストの同期について** Mailman 2.1.14+j7 には Web UI から会員リストをアップロードして、その内容と 同期させる機能が独自に実装されておりました。ところが、2019年10年に本家の Mailman でも異なるメニューから同様に会員リストを同期させる機能が導入された ため、ほぼ同様の機能が重複して実装されている状態となっております。 まだ二木はこの機能の確認・比較をおこなっていませんが、新たに実装された 機能で従来の方式で行えていたことが行えることが確認できましたら、従来方式の 会員の同期は廃止して本家の方式に統一することを考えております。 (その際にはこの項も改めて書き換える予定です) **ソースについて** 故・菊地氏の LaunchPad のソースコードを元にFUTATSUKIが本家の 変更を中心にメンテナンスをしているものである。 菊地氏のソースコード: https://code.launchpad.net/~tkikuchi/mailman/2.1-japan 最新のソースは LanuchPad 上の以下のURLで公開している。 最新のソースコード(LaunchPad): https://code.launchpad.net/~futatuki/mailman/2.1-japan-poem ソースコードの tarball および RedHat Enterprise Linux 系向け RPMソースおよび FreeBSD 用 ports は暫定的に以下のURLからの リンクで配布している。 日本語対応Mailman: http://www.poem.co.jp/tech/mailman-jp Mailman 関連ファイルの仮置き場: https://mm.poem.co.jp/ *以上* *** 2020/03/02 rev 12. 「Web UIにおける会員リストの同期について」の項を追加 (Yasuhito FUTATSUKI) 2018/06/23 rev 11. サポートPython 2バージョンを本家に合わせ変更 (Yasuhito FUTATSUKI) 2017/06/03 rev 10.1 言語設定有効化方法を安全側に変更 (Yasuhito FUTATSUKI) 2016/11/28 rev 10. 言語設定追加について記述 (Yasuhito FUTATSUKI) 2016/07/06 rev 9.2 表現修正 (Yasuhito FUTATSUKI) 2016/07/01 rev 9.1 Python egg module 回避策の修正(Yasuhito FUTATSUKI) 2016/06/15 rev 9. Python egg module 問題を追加 (Yasuhito FUTATSUKI) 2016/02/08 rev 8. MLのアドレスを削除 (Yasuhito FUTATSUKI) 2015/09/08 rev 7. ソースについてを追加 (Yasuhito FUTATSUKI) 2014/07/02 rev 6.1 dnspythonのWeb linkを追記 (Yasuhito FUTATSUKI) 2014/05/19 rev 6. dnspythonについて追記 (Yasuhito FUTATSUKI) 2014/05/04 rev 5. chardetモジュールに依存 (Yasuhito FUTATSUKI) 2014/04/23 rev 4. pykfを配布から外す (Yasuhito FUTATSUKI) 2010/12/07 rev 3. 2010/11/03 rev 2. 2010/07/10 1st version