makemap hash /etc/mail/access makemap: Need to recompile with -DNEWDB for hash support!”
使用which makemap 命令查找,没有makemap可执行文件。我的运行环境是:
操作系统:CentOS 5.1
安装软件:Sendmail.8.14.2
cyrus-sasl-2.1.15 m4-1.4.2
首先分析原因,使用makemap生成数据库出错,系统给出的理由是如果需要hash支持,需要重新编译时,加上-DNEWDB选项。
加上-DNEWDB选项
那么“-DNEWDB”选项指的是什么?在什么文件里加上这个选项呢?我需要首先解决这两个问题。我到网上搜索,还是一无所获,忽然想起可以使用man命令,查找makemap帮助。我马上在终端窗口键入man makemap,浏览完毕,有一条信息给了我很大的启发,“hash Hash format maps. This also requires the Berkeley DB library.”,原来Hash依赖Berkeley DB library库,那么加上-DNEWDB选项,就是要告诉系统编译时须加上Berkeley DB library库的支持。我赶紧在网上down了一个db-4.5.20.tar.gz,具体的安装步骤为:
$tar zxvf db-4.5.20.tar.gz
$cd db-4.5.20/build_unix
$../dist/configure
$make
$su
#make install
默认的安装路径为/usr/local/ BerkeleyDB.4.5/,头文件在/usr/local/BerkeleyDB.4.5/include/*,库文件在/usr/ local/BerkeleyDB.4.5/lib/*。
BerkeleyDB.4.5库安装完后,下一步便是该如何配置文件,如何让sendmail编译时gcc自动搜索到BerkeleyDB.4.5库的头文件和库文件。
如何配置BerkeleyDB.4.5库
我在配置sasl2时,需要使用sendmail源代码目录下的devtools/Site/site.config.m4文件,我想加载BerkeleyDB.4.5库也需要在这里配置。我首先打开devtools/Site/site.config.m4.sample文件,这是site.config.m4配置文件的一个样本,里面告诉你怎样配置site.config.m4文件。令我惊喜的是,我从里面查找到“how to add support for a particular map class.”并告诉我具体的方法:
dnl ### Changes for PH_MAP support.
APPENDDEF(`confMAPDEF',`-DPH_MAP')
APPENDDEF(`confLIBS', `-lphclient')
APPENDDEF(`confINCDIRS', `-I/opt/nph/include')
APPENDDEF(`confLIBDIRS', `-L/opt/nph/lib')
那么如果我希望hash支持,只需要更改一下参数即可。由于没有site.config.m4文件,我们需要重新创建一个。使用vi site.config.m4命令,加入:
APPENDDEF(`confMAPDEF',`-DNEWDB')
APPENDDEF(`confLIBS', `-ldb')
APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.5/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.5/lib')
sendmail-8.14.2下载及安装
Sendmail的最新版本为:8.14.2,文件大小为1.2MB。
1.解压缩
# tar -zxvf Sendmail-8.14.2.tar.gz
#cd Sendmail-8.14.2
如果软件包是rpm格式,则解压安装如下:
#rpm -ivh Sendmail-8.14.2-src.rpm
2.编译
#sh Build
如果不出什么问题,编译通过,编译完成后会自动生成目录:obj.linux.2.2.18.i686(这是笔者的核心名称,也许你的内核名称与此不同)。
3.安装
#sh Build install
如果是rpm 格式的软件包,则应编译如下:
# rpm -ba Sendmail-8.14.2.spec
#rpm -ivh Sendmail*.rpm
至此编译、安装完成
# cd cf/cf
# cp generic-linux.mc sendmail.mc
# make install-cf
# cp sendmail.mc /etc/mail
# cd /etc/mail
# touch aliases access
# echo "主机域名">local-host-name(或直接打开local-host-name对其进行编辑)
# echo "localhost RELAY">>access
# makemap hash access.db
# /usr/lib/sendmail -bd -q30m
# /sbin/server sendmail start 这样就可以正常运行sendmail了
附;如出来找不以libdb-*.*.so错误,可到/usr/local/BerkeleyDB.*.*/lib找到所对应的文件,把对应的文件拷至/usr/lib就可以把问题解决了