さて、postfix もソースからコンパイルして導入します。ただし、SSLライブラリに、 LibreSSLを使っており、ネット情報があまりないのでちょっと苦労しました。ので纏めます。
ここではコンパイルしてインストール、とりあえず /etc/init.d/postfix start で起動できるまでにします。各種設定はまた別の機会に
Postfix 3.2.0 + LibreSSL は下記を参考にしてみてください。ちょっとやり方変わっています(2017年3月1日)
パッケージで postfixは入っている
crontabs を yum install crontabs で入れると、もれなく postfix も入っちゃいます。まぁそれは仕方がないということ、また /etc/init.d/postfix の起動や再起動、停止スクリプトは使えるので、そのまま上書きインストールすることにします。
LibreSSLの導入
これは別途書いているので、入っているものとします。インストールの仕方は下記を参考にしてください。それほど難しくはありません。
libicu の導入
postfix 3.0.0 より、国際化ドメイン(SMTPUTF8)に対応したってことで、これに対応するためには先に入れておく必要があります。 パッケージは古いのでソースから入れます。
より、「ICU4C Source Code Download」より、icu4c-57_1-src.tgz をダウンロードします。あとは
tar -xzvf icu4c-57_1-src.tgz
cd icu/source
./runConfigureICU Linux
make
sudo make install
で、 /usr/local 以下にインストールされます。
有効なっていることの確認(postfixをインストール後にしてください)
...
libicui18n.so.57 => /usr/local/lib/libicui18n.so.57 (0x*****)
libicuuc.so.57 => /usr/local/lib/libicuuc.so.57 (0x*****)
libicudata.so.57 => /usr/local/lib/libicudata.so.57 (0x******)
...
のように、インストールした icu ライブラリが postfix 実行ファイルに含まれていればOKです。もちろん実際につかうには、postfixの main.cf にて「smtputf8_enable = yes」を有効にする必要があります。
このあたりは、postfixのドキュメントにある「Postfix SMTPUTF8 support」を参考にしてみてください。
※現時点では未検証です。とりあえずインストールできたという備忘録メモなので。
Postfix 3.1.0 を TLSサポート付きでコンパイル!
http://www.postfix.org/ より postfix-3.1.0.tar.gz をダウンロードし、サーバーへアップ。
tar -xzvf postfix-3.1.0.tar.gz
src/tls/tls.h の修正
これをせずに、TLS利用するオプション付きで makeすると
tls_misc.c: In function 'tls_run_version':
tls_misc.c:984: error: 'OPENSSL_VERSION' undeclared (first use in this function)
tls_misc.c:984: error: (Each undeclared identifier is reported only once
tls_misc.c:984: error: for each function it appears in.)
make: *** [tls_misc.o] Error 1
make: *** [update] Error 1
とエラーがでて止まります。 OPENSSL_VERSION 関数が定義されてないよ!ってことです。これについては、 src/tls/tls.h で OpenSSL 1.1.0 未満の場合のみ定義されていたため、この条件をとりあえず外してあげる必要があるようです。
cd postfix-3.1.0
cat ../postfix-3.1.0-libressl.patch | patch -p0
として修正してください。
patchの中身
--- src/tls/tls.h.org 2016-04-08 15:56:33.000000000 +0900
+++ src/tls/tls.h 2016-04-08 16:40:05.000000000 +0900
@@ -89,12 +89,12 @@ extern const char *str_tls_level(int);
#endif
/* Backwards compatibility with OpenSSL < 1.1.0 */
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+/*#if OPENSSL_VERSION_NUMBER < 0x10100000L*/
#define OpenSSL_version_num SSLeay
#define OpenSSL_version SSLeay_version
#define OPENSSL_VERSION SSLEAY_VERSION
#define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
-#endif
+/*#endif*/
/* SSL_CIPHER_get_name() got constified in 0.9.7g */
#if OPENSSL_VERSION_NUMBER >= 0x0090707fL /* constification */
手動で変更される方はこちら
#endif
の2つの行を下記のようにコメントしてください。
OpenSSLの場合、1.1.0 より以前のみ、OPENSSL_VERSION が定義されていました。
これが LibreSSL の場合 2.2.x なので条件に合致せず定義されないんですよね。
/* Backwards compatibility with OpenSSL < 1.1.0 */
/* #if OPENSSL_VERSION_NUMBER < 0x10100000L */
#define OpenSSL_version_num SSLeay
#define OpenSSL_version SSLeay_version
#define OPENSSL_VERSION SSLEAY_VERSION
#define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
/* #endif */
インストール
make makefiles CCARGS="-DUSE_TLS -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lssl -lcrypto -lz -ldl"
make
sudo make install
以下、どこに入れるか聞いてきますがデフォルトでいいでしょう。
LibreSSLライブラリを使っていることの確認
ldd /usr/bin/postfix
....
libssl.so.35 => /usr/local/lib/libssl.so.35 (0x********)
...
のように、 /usr/local/lib 以下のものを使っていれば、自前でしか入れないので LibreSSLを使っていると判断できるでしょう。
/usr/sbin/newaliases
/usr/sbin/mailq
はパッケージのものを参照にしているので変更しておいてください。
cd /usr/bin
sudo mv newaliases newaliases.org
sudo ln -s newaliases.postfix newaliases
sudo mv mailq mailq.org
sudo ln -s mailq.postfix mailq
のような感じで、前のものも残しつつ、ソースからコンパイルしたコマンドへシンボリックリンクをしておくといいかなと思います。
パッケージの postfix を上書きしているなら
/usr/sbin/mailq
はパッケージのものを参照にしているので変更しておいてください。
cd /usr/bin
sudo mv newaliases newaliases.org
sudo ln -s newaliases.postfix newaliases
sudo mv mailq mailq.org
sudo ln -s mailq.postfix mailq
のような感じで、前のものも残しつつ、ソースからコンパイルしたコマンドへシンボリックリンクをしておくといいかなと思います。
0 件のコメント:
コメントを投稿