$Id: sendmail.html,v 1.6 2000/04/26 02:22:13 naito Exp $
ここに述べていることは, すべて私が実行した方法であり, これによる損害等については, 一切私は責任を持ちません. 各自の責任で行なって下さい.

sendmail のコンパイル方法

ここでは, sendmail.8.10.1 の source は $SENDMAILSRCDIR に 展開されているとします.

一般的なコンパイルの方法

$SENDMAILSRCDIR/sendmail において, 次のコマンドを実行します.
sh Build
各種のライブラリ(データベースライブラリ, BIND のライブラリなど)が標準的な場所にインストールされている場合には, このコマンド一発でコンパイルができます.
この時, $SENDMAILSRCDIR/obj.XXX/sendmail というディレクトリに sendmail が作成されます. ここで, XXX = $os.$rel.$arch であり, となります. (以後, ディレクトリ $SENDMAILSRCDIR/obj.XXX/ を $SENDMAILSRCDIR/$OBJ と書きます. )

各種のライブラリが(例えば /usr/local などに)インストールされていると, うまく実行できません. この場合には,

sh Build nocompile
を実行します. すると,
make: Fatail error: Dont' know how to make target `nocompile'
というエラーが出ますが, 気にしません. 実際には, $OBJ/sendmail に Makefile が作成されます.
ここで, $OBJ/sendmail/Makefile を必要に応じて編集します.
$OBJ/sendmail/Makefile の編集が終ったら, $OBJ/sendmail で make を実行すると, sendmail が作成されます.

Makefile の変更方法

ここの例にあるものは, Solaris 2.6 で生成した Makefile を元にしましたので, 他のプラットフォームの場合には事情が異なる可能性があります.

Makefile 中でデフォールトから変更する可能性のある部分は以下の通りです.

データベースライブラリの変更または追加
Solaris 2.6 の場合, デフォールトでは NDBM だけがサポートされます. もし, hash などを利用したい場合には, NEWDB を追加する必要があります. そのためには, Makefile で以下を変更します. 例えば, libdb.a が /usr/local/lib にあり, ヘッダファイルが /usr/local/include にあるる場合,
ENVDEF=  -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20600 
INCDIRS=
LIBDIRS=
LIBADD=  
ENVDEF=  -DNEWDB -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20600 
INCDIRS= -I/usr/local/include
LIBDIRS=-L/usr/local/lib
LIBADD=  -ldb
LIBS= ${LIBADD} ../libsmutil/libsmutil.a  -lresolv -lsocket -lnsl -lkstat  
とします. また, bind のライブラリ libbind.a が /usr/local/etc/bind/lib にあり, そのヘッダファイルが /usr/local/etc/bind/include にある場合には,
INCDIRS= -I/usr/local/etc/bind/include
LIBDIRS=-L/usr/local/etc/bind/lib
LIBADD=  -lbind
LIBS= ${LIBADD} ../libsmutil/libsmutil.a  -lsocket -lnsl -lkstat  
とします. (注意: LIBS から -lresolv を削っています.
tcpwrapper のサポート
SMTP コネクションの許可・拒否のために libwrap.a を利用することができます. そのためには, libwrap.a の場所を /usr/local/lib とすると,
ENVDEF=  -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20600 -DTCPWRAPPERS
LIBDIRS=-L/usr/local/lib
LIBADD=  -lwrap
とします.

sendmail のインストール

sendmail をインストールするためには, root ユーザの権限が必要です.
また, 現在利用している sendmail の version が余りに古い場合には, sendmail.cf から作成しなければいけないかも知れません.
ここでは, 現在の version が 8.9.3 ですので, とりあえず 現状の sendmail.cf のまま動かすことにします.

まず, sendmail の install directory, mode, owner, group を確認します. 私の手元にある OS では以下のようになっています.

そこで, root user で以下のコマンドを実行します.
cd $SENDMAILSRCDIR/$OBJ/sendmail
cp sendmail $DEST_DIR/sendmail.8.10.1
chmod 4711 $DEST_DIR/sendmail.8.10.1
chown root $DEST_DIR/sendmail.8.10.1
mv $DEST_DIR/sendmail $DEST_DIR/sendmail.dist
chmod 000 $DEST_DIR/sendmail.dist
ln -s $DEST_DIR/sendmail.8.10.1 $DEST_DIR/sendmail
これによって, $DEST_DIR/sendmail が新しい sendmail (version 8.10.1) への symbolic link となりました.
さらに, sendmail が利用する各種のディレクトリのパーミッションを確認する必要があります.

もし, sendmail を daemon mode でたちあげているのなら, それを restart して, sendmail の version up は完了です.
daemon mode でたちあげていないのなら, これ以上は何もしなくてOKです.


makemap のコンパイル

makemap とは sendmail で利用するデータベースを作成するためのアプリケーションのことです. makemap のソースは $SENDMAILSRCDIR/makemap にあります.

基本的なコンパイルの方法は sendmail と同じで, ソース・ディレクトリにある Build を利用して,

sh Build
とすると, $SENDMAILSRCDIR/$OBJ/makemap に makemap が生成されます.

この場合も, NEWDB などのデフォールトではない(少なくとも Solaris 2.6 ではデフォールトではない)ものを利用したいとき( hash データベースは NEWDB オプションがないと生成できません)は $SENDMAILSRCDIR/$OBJ/makemap/Makefile を sendmail の時と同様に変更して, 新たに make を行います.


naito@math.nagoya-u.ac.jp