sendmailを特定のディレクトリ以下に配置するには

川俣吉広, kaw@on.rim.or.jp
2002年 6月 25日

sendmailは、ソースパッケージからデフォルトでインストールすると、
に置かれるようになっています。

ところが、場合によってはインストール先をこれらのデフォルト値から変更してインストールしたい 場合があります。例えば、既存の運用環境を壊さずに、新しいバージョンのsendmailをテストしたい、 などの理由からです。
このページでは、sendmailの環境を/usr/local/sendmail以下にインストールするケースを例にとり、 sendmailを特定のディレクトリ以下に配置する方法を説明します。

なお、このページの記述内容は、Plamo Linux 2.0 , sendmail-8.12.4 で確認を行いました。

おことわり

このページで解説する内容は、川俣吉広が独自に調査した結果を公開したものです。
ページの記述内容は正確を期すように努めておりますが、 記述内容を実行したことにより損害が発生しても当方では責任を負いかねますので、 実際の作業については各自の責任で行って下さい

また、以下の説明はsendmailのインストールと設定についてソースパッケージからデフォルトでの インストールが行える程度の技術スキルを前提としています。


コンパイル前の準備

現在動作しているsendmailを停止します。
killall -TERM sendmail
 
現在の設定のバックアップを取ります。
mkdir /etc/mail.bak
cd /etc/mail.bak
(cd /etc/mail && tar cf - .) | tar xpvf -
 
mail.bakディレクトリ以下は、 新しいsendmail環境が/etc/mail以下の設定ファイルを上書きしてしまった 時の保険です。

コンパイルとインストール

sendmailのソースパッケージを展開します。
 cd (作業用ディレクトリ)
 tar xvzf sendmail.8.12.4.tar.gz
 
sendmail-8.12.4/devtools/Site/site.config.m4を作成します。
site.config.m4の内容;
define(`confEBINDIR',       `/usr/local/sendmail/libexec')dnl
define(`confENVDEF',        `-D_DIR_SENDMAILCF=\"/usr/local/sendmail/etc/\" -D_PATH_SENDMAILCF=\"/usr/local/sendmail/etc/sendmail.cf\"')dnl
define(`confMSP_QUEUE_DIR', `/usr/local/sendmail/spool/clientmqueue')dnl
define(`confHFDIR',         `/usr/local/sendmail/etc')dnl
define(`confINCLUDEDIR',    `/usr/local/sendmail/include')dnl
define(`confLIBDIR',        `/usr/local/sendmail/lib')dnl
define(`confMANROOT',       `/usr/local/sendmail/man/cat')dnl
define(`confMANROOTMAN',    `/usr/local/sendmail/man/man')dnl
define(`confMBINDIR',       `/usr/local/sendmail/sbin')dnl
define(`confSBINDIR',       `/usr/local/sendmail/sbin')dnl
define(`confSHAREDLIBDIR',  `/usr/local/sendmail/lib')dnl
define(`confSTDIR',         `/usr/local/sendmail/etc')dnl
define(`confUBINDIR',       `/usr/local/sendmail/bin')dnl
 
コンパイルします。
cd (作業用ディレクトリ)/sendmail-8.12.4
sh Build
 
ディレクトリを作成し、パーミッション等を設定します。
mkdir -p /usr/local/sendmail/bin
mkdir /usr/local/sendmail/sbin
mkdir /usr/local/sendmail/etc
mkdir /usr/local/sendmail/include
mkdir /usr/local/sendmail/lib
mkdir /usr/local/sendmail/libexec
mkdir -p /usr/local/sendmail/man/cat1
mkdir /usr/local/sendmail/man/cat5
mkdir /usr/local/sendmail/man/cat8
mkdir -p /usr/local/sendmail/spool/clientmqueue
mkdir /usr/local/sendmail/spool/mqueue

chmod 0770 /usr/local/sendmail/spool/clientmqueue
chown smmsp:smmsp /usr/local/sendmail/spool/clientmqueue
chmod 0700 /usr/local/sendmail/spool/mqueue
 
sendmail-8.12.4/cf/cf/Makefile を編集します。
----[Makefileの内容]----
   :
   :
# name of source for sendmail.cf (without extension)
CF=	sendmail
# name of source for submit.cf (without extension)
SUBMIT=	submit
# directory for .cf files
MAILDIR=/usr/local/sendmail/etc    ←この部分を修正
M4=	m4
CFDIR=	..
CHMOD=	chmod
   :
   :
 
cf/cf/sendmail.mc, cf/cf/submit.mcを編集します。

これらの設定ファイルの作成方法は通常の場合と同じですが、 sendmail.mcの各種定義に先立ち、
define(`MAIL_SETTINGS_DIR', `/usr/local/sendmail/etc/')dnl
define(`QUEUE_DIR', `/usr/local/sendmail/spool/mqueue')dnl
を書いておきます。

divert(0)dnl
VERSIONID(`$Id$')dnl
の間くらいが適当と思われます。 また、sendmail.cf中で、ファイルの位置を指定している部分があれば、 それも併せて書き換えておきます。

submit.mcも同様に、
define(`MAIL_SETTINGS_DIR', `/usr/local/sendmail/etc/')dnl
define(`QUEUE_DIR', `/usr/local/sendmail/spool/mqueue')dnl
define(`MSP_QUEUE_DIR', `/usr/local/sendmail/spool/clientmqueue')dnl
を書いておき、これで sendmail.cf と submit.cf を作成します。
make sendmail.cf
make submit.cf
sh Build installを実行します。
cd (作業用ディレクトリ)/sendmail-8.12.4
sh Build install

動作確認と実行の設定

通常の手順と変わりありませんので、項目のみ列挙します。
参考リンク

川俣吉広, kaw@on.rim.or.jp
2002年 6月 25日