TinyCoreはアクティブにアップデートされるディストリビューションですが、パッケージ管理システムであるtczのアップデートがそれに追いついておらず、結構いろいろなパッケージが入っていません。
特に、サーバとして動作させるためにはメールサーバがないのは結構クリティカルです。
これまでは以前のバージョンのTinyCoreリリースのtczリポジトリに含まれるpostfixを使ったりしていましたが、さすがに4.xではかなり古いので、今回は最新のpostfixをソースからビルドすることにしました。
メールが使えないサーバなんて...
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
以上で動作しました。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!