Kerio Mailserver (Gentoo)

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen

Da der Mailserver von Kerio nicht als ebuild für Gentoo vorhanden ist, müssen einige Programme von Hand installiert werden. Neben den Paket für den rpm-Paketmanager muss auch das Programm killproc für die Befehle checkproc und startproc installieren werdenmüssen einige zusätzliche Pakete installiert werden.

emerge -av rpm killproc

Damit das init Script von Kerio auch durchläuft muss die Datei rc.status in /etc/ angelegt werden, das ist eine Datei die von OpenSUSE stammt. <code=ini>

  1. /etc/rc.status
  2. vim: syntax=sh
  3. Definition of boot script return messages
  4. The bootscripts should use the variables rc_done and rc_failed to
  5. report whether they failed or succeeded. See /etc/init.d/skeleton for
  6. an example how the shell functions rc_status and rc_reset are used.
  7. These functions make use of the variables rc_done and rc_failed;
  8. rc_done_up and rc_failed_up are the same as rc_done and rc_failed
  9. but contain a terminal code to move up one line before the output
  10. of the actual string. (This is particularly useful when the script
  11. starts a daemon which produces user output with a newline character)
  12. The variable rc_reset is used by the master resource control script
  13. /etc/init.d/rc to turn off all attributes and switch to the standard
  14. character set.
  15. \033 ascii ESCape
  16. \033[<NUM>G move to column <NUM> (linux console, xterm, not vt100)
  17. \033[<NUM>C move <NUM> columns forward but only upto last column
  18. \033[<NUM>D move <NUM> columns backward but only upto first column
  19. \033[<NUM>A move <NUM> rows up
  20. \033[<NUM>B move <NUM> rows down
  21. \033[1m switch on bold
  22. \033[31m switch on red
  23. \033[32m switch on green
  24. \033[33m switch on yellow
  25. \033[m switch off color/bold
  26. \017 exit alternate mode (xterm, vt100, linux console)
  27. \033[10m exit alternate mode (linux console)
  28. \015 carriage return (without newline)
  1. Do _not_ be fooled by non POSIX locale

LC_ALL=POSIX export LC_ALL

  1. Seek for terminal size and, if needed, set default size

if test -z "$LINES" -o -z "$COLUMNS" ; then

   eval `exec 3<&1; stty size <&3 2>/dev/null | (read L C; \
         echo LINES=${L:-24} COLUMNS=${C:-80})`

fi test $LINES -eq 0 && LINES=24 test $COLUMNS -eq 0 && COLUMNS=80 export LINES COLUMNS

  1. Make sure we have /sbin and /usr/sbin in PATH

case ":$PATH:" in

   *:/sbin:*)
       ;;
   *)
       PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH
       export PATH
       ;;

esac

if test -t 1 -a "$TERM" != "raw" -a "$TERM" != "dumb" && stty size <&1 > /dev/null 2>&1 ; then

        esc=`echo -en "\033"`
       extd="${esc}[1m"
       warn="${esc}[1;31m"
       done="${esc}[1;32m"
       attn="${esc}[1;33m"
       norm=`echo -en "${esc}[m\017"`
       stat=`echo -en "\015${esc}[${COLUMNS}C${esc}[10D"`
    rc_done="${stat}${done}done${norm}"
 rc_running="${stat}${done}running${norm}"
  rc_failed="${stat}${warn}failed${norm}"
  rc_missed="${stat}${warn}missing${norm}"
 rc_skipped="${stat}${attn}skipped${norm}"
    rc_dead="${stat}${warn}dead${norm}"
  rc_unused="${stat}${extd}unused${norm}"
 rc_unknown="${stat}${attn}unknown${norm}"
 rc_done_up="${esc}[1A${rc_done}"

rc_failed_up="${esc}[1A${rc_failed}"

   rc_reset="${norm}${esc}[?25h"
    rc_save="${esc}7${esc}[?25l"
 rc_restore="${esc}8${esc}[?25h"
   function rc_cuu () { test $1 -eq 0 && return; echo -en "\033[${1}A"; }
   function rc_cud () { test $1 -eq 0 && return; echo -en "\033[${1}B"; }
   function rc_timer_on () {
       # Draw seconds of running timout to column.
       # Two arguments: timeout in seconds and offset
       local n=$1
       local c=$2
       (trap "exit 0" TERM
        while test $((n--)) -gt 0; do
           sleep 1;
           if test $n -gt 9 ; then
               echo -en "\015${esc}[${c}C(${n}s) "
           else
               echo -en "\015${esc}[${c}C( ${n}s) "
           fi
       done) & _rc_timer_pid=$!
   }
   function rc_timer_off () {
       if test -n "$_rc_timer_pid" ; then
           kill -TERM $_rc_timer_pid > /dev/null 2>&1
       fi
       unset _rc_timer_pid
   }

else

        esc=""
       extd=""
       warn=""
       done=""
       attn=""
       norm=""
       stat=""
    rc_done="..done"
 rc_running="..running"
  rc_failed="..failed"
  rc_missed="..missing"
 rc_skipped="..skipped"
    rc_dead="..dead"
  rc_unused="..unused"
 rc_unknown="..unknown"
 rc_done_up="${rc_done}"

rc_failed_up="${rc_failed}"

   rc_reset=""
    rc_save=""
 rc_restore=""
   function rc_cuu () { return; }
   function rc_cud () { return; }
   function rc_timer_on  () { return; }
   function rc_timer_off () { return; }

fi

_rc_service=${0##*/[SK][0-9][0-9]} _rc_status=0 _rc_status_all=0 _rc_todo=$1 function rc_check () {

   _rc_status_ret=$?
   test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret
   test $_rc_status     -eq 0 || _rc_status_all=$_rc_status
   return $_rc_check_ret

} function rc_reset () {

   _rc_status=0
   _rc_status_all=0
   rc_check
   return 0

}

if test "$_rc_todo" = "status" ; then function rc_status () {

   rc_check
   _rc_status_ret=$_rc_status
   local i
   for i ; do
       case "$i" in
       -v|-v[1-9]|-v[1-9][0-9])
           local vrt=""
           local out=1
           local opt="en"
           test -n "${i#-v}" && vrt="$vrt${esc}[${i#-v}A" || opt="e"
           case "$_rc_status" in
           0)  vrt="$vrt$rc_running";          ;; # service running
           1)  vrt="$vrt$rc_dead"   ; out=2    ;; # service dead (but has pid file)
           2)  vrt="$vrt$rc_dead"   ; out=2    ;; # service dead (but has lock file)
           3)  vrt="$vrt$rc_unused" ;          ;; # service not running
           4)  vrt="$vrt$rc_unknown";          ;; # status is unknown
           esac
           echo -$opt "$rc_save$vrt$rc_restore" 1>&$out
           # reset _rc_status to 0 after verbose case
           _rc_status=0 ;;
       -r) rc_reset ;;
       -s) echo -e "$rc_skipped" ; rc_failed 3 ;;
       -u) echo -e "$rc_unused"  ; rc_failed 3 ;;
       *)  echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
       esac
   done
   return $_rc_status_ret

} elif test -n "$_rc_todo" ; then function rc_status () {

   rc_check
   test "$_rc_status" -gt 7 && rc_failed 1
   _rc_status_ret=$_rc_status
   case "$_rc_todo" in
   stop)
       # program is not running which
       # is success if we stop service
       test "$_rc_status" -eq 7 && rc_failed 0 ;;
   esac
   local i
   for i ; do
       case "$i" in
       -v|-v[1-9]|-v[1-9][0-9])
           local vrt=""
           local out=1
           local opt="en"
           test -n "${i#-v}" && vrt="$vrt${esc}[${i#-v}A" || opt="e"
           case "$_rc_status" in
           0)  vrt="$vrt$rc_done"   ;          ;; # success
           1)  vrt="$vrt$rc_failed" ; out=2    ;; # generic or unspecified error
           2)  vrt="$vrt$rc_failed" ; out=2    ;; # invalid or excess args
           3)  vrt="$vrt$rc_missed" ; out=2    ;; # unimplemented feature
           4)  vrt="$vrt$rc_failed" ; out=2    ;; # insufficient privilege
           5)  vrt="$vrt$rc_skipped"; out=2    ;; # program is not installed
           6)  vrt="$vrt$rc_unused" ; out=2    ;; # program is not configured
           7)  vrt="$vrt$rc_failed" ; out=2    ;; # program is not running
           *)  vrt="$vrt$rc_failed" ; out=2    ;; # unknown (maybe used in future)
           esac
           echo -$opt "$rc_save$vrt$rc_restore" 1>&$out
           # reset _rc_status to 0 after verbose case
           _rc_status=0 ;;
       -r) rc_reset ;;
       -s) echo -e "$rc_skipped" 1>&2 ; rc_failed 5 ;;
       -u) echo -e "$rc_unused"  1>&2 ; rc_failed 6 ;;
       *)  echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
       esac
   done
   return $_rc_status_ret

} else function rc_status () {

   rc_check
   _rc_status_ret=$_rc_status
   local i
   for i ; do
       case "$i" in
       -v|-v[1-9]|-v[1-9][0-9])
           local vrt=""
           local out=1
           local opt="en"
           test -n "${i#-v}" && vrt="$vrt${esc}[${i#-v}A" || opt="e"
           case "$_rc_status" in
           0)  vrt="$vrt$rc_done"  ;           ;; # success
           *)  vrt="$vrt$rc_failed"; out=2     ;; # failed
           esac
           echo -$opt "$rc_save$vrt$rc_restore" 1>&$out
           # reset _rc_status to 0 after verbose case
           _rc_status=0 ;;
       -r) rc_reset ;;
       -s) echo -e "$rc_skipped"  ; return 0 ;;
       -u) echo -e "$rc_unused"   ; return 0 ;;
       *)  echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
       esac
   done
   return $_rc_status_ret

} fi

function rc_failed () {

   rc_reset
   case "$1" in
   [0-7]) _rc_status=$1 ;;
   "")    _rc_status=1
   esac
   rc_check
   return $_rc_status

}

function rc_exit () {

   exit $_rc_status_all

}

function rc_confirm() {

   local timeout="30"
   local answer=""
   local ret=0
   case "$1" in
   -t) timeout=$2; shift 2 ;;
   esac
   local message="$@, (Y)es/(N)o/(C)ontinue? [y] "
   : ${REDIRECT:=/dev/tty}
   while true ; do
       read -t ${timeout} -n 1 -p "${message}" answer < $REDIRECT > $REDIRECT 2>&1
       case "$answer" in
       [yY]|"") ret=0; break ;;
       [nN])    ret=1; break ;;
       [cC])    ret=2; break ;;
       *)       echo; continue
       esac
   done
   echo
   return $ret

}

function rc_active () {

   local x
   for x in /etc/init.d/*.d/S[0-9][0-9]${1} ; do
       test -e $x || break
       return 0
   done
   return 1

}

function rc_splash() {

   return 0

} </code=ini>

Jetzt kann der Server installiert werden.

rpm -i --nodeps kerio-kms-6.4.1-3679.linux.i386.rpm

Ist dies geschafft kann man testen ob der Server gestartet werden kann

/etc/init.d/keriomailserver start

Er sollte jedoch melden, dass er die Konfiguration nicht finden kann, dazu geht man in /opt/kerio/mailserver und startet den Wizard

cd /opt/kerio/mailserver
./cfgwizard

Nachdem man diesen durchlaufen ist, ist der Server lauffähig und kann gestartet werden. Die Administration des Server findet über das Administrationstool von Kerio statt, welches von der Webseite zu beziehen ist.

Problembehandlung

Es kann passieren, dass der rpm-Paketmanager nicht installieren will

rpmdb: Berkeley DB library configured to support only private environments
rpmdb: Berkeley DB library configured to support only private environments
error: db4 error(22) from dbenv->open: Invalid argument
error: cannot open Packages index using db3 - Invalid argument (22)

Um das zu beheben müssen nur eine Datei eingefügt werden

  1. Erstellen des Verzeichnises /etc/rpm
mkdir /etc/rpm
  1. Erzeugen der Datei mit den folgenden Inhalt /etc/rpm/macros
echo "%__dbi_cdb  create cdb private mpool mp_mmapsize=16Mb mp_size=1Mb" >> /etc/rpm/macros

Weiterführende Links