Postfix – kompilacja

MyszaPostfixa kompiluje się trochę inaczej niż większość oprogramowania Open Source, nie posiada on skryptu configure, a odpowiednie opcje i ścieżki do bibliotek dodaje się podczas tworzenia plików Makefile. Tak to autor wymyślił i trzeba przyznać, że wiedział co robi, bo jest to jeden z najmniej problematycznych kodów do kompilacji na różnych systemach operacyjnych.
Aby za każdym razem nie zastanawiać się nad flagami i opcjami kompilacji, zrobiłem sobie skrypt, w którym mam to wszystko ustawione i tylko zmieniam nr wersji.

#!/bin/sh
#

# for GCC:
#CC=gcc
#CFLAGS="-O2 -mcpu=v9"
#MAKE=gmake
#
# for Sun Studio
CC=cc
CXX=CC
CFLAGS="-fast -xautopar"
CXXFLAGS=$CFLAGS
CPPFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib -R/usr/local/lib"
#LDFLAGS="-L/usr/local/lib -R/usr/local/lib -L/usr/ucblib -R/usr/ucblib"
#LIBS=
MAKE=dmake
#DMAKE_MODE=serial

export CC CFLAGS CPPFLAGS MAKE DMAKE_MODE
export CXX CXXFLAGS LDFLAGS LIBS

# $CC -v
$CC -V
set|grep PATH
set|grep FLAGS

KAT="postfix"
VER="2.9.3"

cd $KAT-$VER

tn="n"
echo "============================================="
echo "$MAKE clean [y|n] ?"
read tn
if [ "$tn" = "Y" ] || [ "$tn" = "y" ]; then
  $MAKE distclean || $MAKE realclean || $MAKE clean

  rm -f config.status
  rm -f config.log
fi;

tn="n"
echo "============================================="
echo "$MAKE makefiles [y|n] ?"
read tn
if [ "$tn" = "Y" ] || [ "$tn" = "y" ]; then
	$MAKE makefiles CC="$CC $CFLAGS" CCARGS="-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\" -DHAS_SSL -DUSE_TLS -I/usr/local/ssl/include -DHAS_LDAP -I/usr/local/openldap/include -DHAS_DB -I/usr/local/BerkeleyDB.5.1/include -DHAS_PCRE -I/usr/local/include" AUXLIBS="-R/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto -R/usr/local/openldap/lib -L/usr/local/openldap/lib -lldap -R/usr/local/openldap/lib -L/usr/local/openldap/lib -llber -R/usr/local/BerkeleyDB.5.1/lib -L/usr/local/BerkeleyDB.5.1/lib -ldb -L/usr/local/lib -R/usr/local/lib -lpcre"
fi;

tn="n"
echo "============================================="
echo "$MAKE [y|n] ?"
read tn
if [ "$tn" = "Y" ] || [ "$tn" = "y" ]; then
  $MAKE && echo "Compilation successful"
fi;

Po ściągnięciu źródeł ze strony Postfixa i rozpakowaniu uruchamiam skrypt:

./drf_postfix-2.9.3_conf

cc: Sun C 5.10 SunOS_sparc 2009/06/03
usage: cc [ options] files.  Use 'cc -flags' for details
MANPATH=/usr/local/share/man:/usr/local/man:/usr/share/man
PATH=/usr/local/bin:/usr/bin:/usr/ccs/bin
CFLAGS=-fast -xautopar
CPPFLAGS=-I/usr/local/include
CXXFLAGS=-fast -xautopar
LDFLAGS=-L/usr/local/lib -R/usr/local/lib
=============================================
dmake clean [y|n] ?
n
=============================================
dmake makefiles [y|n] ?
y
dmake -f Makefile.in MAKELEVEL= Makefiles
(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp
set +e; if cmp makedefs.tmp conf/makedefs.out; then rm makedefs.tmp; \
else mv makedefs.tmp conf/makedefs.out; fi >/dev/null 2>/dev/null
set -e; for i in src/util src/global src/dns src/tls src/xsasl src/milter src/master  src/postfix src/fsstone src/smtpstone  src/sendmail src/error src/pickup src/cleanup src/smtpd src/local  src/trivial-rewrite src/qmgr src/oqmgr src/smtp src/bounce  src/pipe src/showq src/postalias src/postcat src/postconf src/postdrop  src/postkick src/postlock src/postlog src/postmap src/postqueue  src/postsuper src/qmqpd src/spawn src/flush src/verify  src/virtual src/proxymap src/anvil src/scache src/discard src/tlsmgr  src/postmulti src/postscreen src/dnsblog src/tlsproxy; do \
 (set -e; echo "[$i]"; cd $i; rm -f Makefile; \
 dmake -f Makefile.in Makefile MAKELEVEL=) || exit 1; \
done;
...

Kompilacja:

dmake [y|n] ?
y
rm -f libexec/post-install && ln -f conf/post-install libexec/post-install
rm -f libexec/postfix-files && ln -f conf/postfix-files libexec/postfix-files
rm -f libexec/postfix-script && ln -f conf/postfix-script libexec/postfix-script
rm -f libexec/postfix-wrapper && ln -f conf/postfix-wrapper libexec/postfix-wrapper
rm -f libexec/main.cf && ln -f conf/main.cf libexec/main.cf
rm -f libexec/master.cf && ln -f conf/master.cf libexec/master.cf
...

cc -fast -xautopar -DUSE_SASL_AUTH -DDEF_SASL_SERVER="dovecot" -DHAS_SSL -DUSE_TLS -I/usr/local/ssl/include -DHAS_LDAP -I/usr/local/openldap/include -DHAS_DB -I/usr/local/BerkeleyDB.5.1/include -DHAS_PCRE -I/usr/local/include -Dstrcasecmp=fix_strcasecmp 		  -Dstrncasecmp=fix_strncasecmp -g -O -I. -I../../include -DSUNOS5 -o tlsproxy tlsproxy.o tlsproxy_state.o ../../lib/libtls.a ../../lib/libmaster.a ../../lib/libglobal.a  ../../lib/libutil.a -R/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto -R/usr/local/openldap/lib -L/usr/local/openldap/lib -lldap -R/usr/local/openldap/lib -L/usr/local/openldap/lib -llber -R/usr/local/BerkeleyDB.5.1/lib -L/usr/local/BerkeleyDB.5.1/lib -ldb -L/usr/local/lib -R/usr/local/lib -lpcre -lresolv -lsocket -lnsl
cp tlsproxy ../../libexec
Compilation successful

Instalacja po su na roota lub sudo, przy czym jeśli postfix był już zainstalowany, można zrobić śmiało make upgrade do tego samego katalogu. Postfixa można upgradeować bez wyłączania, osobiście jednak po upgradzie zawsze restartuję serwer Postfix.

Może Ci się również spodoba

Dodaj komentarz