(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ'ω`) < Mailmanの設定ファイル、Defaults.pyとmm_cfg.py, config.pckの関係について

(ヽ´ω`) < 3つもあるからわかりにくい

Mailmanの細かい設定パラメータについて解説する前に、

既にインストールの段階で説明したとおり、Mailmanの設定はMailman/mm_cfg.pyMailman/Defaults.pyのデフォルト設定を上書きする形で行われる。

それでは、Mailmanに関する全ての設定がこの2つのファイルだけで行われているかというと然にあらず。実はMailmanの設定には「全体設定」と「リスト毎の設定」がある。

各リストのデフォルト設定はDefaults.pymm_cfg.pyで設定した値、つまりシステム管理者が設定した値となるが、多くの設定に関しては、リストの管理者が変更可能である。

この変更はリストの管理者がWebUIから行うことができるが、

  • リスト管理者のメールアドレス
  • リストから配送されるメールのSubjectに付与するPrefix
  • メンバー登録時のWelcomeメッセージの内容

のようなリスト固有のものもあれば、

  • メンバー以外からメールを受信した際の挙動(配送、破棄、保留)
  • アーカイブ化処理の有無
  • エラーメールの処理方法

などと、Mailmanのコアな部分の挙動についても制御が可能となっている。

「リスト毎の設定」はlists/<リスト名>/config.pckというファイルに保存される。この拡張子pckのファイルはPickleファイルと言い、Pythonに標準で添付されているオブジェクトシリアライズのためのフォーマットとなる。バイナリファイルなので、中身を見たい場合にはbin/dumpdbコマンドを使用する。

Defaults.py, mm_cfg.py, config.pckそれぞれの関係をまとめると以下のようになる。

ファイル名 役割 変更方法 変更者 ファイル形式
Defaults.py Mailmanデフォルトの設定を記載
各パラメータの役割についてのコメント有
基本的に変更しない システム管理者 Pythonスクリプト
mm_cfg.py Mailmanのシステム全体に渡る設定を記載 ファイルを直接編集 システム管理者 Pythonスクリプト
config.pck 各リスト毎の個別・固有の設定を記載 WebUI(リスト管理者、システム管理者)、bin/config_listコマンド(システム管理者) 主にリスト管理者 Pickle形式(バイナリファイル)

(ヽ´ω`) < 設定内容の移譲について

上記の図を見てわかるとおり、config.pckはリスト作成時に作成されるため、リスト作成後にmm_cfg.pyの内容を変更しても、その内容は既存のリストには反映されない。既存のリストへ設定を反映させるには、個別にbin/config_listコマンドで設定を流しこんでやる必要がある。(この方法については後述する)

ApacheやPostfixなどの一般的なサーバアプリケーションでは、設定ファイルを書き換えてサーバをリロードすれば設定が反映されるが、Mailmanではここが特殊でハマりやすい。

(おーい、未承認メールの保留期間を2週間にしておいてくれー)
(ヽ´ω`) < はいはい、mm_cfg.pyでDEFAULT_MAX_DAYS_TO_HOLDを14に設定っと…
3週間後
(オラァ! 2週間って言っただろうが! 全然消えてねぇぞ!![※デフォルトでは未承認メールは自動削除されない])
(;ヽ´ω`) < えぇ…
(;ヽ´ω`) < スンマセン、今WebUIで変更しました!
(チッ)
(ヽ´ω`) < と言うか自分でWebUIから変更してくれればよかったんじゃ…

というのが実体験に基づくかどうかは置いておいて、この特徴をしっかりと覚えておくためには、Defaults.pymm_cfg.pyを"設定ファイル"と考えずに "テンプレート" として考えると良い。

Defaults.pymm_cfg.pyはテンプレートで、設定ファイルはconfig.pckのみと覚えておけば、設定を変更するには、当然設定ファイルであるconfig.pckを操作しないといけない、となる。

(ヽ´ω`) < 「固有設定」と「個別設定」について

config.pckファイルの中身、リスト毎の設定には「固有設定」と「個別設定」がある。それぞれの区別は以下の通り。

言葉 定義 設定は必須か?
固有設定 リストの名前や管理者のメールアドレスなどの、そのリスト自身の独立性を表す設定。
リスト作成時にinputとして渡す。
必須
個別設定 Defaults.py, mm_cfg.pyから引き継がれ、必要に応じて上書きされた、メーリングリストシステムとしての挙動を制御する設定。 必要に応じて。設定しない場合はシステム管理者が設定した値が使用される。

実際のファイルの中身に明確な区別があるわけではなく、概念として2つの設定があるということを留意してもらいたい。

繰り返しになるが、個別設定は「mm_cfg.pyのものが使用される」のではなく、「mm_cfg.pyから生成される」ということを覚えておくこと。

(ヽ´ω`) < config.pckファイルの変更方法

config.pckファイルの中身を変更するには2つの方法がある。

1つめはWebUIからの変更。これはリスト管理者がログインして行うことができるし、システム管理者がマスターパスワード(bin/mmsitepassで作成したパスワード)でWebUIにログインすることでも変更が可能。

(ちなみに、アクセス対象のWebUIのURLはどちらの場合でも同じ。つまり、WebUIにログインする際には、リスト個別のパスワードとマスターパスワードの2つが利用可能となる。)

もう1つが先程から何度か出ているbin/config_listコマンドである。

これはサーバのスクリプトファイルなので、当然、サーバのコンソールを触れる人間、通常はシステム管理者のみが使用できるコマンドとなる。

bin/withlistというコマンドもあるのだが、これはかなりPythonプログラマに寄ったコマンドなので、Pythonに馴染みのない管理者にはとっつきにくい。

(ヽ´ω`) < config_listコマンドの使用方法

長くなるので次のエントリで

(ヽ'ω`) < わかりにくい 図を使え 人に伝える気があるのか

(ヽ'ω`) < そ、そのうち追加します