SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

2010-06-21(Mon) 参上ッ!! Mailmanッ!!

  ふと「Webブラウザから過去のメールを閲覧したい」という要求が生じた。実現の方法は、いろいろと考えられるだろうが、メーリングリストのアーカイブ機能を流用してしまうのがラクではないかと考え、Mailmanによる実現を試みることにした。

  しかし、結果はともあれ、Mailmanてヤツは「RPMパッケージ化されている物件」にしては、設定から何から、実にやっかいなヤツであった。むむむん、である。

  ま、それはさておき、MTAをSendmailからPostfixに変更するところから、ボチボチと始めていくのである。なお「MTAをSentmailからPostfixに変更する理由」については、決して聞くことのないようにお願いしたい所存である。

# yum install postfix
# cd /etc/postfix
# vi main.cf
# diff -bc main.cf.org main.cf
*** main.cf.org	2010-06-21 13:12:32.000000000 +0900
--- main.cf	2010-06-21 13:13:43.000000000 +0900
***************
*** 68,73 ****
--- 68,74 ----
  #
  #myhostname = host.domain.tld
  #myhostname = virtual.domain.tld
+ myhostname = zakato.itline.jp
  
  # The mydomain parameter specifies the local internet domain name.
  # The default is to use $myhostname minus the first component.
***************
*** 75,80 ****
--- 76,82 ----
  # parameters.
  #
  #mydomain = domain.tld
+ mydomain = itline.jp
  
  # SENDING MAIL
  # 
***************
*** 104,113 ****
  #
  # Note: you need to stop/start Postfix when this parameter changes.
  #
! #inet_interfaces = all
  #inet_interfaces = $myhostname
  #inet_interfaces = $myhostname, localhost
! inet_interfaces = localhost
  
  # The proxy_interfaces parameter specifies the network interface
  # addresses that this mail system receives mail on by way of a
--- 106,115 ----
  #
  # Note: you need to stop/start Postfix when this parameter changes.
  #
! inet_interfaces = all
  #inet_interfaces = $myhostname
  #inet_interfaces = $myhostname, localhost
! #inet_interfaces = localhost
  
  # The proxy_interfaces parameter specifies the network interface
  # addresses that this mail system receives mail on by way of a

  以上、Postfixの基本設定の完了である。Sendmailを消してもいいが、以下のようにすれば消さずに切り替えることも可能である。Sendmailを落としてPostfixを上げる。自動起動についても確認しておく。

# update-alternatives --config mta
 
2 プログラムがあり 'mta' を提供します。
 
  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix
 
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
 
# service sendmail stop
# service postfix start
# chkconfig sendmail off
# chkconfig postfix on

  Postfixの正常動作を確認するため、テストメールを送る。

# telnet zakato.itline.jp 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 zakato.itline.jp ESMTP Postfix
helo hoge
250 zakato.itline.jp
mail from: root@zakato.itline.jp
250 2.1.0 Ok
rcpt to: user1@zakato.itline.jp
250 2.1.5 Ok
data
354 End data with .
test1
.
250 2.0.0 Ok: queued as 70DA014DB99
quit
221 2.0.0 Bye
Connection closed by foreign host.
 
# tail /var/log/maillog
# tail /var/spool/mail/user1

  管理者から自分に送ってみて、Postfixによって届けられたことが確認できればOKである。

  ここにきて、ようやくMailmanが会場入りである。

# yum install mailman

  さて、これから設定の手順に入る……んが、このページにアクセスされている状態でこんなこというのもナンではあるが、ヘンな野良サイトを見るマネする前に、オフィシャルなドキュメントや、manページを見るべきである。

  というのも、通常「RPMパッケージ化されている物件」は、インストールするだけで動く、というのが基本であり、そうでない場合は、ディストリビューション(Red Hat)として「こう使うべき」というドキュメントが用意されているのが世の常なのである。

  オープンソース物件は、コミュニティ提供の物件と、ディストリビュータ提供の物件とで性格が違う。ディストリビュータ提供の物件を利用する場合、極力、ディストリビュータの意向を汲んで動かすべきである。勝手にやるなら、ディストリビュータ提供の物件を利用する価値がない。

  というわけで、ドキュメントを探す。

# rpm -ql mailman | grep -i redhat
/usr/share/doc/mailman-2.1.9/INSTALL.REDHAT
# /usr/share/doc/mailman-2.1.9/INSTALL.REDHAT

  ほれ、あった。基本的にはこれを読みつつ設定を進めるのがよろしい。まずは、WebからMLを管理するための、Mailmanの設定ファイルを読み込ませるため、インストール直後にapacheを再起動すれ、とあるので、素直に従う。

# service httpd restart

  これで、Webブラウザから、http://zakato.itline.jp/mailman/adminにアクセスできるようになったはずである。

  つづいて、マスターパスワードの設定、および、基本的な設定。

# LANG=C /usr/lib64/mailman/bin/mmsitepass
New site password: mmpassword
Again to confirm password: mmpassword
Password changed.
 
# cd /usr/lib/mailman/Mailman
# cp mm_cfg.py mm_cfg.py.org
# vi mm_cfg.py
# diff -bc mm_cfg.py.org mm_cfg.py
*** mm_cfg.py.org	2010-06-21 14:23:09.000000000 +0900
--- mm_cfg.py	2010-06-21 14:26:25.000000000 +0900
***************
*** 78,85 ****
  except:
      fqdn = 'mm_cfg_has_unknown_host_domains'
  
! DEFAULT_URL_HOST   = fqdn
! DEFAULT_EMAIL_HOST = fqdn
  
  # Because we've overriden the virtual hosts above add_virtualhost
  # MUST be called after they have been defined.
--- 78,85 ----
  except:
      fqdn = 'mm_cfg_has_unknown_host_domains'
  
! DEFAULT_URL_HOST   = 'zakato.itline.jp'
! DEFAULT_EMAIL_HOST = 'zakato.itline.jp'
  
  # Because we've overriden the virtual hosts above add_virtualhost
  # MUST be called after they have been defined.
***************
*** 91,95 ****
--- 91,98 ----
  # Put YOUR site-specific configuration below, in mm_cfg.py . #
  # See Defaults.py for explanations of the values.	     #
  
+ DEFAULT_SERVER_LANGUAGE = 'ja'
+ MTA = 'Postfix'
+ 
  # Note - if you're looking for something that is imported from mm_cfg, but you
  # didn't find it above, it's probably in Defaults.py.

  ここで、Webブラウザのリロードボタンを押せば、日本語の表示に変わるはず。気をよくして、管理用のmailmanメーリングリストを作成する。

# LANG=C /usr/lib/mailman/bin/newlist mailman
Enter the email of the person running the list: user1@zakato.itline.jp
Initial mailman password: mmpassword
Hit enter to notify mailman owner...<Return>

  ようやくゴングが鳴る。Mailmanサービスの開始である。入場後、管理用のmailmanメーリングリストを作成した旨のメールが、mailmanメーリングリストの管理者に届いていることを確認しよう。

# service mailman start
# tail /var/spool/mail/user1

  試合は始まったばかりだが、いきなりクライマックスである。Postfixとの連携上、やや、不可思議な設定を行う必要がある。

# cd /etc/mailman
# chown mailman:mailman aliases*
# chmod 660 aliases.db

  ここは、ディストリビューションとしてどうにかして欲しかったところである。上述の手順書にもロクな記載がない。どうも、Webから管理するための権限と、Mailmanとして動くための権限が衝突しているような感じだが、正直、よくわからん。

  このヘンの権限の設定を誤っていると、メーリングリスト作成時、Webブラウザ上に「We're sorry, we hit a bug!」と表示され、内部のログに「/usr/sbin/postalias /etc/mailman/aliases」が失敗した、などと出たり、はたまた、メール投稿後に「Undelivered Mail Returned to Sender」としてメールが戻ってきて、その中に「Group mismatch error.」なんてエラーが記されている、などという状態に陥ったりするのようである。

  チマタでは、これを解決するために、Mailmanをリコンパイルしろ、などというアドバイスが飛び出したりしているが、リコンパイルなんかしたら、なんのためのディストリビューションによるバイナリ物件の提供なのか、という話になる。

  さて、あと少し。PostfixがMailmanにメールを渡すための設定をしよう。

# cd /etc/postfix
# vi main.cf
# diff -bc main.cf.org main.cf
*** main.cf.org	2010-06-21 13:12:32.000000000 +0900
--- main.cf	2010-06-21 15:01:19.000000000 +0900
***************
*** 374,380 ****
  # "postfix reload" to eliminate the delay.
  #
  #alias_maps = dbm:/etc/aliases
! alias_maps = hash:/etc/aliases
  #alias_maps = hash:/etc/aliases, nis:mail.aliases
  #alias_maps = netinfo:/aliases
  
--- 376,382 ----
  # "postfix reload" to eliminate the delay.
  #
  #alias_maps = dbm:/etc/aliases
! alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases
  #alias_maps = hash:/etc/aliases, nis:mail.aliases
  #alias_maps = netinfo:/aliases
  
***************
*** 665,667 ****
--- 667,671 ----
  # readme_directory: The location of the Postfix README files.
  #
  readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
+ 
+ owner_request_special = no
 
# service postfix restart

  メーリングリストの作成は、GUIから実行する。

新しいメーリング リストを作成する
 
リストの名前: arctest1
リスト管理者アドレスの初期設定: user1@zakato.itline.jp
初期パスワードを自動生成しますか? ●はい
 
リスト作成者の認証パスワード: mmpassword
[リストを作成する]

  このまま、普通のメーリングリストとして運用することは可能だが「Webブラウザから過去のメールを閲覧したい」という「メールアーカイバ」として利用するために、もう少し設定を加える。こちらもGUIから。

リストの管理ページへ行く
リスト管理者パスワード: [mmpassword]
[ログイン]
 
全体的オプション
件名の先頭に付ける語句 [<空白>]
投稿メール本文の最大サイズ(KB). 0 を設定すると無制限. [0]
[変更を送信する]
 
プライバシーオプション
送信者フィルタ
動作が定義されていない非会員からの投稿に対する動作. ●承認
[変更を送信する]
 
宛先フィルタ
投稿にはリスト名が宛先(to, cc) に含まれてい なければならないでしょうか? ●いいえ
投稿を認めるメールに含まれる受信者数の上限. [0]
[変更を送信する]

  さーて、ここにきて、ようやく、メールの投稿である。

# telnet zakato.itline.jp 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 zakato.itline.jp ESMTP Postfix
helo hoge
250 zakato.itline.jp
mail from: root@zakato.itline.jp
250 2.1.0 Ok
rcpt to: arctest1@zakato.itline.jp
250 2.1.5 Ok
data
354 End data with .
test2
.
250 2.0.0 Ok: queued as 332CD14DBB6
quit
221 2.0.0 Bye
Connection closed by foreign host.

  「リスト総合案内のページ」を経由して「arc1test 保存書庫」へ移動する。投稿したメールが確認できれば、一応の目的の達成である。あとは、メールのインポートスクリプト等を利用して、既存のアーカイブ対象メールをメーリングリストに流し込むだけである……。

  が、しかーしッ!!

  なにがどうおかしいのかわからんが、サブジェクトが文字化けしてしまう。おまけに、スレッドの認識もいまひとつような気がする。そもそも、メールのDateを見ずに、投入日時でアーカイブするのが、どーにもこーにも気に食わん……。Malimanでアーカイブされているメーリングリストは多く、あまりトラブっている様子を見たことがないので、前者ふたつは工夫の余地があるのだろうが、最後のひとつはいかんともしがたい。

  Pythonが読めればどうにかなるかもしれんが、そこで思いついてしまった。我がメーラMaveのライブラリを使えば、メールのアーカイバなんぞ、ちょいちょいと書けてしまうのではないか、ということに。実装ができれば、Maveの新たな機能としてウリを追加することもできる。

  つーわけで、短い間ながら、さらばMailmanッ!! また逢う日までッ!!