1<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3 4<html> 5 6<head> 7 8<title>Guidelines for Package Builders</title> 9 10<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 11<link rel='stylesheet' type='text/css' href='postfix-doc.css'> 12 13</head> 14 15<body> 16 17<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Guidelines for Package Builders</h1> 18 19<hr> 20 21<h2>Purpose of this document</h2> 22 23<p> This document has hints and tips for those who manage their 24own Postfix binary distribution for internal use, and for those who 25maintain Postfix binary distributions for general use. </p> 26 27<h2>General distributions: please provide a small default main.cf 28file</h2> 29 30<p> The installed main.cf file must be small. PLEASE resist the 31temptation to list all parameters in the main.cf file. Postfix 32is supposed to be easy to configure. Listing all parameters in main.cf 33defeats the purpose. It is an invitation for hobbyists to make 34random changes without understanding what they do, and gets them 35into endless trouble. </p> 36 37<h2>General distributions: please include README or HTML files</h2> 38 39<p> Please provide the applicable README or HTML files. They are 40referenced by the Postfix manual pages and by other files. Without 41README or HTML files, Postfix will be difficult if not impossible 42to configure. </p> 43 44<h2>Postfix Installation parameters</h2> 45 46<p> Postfix installation is controlled by a dozen installation 47parameters. See the postfix-install and post-install files for 48details. Most parameters have system-dependent default settings 49that are configurable at compile time, as described in the INSTALL 50file. </p> 51 52<h2>Preparing a pre-built package for distribution to other 53systems</h2> 54 55<p> You can build a Postfix package on a machine that does not have 56Postfix installed on it. All you need is Postfix source code and 57a compilation environment that is compatible with the target system. 58</p> 59 60<p> You can build a pre-built Postfix package as an unprivileged 61user. </p> 62 63<p> First compile Postfix. After successful compilation, execute: 64</p> 65 66<blockquote> <pre> % <b>make package</b> </pre> 67</blockquote> 68 69<p> With Postfix versions before 2.2 you must invoke the post-install 70script directly (<tt>% <b>sh post-install</b></tt>). </p> 71 72<p> You will be prompted for installation parameters. Specify an 73install_root directory other than /. The mail_owner and setgid_group 74installation parameter settings will be recorded in the main.cf 75file, but they won't take effect until the package is unpacked and 76installed on the destination machine. </p> 77 78<p> If you want to fully automate this process, specify all the 79non-default installation parameters on the command line: </p> 80 81<blockquote> 82<pre> % <b>make non-interactive-package install_root=/some/where</b>... 83</pre> </blockquote> 84 85<p> With Postfix versions before 2.2 you must invoke the post-install 86script directly (<tt>% <b>sh post-install -non-interactive 87install_root...</b></tt>). </p> 88 89<p> With Postfix 3.0 and later, the command "make package name=value 90..." will replace the string MAIL_VERSION in a configuration parameter 91value with the Postfix release version. Do not try to specify 92something like $mail_version on this command line. This produces 93inconsistent results with different versions of the make(1) command. 94</p> 95 96<h2>Begin Security Alert</h2> 97 98<p> <b> When building an archive for distribution, be sure to 99archive only files and symbolic links, not their parent directories. 100Otherwise, unpacking a pre-built Postfix package may mess up 101permission and/or ownership of system directories such as / /etc 102/usr /usr/bin /var /var/spool and so on. This is especially an 103issue if you executed postfix-install (see above) as an unprivileged 104user. </b> </p> 105 106<h2>End Security Alert</h2> 107 108<p> Thus, to tar up the pre-built package, take the following steps: 109</p> 110 111<blockquote> <pre> 112% cd INSTALL_ROOT 113% rm -f SOMEWHERE/outputfile 114% find . \! -type d -print | xargs tar rf SOMEWHERE/outputfile 115% gzip SOMEWHERE/outputfile </pre> </blockquote> 116 117<p>This way you will not include any directories that might cause 118trouble upon extraction. </p> 119 120<h2>Installing a pre-built Postfix package</h2> 121 122<ul> 123 124<li> <p> To unpack a pre-built Postfix package, execute the equivalent 125of: </p> 126 127<pre> 128# umask 022 129# gzip -d <outputfile.tar.gz | (cd / ; tar xvpf -) </pre> 130 131<p> The umask command is necessary for getting the correct permissions 132on non-Postfix directories that need to be created in the process. 133</p> 134 135<li> <p> Create the necessary mail_owner account and setgid_group 136group for exclusive use by Postfix. </p> 137 138<li> <p> Execute the postfix command to set ownership and permission 139of Postfix files and directories, and to update Postfix configuration 140files. If necessary, specify any non-default settings for mail_owner 141or setgid_group on the postfix command line: </p> 142 143<pre> 144# postfix set-permissions upgrade-configuration \ 145 setgid_group=xxx mail_owner=yyy 146</pre> 147 148<p> With Postfix versions before 2.1 you achieve the same result 149by invoking the post-install script directly. </p> 150 151</ul> 152 153</body> 154 155</html> 156