Mailmanの設定ファイルを引っ張り出す話

これをみながら作業を行います。
mailman export setting
こういうキーワードで出てきました。

mailmanの登録されている場所を把握して、場所を確認する。
cat /etc/passwd
・・・
mailman:x:41:41:GNU Mailing List Manager:/usr/lib/mailman:/sbin/nologin
・・・
これで場所がわかった。

これでmailmanのコマンドが使えるようになる。
cd /usr/lib/mailman/bin

これでメールを出力した。
sudo ./list_members Member_2017_grade1
k17004kk@aitech.ac.jp
k17006kk@aitech.ac.jp

list_membersのオプション
--出力ファイル
-o ファイル
標準出力の代わりに、指定されたファイルに出力を書き込みます。
--通常 / -r
通常の (非ダイジェスト) メンバーのみを出力します。
--digest[=種類] / -d [種類]
ダイジェスト メンバーだけを出力します。 オプションの引数は「mime」または
そういうのを受けてダイジェストメンバーだけを出力する「plain」
ダイジェスト。
--nomail[=理由] / -n [理由]
配信が無効になっているメンバーを印刷します。 オプションの引数は
「byadmin」、「byuser」、「bybounce」、または「unknown」で、
その理由で配信が無効になっているユーザー。 それはまたすることができます
配信対象のメンバーのみを出力する「有効」
有効にします。
-- フルネーム / -f
出力に氏名を含めます。
--保存 / -p
出力メンバー アドレスの大文字と小文字は、それらが追加された方法で保持されます。
リスト。 それ以外の場合、アドレスはすべて小文字で出力されます。
--無効 / -i
無効なメンバシップ リストのアドレスのみを出力します。
-r、-d、-n を無視します。
--unicode / -u
通常の代わりに Unicode オブジェクトとして格納されているアドレスを出力します
文字列オブジェクト。 -r、-d、-n を無視します。
- ヘルプ
-h
このヘルプ メッセージを出力して終了します。
listname は、使用するメーリング リストの名前です。

これでメールリストが全て表示される。
sudo ./list_lists

これで名前付きで出力された
sudo ./list_members -f Member_2017_grade1
名前がバグった。
?? ? <k17004kk@aitech.ac.jp>
?? ?? <k17006kk@aitech.ac.jp>

おそらく、文字コードがあっていないからだと推測。

公式のメールマンを用いていて、公式のメールマンはutf-8は対応していないから、euc-jp版のメールマンを用いていることがすべての始まりだった。
pythonの出力文字コードを変えることでeuc-jpに変換するようにする。
元は、asciiになっていて、漢字に対応していなかった。
公式のmailmanを利用していて、公式のmailmanは2バイト文字の対応に問題がある
mailmanでの日本語処理はeuc-jp
やらなければならないこと
- 端末にeuc-jpで接続する
1.1. cocotというパッケージをビルドインストールして、sshクライアント実行の前に噛ませる - システムのデフォルト言語設定をjp_ja.euc-jpにする
- python2のデフォルト言語設定をasciiからutf-8に変更する
3.1.sitecustomize.py
のファイルをpython2のsite-packages直下に置く
mailmanのCLIコマンドでは、上記の概要の設定変更度合いによって挙動が異なる
恐らくコマンドによっては内部で別のスクリプトを呼び出しているため
-
-
- だけの場合
-
list_lists
コマンドで文字化けしない -
list_member
コマンドで文字化けする
-
-
-
-
- の場合
-
-
list_lists
コマンドで文字化けしない -
list_member
コマンドで文字化けしない
-

./list_listsについては、直接ファイルを実行させているから、おそらくEUC-JPで出力されていたが、
./list_menbersについては、複数のファイルで実行されていたため、pythonのASCIIで出力されてしまうバグが発生していた。

端末の言語設定をUTF-8をeuc-jpに変換を行う。
これをみながら行なった。
localectl status
System Locale: LANG=us_en.UTF-8
VC Keymap: us
X11 Layout: us

localectl set-locale LANG=ja_JP.eucjp
localectl status
System Locale: LANG=ja_JP.eucjp
VC Keymap: us
X11 Layout: us

cocotを使う

$ mkdir src
$ cd src
$ wget https://github.com/vmi/cocot/archive/refs/tags/cocot-1.2-20171118.tar.gz
$ tar xvf cocot-1.2-20171118.tar.gz
$ cd cocot-20080315
$ ./configure
$ make
$ sudo make install
この途中でtarを実行したときに、bzip2が無いとエラーを吐いたので、確認を行う。
./configureを行うときに、コンパイルする環境が整っていなくて、インストールができなかったので、
下記コマンドを入力して、コンパイル環境を整える。
sudo apt install build-essential

sshを行う
$cocot -t UTF-8 -p EUC-JP -- ssh user@example.com

pythonの設定を行う。

最初の設定はASCIIになっているので、euc_ jpに変更を行う。
sudo vi /usr/lib/python2.7/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('euc_jp')

あとはいい感じにやると取れる。

頑張れ