Kerio Mailserver (Gentoo)
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>
- /etc/rc.status
- vim: syntax=sh
- Definition of boot script return messages
- The bootscripts should use the variables rc_done and rc_failed to
- report whether they failed or succeeded. See /etc/init.d/skeleton for
- an example how the shell functions rc_status and rc_reset are used.
- These functions make use of the variables rc_done and rc_failed;
- rc_done_up and rc_failed_up are the same as rc_done and rc_failed
- but contain a terminal code to move up one line before the output
- of the actual string. (This is particularly useful when the script
- starts a daemon which produces user output with a newline character)
- The variable rc_reset is used by the master resource control script
- /etc/init.d/rc to turn off all attributes and switch to the standard
- character set.
- \033 ascii ESCape
- \033[<NUM>G move to column <NUM> (linux console, xterm, not vt100)
- \033[<NUM>C move <NUM> columns forward but only upto last column
- \033[<NUM>D move <NUM> columns backward but only upto first column
- \033[<NUM>A move <NUM> rows up
- \033[<NUM>B move <NUM> rows down
- \033[1m switch on bold
- \033[31m switch on red
- \033[32m switch on green
- \033[33m switch on yellow
- \033[m switch off color/bold
- \017 exit alternate mode (xterm, vt100, linux console)
- \033[10m exit alternate mode (linux console)
- \015 carriage return (without newline)
- Do _not_ be fooled by non POSIX locale
LC_ALL=POSIX export LC_ALL
- 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
- 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
- Erstellen des Verzeichnises /etc/rpm
mkdir /etc/rpm
- 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