FreeBSD 12にOpenSMTPDを入れたかった
昔はこうやって入れていました。
# portsnap fetch update # cd /usr/ports/mail/opensmtpd # make ===> opensmtpd-5.9.2p1_6,1 is marked as broken: Incompatible with Openssl 1.1.x yet. *** Error code 1 Stop. make: stopped in /usr/ports/mail/opensmtpd #
何か月たってもエラー。
あきらめようか。
【追記】FreeBSD 12.1-RELEASEでやったらうまく行きました。
やったー!!
# freebsd-version 12.1-RELEASE # portsnap fetch update # cd /usr/ports/mail/opensmtpd # make install # rehash # smtpd -h version: OpenSMTPD 6.6.0-portable usage: smtpd [-dFhnv] [-D macro=value] [-f file] [-P system] [-T trace] #
ソースから手動で入れる
ここでの手順はパッケージ管理されないので色々問題ありそう。
ずっとOpenSMTPDを使ってきたけど、結局sendmailに戻すかも。
それではOpenSMTPDをソースから入れる手順を示します。
方針は下記の通り。
- 必要なライブラリも全部ソースから入れる
/opt/smtpd
にインストール- 起動停止スクリプトは
/usr/local/etc
上に配置
管理ユーザーの作成
# pw useradd -n _smtpd -u 257 -c OpenSMTPD -w no -m -d /opt/smtpd -s sh # pw useradd -n _smtpq -u 258 -c OpenSMTPD -w no -m -d /var/empty -s /usr/sbin/nologin
切り替え
# su - _smtpd $
ディレクトリ作成
# mkdir src $ mkdir distfiles
ダウンロード
$ cd distfiles $ fetch --no-verify-peer https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.9.2.tar.gz $ fetch --no-verify-peer https://github.com/libevent/libevent/releases/download/release-2.1.10-stable/libevent-2.1.10-stable.tar.gz $ fetch --no-verify-peer https://www.opensmtpd.org/archives/libasr-1.0.2.tar.gz $ fetch --no-verify-peer https://www.opensmtpd.org/archives/opensmtpd-6.4.1p2.tar.gz
LibreSSL構築
$ cd $ cd src $ tar zxf ../distfiles/libressl-2.9.2.tar.gz $ cd libressl-2.9.2/ $ ./configure --prefix=$HOME $ make $ make install $ make clean
環境変数LD_LIBRARY_PATH
を設定する。
$ cd $ vi .profile
下記の3行を追記
# OpenSMPTD LD_LIBRARY_PATH="${HOME}/lib:${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH
一度ログアウトする
$ exit
切り替え
# su - _smtpd
環境変数の確認
$ env | grep LD_LIBRARY_PATH LD_LIBRARY_PATH=/opt/smtpd/lib:
libevent構築
$ cd $ cd src $ tar zxf ../distfiles/libevent-2.1.10-stable.tar.gz $ cd libevent-2.1.10-stable/ $ ./configure --prefix=$HOME $ make $ make install $ make clean
libasr構築
$ cd $ cd src $ tar zxf ../distfiles/libasr-1.0.2.tar.gz $ cd libasr-1.0.2/ $ ./configure --prefix=$HOME $ make $ make install $ make clean
OpenSMPTD構築
$ cd $ cd src $ tar zxf ../distfiles/opensmtpd-6.4.1p2.tar.gz $ cd opensmtpd-6.4.1p2/ $ ./configure --prefix=$HOME \ --with-libasr=$HOME \ --with-libevent=$HOME \ --with-libssl=$HOME $ make $ make install $ make clean
環境設定
root
にて作業を行う
ディレクトリの移動
# cd /usr/local/etc/rc.d/
もし存在しない場合は作る
# mkdir -p /usr/local/etc/rc.d/ # mkdir -p /usr/local/etc/mail/ # cd /usr/local/etc/rc.d/
サービス用スクリプトを作成する。
# vi optsmtpd
内容は下記の通り。
#!/bin/sh # PROVIDE: optsmtpd mail # REQUIRE: LOGIN # KEYWORD: shutdown . /etc/rc.subr basepath="/opt/smtpd" LD_LIBRARY_PATH="${basepath}/lib:${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH name="optsmtpd" rcvar=optsmtpd_enable start_precmd="optsmtpd_precmd" restart_precmd="optsmtpd_checkconfig" configtest_cmd="optsmtpd_checkconfig" extra_commands="configtest" load_rc_config $name : ${optsmtpd_enable:="NO"} : ${optsmtpd_config:="/usr/local/etc/mail/smtpd.conf"} : ${optsmtpd_procname:="${basepath}/sbin/smtpd"} : ${optsmtpd_flags:=""} command=${optsmtpd_procname} command_args="-f ${optsmtpd_config} ${command_args}" required_files="${optsmtpd_config}" procname=${optsmtpd_procname} pidfile="/var/run/smtpd.pid" optsmtpd_checkconfig() { echo "Performing sanity check on optsmtpd configuration:" eval ${command} ${command_args} ${optsmtpd_flags} -n } optsmtpd_precmd() { optsmtpd_checkconfig } run_rc_command "$1"
権限の設定を行う
# chmod 755 optsmtpd # service -l | grep optsmtpd optsmtpd
自動起動の設定を行う。
# cd # vi /etc/rc.conf
下記の行を追加する。
sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" optsmtpd_enable="YES"
sendmailの強制停止
# service sendmail forcestop Stopping sendmail. Waiting for PIDS: 1983. Stopping sendmail_msp_queue. Waiting for PIDS: 1986.
設定ファイルの配置
# vi /usr/local/etc/mail/smtpd.conf
内容は下記の通り。
table aliases file:/etc/mail/aliases listen on 127.0.0.1 action "local" mbox alias <aliases> match for local action "local"
プロセスを立ち上げる
# service optsmtpd start Performing sanity check on optsmtpd configuration: configuration OK Starting optsmtpd.
起動確認
# ps -ax | grep smtpd 70778 - SsJ 0:00.02 /opt/smtpd/sbin/smtpd -f /usr/local/etc/mail/smtpd.conf 70779 - IJ 0:00.02 smtpd: klondike (smtpd) 70780 - IJ 0:00.02 smtpd: control (smtpd) 70781 - IJ 0:00.03 smtpd: lookup (smtpd) 70782 - IJ 0:00.03 smtpd: pony express (smtpd) 70783 - IJ 0:00.03 smtpd: queue (smtpd) 70784 - IJ 0:00.02 smtpd: scheduler (smtpd) 70790 0 S+J 0:00.00 grep smtpd
メール送信テスト
# echo hello | mail root (少し待つ) # mail Mail version 8.1 6/6/93. Type ? for help. "/var/mail/root": 1 message 1 new >N 1 root@empty.lan Tue Jul 23 05:08 18/575 & 1 Message 1: From root@empty.lan Tue Jul 23 05:08:39 2019 Delivered-To: root@empty.lan Date: Tue, 23 Jul 2019 05:08:39 GMT From: Charlie Root <root@empty.lan> To: root@empty.lan hello & q Saved 1 message in mbox #
停止確認
# cd # service optsmtpd stop Stopping optsmtpd. Waiting for PIDS: 70778. # ps -ax | grep smtpd 70810 0 S+J 0:00.00 grep smtpd #
最後に
どこまでうまく動くかは不明。
あと、6.4.0からsmtpd.confの書き方が変わったんですって。