跳转到主要内容

于 2025年04月22日 摘录自  Guidelines for Package Builders

本文件的目的

本文件为那些管理用于内部使用的 Postfix 二进制发行版的人员,以及维护用于通用用途的 Postfix 二进制发行版的人员提供提示和建议。

通用发行版:请提供一个较小的默认 main.cf 文件

安装的 main.cf 文件必须保持简短。请务必 resist the temptation to list all parameters in the main.cf file. Postfix 设计为易于配置。在 main.cf 中列出所有参数会背离设计初衷。这会诱使业余爱好者在不理解参数含义的情况下随意修改配置,从而陷入无休止的麻烦。

通用发行版:请包含 README 或 HTML 文件

请提供相应的 README 或 HTML 文件。这些文件会被 Postfix 手册页和其他文件引用。若缺少 README 或 HTML 文件,Postfix 将难以甚至无法配置。

Postfix 安装参数

Postfix 的安装由十几个安装参数控制。请参阅 postfix-install 和 post-install 文件以获取详细信息。大多数参数具有系统相关的默认设置,可在编译时进行配置,具体请参阅 INSTALL 文件。

为其他系统准备预编译包

您可以在未安装 Postfix 的机器上构建 Postfix 包。您只需 Postfix 源代码和与目标系统兼容的编译环境。

您可以以非特权用户身份构建预编译的 Postfix 包。

首先编译 Postfix。编译成功后,执行:

% make package

对于 Postfix 2.2 之前的版本,必须直接调用 post-install 脚本(% sh post-install)。

系统将提示您输入安装参数。请指定一个与 / 不同的 install_root 目录。mail_ownersetgid_group 安装参数设置将记录在 main.cf 文件中,但这些设置不会立即生效,直到包在目标机器上解压并安装后才生效。

如果您希望完全自动化此过程,请在命令行中指定所有非默认安装参数:

% make non-interactive-package install_root=/some/where...

对于 Postfix 2.2 之前的版本,必须直接调用 post-install 脚本(% sh post-install -non-interactive install_root...)。

对于 Postfix 3.0 及更高版本,命令 "make package name=value ..." 会将配置参数值中的字符串 MAIL_VERSION 替换为 Postfix 发布版本。请勿在此命令行中指定类似 $mail_version 的内容。此操作会导致不同版本的 make(1) 命令产生不一致的结果。

开始安全警报

在构建用于分发的存档时,请确保仅存档文件和符号链接,而非其父目录。否则,解压预构建的 Postfix 包可能会破坏系统目录(如 /etc、/usr、/usr/bin、/var、/var/spool 等)的权限和/或所有权。如果以非特权用户身份执行了 postfix-install(参见上文),此问题尤为严重。

结束安全警报

因此,要将预构建的包打包为 tar 文件,请执行以下步骤:

% cd INSTALL_ROOT
% rm -f SOMEWHERE/outputfile
% find . \! -type d -print | xargs tar rf SOMEWHERE/outputfile
% gzip SOMEWHERE/outputfile

这样可以避免包含可能在解压时引发问题的目录。

安装预编译的 Postfix 包

  • 要解压预编译的 Postfix 包,执行以下命令:

    # umask 022
    # gzip -d <outputfile.tar.gz | (cd / ; tar xvpf -)

    umask 命令用于在创建过程中确保非 Postfix 目录获得正确的权限。

  • 创建 Postfix 专用的 mail_owner 账户和 setgid_group 组。
  • 执行 postfix 命令以设置 Postfix 文件和目录的所有权及权限,并更新 Postfix 配置文件。如果需要,可以在 postfix 命令行中指定 mail_ownersetgid_group 的非默认设置:

    # postfix set-permissions upgrade-configuration \
    setgid_group=xxx mail_owner=yyy

    对于 Postfix 2.1 之前的版本,您可以通过直接调用 post-install 脚本实现相同效果。