Postfix の DB ファイルを一括生成・更新 - Postfix Advent Calendar 2014 - ダメ出し Blog

2014-12-01(Mon) [postfix][shell][makefile] [更新履歴]

Postfix Advent Calendar 2014の 1日目の記事です。

Postfix の /etc/postfix/transport ファイルを更新しました。 さて、次にやることは? そうですね、Postfix が参照するデータベースファイル /etc/postfix/transport.db に反映するため、postmap(8) を実行する必要があります。

# vi /etc/postfix/transport
…transport を更新…
# postmap /etc/postfix/transport

簡単ですね。では、/etc/postfix/virtual_alias を更新したら? /etc/postfix/client_access は?

# cd /etc/postfix
# vi virtual_alias client_access
…virtual_alias、client_access を更新…
# postmap virtual_alias
# postmap client_access

では、*.db の更新忘れがないか心配なときは?

# for db in /etc/postfix/*.db; do postmap ${db%%.db}; done

はい、ちょっと面倒くさいですね。

もう少し簡単に、かつ更新忘れないようにしましょうか。 こんなときは Makefile が便利です。次のような内容で /etc/postfix/Makefile を作りましょう。 (必要であればコマンドやディレクトリのパスは適宜書き換えてください)

#!/usr/bin/make -f

POSTFIX_DB= transport.db virtual_alias.db sender_access.db recipient_access.db
POSTFIX_CONFIG_DIR=	/etc/postfix
POSTMAP=        	/usr/sbin/postmap

default:
	@cd $(POSTFIX_CONFIG_DIR) && make db

.PHONY: default db

db: $(POSTFIX_DB)

transport.db: transport
	$(POSTMAP) $<

virtual_alias.db: virtual_alias
	$(POSTMAP) $<

sender_access.db: sender_access
	$(POSTMAP) $<

recipient_access.db: recipient_access
	$(POSTMAP) $<

Makefile を直接実行できるように実行権限を与えます。 (オプション。make コマンドを打って実行する場合は不要です)

# chmod +x /etc/postfix/Makefile

では使ってみましょう。 /etc/postfix/*.db ファイルのソースファイルを更新したら /etc/postfix/Makefile コマンドを実行しましょう。

# vi /etc/postfix/virtual_alias
…virtual_alias を更新…
# /etc/postfix/Makefile
make[1]: Entering directory `/etc/postfix'
/usr/sbin/postmap virtual_alias
make[1]: Leaving directory `/etc/postfix'

いい感じですね。DB ファイルを追加・削除したときに Makefile の更新を忘れないように気をつけましょう。

Makefile (make コマンド) の実行方法はほかにもいくつかありますので、 状況などに応じて使い分けてください。 例えば、カレントディレクトリを /etc/postfix にしている場合は make を打ったほうがタイプ数が少ないです。

# cd /etc/postfix
# vi virtual_alias
…virtual_alias を更新…
# make
make[1]: Entering directory `/etc/postfix'
/usr/sbin/postmap virtual_alias
make[1]: Leaving directory `/etc/postfix'

最後にもう一歩。DB ファイルの参照を /etc/postfix/main.cf に追加したとき、 自動的に追随するようにしてみました。

Makefile

私は実際に利用していますが、うまく動いているようです。 main.cf 以外の master.cf などで参照している *.db に対応していないのが課題です。


ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority

逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!


私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/


よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。