Tiny Core Linux 9.0で最新のPostfixをインストール、TCZ化

  • 投稿日:
  • 更新日:2018/05/01
  • by
  • カテゴリ:

TinyCoreはアクティブにアップデートされるディストリビューションですが、パッケージ管理システムであるtczのアップデートがそれに追いついておらず、結構いろいろなパッケージが入っていません。

特に、サーバとして動作させるためにはメールサーバがないのは結構クリティカルです。

これまでは以前のバージョンのTinyCoreリリースのtczリポジトリに含まれるpostfixを使ったりしていましたが、さすがに4.xではかなり古いので、今回は最新のpostfixをソースからビルドすることにしました。

pc.jpgメールが使えないサーバなんて...

postfixの配布にはTinyCore用の設定は入っておらず、例によってtczを作る関係でちょっとトリッキーなことをしなければならないので、メモです。

完成品はこちら

手順はどうでもいいからクレクレタコラな人は、こちらをどうぞ。

postfix-3.2.5-for-tinycore-9.x.tar.gzダウンロード

9.xでコンパイル

以下、コンパイル手順です。

今回はpostfix-3.2.5で試しました。

$ tar vxfz postfix-3.2.5.tar.gz
$ cd postfix-3.2.5

コンパイル環境の準備をします。

$ tce-load -wil compiletc db-dev pcre-dev squashfs-tools coreutils glibc_base-dev
$ tce-load -wi db pcre

db.hファイルの位置が異なるので、makedefsファイルを以下のように変更します。

$ diff -u makedefs.orig makedefs
--- makedefs.orig
+++ makedefs
@@ -547,7 +547,7 @@
case "$CCARGS" in
*-DNO_DB*) ;;
*-DHAS_DB*) ;;
- *) if [ -f /usr/include/db.h ]
+ *) if [ -f /usr/local/include/db.h ]
then
: we are all set
elif [ -f /usr/include/db/db.h ]

ソースコードからのPostfixインストール (4.4 - ビルトインパラメータのデフォルト設定を上書きする)を参照しながら、コンパイルのためのパラメータを設定します。

私の場合は、以下のようにオプションを設定してインストールしました。

-DNOIP_V6は私の環境用ですので、必要に応じて抜いても構いません。

$ make CCARGS='-DDEF_COMMAND_DIR=\"/usr/local/sbin\" \
-DDEF_CONFIG_DIR=\"/usr/local/etc/postfix\" \
-DDEF_DAEMON_DIR=\"/usr/local/libexec/postfix\" \
-DDEF_MAILQ_PATH=\"/usr/local/bin/mailq\" \
-DDEF_NEWALIAS_PATH=\"/usr/local/bin/newaliases\" \
-DDEF_QUEUE_DIR=\"/usr/local/var/spool/postfix\" \
-DDEF_SENDMAIL_PATH=\"/usr/local/sbin/sendmail\" \
-DDEF_MANPAGE_DIR=\"/usr/local/man\" \
-DNO_NIS -DNO_IPV6' makefiles
$ make
$ sudo make install
(質問にはすべてenterで答える)

これで現在の環境内にインストールされます。

tczを作成する

上記のままだと、リブートすると消えてしまうので、tczパッケージを作成しなければなりません。

4.xのpostfix.tczパッケージに入っているポストインストールファイルをベースに、以下のようにして作成します。

$ mkdir /usr/local/tce.installed
$ cd /usr/local/tce.installed
$ vi postfix

以下がpostfixファイルの内容です。

#!/bin/sh
[ ! -e /usr/local/etc/postfix/transport ] && busybox cp /usr/local/etc/postfix/transport.sample /usr/local/etc/postfix/transport
[ ! -e /usr/local/etc/postfix/master.cf ] && busybox cp /usr/local/etc/postfix/master.cf.sample /usr/local/etc/postfix/master.cf
[ ! -e /usr/local/etc/postfix/relocated ] && busybox cp /usr/local/etc/postfix/relocated.sample /usr/local/etc/postfix/relocated
[ ! -e /usr/local/etc/postfix/header_checks ] && busybox cp /usr/local/etc/postfix/header_checks.sample /usr/local/etc/postfix/header_checks
[ ! -e /usr/local/etc/postfix/canonical ] && busybox cp /usr/local/etc/postfix/canonical.sample /usr/local/etc/postfix/canonical
[ ! -e /usr/local/etc/postfix/access ] && busybox cp /usr/local/etc/postfix/access.sample /usr/local/etc/postfix/access
[ ! -e /etc/aliases ] && busybox cp /usr/local/etc/postfix/aliases.sample /etc/aliases
[ ! -e /usr/local/etc/postfix/virtual ] && busybox cp /usr/local/etc/postfix/virtual.sample /usr/local/etc/postfix/virtual
[ ! -e /usr/local/etc/postfix/generic ] && busybox cp /usr/local/etc/postfix/generic.sample /usr/local/etc/postfix/generic
[ ! -e /usr/local/etc/postfix/main.cf ] && busybox cp /usr/local/etc/postfix/main.cf.sample /usr/local/etc/postfix/main.cf
addgroup -g 89 postfix
addgroup -g 90 postdrop
adduser -g "Postfix Daemon,,," -h /usr/local/var/spool/postfix -S -D -H -G postfix -s /bin/false -u 89 postfix
[ ! -d /usr/local/var/mail ] && mkdir -p /usr/local/var/mail
[ ! -d /usr/local/var/spool/postfix ] && mkdir -p /usr/local/var/spool/postfix
[ ! -d /usr/local/var/lib/postfix ] && mkdir -p /usr/local/var/lib/postfix
chown -R postfix:postfix /usr/local/var/mail
chown -R root:root /usr/local/var/spool/postfix
chown -R postfix:postfix /usr/local/var/lib/postfix
/usr/local/bin/newaliases

作成したら、パーミッションを変更しておきます。

$ chmod a+x postfix

起動ファイルを作成します。

$ cd /usr/local/etc/init.d
$ sudo vi postfix

内容は、やはり4.xから持ってきます。以下がその内容です。

#!/bin/sh
USAGE="Usage: sudo /usr/local/etc/init.d/postfix {start|stop|reload|abort|check|status|flush}"

### Checks ###
[ $(id -u) -ne 0 ] && { echo $USAGE; exit 1; }
[ -z "$1" ] && { echo $USAGE; exit 1; }

### Executing ###
case $1 in
start) /usr/local/sbin/postfix start ;;
stop) /usr/local/sbin/postfix stop ;;
abort) /usr/local/sbin/postfix abort ;;
reload) /usr/local/sbin/postfix reload ;;
check) /usr/local/sbin/postfix check ;;
flush) /usr/local/sbin/postfix flush ;;
status) /usr/local/sbin/postfix status ;;
*) echo $USAGE && exit 1 ;;
esac
retval=$?

### Exiting ###
[ $retval -eq 0 ] && {
echo OK ;
exit 0 ;
} || {
echo failed ;
exit 1 ;
}

上記ファイルを実行可能にします。

コンフィグレーションファイルの名前を変更します。

$ sudo chmod a+x postfix
$ cd /usr/local/etc/postfix
$ for i in access aliases canonical generic header_checks main.cf master.cf relocated transport virtual; do sudo mv $i $i.sample; done

ファイルリストを作成します。

$ cd /mnt/sda1/tce/optional/
$ vi postfix.tcz.list

ファイルリストpostfix.tcz.listは以下のようになります。

usr/local/tce.installed/postfix
usr/local/bin/newaliases
usr/local/bin/mailq
usr/local/etc/init.d/postfix
usr/local/etc/postfix/virtual.sample
usr/local/etc/postfix/transport.sample
usr/local/etc/postfix/relocated.sample
usr/local/etc/postfix/master.cf.sample
usr/local/etc/postfix/main.cf.sample
usr/local/etc/postfix/header_checks.sample
usr/local/etc/postfix/generic.sample
usr/local/etc/postfix/canonical.sample
usr/local/etc/postfix/aliases.sample
usr/local/etc/postfix/access.sample
usr/local/etc/postfix/main.cf.default
usr/local/etc/postfix/bounce.cf.default
usr/local/etc/postfix/TLS_LICENSE
usr/local/etc/postfix/LICENSE
usr/local/etc/postfix/postfix-files
usr/local/etc/postfix/master.cf.proto
usr/local/etc/postfix/makedefs.out
usr/local/etc/postfix/main.cf.proto
usr/local/sbin/sendmail
usr/local/sbin/postqueue
usr/local/sbin/postdrop
usr/local/sbin/postsuper
usr/local/sbin/postmulti
usr/local/sbin/postmap
usr/local/sbin/postlog
usr/local/sbin/postlock
usr/local/sbin/postkick
usr/local/sbin/postfix
usr/local/sbin/postconf
usr/local/sbin/postcat
usr/local/sbin/postalias
usr/local/libexec/postfix/lmtp
usr/local/libexec/postfix/nqmgr
usr/local/libexec/postfix/virtual
usr/local/libexec/postfix/verify
usr/local/libexec/postfix/trivial-rewrite
usr/local/libexec/postfix/tlsmgr
usr/local/libexec/postfix/tlsproxy
usr/local/libexec/postfix/spawn
usr/local/libexec/postfix/smtpd
usr/local/libexec/postfix/smtp
usr/local/libexec/postfix/showq
usr/local/libexec/postfix/scache
usr/local/libexec/postfix/qmqpd
usr/local/libexec/postfix/qmgr
usr/local/libexec/postfix/proxymap
usr/local/libexec/postfix/postscreen
usr/local/libexec/postfix/postmulti-script
usr/local/libexec/postfix/postfix-wrapper
usr/local/libexec/postfix/postfix-tls-script
usr/local/libexec/postfix/postfix-script
usr/local/libexec/postfix/post-install
usr/local/libexec/postfix/pipe
usr/local/libexec/postfix/pickup
usr/local/libexec/postfix/oqmgr
usr/local/libexec/postfix/master
usr/local/libexec/postfix/local
usr/local/libexec/postfix/flush
usr/local/libexec/postfix/error
usr/local/libexec/postfix/dnsblog
usr/local/libexec/postfix/discard
usr/local/libexec/postfix/cleanup
usr/local/libexec/postfix/bounce
usr/local/libexec/postfix/anvil

パッケージを作成するために、必要なファイルを/tmp/pkg下にコピーします。

$ cd /tmp/
$ mkdir pkg
$ cd pkg
$ (cd /;tar cf - `cat /mnt/sda1/tce/optional/postfix.tcz.list`) | tar vxf -
usr/local/tce.installed/postfix
usr/local/bin/newaliases
usr/local/bin/mailq
usr/local/etc/init.d/postfix
usr/local/etc/postfix/virtual.sample
usr/local/etc/postfix/transport.sample
usr/local/etc/postfix/relocated.sample
usr/local/etc/postfix/master.cf.sample
usr/local/etc/postfix/main.cf.sample
usr/local/etc/postfix/header_checks.sample
usr/local/etc/postfix/generic.sample
usr/local/etc/postfix/canonical.sample
usr/local/etc/postfix/aliases.sample
usr/local/etc/postfix/access.sample
usr/local/etc/postfix/main.cf.default
usr/local/etc/postfix/bounce.cf.default
usr/local/etc/postfix/TLS_LICENSE
usr/local/etc/postfix/LICENSE
usr/local/etc/postfix/postfix-files
usr/local/etc/postfix/master.cf.proto
usr/local/etc/postfix/makedefs.out
usr/local/etc/postfix/main.cf.proto
usr/local/sbin/sendmail
usr/local/sbin/postqueue
usr/local/sbin/postdrop
usr/local/sbin/postsuper
usr/local/sbin/postmulti
usr/local/sbin/postmap
usr/local/sbin/postlog
usr/local/sbin/postlock
usr/local/sbin/postkick
usr/local/sbin/postfix
usr/local/sbin/postconf
usr/local/sbin/postcat
usr/local/sbin/postalias
usr/local/libexec/postfix/lmtp
usr/local/libexec/postfix/nqmgr
usr/local/libexec/postfix/virtual
usr/local/libexec/postfix/verify
usr/local/libexec/postfix/trivial-rewrite
usr/local/libexec/postfix/tlsmgr
usr/local/libexec/postfix/tlsproxy
usr/local/libexec/postfix/spawn
usr/local/libexec/postfix/smtpd
usr/local/libexec/postfix/smtp
usr/local/libexec/postfix/showq
usr/local/libexec/postfix/scache
usr/local/libexec/postfix/qmqpd
usr/local/libexec/postfix/qmgr
usr/local/libexec/postfix/proxymap
usr/local/libexec/postfix/postscreen
usr/local/libexec/postfix/postmulti-script
usr/local/libexec/postfix/postfix-wrapper
usr/local/libexec/postfix/postfix-tls-script
usr/local/libexec/postfix/postfix-script
usr/local/libexec/postfix/post-install
usr/local/libexec/postfix/pipe
usr/local/libexec/postfix/pickup
usr/local/libexec/postfix/oqmgr
usr/local/libexec/postfix/master
usr/local/libexec/postfix/local
usr/local/libexec/postfix/flush
usr/local/libexec/postfix/error
usr/local/libexec/postfix/dnsblog
usr/local/libexec/postfix/discard
usr/local/libexec/postfix/cleanup
usr/local/libexec/postfix/bounce
usr/local/libexec/postfix/anvil

エラーが出なければokです。

実行ファイルをstripし、mksquashfsでパックします。

$ strip usr/local/bin/*
$ strip usr/local/sbin/*
$ strip usr/local/libexec/postfix/*
strip:usr/local/libexec/postfix/post-install: File format not recognized
strip:usr/local/libexec/postfix/postfix-script: File format not recognized
strip:usr/local/libexec/postfix/postfix-tls-script: File format not recognized
strip:usr/local/libexec/postfix/postfix-wrapper: File format not recognized
strip:usr/local/libexec/postfix/postmulti-script: File format not recognized
$ cd ..
$ mksquashfs pkg postfix.tcz
$ ls -al postfix.tcz
-rw-r--r-- 1 tc staff 4136960 Apr 22 15:04 postfix.tcz
$ cp postfix.tcz /mnt/sda1/tce/optional

リブートし、postfix.tczをテストしてみます。

$ tce-load -i postfix
addgroup: group 'postfix' in use
addgroup: group 'postdrop' in use
adduser: user 'postfix' in use
postfix.tcz: OK
$ sudo /usr/local/etc/init.d/postfix start
postfix: Postfix is running with backwards-compatible default settings
postfix: See http://www.postfix.org/COMPATIBILITY_README.html for details
postfix: To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"
postfix/postfix-script: warning: not owned by root: /usr/local/etc/postfix/.
postfix/postfix-script: warning: not owned by root: /usr/local/libexec/postfix/.
(初回はディレクトリがないので同様のメッセージが延々続く)
postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/local/sbin/postdrop
postfix/postfix-script: starting the Postfix mail system
OK
$

上記のようになれば成功です。

もし、以下のようなエラーが出る場合は、/usr/local/var/spool/postfix ディクレクトリの互換性が原因である可能性があるので、一旦このディレクトリを削除して実行しなおしてみてください。

postsuper: fatal: scan_dir_push: open directory defer: Permission denied
postfix/postfix-script: fatal: Postfix integrity check failed!
failed

最後に、postfix.tcz.depファイルを作成しておきます。

$ vi /mnt/sda1/tce/optional/postfix.tcz.dep

内容は、Postfixが依存するパッケージのリストで、以下のようになります。

pcre.tcz
db.tcz

以上で動作しました。

こちらもよく読まれています