#++
# NAME
# postfix-wrapper 5
# SUMMARY
# Postfix multi-instance API
# DESCRIPTION
# Support for managing multiple Postfix instances is available
# as of version 2.6. Instances share executable files and
# documentation, but have their own directories for configuration,
# queue and data files.
#
# This document describes how the familiar "postfix start"
# etc. user interface can be used to manage one or multiple
# Postfix instances, and gives details of an API to coordinate
# activities between the postfix(1) command and a multi-instance
# manager program.
#
# With multi-instance support, the default Postfix instance
# is always required. This instance is identified by the
# config_directory parameter's default value.
# GENERAL OPERATION
# .ad
# .fi
# Multi-instance support is backwards compatible: when you
# run only one Postfix instance, commands such as "postfix
# start" will not change behavior at all.
#
# Even with multiple Postfix instances, you can keep using
# the same postfix commands in boot scripts, upgrade procedures,
# and other places. The commands do more work, but humans are
# not forced to learn new tricks.
#
# For example, to start all Postfix instances, use:
# .IP
# # postfix start
# .PP
# Other postfix(1) commands also work as expected. For example,
# to find out what Postfix instances exist in a multi-instance
# configuration, use:
# .IP
# # postfix status
# .PP
# This enumerates the status of all Postfix instances within
# a multi-instance configuration.
# MANAGING AN INDIVIDUAL POSTFIX INSTANCE
# .ad
# .fi
# To manage a specific Postfix instance, specify its configuration
# directory on the postfix(1) command line:
# .IP
# # postfix -c \fI/path/to/config_directory command\fR
# .PP
# Alternatively, the postfix(1) command accepts the instance's
# configuration directory via the MAIL_CONFIG environment
# variable (the -c command-line option has higher precedence).
#
# Otherwise, the postfix(1) command will operate on all Postfix
# instances.
# ENABLING POSTFIX(1) MULTI-INSTANCE MODE
# .ad
# .fi
# By default, the postfix(1) command operates in single-instance
# mode. In this mode the command invokes the postfix-script
# file directly (currently installed in the daemon directory).
# This file contains the commands that start or stop one
# Postfix instance, that upgrade the configuration of one
# Postfix instance, and so on.
#
# When the postfix(1) command operates in multi-instance mode
# as discussed below, the command needs to execute start,
# stop, etc. commands for each Postfix instance. This
# multiplication of commands is handled by a multi-instance
# manager program.
#
# Turning on postfix(1) multi-instance mode goes as follows:
# in the default Postfix instance's main.cf file, 1) specify
# the pathname of a multi-instance manager program with the
# multi_instance_wrapper parameter; 2) populate the
# multi_instance_directories parameter with the configuration
# directory pathnames of additional Postfix instances. For
# example:
# .IP
# .nf
# /etc/postfix/main.cf:
# multi_instance_wrapper = $daemon_directory/postfix-wrapper
# multi_instance_directories = /etc/postfix-test
# .fi
# .PP
# The $daemon_directory/postfix-wrapper file implements a
# simple manager and contains instructions for creating Postfix
# instances by hand. The postmulti(1) command provides a
# more extensive implementation including support for life-cycle
# management.
#
# The multi_instance_directories and other main.cf parameters
# are listed below in the CONFIGURATION PARAMETERS section.
#
# In multi-instance mode, the postfix(1) command invokes the
# $multi_instance_wrapper command instead of the postfix-script
# file. This multi-instance manager in turn executes the
# postfix(1) command in single-instance mode for each Postfix
# instance.
#
# To illustrate the main ideas behind multi-instance operation,
# below is an example of a simple but useful multi-instance
# manager implementation:
# .IP
# .nf
# #!/bin/sh
#
# : ${command_directory?"do not invoke this command directly"}
#
# POSTCONF=$command_directory/postconf
# POSTFIX=$command_directory/postfix
# instance_dirs=\`$POSTCONF -h multi_instance_directories |
# sed 's/,/ /'\` || exit 1
#
# err=0
# for dir in $config_directory $instance_dirs
# do
# case "$1" in
# stop|abort|flush|reload|drain)
# test "\`$POSTCONF -c $dir -h multi_instance_enable\`" \e
# = yes || continue;;
# start)
# test "\`$POSTCONF -c $dir -h multi_instance_enable\`" \e
# = yes || {
# $POSTFIX -c $dir check || err=$?
# continue
# };;
# esac
# $POSTFIX -c $dir "$@" || err=$?
# done
#
# exit $err
# .fi
# PER-INSTANCE MULTI-INSTANCE MANAGER CONTROLS
# .ad
# .fi
# Each Postfix instance has its own main.cf file with parameters
# that control how the multi-instance manager operates on
# that instance. This section discusses the most important
# settings.
#
# The setting "multi_instance_enable = yes" allows the
# multi-instance manager to start (stop, etc.) the corresponding
# Postfix instance. For safety reasons, this setting is not
# the default.
#
# The default setting "multi_instance_enable = no" is useful
# for manual testing with "postfix -c \fI/path/name\fR start"
# etc. The multi-instance manager will not start such an
# instance, and it will skip commands such as "stop" or "flush"
# that require a running Postfix instance. The multi-instance
# manager will execute commands such as "check", "set-permissions"
# or "upgrade-configuration", and it will replace "start" by
# "check" so that problems will be reported even when the
# instance is disabled.
# MAINTAINING SHARED AND NON-SHARED FILES
# .ad
# .fi
# Some files are shared between Postfix instances, such as
# executables and manpages, and some files are per-instance,
# such as configuration files, mail queue files, and data
# files. See the NON-SHARED FILES section below for a list
# of per-instance files.
#
# Before Postfix multi-instance support was implemented, the
# executables, manpages, etc., have always been maintained
# as part of the default Postfix instance.
#
# With multi-instance support, we simply continue to do this.
# Specifically, a Postfix instance will not check or update
# shared files when that instance's config_directory value is
# listed with the default main.cf file's multi_instance_directories
# parameter.
#
# The consequence of this approach is that the default Postfix
# instance should be checked and updated before any other
# instances.
# MULTI-INSTANCE API SUMMARY
# .ad
# .fi
# Only the multi-instance manager implements support for the
# multi_instance_enable configuration parameter. The
# multi-instance manager will start only Postfix instances
# whose main.cf file has "multi_instance_enable = yes". A
# setting of "no" allows a Postfix instance to be tested by
# hand.
#
# The postfix(1) command operates on only one Postfix instance
# when the -c option is specified, or when MAIL_CONFIG is
# present in the process environment. This is necessary to
# terminate recursion.
#
# Otherwise, when the multi_instance_directories parameter
# value is non-empty, the postfix(1) command executes the
# command specified with the multi_instance_wrapper parameter,
# instead of executing the commands in postfix-script.
#
# The multi-instance manager skips commands such as "stop"
# or "reload" that require a running Postfix instance, when
# an instance does not have "multi_instance_enable = yes".
# This avoids false error messages.
#
# The multi-instance manager replaces a "start" command by
# "check" when a Postfix instance's main.cf file does not
# have "multi_instance_enable = yes". This substitution ensures
# that problems will be reported even when the instance is
# disabled.
#
# No Postfix command or script will update or check shared
# files when its config_directory value is listed in the
# default main.cf's multi_instance_directories parameter
# value. Therefore, the default instance should be checked
# and updated before any Postfix instances that depend on it.
#
# Set-gid commands such as postdrop(1) and postqueue(1)
# effectively append the multi_instance_directories parameter
# value to the legacy alternate_config_directories parameter
# value. The commands use this information to determine whether
# a -c option or MAIL_CONFIG environment setting specifies a
# legitimate value.
#
# The legacy alternate_config_directories parameter remains
# necessary for non-default Postfix instances that are running
# different versions of Postfix, or that are not managed
# together with the default Postfix instance.
# ENVIRONMENT VARIABLES
# .ad
# .fi
# .IP MAIL_CONFIG
# When present, this forces the postfix(1) command to operate
# only on the specified Postfix instance. This environment
# variable is exported by the postfix(1) -c option, so that
# postfix(1) commands in descendant processes will work
# correctly.
# CONFIGURATION PARAMETERS
# .ad
# .fi
# The text below provides only a parameter summary. See
# postconf(5) for more details.
# .IP "\fBmulti_instance_directories (empty)\fR"
# An optional list of non-default Postfix configuration directories;
# these directories belong to additional Postfix instances that share
# the Postfix executable files and documentation with the default
# Postfix instance, and that are started, stopped, etc., together
# with the default Postfix instance.
# .IP "\fBmulti_instance_wrapper (empty)\fR"
# The pathname of a multi-instance manager command that the
# \fBpostfix\fR(1) command invokes when the multi_instance_directories
# parameter value is non-empty.
# .IP "\fBmulti_instance_name (empty)\fR"
# The optional instance name of this Postfix instance.
# .IP "\fBmulti_instance_group (empty)\fR"
# The optional instance group name of this Postfix instance.
# .IP "\fBmulti_instance_enable (no)\fR"
# Allow this Postfix instance to be started, stopped, etc., by a
# multi-instance manager.
# NON-SHARED FILES
# .ad
# .fi
# .IP "\fBconfig_directory (see 'postconf -d' output)\fR"
# The default location of the Postfix main.cf and master.cf
# configuration files.
# .IP "\fBdata_directory (see 'postconf -d' output)\fR"
# The directory with Postfix-writable data files (for example:
# caches, pseudo-random numbers).
# .IP "\fBqueue_directory (see 'postconf -d' output)\fR"
# The location of the Postfix top-level queue directory.
# SEE ALSO
# postfix(1) Postfix control program
# postmulti(1) full-blown multi-instance manager
# $daemon_directory/postfix-wrapper simple multi-instance manager
# LICENSE
# .ad
# .fi
# The Secure Mailer license must be distributed with this
# software.
# AUTHOR(S)
# Wietse Venema
# IBM T.J. Watson Research
# P.O. Box 704
# Yorktown Heights, NY 10598, USA
#
# Wietse Venema
# Google, Inc.
# 111 8th Avenue
# New York, NY 10011, USA
#--