Open20

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

harutiroharutiro

mailmanの登録されている場所を把握して、場所を確認する。

cat /etc/passwd
・・・
mailman:x:41:41:GNU Mailing List Manager:/usr/lib/mailman:/sbin/nologin
・・・

これで場所がわかった。

harutiroharutiro

これでmailmanのコマンドが使えるようになる。

cd /usr/lib/mailman/bin
harutiroharutiro

これでメールを出力した。

sudo ./list_members Member_2017_grade1
k17004kk@aitech.ac.jp
k17006kk@aitech.ac.jp
harutiroharutiro

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 は、使用するメーリング リストの名前です。
harutiroharutiro

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

sudo ./list_lists
harutiroharutiro

これで名前付きで出力された

sudo ./list_members -f Member_2017_grade1

名前がバグった。

?? ? <k17004kk@aitech.ac.jp>
?? ?? <k17006kk@aitech.ac.jp>
harutiroharutiro

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

harutiroharutiro

http://safe-linux.homeip.net/mail/Postfix_Dovecot_Mailman/08.html

https://web.wakayama-u.ac.jp/~kazama/lab/python/i18n.html

公式のメールマンを用いていて、公式のメールマンはutf-8は対応していないから、euc-jp版のメールマンを用いていることがすべての始まりだった。
pythonの出力文字コードを変えることでeuc-jpに変換するようにする。
元は、asciiになっていて、漢字に対応していなかった。

公式のmailmanを利用していて、公式のmailmanは2バイト文字の対応に問題がある
mailmanでの日本語処理はeuc-jp

やらなければならないこと

  1. 端末にeuc-jpで接続する
    1.1. cocotというパッケージをビルドインストールして、sshクライアント実行の前に噛ませる
  2. システムのデフォルト言語設定をjp_ja.euc-jpにする
  3. python2のデフォルト言語設定をasciiからutf-8に変更する
    3.1. sitecustomize.py のファイルをpython2のsite-packages直下に置く

mailmanのCLIコマンドでは、上記の概要の設定変更度合いによって挙動が異なる
恐らくコマンドによっては内部で別のスクリプトを呼び出しているため

      1. だけの場合
    • list_lists コマンドで文字化けしない
    • list_member コマンドで文字化けする
        1. の場合
    • list_lists コマンドで文字化けしない
    • list_member コマンドで文字化けしない
harutiroharutiro

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

harutiroharutiro
localectl set-locale LANG=ja_JP.eucjp
localectl status
   System Locale: LANG=ja_JP.eucjp
       VC Keymap: us
      X11 Layout: us
harutiroharutiro
$ 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
harutiroharutiro

sshを行う

$cocot -t UTF-8 -p EUC-JP -- ssh user@example.com
harutiroharutiro

最初の設定はASCIIになっているので、euc_ jpに変更を行う。

sudo vi /usr/lib/python2.7/site-packages/sitecustomize.py
import sys

sys.setdefaultencoding('euc_jp')