Postfix – kompilacja
Postfixa 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.
