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.