Rewrote postfix-install. The postfix-files file now controls
what is installed. Refined the semantics of many post-install
- operations. post-install now auto-saves settings that override
- main.cf.
+ operations. post-install now auto-saves settings that
+ override main.cf.
+
+20020114
+
+ Bugfix: alternate_config_directories did not take comma
+ or whitespace as separators. File: global/mail_conf.c.
+ Victor Duchovny, Norgan Stanley.
+
+ Bugfix: the rewritten postfix-install script did not chattr
+ +S the Postfix queue.
Open problems:
6 - Installing the software after successful compilation
========================================================
+This text describes how to install Postfix from source code. See
+the PACKAGE_README file if you are building a package for distribution
+to other systems.
+
IMPORTANT: if you are REPLACING an existing sendmail installation
with Postfix, you may need to keep the old sendmail program running
for some time in order to flush the mail queue. As superuser,
update depend printfck clean tidy depend_update: Makefiles
$(MAKE) MAKELEVEL= $@
-install:
+install upgrade:
@echo Please review the INSTALL instructions first.
makefiles Makefiles:
update depend printfck clean tidy depend_update: Makefiles
$(MAKE) MAKELEVEL= $@
-install:
+install upgrade:
@echo Please review the INSTALL instructions first.
makefiles Makefiles:
Building Postfix on Linux with a specific Berkeley DB version
=============================================================
-Some Linux systems systems ship with multiple Berkeley DB
-implementations. Normally, Postfix builds with the default DB
-version that ships with the system.
+Some Linux systems ship with multiple Berkeley DB implementations.
+Normally, Postfix builds with the default DB version that ships
+with the system.
On Linux, you need to edit the makedefs script in order to specify
a non-default DB library.
postfix-users@postfix.org mailing list.
debuglevel (0)
- What level to set for debugging in the the OpenLDAP libraries.
+ What level to set for debugging in the OpenLDAP libraries.
Don't use quotes in these variables; at least, not until the Postfix
configuration routines understand how to deal with quoted strings.
With the above settings, the Postfix local delivery agent expands
aliases and .forward files, and delegates mailbox delivery to the
-the Cyrus LMTP server. Postfix makes a connection to port 24 on
-the local host, subsequently transmitting the message to the lmtpd
+Cyrus LMTP server. Postfix makes a connection to port 24 on the
+local host, subsequently transmitting the message to the lmtpd
server managed by the Cyrus master process.
--- /dev/null
+Hints and tips for Postfix packagers
+====================================
+
+1) The installed main.cf file must be small. PLEASE resist the
+temptation to list all 100 million Postfix parameters in the main.cf
+file. Postfix is supposed to be easy to configure. Listing all
+100 million parameters in main.cf defeats the purpose.
+
+2) Please provide the sample-xxx files. If these files are not
+installed in the same directory as main.cf, PLEASE update the notice
+at the top of main.cf that advises the user of the existence of
+the sample-xxx files. Without the sample-xxx files, Postfix will
+be much more difficult to configure.
+
+Building a package for distribution to other systems
+====================================================
+
+You can build a Postfix package on a machine that does not have
+Postfix installed on it. All you need is Postfix source code and
+a compilation environment that is compatible with the target system.
+
+You can build a pre-built Postfix package as an unprivileged user,
+but the result will be cleaner if you build the package as root.
+
+After successful Postfix compilation, execute:
+
+ % sh postfix-install
+
+You will be prompted for installation parameters. Specify an
+install_root directory other than /. The mail_owner and setgid_group
+installation parameter settings will be recorded in the main.cf
+file, but they won't take effect until the package is unpacked and
+installed on the destination machine.
+
+If you want to fully automate the process, specify all the non-default
+installation parameters on the command line:
+
+ % sh postfix-install -non-interactive install_root=/some/where ...
+
+Begin Security Alert.
+
+When building an archive for distribution, be sure to archive only
+files and symbolic links, not their parent directories. Otherwise,
+unpacking a pre-built Postfix package may mess up permission and/or
+ownership of system directories such as / /etc /usr /usr/bin /var
+/var/spool and so on. This is especially an issue if you executed
+postfix-install (see above) as an unprivileged user.
+
+End Security Alert.
+
+Thus, instead of simply tarring up a pre-built tree it is much
+safer if you jump the following hoops:
+
+ % cd /install/root
+ % rm -f /some/where/outputfile
+ % find . \! -type d -print | xargs tar rf /some/where/outputfile
+ % gzip /some/where/outputfile
+
+Installing a pre-built Postfix package
+======================================
+
+To unpack a pre-built Postfix package, execute the equivalent of:
+
+ # umask 022
+ # gzip -d <outputfile.tar.gz | (cd / ; tar xvpf -)
+
+The umask command is necessary for getting the correct permissions
+on non-Postfix directories that need to be created in the process.
+
+Create the necessary mail_owner account and setgid_group group for
+exclusive use by Postfix.
+
+Execute the post-install script in the Postfix configuration
+directory to set ownership and permission of Postfix files and
+directories. Specify any non-default settings for mail_owner or
+setgid_group on the post-install command line:
+
+ # sh post-install upgrade-package setgid_group=xxx mail_owner=yyy
+
+This will also update the main.cf and master.cf files if necessary.
canonical maps and virtual maps.
An additional restriction is that regular expression tables cannot
-cannot be used for local alias database lookups. That would be a
-security exposure anyway.
+be used for local alias database lookups. That would be a security
+exposure anyway.
- Either the parameters need to be given in the $config_directory/main.cf
file from a recent Postfix installation,
-- Or the parameters need to be specified as name=value arguments
-on the $0 command line,
-
- Or the parameters need to be specified through the process
environment.
+- Or the parameters need to be specified as name=value arguments
+on the $0 command line,
+
The following parameters were missing:
$missing
# This parameter setting is not recorded in the installed main.cf file.
# .IP tempdir
# Directory for scratch files while installing Postfix.
-# You must must have write permission in this directory.
+# You must have write permission in this directory.
# The built-in default directory name is the current directory.
# This parameter setting is not recorded in the installed main.cf file.
# .IP config_directory
exit 1
}
+#
+# LINUX by default does not synchronously update directories -
+# that's dangerous for mail.
+#
+if [ -f /usr/bin/chattr ]
+then
+ CHATTR="/usr/bin/chattr +S"
+else
+ CHATTR=echo
+fi
+
case `uname -s` in
HP-UX*) FMT=cat;;
*) FMT=fmt;;
to other machines."
tempdir_prompt="a directory for scratch files while installing
-Postfix. You must must have write permission in this directory."
+Postfix. You must have write permission in this directory."
config_directory_prompt="the destination directory for installed
Postfix configuration files."
setgid_group_prompt="the group for mail submission and for queue
management commands. Specify a group name with a numerical group
ID that is not shared with other accounts, not even with the Postfix
-mail_owner account."
+mail_owner account. You can no longer specify \"no\" here."
manpage_path_prompt="the destination directory for the Postfix on-line
-manual pages."
+manual pages. You can no longer specify \"no\" here."
# Default settings, just to get started.
test -z "$owner" || chown $owner $path || exit 1
test -z "$group" || chgrp $group $path || exit 1
chmod $mode $path || exit 1
+ $CHATTR $path >/dev/null 2>/dev/null
}
continue;;
[fl]) ;;
esac) || exit 1
done
+# Save the installation parameters to main.cf even when they haven't
+# changed from their current default. Defaults can change between
+# Postfix releases, and software should not suddenly be installed in
+# the wrong place when Postfix is being upgraded.
+
+bin/postconf -c $CONFIG_DIRECTORY -e \
+ "daemon_directory = $daemon_directory" \
+ "command_directory = $command_directory" \
+ "queue_directory = $queue_directory" \
+ "mail_owner = $mail_owner" \
+ "setgid_group = $setgid_group" \
+ "sendmail_path = $sendmail_path" \
+ "mailq_path = $mailq_path" \
+ "newaliases_path = $newaliases_path" \
+ "manpage_path = $manpage_path" \
+|| exit 1
+
# If Postfix is being installed locally from source code, do the
-# post-install processing now. The post-install script will update
-# main.cf with actual installaton parameter settings.
-#
-# If Postfix is being packaged for distribution to other systems,
-# save the installation parameters to main.cf so they can be used
-# as default settings when the post-install script is executed.
+# post-install processing now.
-if [ -z "$install_root" ]
-then
- export daemon_directory command_directory queue_directory mail_owner \
- setgid_group sendmail_path newaliases_path mailq_path manpage_path
+test -n "$install_root" ||
${SHELL} conf/post-install $post_install_options || exit 1
-else
- bin/postconf -c $CONFIG_DIRECTORY -e \
- "daemon_directory = $daemon_directory" \
- "command_directory = $command_directory" \
- "queue_directory = $queue_directory" \
- "mail_owner = $mail_owner" \
- "setgid_group = $setgid_group" \
- "sendmail_path = $sendmail_path" \
- "mailq_path = $mailq_path" \
- "newaliases_path = $newaliases_path" \
- "manpage_path = $manpage_path" \
- || exit 1
-fi
while (found == 0 && readlline(buf, fp, (int *) 0)) {
if (split_nameval(vstring_str(buf), &name, &value) == 0
&& strcmp(name, VAR_CONFIG_DIRS) == 0) {
- while (found == 0 && (cp = mystrtok(&value, "\t\r\n")) != 0)
+ while (found == 0 && (cp = mystrtok(&value, ", \t\r\n")) != 0)
if (strcmp(cp, config_dir) == 0)
found = 1;
}
* Version of this program.
*/
#define VAR_MAIL_VERSION "mail_version"
-#define DEF_MAIL_VERSION "Snapshot-20020113"
+#define DEF_MAIL_VERSION "Snapshot-20020114"
extern char *var_mail_version;
/* LICENSE