CentOS Stream9にnotqmailを構築

CentOS Stream9の環境でnotqmailのインストール、tcpserverとdaemontoolsを使って実行・制御する設定、systemdによるOS起動時の自動起動の設定を行いました。備忘として手順をまとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

notqmailをインストール
実際は、qmailを起動するサービスとしてtcpserverを利用することになりますが、まずはqmail単体のインストール、qmail単体の動作確認まで行っています。
 
1)ソースの入手、解凍、配置
 
①入手先
https://github.com/notqmail/notqmail/releases/download/notqmail-1.08/notqmail-1.08.tar.gz
 
②ソースの解凍、配置
# cd /usr/local/src
# gunzip notqmail-1.08.tar.gz
# tar xvf notqmail-1.08.tar
 
③qmailのホームディレクトリの作成
# mkdir /var/qmail
 
2)qmail実行用のユーザー、グループの作成
 
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails
 
3)qmailのビルド
 
①makeパッケージのインストール(未導入の場合)
# dnf install make
 
②make実行
# cd /usr/local/src/notqmail-1.08
# make setup check
 
③config実行
・DNSにMXレコードで登録されているホスト名を指定してconfigを実行。
例)ホスト名がmail.example.comの場合
# ./config-fast mail.example.com
Your fully qualified host name is mail.example.com.
Putting mail.example.com into control/me…
Putting example.com into control/defaultdomain…
Putting example.com into control/plusdomain…
Putting mail.example.com into control/locals…
Putting mail.example.com into control/rcpthosts…
Now qmail will refuse to accept SMTP messages except to mail.example.com.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
 
4)qmailの起動スクリプトの仮作成
 
実際にはucspi-tcpをインストールして、tcpserverを使ってqmailの起動を行いますが、動作確認のため、qmail単体で起動・動作確認するため、qmail単体の起動スクリプトを作成します。
 
①起動スクリプトのテンプレートの確認
・/var/qmail/bootディレクトリ内に様々な設定内容のテンプレートが保管。
# ls /var/qmail/boot
binm1 binm1+df binm2 binm2+df binm3 binm3+df home home+df proc proc+df
 
②qmailの起動スクリプトの仮作成
ここでは、homeのテンプレートを使用しています。
#cp /var/qmail/boot/home /var/qmail/rc
 
(home)テンプレートの内容

#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Mailbox splogger qmail

※Maildirの設定
ユーザーごとにmboxかMaildirかを選択せず、Maildirをデフォルトで対応するように設定したい場合は、”qmail-start ./Maildir/ splogger qmail”に指定しますが、現段階の設定内容ではMaildirを指定すると正常に起動できませんでした。Maildirの設定は、tcpserverを導入し、構築が完了した後に別途設定変更する手順としています。
 
5)インストール後の動作確認
 
①起動スクリプト実行
# sh /var/qmail/rc &
 
②起動したプロセスの確認

# ps -ef | grep qmail
qmails    954069  949541  0 10:45 pts/0    00:00:00 qmail-send
qmaill    954070  954069  0 10:45 pts/0    00:00:00 splogger qmail
root      954071  954069  0 10:45 pts/0    00:00:00 qmail-lspawn ./Mailbox
qmailr    954072  954069  0 10:45 pts/0    00:00:00 qmail-rspawn
qmailq    954073  954069  0 10:45 pts/0    00:00:00 qmail-clean
root      954075  949541  0 10:45 pts/0    00:00:00 grep --color=auto qmail

 
③メールの送信テスト
・自端末宛てに空メールを送信して、動作確認
echo to: myuser@mayhome.example.jp | /var/qmail/bin/qmail-inject

notqmail+tcpserver、daemontoolsの環境構築
1)ucspi-tcpのインストール
 
smtp通信(25番ポート)をリッスンして、プロセスを起動するデーモンとしての働きをするtcpserver(ucspi-tcp)をインストールします。
 
①ソースの入手
https://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
 
②ソースの解凍、配置
# cd /usr/local/src
# gunzip ucspi-tcp-0.88.tar.gz
# tar xvf ucspi-tcp-0.88.tar
 
③confの修正
make実行時にエラーが発生するため以下のように修正しました。
# cd /usr/local/src/ucspi-tcp-0.88
# vi /usr/local/src/ucspi-tcp-0.88/conf-cc
訂正前 gcc -O2
   ↓
訂正後 gcc -O2 -include /usr/include/errno.h
 
④make実行

# make setup check

./install
./instcheck

 
2)daemontoolsをインストール
 
qmailのサービスやログを管理・制御するdaemontoolsをインストール。
 
①ソースの入手
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
 
②packageディレクトリの作成
展開したディレクトリが実行ファイルの置き場になり/command/からのsymlinkとなる
# mkdir -p /package
# chmod 1755 /package
 
③ソースの解凍、配置
# mv daemontools-0.76.tar.gz /package
# cd /package
# gunzip daemontools-0.76.tar.gz
# tar -xpf daemontools-0.76.tar
# rm -f daemontools-0.76.tar
 
④インストール時のエラーを回避するためconf-cc修正
# cd /package/admin/daemontools-0.76/src
# vi conf-cc
 
訂正前 gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings
   ↓
訂正後 gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -include /usr/include/errno.h
 
⑤インストール実行

# cd /package/admin/daemontools-0.76
# package/install
  :
Copying commands into ./command...
Creating symlink daemontools -> daemontools-0.76...
Making command links in /command...
Making compatibility links in /usr/local/bin...
Creating /service...
Adding svscanboot to inittab...
init should start svscan now.

 
⑥インストールの確認
・/etc/inittabに下記設定が追加(CentOS6まではこの設定によってサーバー起動時に自動でsvscanbootが実行されていたが、CentOS7以降ではこのinittabは使われていない)
SV:123456:respawn:/command/svscanboot
・/serviceディレクトリ作成
・/commandディレクトリを作成し、/package/admin/daemontools/command/配下の各種実行プログアムがリンク
 
3)qmailの起動スクリプト(qmailctl)作成
 
①参照スクリプトの入手
http://lifewithqmail.org/qmailctl-script-dt70
 
②qmailctlの作成
# vi /var/qmail/bin/qmailctl
# chmod 755 /var/qmail/bin/qmailctl
# ln -s /var/qmail/bin/qmailctl /usr/bin
 
4)superviseスクリプト作成
 
①ディレクトリ作成
# mkdir -p /var/qmail/supervise/qmail-send/log
# mkdir -p /var/qmail/supervise/qmail-smtpd/log
 
②qmail-send(配送)の起動スクリプト作成
# vi /var/qmail/supervise/qmail-send/run
(ファイルの中身)
#!/bin/sh
exec /var/qmail/rc
 
③qmail-send(配送)のログ制御スクリプト
# vi /var/qmail/supervise/qmail-send/log/run
(ファイルの中身)
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
 
・ログを記録するプログラムが、/usr/local/bin/multilog
・ログの作成は”qmaill”ユーザーが行うようにし、タイムスタンプの指定をするためのオプション、”t”、ログの出力先ディレクトリが、/var/log/qmail、としていまる。
 
④qmail-smtpdの起動スクリプト作成
# vi /var/qmail/supervise/qmail-smtpd/run
 
(ファイルの中身)
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
tcpserver -v -u 1006 -g 1005 -x /etc/tcp.smtp.cdb \
-c 20 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
※1006:qmaildのUID]、1005:nofilesの[GID]
 
⑤qmail-smtpdのログ制御スクリプト
# vi /var/qmail/supervise/qmail-smtpd/log/run
(ファイルの中身)
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
 
⑥起動スクリプトに権限設定
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
 
⑦ログのディレクトリ作成
# mkdir -p /var/log/qmail/smtpd
# chown qmaill /var/log/qmail /var/log/qmail/smtpd
 
⑧/serviceにシンボリックリンクを作成
# ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
 
・作成すると、svscanが/serviceディレクトリを5秒置きに監視しているのでsuperviceプロセスが自動で起動する。
・superviceプロセスは、/superviseディレクトリ内のサブディレクトリ内にあるrunスクリプトを開始するので、qmail-smtpd、qmail-sendの起動スクリプトが実行される。
 
5)システム管理アカウントへの配信の設定
 
postmaseter、MAILER-DEAMON、rootに対する配信の設定を行います。
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 .qmail*
# echo -n ‘myuser@mayhome.example.jp’ > .qmail-root
# echo -n ‘myuser@mayhome.example.jp’ > .qmail-postmaster
# echo -n ‘myuser@mayhome.example.jp’ > .qmail-mailer-daemon
 
6)データベースファイルの作成
 
①データベースファイル(cdb)の基になるファイルを準備
# vi /etc/tcp.smtp
 
127.:allow,RELAYCLIENT=””
 
②データベースファイルの作成
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp # ls -al /etc/tcp.* -rw-r--r-- 1 root root 62 Feb 19 14:01 /etc/tcp.smtp -rw-r--r-- 1 root root 2142 Feb 19 14:02 /etc/tcp.smtp.cdb   7)動作確認
 
①svscanbootを手動で開始
/command/svscanboot &
 
②qmailctlで停止、確認

# qmailctl stop
Stopping qmail...
  qmail-smtpd
  qmail-send

# qmailctl stat
/service/qmail-send: down 6 seconds, normally up
/service/qmail-send/log: down 6 seconds, normally up
/service/qmail-smtpd: down 6 seconds, normally up
/service/qmail-smtpd/log: down 6 seconds, normally up
messages in queue: 0
messages in queue but not yet preprocessed: 0

 
③qmailctlで開始、確認

# qmailctl start
Starting qmail
# qmailctl stat
/service/qmail-send: up (pid 957004) 9 seconds
/service/qmail-send/log: up (pid 957005) 9 seconds
/service/qmail-smtpd: up (pid 957041) 0 seconds
/service/qmail-smtpd/log: up (pid 957040) 0 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

 
④起動したプロセスの確認

# ps -ef | grep qmail
root     1031253 1031251  0 09:55 pts/0    00:00:00 supervise qmail-send
root     1031255 1031251  0 09:55 pts/0    00:00:00 supervise qmail-smtpd
qmaill   1031259 1031254  0 09:55 pts/0    00:00:00 /usr/local/bin/multilog t /var/log/qmail
qmails   1031260 1031253  0 09:55 pts/0    00:00:00 qmail-send
qmaild   1031262 1031258  0 09:55 pts/0    00:00:00 tcpserver -v -u 1006 -g 1005 -x /etc/tcp.smtp.cdb -c 20 0 smtp /var/qmail/bin/qmail-smtpd
qmaill   1031263 1031260  0 09:55 pts/0    00:00:00 splogger qmail
root     1031264 1031260  0 09:55 pts/0    00:00:00 qmail-lspawn ./Mailbox
qmailr   1031265 1031260  0 09:55 pts/0    00:00:00 qmail-rspawn
qmailq   1031266 1031260  0 09:55 pts/0    00:00:00 qmail-clean
root     1031275 1030925  0 09:55 pts/0    00:00:00 grep --color=auto qmail

# ps -ef | grep svscan
root     1031249 1030925  0 09:55 pts/0    00:00:00 sh /command/svscanboot
root     1031251 1031249  0 09:55 pts/0    00:00:00 svscan /service
root     1031523 1030925  0 09:57 pts/0    00:00:00 grep --color=auto svscan

 
⑤メールの送信テスト
・自端末宛てに空メールを送信して、動作確認
echo to: myuser@mayhome.example.jp | /var/qmail/bin/qmail-inject

qmail(daemontools)をsystemdで起動する設定
1)systemdのユニットファイルを作成
 
①空のユニットファイル作成、権限の設定
# touch /etc/systemd/system/daemontools.service
# chmod 664 /etc/systemd/system/daemontools.service
 
②ユニットファイル内でサービス設定オプションを記述
# vi /etc/systemd/system/daemontools.service

[Unit]
Description=daemontools for qmail
After=network.target

[Service]
Type=simple
ExecStart=/command/svscanboot
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

 
●設定項目
〇Description
・ジャーナルログファイルおよび systemctl status コマンドの出力に表示される有用な説明
 
〇After=network.target
・このサービスは、ネットワークの実行後にのみ開始。
 
〇Type
・ExecStart および関連オプションの機能に影響を与えるユニットプロセスの起動タイプを設定。
・”simple”:デフォルト値。ExecStartで起動するプロセスは、サービスのメインプロセス。
 
〇ExecStart
・ユニットの開始時に実行するコマンドまたはスクリプトを指定。
 
〇Restart=on-abnormal
・the service will be restarted when the process is terminated by a signal (including on core dump, excluding the aforementioned four signals), when an operation times out, or when the watchdog timeout is triggered
・For services that shall be able to terminate on their own choice (and avoid immediate restarting), on-abnormal is an alternative choice.
 
〇WantedBy
・サービスを開始する必要があるターゲットを指定。
・ターゲットは、従来のランレベルの概念に代わるもの。
 
2)ブート時のシステムサービス起動の有効化
 
①systemdをリロード
# systemctl daemon-reload
 
・新しいユニットファイルを作成したり、既存のユニットファイルを修正したら常に systemctl daemon-reload コマンドを実行する。
・このコマンドを実行しないと、systemd のステータスと、ディスクの実際のサービスユニットファイルのステータスが一致しなくなるため、systemctl start コマンドや systemctl enable コマンドが失敗する可能性がある。
 
②ブート時のシステムサービス起動の有効化

# systemctl enable daemontools
Created symlink /etc/systemd/system/multi-user.target.wants/daemontools.service → /etc/systemd/system/daemontools.service.

 
③ステータス確認

# systemctl status  daemontools
○ daemontools.service - daemontools for qmail
     Loaded: loaded (/etc/systemd/system/daemontools.service; enabled; preset: disabled)

 
3)動作確認
 
①systemctlコマンドでdaemontoolsを起動

# systemctl start daemontools

# systemctl status daemontools
 daemontools.service - daemontools for qmail
     Loaded: loaded (/etc/systemd/system/daemontools.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-02-21 13:38:03 JST; 2min 33s ago
   Main PID: 1047785 (svscanboot)
      Tasks: 16 (limit: 11124)
     Memory: 3.2M
        CPU: 191ms
     CGroup: /system.slice/daemontools.service
             tq1047785 /bin/sh /command/svscanboot
             tq1047787 svscan /service
             tq1047788 readproctitle service errors: "...art log/run: exec format error\nsupervise: fatal: unable to start log/run: exec form>
             tq1047789 supervise qmail-send
             tq1047790 supervise log
             tq1047791 supervise qmail-smtpd
             tq1047792 supervise log
             tq1047794 /usr/local/bin/multilog t /var/log/qmail
             tq1047795 qmail-send
             tq1047796 /bin/sh ./run
             tq1047797 splogger qmail
             tq1047798 qmail-lspawn ./Mailbox
             tq1047799 qmail-rspawn
             tq1047800 qmail-clean
             mq1047801 tcpserver -v -u 1006 -g 1005 -x /etc/tcp.smtp.cdb -c 20 0 smtp /var/qmail/bin/qmail-smtpd

Feb 21 13:38:03 v133-18-246-190.vir.kagoya.net systemd[1]: Started daemontools for qmail.
Feb 21 13:38:03 v133-18-246-190.vir.kagoya.net qmail[1047797]: 1708490283.199998 status: local 0/10 remote 0/20

 
②systemctlコマンドでdaemontoolsを停止

# systemctl stop daemontools

# systemctl status daemontools
 daemontools.service - daemontools for qmail
     Loaded: loaded (/etc/systemd/system/daemontools.service; enabled; preset: disabled)
     Active: inactive (dead) since Wed 2024-02-21 13:44:16 JST; 9s ago
   Duration: 6min 12.985s
    Process: 1047785 ExecStart=/command/svscanboot (code=killed, signal=TERM)
   Main PID: 1047785 (code=killed, signal=TERM)
        CPU: 432ms

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください