Posts Tagged Compile Postfix

Compiling SASL Packages with Postfix

Posted by Filed Under Compile Postfix with Comments Off

The environmental variables in CCARGS for instance, provide the options that Postfix needs.

AUXLIBS – If you build support for any additional applications you may need to tell the linker where to look for the additional libraries for those programs.  The standard location for system libraries is /usr/lib.  If you want the linker to look for additional libraries you must indicate that with the -L option.

CentOS Example
AUXLIBS=’-L/usr/lib’

However, that is not enough because you must also indicate the specific library to link to with the -l option.  Library files start with lib and will have an extension of .a for static libraries, .so for a shared object or .sl for a shared library.  If the -l is used the library is referred to without the lib and without the file extension.  So if you were going to add MySQL and mysqlclient it would look like this:

CentOS Example
AUXLIBS=’-L/usr/lib/mysql -L/usr/lib -lmysqlclient -lz -lm’

CC – Postfix will use the gcc compiler, If you want to use a different one you will need to indicate that specifically.  If you look in the makedefs file you will see this text indicating the default is gcc, “${CC-gcc}”.

CCARGS – This will supply any additional arguments you want to make to the compiler.  This is used to indicate files that you need that are not in default locations.

DEBUG – This will provide debugging levels that you may want to use.  Typically you will want to increase debugging levels when you initially build Postfix for testing and then eliminate it when you build the final version for your production server.

OPT – These are optimization levels that you can set if you need your Postfix Mail Server to function at higher levels.

The compiler options can be set up in using the CCARGS.  The standard location for the header files that you need are in /usr/include.  If you need to indicate an alternative location for header files you would use the CCARGS to indicate that.  The “I” options are used for each additional directory the compiler should use.

CCARGS=’-I/usr/local/include/’

The -D option gives you a method of defining a macro to include support for a particular program you want to include.  So that you could tell Postfix to include support for the MySQL macro, HAS_MYSQL like this:

CCARGS=’DHAS_MYSQL’

If you want to change the location of directories you will need to include the Macro Name and the location where you want to place the directory.

Make makefiles CCARGS=’-DEF_CONFIG_DIR=\”a/location\”’

Parameters whose defaults can be specified in this way are:

Macro name         default value for         typical default
DEF_COMMAND_DIR     command_directory     /usr/sbin
DEF_CONFIG_DIR     config_directory         /etc/postfix
DEF_DAEMON_DIR     daemon_directory         /usr/libexec/postfix
DEF_DATA_DIR         data_directory         /var/lib/postfix
DEF_MAILQ_PATH     mailq_path             /usr/bin/mailq
DEF_HTML_DIR         html_directory         no
DEF_MANPAGE_DIR     manpage_directory         /usr/local/man
DEF_NEWALIAS_PATH     newaliases_path         /usr/bin/newaliases
DEF_QUEUE_DIR         queue_directory         /var/spool/postfix
DEF_README_DIR     readme_directory         no
DEF_SENDMAIL_PATH     sendmail_path         /usr/sbin/sendmail

Parameter Changes for the Environment
When you want to make changes to the parameters you will need to execute the build with two steps so that you can modify the Makefile.  Here is an example of some changes you could make.

make makefiles CCARGS=’-DDEF_COMMAND_DIR=\”/usr/local/sbin\” \
-DDEF_DAEMON_DIR=\”/usr/local/libexec/postfix\” \
-DDEF_MAILQ_PATH=\”/usr/local/bin/mailq\” \
-DDEF_NEWALIAS_PATH=\”/usr/local/bin/newaliases\” \
-DHAS_MYSQL -I/usr/src/mysql/include/mysql’ \
AUXLIBS=’-L/usr/src/mysql/lib/mysql -lmysqlclient’

On any server that you are compiling Postfix on, you need to take into account where the additional programs are that you want to compile with Postfix.  These directories will be in different locations depending upon the distro that you are using.

One application you may want to compile with Postifx is SASL support.  The illustration using CentOS but you can see how you would change directories for Ubuntu or Debian and it can work that way also.   Use yum to find out information on your version as you may have to make changes based on version.  Here you can see cyrus-sasl is version 2.1.22.

yum info cyrus-sasl

Name       : cyrus-sasl
Arch       : i386
Version    : 2.1.22
Release    : 4
Size       : 4.6 M
Repo       : installed
Summary    : The Cyrus SASL library.
URL        : http://asg.web.cmu.edu/sasl/sasl-library.html
License    : Freely Distributable
Description: The cyrus-sasl package contains the Cyrus implementation of SASL. SASL is the Simple Authentication and Security Layer, a method for adding
: authentication support to connection-based protocols.

The following assumes that the Cyrus SASL include files are in /usr/local/
include, and that the Cyrus SASL libraries are in /usr/local/lib.

On some systems this generates the necessary Makefile definitions:

% make tidy # if you have left-over files from a previous build
% make makefiles CCARGS=”-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/local/include/sasl” AUXLIBS=”-L/usr/local/lib -lsasl2″

(for Cyrus SASL version 2.1.x):

% make tidy # if you have left-over files from a previous build
% make makefiles CCARGS=”-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/local/include/sasl” AUXLIBS=”-L/usr/local/lib \
-R/usr/local/lib -lsasl2″

Why this won’t work.
ls /usr/include/sasl
hmac-md5.h  md5global.h  md5.h  prop.h  sasl.h  saslplug.h  saslutil.h

Modified
make makefiles CCARGS=”-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
-I/usr/include/sasl” AUXLIBS=”-L/usr/lib -lsasl2″

make upgrade

ldd `postconf -h daemon_directory`/smtpd
linux-gate.so.1 =>  (0x00bfc000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0×00464000)
libdb-4.3.so => /lib/libdb-4.3.so (0×00110000)
libnsl.so.1 => /lib/libnsl.so.1 (0×00207000)
libresolv.so.2 => /lib/libresolv.so.2 (0x003fc000)
libc.so.6 => /lib/libc.so.6 (0x0021e000)
libdl.so.2 => /lib/libdl.so.2 (0x00d22000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0×00362000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d28000)
/lib/ld-linux.so.2 (0x00bb9000)

Compile MySQL with Postfix on CentOS

Posted by Filed Under Compile Postfix with Comments Off

CentOs MySQL Support
You may want to use MySQL to store passwords of accounts, especially when you are working with virtual mailboxes.  One thing to note when you do compile Postfix is to make good use of the READMEs are they are very helpful. Be sure that the paths are correct for your distro.  Here you can see the changes necessary for CentOS.

This is in the README
make -f Makefile.init makefiles \
‘CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include’ \
‘AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm’

Modified
make -f Makefile.init makefiles \
‘CCARGS=-DHAS_MYSQL -I/usr/include/mysql -I/usr/include’ \
‘AUXLIBS=-L/usr/lib/mysql -L/usr/lib -lmysqlclient -lz -lm’

ldd `postconf -h daemon_directory`/smtpd
linux-gate.so.1 =>  (0×00940000)
libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15 (0×00748000)
libz.so.1 => /usr/lib/libz.so.1 (0x00dd7000)
libm.so.6 => /lib/libm.so.6 (0x00d41000)
libdb-4.3.so => /lib/libdb-4.3.so (0×00411000)
libnsl.so.1 => /lib/libnsl.so.1 (0x001a1000)
libresolv.so.2 => /lib/libresolv.so.2 (0x003fc000)
libc.so.6 => /lib/libc.so.6 (0x00bdc000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x001ba000)
libssl.so.6 => /lib/libssl.so.6 (0×00110000)
libcrypto.so.6 => /lib/libcrypto.so.6 (0x0050a000)
/lib/ld-linux.so.2 (0x00bb9000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d28000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x0064d000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x006b0000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0×00157000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0×00688000)
libdl.so.2 => /lib/libdl.so.2 (0x00d22000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x0067d000)
libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00df8000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00db2000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00d6a000)

Tools Needed for Building Postfix

Posted by Filed Under Compile Postfix with Comments Off

Postfix is built in C so you will be compiling C code.  Usually the options that you want to create for a project are contained in a Makefile.  The make utility creates this Makefile which is used to determine dependencies, any requirements needed or changes you want to create like adding programs or locations of files.  The compiler then takes this information and creates object files and links them together into executables.

However, since Postfix creates its own Makefile, you do not need to edit it at all.  In fact, the problem with editing the Makefile for Postfix is that your edits will get written over.  So, the way to make changes is to use the CCARGS.

Prerequsites to Install
apt-get install db*-devel
apt-get install libdb-dev

Tools You will need
Usually when you install these basic tools the requirements for those tools will be installed as well.

gcc
make

Building Postfix from Source

Posted by Filed Under Compile Postfix with Comments Off

Before making the decision on whether to build from source or not, it may be best to review a few of the advantages and disadvantages.

Disadvantages
1. Time
It takes time and effort to compile from source.   There are things you will need to learn and problems you will need to fix.  It is just more work to compile from source.
2. Transfer of Knowledge
If your organization does not have a plan to transfer the information on how the compilation was done and a transfer of the skills needed to compile and to maintain Postfix, then do not go down this road.  Company after company starts the process but finds themselves with applications that no one on staff can manage, with no documentation and no staff to solve the problems of updates.  When you compile a program transfer the knowledge through clear documentation and training of subordinates.

Advantages
1. Specific Build Options
When you build from source you can specify each of the options that go into the build process, eliminating options you do not need and adding those options that are most important.  This provides a much smaller and more secure product.
2. Version Freedom
You can download and install any version of Postfix you want to use, you are not tied to the version that is in the repository.

Postfix Basic Build

Posted by Filed Under Compile Postfix with Comments Off

Compile a Basic Postfix
Once you have downloaded the source code, move it into the /usr/local/src directory, other options are available.

Download Source Code From Here:

http://www.postfix.org/download.html

mv postfix-2.5.5.tar.gz /usr/local/src/

Untar the file which will create a directory.
tar zxvf postfix-2.5.5.tar.gz

Move into the new postfix directory.

cd postfix-2.5.5

Install the prerequisites.  These were required on an Ubuntu 8.04 server.

apt-get install db*-devel

apt-get install libdb-dev

Since Postfix does not use  GNU autotools and so does not have the configure script that you may be used to.  Typically the make utility will use a Makefile that will determine the options you want, dependencies and prerequisites.  Postfix will actually do this work for you by creating it’s own Makefile.

make

Once the compile is complete you will need to create the user and groups for Postfix.

groupadd postfix
groupadd postdrop

The user postfix needs to have an account that cannot log in and be a part of the postfix group that was created.

useradd -c postfix -d /tmp -g postfix -s /bin/false postfix

Now run the final command which will allow you to choose directories and locations that you want to use with your installation.  Read each option closely so that when you run the command you have an idea on what you want to change, if anything.  You can take the default settings by choosing ENTER.

make install

Please specify the prefix for installed file names. Specify this ONLY if you are building ready-to-install packages for distribution to other machines.
install_root: [/]

Please specify a directory for scratch files while installing Postfix. You must have write permission in this directory.
tempdir: [/usr/local/src/postfix-2.5.5]

Please specify the final destination directory for installed Postfix configuration files.
config_directory: [/etc/postfix]

Please specify the final destination directory for installed Postfix administrative commands. This directory should be in the command search path of adminstrative users.
command_directory: [/usr/sbin]

Please specify the final destination directory for installed Postfix daemon programs. This directory should not be in the command search path of any users.
daemon_directory: [/usr/libexec/postfix]

Please specify the final destination directory for Postfix-writable data files such as caches or random numbers. This directory should not be shared with non-Postfix software.
data_directory: [/var/lib/postfix]

Please specify the destination directory for the Postfix HTML files. Specify “no” if you do not want to install these files.
html_directory: [no]

Please specify the owner of the Postfix queue. Specify an account with numerical user ID and group ID values that are not used by any other accounts on the system.
mail_owner: [postfix]

Please specify the final destination pathname for the installed Postfix mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq]

Please specify the destination directory for the Postfix on-line manual pages. You can no longer specify “no” here.
manpage_directory: [/usr/local/man]

Please specify the final destination pathname for the installed Postfix newaliases command. This is the Sendmail-compatible command to build alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases]

Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix]

Please specify the destination directory for the Postfix README files. Specify “no” if you do not want to install these files.
readme_directory: [no]

Please specify the final destination pathname for the installed Postfix sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail]

Please specify 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. You can no longer specify “no” here.
setgid_group: [postdrop]

This should complete a basic setup for Postfix and you can then start postfix with:

/usr/sbin/postfix start

You should see port 25 listening when you run netstat.

netstat -aunt