ユーザ用ツール

サイト用ツール


freebsd_上で_ruby_を使って_milter_を書きたいときは

FreeBSD 上で Ruby を使って milter を書きたいときは

Ruby を使って milter を書く場合、milter manager の Ruby バインディングを利用するのが手っ取り早い。 しかし、FreeBSD の ports / packages ではこれが無効化されている(というか、milter manager 自体がデフォルトで有効化していない)ため、ソースを取得して自前でビルドしてやる必要がある。

milter-manager の公式配布元は OSDN のようだが(ちなみに公式サイトにはなぜかダウンロードページや配布元へのリンクというものが存在しない)、例によって接続が極めて不安定な状態。なので ports / packages は github から取得するようになっている。この ports の distfile を利用してもいいのだが、ports のほうもすっかり放置プレイのようでビルド対象が大分古い。せっかくなので、最新版(といってもリリースは 2023 年 1 月だが……)の 2.2.7 を取得する。

milter-manager.2.2.7.tar.gz をダウンロードしたらこれを展開し、configure を実行する。この時、オプションを付けてやらないと Ruby バインディングがビルド・インストールされない。

./configure --enable-ruby-milter

ports / packages からインストールしてあって、これを上書きしたくない場合は、インストール先を変更してやった方がいいかも。

それが終わったら、gmake でビルド。丸々インストールしてしまっていい場合はいきなり gmake install でもいい。 Ruby バインディングだけインストールする場合、一旦全体を make したあと、Ruby バインディングの在処まで潜って gmake install を実行する。

cd binding/ruby/
gmake install

なんか pkg upgrade したら milter が動かなくなってたんですが?!

上記の手順でインストールした gem は、インストール時に使用した Ruby のバージョンに依存した場所に配置される。そのため、Ruby をバージョンアップすると動かなくなってしまう。

pkg upgrade 等でソフトウェアをアップデートする際は、その対象に Ruby が含まれていないか確認し、含まれていた場合はアップデート後に上記手順を再度実行して gem を再インストールしましょうね。うっかりすると、「ある時からメールが一切送受信できなくなってた」とか恐ろしい事態が…… :-?

milter-manager の Ruby binding をビルドできない!!!

環境によるのか Ruby のバージョンによるのか1)milter-manager-2.2.7 の Ruby binding をビルドしようとすると binding/ruby/ext/core/ の中で「rbgobject.h がない!!」と言われて make が止まってしまう場合がある。このヘッダファイルは FreeBSD の場合 rubygem-glib2 パッケージに含まれていて、実際に /usr/local/lib/ruby/gems/3.3/extensions/amd64-freebsd-13/3.3/glib2-4.2.9//usr/local/lib/ruby/gems/3.3/gems/glib2-4.2.9/lib/ に当該ファイルが存在している。なので、web を検索して引っかかる「rubygem-glib2 を(再)インストールしてみたら?」という情報は、効果を持たない。configure とは…… (-_-;

milter-manager-2.1.5 の頃は、milter manager の tar ball 自体に glib2 関連ソースが同梱されていた。一方、2.2.5 や 2.2.7 には同梱されていない。……そうこうしているうちにもメールの受信不能状態は続いているので2)、とりあえず急場をしのごうと 2.1.5 の Ruby binding をビルドしようとしたら、そっちは「型キャストが気に入らん!!!」とか言われてビルド不能。しくしくしく T_T

仕方がないので、milter manager のソース自体は最新版を使うことにし、/usr/local/lib/ruby/gems/3.3/gems/glib2-4.2.9/lib/rbgobject.h の symlink を binding/ruby/ext/core/ に作成。ところが、一男去ってまた次男、「今度はあれが足りない」「次はあれが欲しい」……と、次々に symlink を張る羽目に。

最初は言われるがままにチマチマと 1 つづつ symlink を張っていたんだが、だんだん嫌になってきて、途中で /usr/local/lib/ruby/gems/3.3/gems/glib2-4.2.9/lib/ 内の全ファイル(・ディレクトリ)の symlink を一括作成。ようやくビルドが通った。うーん、なんだかなぁ…… (_ _;

1)
3.2 が入っているマシンではビルドできているが、3.3 が入っているマシンではコケてしまう。
2)
Rubu binding を使用した milter が起動不能になっているとき、とりあえずその milter のみを無効化して動作させようにも、「(あるはずなのに存在しない)milter の unix domain socket が unsafe だ!」と叫んで milter manager 自体が落ちてしまい、メールの送受信が一切不能という事態に。こういう時、milter manager の「milter 自動検出」機能はかえって迷惑…… (-.-;
freebsd_上で_ruby_を使って_milter_を書きたいときは.txt ? 最終更新: 2025/07/18 09:44 by a-gota