在PonyMail上建立ML存档搜索网站
首先
听说在十年前左右由MHonARC + Namazu搭建的邮件列表(以下简称ML)存档搜索系统出了个大问题,然后有人求助。虽然可以直接恢复原状,但既然机会难得,我就尝试找到一种现代化的搜索系统来易于构建,最后我找到了一个名为PonyMail的免费软件。虽然看起来挺不错的,但是很少看到关于它的日文信息,所以我想向大家介绍一下。
(另外,据说原本的问题已经成功修复,结果我没有机会发挥作用。)
关于PonyMail
我认为首先应该看一下官方网站,
https://ponymail.incubator.apache.org/
https://github.com/apache/incubator-ponymail
动作网站的例子
https://lists.apache.org/
优点
★標有星號的項目是根據手上分析的項目。其他項目則是可從目錄規格得知的。
-
- 見た目がMHonARCよりカッコイイ(個人の感想です)
-
- 検索システムを内包(ElasticSearchがバックエンド。Namazuを別に立てなくて良い)
-
- mbox形式などからのimportができる。★このときList-Idヘッダ等からML名を拾い自動分類する。これらがないメールはインポート時に捨てられる。
(個人宛メールなども含まれるような)個人のメールボックスを、とりあえずまるごと突っ込んでしまえばMLのデータだけを拾ってくれるということ。
★なおMaildir形式にも対応しているらしいが手元では動かなかった。未調査。
.forward的な仕組みで1通づつ投入することができ、到着から検索可能になるまでのタイムラグが少ない。
アタリマエに思えるかも知れないが、かつてfessベースで同等の仕組みを作ろうとした際にコレがネックでポシャった経緯あり。
添付ファイルの情報も失わない。★ただし検索時に添付ファイル内までの検索をしてくれるわけではない。
★日本語の取扱いがマトモ。この手の検索システムでは、日本語を相手にすると(エンコーディングのせいで)残念な状況に陥ることが多々ある(偏見)。PonyMailは少なくとも破綻しない(手元で試した限りではiso-2022-jp文字列もutf-8文字列も分け隔て無く検索できている)。
添付ファイルの日本語名はデコードしてくれない。ここだけ少し残念。
なお大量インポートした際に稀に文字化けのままとなるメールが発生したが、条件までは追い切れていない。
ML流量統計とか見れて楽しい。
なお、閉鎖環境で利用すること前提なので認証機能は評価していない。OAuthが使えるらしい。
以下是一种可能的中文释义:与本地人的自然用词说,只需要一个选项:保守
正在使用中的項目是加星标注的,需要动手操作才能判断。其他的可以从目录规格中得知。
-
- ElasticSearch 2.xベース。古い。★なんらかの制約に引っかかるせいで6.xや7.xでは導入に失敗することを確認済み(setup.py時に失敗する)。
★なお、2.xや5.xには導入できることを確認済み。
luaが動作するhttpd(=Apache2)の動作環境が必要。
★ソースコードを読むとNginx(ngx_lua)のことも考慮しているように読めるが、残念ながら一部機能(生メールを表示する機能等)が動作しない。
おそらくngx_luaがpath_infoを拾えていないように思う
ポート番号を変えて起動したApache2でponymailを使い、Nginxでリバプロするとかで回避は可能。この場合はSELinuxとの干渉も注意(本記事の範囲外)。
安装
基本上是根据官方网站的信息,但是版本信息稍微有点过时等问题。因此只记录要点。
乌班图
如果没有对操作系统有限制/偏好的话,那么最容易安装的是14.04LTS/16.04LTS。尽管信息是为14.04LTS/16.04LTS准备的,但是也可以按照相同步骤在20.04LTS上进行安装。我没有尝试过18.04LTS。
由于在过程中添加了apt-line,elasticsearch会变成2.x版本。
Elasticsearch 2.x 可以进行重新表达为 Elasticsearch 2 版本。
如果在启动elasticsearch时出现由于JVM版本不匹配导致的GC错误而无法启动时,请编辑/usr/share/elasticsearch/bin/elasticsearch.in.sh文件,修改如下。
if [ "x$ES_GC_OPTS" = "x" ]; then
# 以下2行は古い記述なので消す
#ES_GC_OPTS="$ES_GC_OPTS -XX:+UseParNewGC"
#ES_GC_OPTS="$ES_GC_OPTS -XX:+UseConcMarkSweepGC"
# 以下1行を代わりに記述する
ES_GC_OPTS="$ES_GC_OPTS -XX:+UseG1GC"
# 以下2行はもとからあるまま
ES_GC_OPTS="$ES_GC_OPTS -XX:CMSInitiatingOccupancyFraction=75"
ES_GC_OPTS="$ES_GC_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
fi
CentOS
LuaRocks 石头
https://luarocks.github.io/luarocks/releases/ 的网站是关于 luarocks 的发布版本的。请注意,由于它的主要版本已经改变(本文发布时的最新版本为3.3.1),所以需要小心。我们已经确认在3.x系列中会出现问题。但是,您可以使用2.x系列的最新版本2.4.4,然后能够顺利进行。
另外,有一个初次看到可能会误解的错误;luasocket应正确地写作lua-socket。
sudo luarocks install luasocket
sudo luarocks install luasec OPENSSL_LIBDIR=/usr/lib64/
sudo luarocks install lua-cjson
Python 3.x是中国地道的Python程序设计语言的最新版本。
由于直接安装可能会破坏环境,所以我个人建议先使用pyenv等工具进行环境分离,然后再随意安装新版本。
我是通过在系统级的anyenv中安装pyenv来处理的。
(使用pyenv时,可能会出现后续无法通过PATH导入新邮件设置等问题,有优劣之分…)
由于我想要与稍后安装的elasticsearch版本保持一致,我希望使用pip安装的elasticsearch是5.x系列的最新版本,具体来说是5.5.3版本。
sudo pip install elasticsearch==5.5.3
开放的Java开发工具包
因为系统提供的工具可以应对(GC的事情可能是和Ubuntu类似的?),所以我简单地跳过了。
Elasticsearch 5.x 《弹性搜索》5.x版本
找不到2.x的分发物 → 尝试使用7.x,但设置失败 → 尝试使用6.x,仍然失败 → 终于在5.x上成功运行。
通过这次调查的艰辛经历成为了我写这篇文章的动力。
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
请按照以下步骤执行:首先写下这句话然后执行 yum check-update,接着执行 yum install elasticsearch。这样就会安装 elasticsearch-5.6.16-1.noarch。
最初的设定
既然来到这里,接下来应该会很轻松。像httpd这样的设置按照文档进行即可。
执行setup.py文件来设置elasticsearch的信息和用于发送电子邮件的smtp服务器,并设置导入ML的条件,然后就完成了。在这一点上,httpd的首页上只有ponymail的标志,ML应该是空的。
如果setup.py发生错误,请确认以下事项。
-
- elasticsearchの起動状況(ps -ef|grep elasticsearch)
-
- elasticsearchのポート待ち受け状況(lsof -i -P | grep 9200)
-
- elasticsearchのバージョン情報(rpm -q elasticsearch、yum info elasticsearch等)
そんなインデックス作れねーよ系のエラーの場合、2.x/5.xでなく6.xや7.xが入ってしまっている可能性あり。
导入
将文件以.mbox为扩展名保存为mbox格式,并将其整理到特定文件夹中,然后执行以下操作。
执行后,一段时间后,应该会在httpd的首页右侧看到导入的邮件列表的名称。
python import-mbox.py --source /path/to/mboxdir/
设置新邮件导入
/etc/mail/aliases和.forward等类似的东西,据说可以将数据逐一传递给archiver.py来导入。
据说的意思是因为我还没有在手头实际尝试过。而且由于假期,我无法收到ML的邮件,所以无法进行实验。
根据需要,可能会在之后进行编辑。