$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 であり,
- $os = uname -s
- $rel = uname -r
- $arch = uname -m
- $arch = uname -m
となります.
(以後, ディレクトリ $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 中でデフォールトから変更する可能性のある部分は以下の通りです.
- データベースライブラリの変更または追加
- tcp wrapper のサポート
データベースライブラリの変更または追加
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 では以下のようになっています.
- SunOS 4.1.4 ( SunOS.4.1.4-JL.sun4 )
$DEST_DIR=/usr/lib
- SunOS 5.6 (Solaris 2.6) ( SunOS.5.6.sun4)
$DEST_DIR=/usr/lib
- FreeBSD 2.2.5 ( FreeBSD.2.2.5-RELEASE.i386)
$DEST_DIR=/usr/sbin
- Silicon Graphics IRIX 6.4 ( IRIX64.6.4.IP30)
$DEST_DIR=/usr/lib
- DEC OSF1 Version 3.2 ( OSF1.V3.2.alpha)
$DEST_DIR=/usr/sbin
そこで, 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 が利用する各種のディレクトリのパーミッションを確認する必要があります.
- まず, /etc と /var/spool/mqueue (OSによって異なるかも知れません)は
world/group writable ではいけません.
すなわち, 所有者以外の write permission を落す必要があります.
- また, sendmail.8.9.0 からは, 各種のファイルの場所(例えば, alias の include ファイル, .forward ファイル等)が安全なディレクトリになければなりません.
ここで対象となるファイルは, 以下の通りです.
- クラス定義ファイル (sendmail.cf の F でははじまる行で指定されるもの)
- sendmail.cf の ErrorHeader オプションで指定されるファイル
- .forward ファイル
- :include: ファイル
- .forward から呼び出されるプログラム
- マップファイル (sendmail.cf の K で指定されるもの)
- 以上のもののリンク
もし, 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