Dovecot – kompilacja i instalacja

dovecotDovecota w systemach linuxowych można zainstalować z pakietów. Odpowiednie pakiety zapewniają też wsparcie dla LDAP, mysql itd. Niestety instalując w ten sposób zwykle nie można liczyć na najnowszą wersję, np. na dzień dzisiejszy w pakietach Ubuntu jest wersja 2.0.19-0ubuntu1, podczas gdy na stronie projektu dostępna jest już wersja 2.1.7. Dlatego też czasem warto skompilować i zainstalować samodzielnie oprogramowanie, nawet jak dostępne jest w pakiecie.

Poniżej skrypt, którego użyłem do kompilacji Dovecota na systemie Solaris 10 SPARC przy użyciu kompilatora SunStudio.


#!/bin/sh
#

# for GCC:
#CC=gcc
#CFLAGS="-O2 -mcpu=v9"
#MAKE=gmake
#
# for Sun Studio
CC=cc
CXX=CC
CFLAGS="-xO3 -xautopar"
CXXFLAGS=$CFLAGS
CPPFLAGS="-I/usr/local/ssl/include -I/usr/local/openldap/include -I/usr/local/include"
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

DIR="dovecot"
VER="2.1.7"

cd $DIR-$VER

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

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

tn="n"
echo "============================================="
echo "configure [y|n] ?"
read tn
if [ "$tn" = "t" ] || [ "$tn" = "y" ]; then
    ./configure \
    --prefix=/usr/local/$DIR-$VER \
    --infodir=/usr/local/info --mandir=/usr/local/man \
    --sysconfdir=/data/etc \
    --localstatedir=/data/var/$DIR \
    --with-libiconv-prefix=/usr/local \
    --with-ldap \
    --with-ssl \
    --with-ssldir=/data/etc/certs

fi;

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

DMAKE_MODE=serial
export DMAKE_MODE

tn="n"
echo "============================================="
echo "$MAKE test || $MAKE check [y|n] ?"
read tn
if [ "$tn" = "t" ] || [ "$tn" = "y" ]; then
  $MAKE test || $MAKE check
fi;

Sesja kompilacji przedstawia się następująco:

checking for a BSD-compatible install... /usr/local/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/local/bin/mkdir -p
checking for gawk... gawk
checking whether dmake sets $(MAKE)... yes
...
Install prefix . : /usr/local/dovecot-2.1.7
File offsets ... : 64bit
I/O polling .... : poll
I/O notifys .... : none
SSL ............ : yes (OpenSSL)
GSSAPI ......... : no
passdbs ........ : static passwd passwd-file shadow pam checkpassword ldap
                 : -bsdauth -sia -sql -vpopmail
userdbs ........ : static prefetch passwd passwd-file checkpassword ldap
                 : -sql -vpopmail -nss
SQL drivers .... :
                 : -pgsql -mysql -sqlite
Full text search : squat
                 : -lucene -solr
dmake [y|n] ?
y
dmake  all-recursive
Making all in .
old=`pwd` && cd . && abs_builddir=`pwd` && cd $old && \
cd . && abs_srcdir=`pwd` && cd $old && \
cat dovecot-config.in | sed \
-e "s|\$(top_builddir)|$abs_builddir|g" \
-e "s|\$(incdir)|$abs_srcdir|g" \
-e "s|\$(LIBICONV)|/usr/local/lib/libiconv.so -R/usr/local/lib|g" \
-e "s|^\(dovecot_pkgincludedir\)=|\1=/usr/local/dovecot-2.1.7/include/dovecot|" \
-e "s|^\(dovecot_pkglibdir\)=|\1=/usr/local/dovecot-2.1.7/lib/dovecot|" \
-e "s|^\(dovecot_pkglibexecdir\)=|\1=/usr/local/dovecot-2.1.7/libexec/dovecot|" \
-e "s|^\(dovecot_docdir\)=|\1=/usr/local/dovecot-2.1.7/share/doc/dovecot|" \
-e "s|^\(dovecot_moduledir\)=|\1=/usr/local/dovecot-2.1.7/lib/dovecot|" \
> dovecot-config
...
Making all in wiki
Making all in example-config
Making all in conf.d
cat ./README.in | sed "s|@exampledir@|/usr/local/dovecot-2.1.7/share/doc/dovecot/example-config|" > README
Compillation successful
=============================================
dmake test || dmake check [y|n] ?
y
dmake: Fatal error: Don't know how to make target `test'
Making check in .
/bin/bash ./update-version.sh . .
Making check in src
Making check in lib-test
Making check in lib
for bin in test-lib; do \
  if !  ./$bin; then exit 1; fi; \
done
aqueue ............................................................... : ok
array foreach ........................................................ : ok
array reverse ........................................................ : ok
base64_encode() ...................................................... : ok
...
0 / 73 tests failed
dmake  check-am
Making check in lib-auth
...
mbox_from_parse(1,14) ................................................ : ok
mbox_from_create() ................................................... : ok
0 / 31 tests failed
...
proxy server msg copy ................................................ : ok
proxy server msg save ................................................ : ok
0 / 13 tests failed
Making check in ssl-params
Making check in stats
...

Instalacja z przywilejami roota (su - lub sudo -i)

# dmake install

Jeśli posiadasz wsparcie dla Sieve należy skompilować Sieve dla nowej wersji przed przełączeniem do nowego Dovecota.

Może Ci się również spodoba

Dodaj komentarz