Postfix为何使用查找表?极简编译版本能否避免数据库依赖?
Postfix为何使用查找表?极简编译版本能否避免数据库依赖?
咱们先把你的问题拆解开来看:
为什么Postfix会触发查找表调用?
你编译时去掉了Berkeley DB支持,但Postfix还是尝试用hash类型的查找表,核心原因是默认配置在起作用。
你自己的main.cf里没写别名相关配置,但Postfix有一套默认配置(用postconf -d就能看到),其中:
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases, nis:mail.aliases
这俩配置是用来处理邮件别名的——比如把发给root的邮件转发到普通用户账号,或者处理系统账号的投递路由。当你向root@localhost发邮件时,Postfix的local投递进程会先查别名表,确认root的邮件该投递给谁,所以就触发了这个查找表的调用。
而你编译时没加Berkeley DB,Postfix不支持hash类型的字典,自然就报错了。
极简版本能不能完全避开数据库依赖?
当然可以!你根本不需要用hash(依赖Berkeley DB)或者MySQL这类数据库,Postfix支持纯文本格式的查找表(plain类型),完全不需要任何数据库驱动,纯文本文件就能搞定。
具体操作步骤:
- 编辑你的
main.cf,添加或修改以下配置:
这里的alias_maps = plain:/etc/aliases alias_database = plain:/etc/aliases/etc/aliases就是普通文本文件,格式和原来的一样,比如你可以写:
(把root的邮件转发到你的真实用户账号)root: your_actual_username - 不需要执行
newaliases命令——因为plain类型的表不需要预编译,Postfix会直接读取文本内容 - 重载Postfix配置:
./postfix reload
这样修改后,Postfix就会用纯文本的别名表,完全绕开了对Berkeley DB或其他数据库的依赖,完美符合你极简构建的需求。
再回到你的日志,那些unsupported dictionary type: hash的错误,本质就是默认配置用了不支持的表类型,换成plain就彻底解决了。
备注:内容来源于stack exchange,提问作者user10709800
相关产品推荐
相关产品推荐

