Scalix Update 11.x: Unterschied zwischen den Versionen

Aus Neobikers Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
<pre>
<pre>
scx:~# cd /usr/src
scx:~# cd /usr/src
wget -c http://downloads.scalix.com/.community/..../scalix-11.x.0-GA-debian-intel.tgz
wget -c http://downloads.scalix.com/.community/11.4/scalix-11.4.0-GA-unsupported-debian-intel.bin
tar xvzf scalix-11.x.0-GA-debian-intel.tgz
sh ./scalix-11.4.0-GA-unsupported-debian-intel.bin


cd scalix-debian-11.4.0-GA/software/scalix_server
cd scalix-debian-11.4.0-GA/software/scalix_server


../../../scx-update.sh
/usr/src/scx-update.sh
</pre>
</pre>


Das Update-Script habe ich unter /usr/src liegen, da ich dort auch die verschiedenen scalix-sourcen installiert habe:
In Version 11.4.0 war (mal wieder) ein Deb-Paket (leicht) fehlerhaft, ich zeige hier beispielhaft, wie solche Fehler korrigiert werden können. Nach Fehlerbereinigung einfach das Paket entfernen und neu installieren.
<pre>
scx:/usr/src# cd scalix-debian-11.4.0-GA/software/scalix_server/
 
mkdir -p old new/DEBIAN
mv scalix-iconv-extras_1.2-1_i386.deb old
dpkg -x old/scalix-iconv-extras_1.2-1_i386.deb new
dpkg -e old/scalix-iconv-extras_1.2-1_i386.deb new/DEBIAN
 
vi new/DEBIAN/preinst
# ... Zeile 3 korrigieren
    if [ -n "$1" ]; then
# ...
 
vi new/DEBIAN/postrm
# ... Zeile 2 korrigieren
    if [ -z "$1" ]; then
# ...
 
# Jetzt das korrigierte Paket bauen
dpkg -b new scalix-iconv-extras_1.2-1_i386.deb
 
# Fertig :-)
dpkg -r scalix-iconv-extras
dpkg -i scalix-iconv-extras_1.2-1_i386.deb
</pre>
 
In 11.4.3 musste ich die Apache Konfiguration fixen, da Scalix die Konfigfiles umbenannt hat, aber das nicht im entsprechendem Setup-File aktualisiert hat.
<pre>scx:/etc/apache2/conf.d# grep 'ajp/' scal*
scalix-tomcat-connector.conf:#Include /etc/opt/scalix-tomcat/connector/ajp/instance-*.conf
scalix-tomcat-connector.conf:Include /etc/opt/scalix-tomcat/connector/ajp/app-*.conf
</pre>
 
Das Update-Script '''scx-update.sh''' habe ich unter '''/usr/src''' liegen, da ich dort auch die verschiedenen scalix-sourcen installiert habe:
<pre>scx:/usr/src# ls
<pre>scx:/usr/src# ls
scalix-11.3.0-U1-GA-unsupported-debian-intel.bin
scalix-11.3.0-U1-GA-unsupported-debian-intel.bin
Zeile 18: Zeile 51:
scalix-debian-11.4.0-GA/
scalix-debian-11.4.0-GA/
scx-install.sh*
scx-install.sh*
scx-reconfigure.sh*
scx-update.sh*
scx-update.sh*
</pre>
</pre>


Hier ist das Update-Script, das am Ende ein Script zur Rekonfiguration von Scalix aufruft, da die Konfig-Files beim Update überschrieben werden.
Hier ist das Scalix Update-Script.
<pre>
'''/usr/src/scx-update.sh'''
#!/bin/sh
<pre>#!/bin/sh
#
# Scalix 11.x update script
# Author: neobiker
# Version: $Id: scx-update.sh,v 1.6 2009/02/04 17:30:28 root Exp root $
 
scalix11version=11.4.6
dbpwd=""
ldappwd=""
 
# load and decompress scalix packages
scalix11downloadurl="http://downloads.scalix.com/.community/${scalix11version}/scalix-${scalix11version}-GA-unsupported-debian-intel.bin"
scalix11bin=`basename $scalix11downloadurl`
scalix11dir=scalix-debian-${scalix11version}-GA
 
usage ()
{
cat << EOF
Usage: $0 [-c|-i]  # update scalix packages with: dpkg -i -E <package>
 
Options are:
  -c    configure scalix, don't update/install packages
  -i    (re-)install scalix packages with: dpkg -i <package>


main_progs="server postgres tomcat-connector tomcat_"
EOF
web_apps="swa sac mobile platform"
exit 0
}


scx_pkg ()
# Initialise some settings
# get scalix pakage filenames: main_files, app_files, other_files
# define config files etc.
scx_initvars ()
{
{
     dpkg -I $1 | awk '/Package/ {print $2}'
  scx_main="server postgres"
  scx_apps="tomcat- tomcat_ swa sac mobile platform res sis"
 
  # Extract and install packages
  if [ ! -e $scalix11dir ]; then
 
     # Download Scalix 11
    if [ ! -e $scalix11bin ]; then
        cd $src_dir
        wget -N $scalix11downloadurl
    fi
 
    sh ./$scalix11bin
  fi
  cd $scalix11dir/software/scalix_server/
 
  if [ `ls -1 scalix-*.deb 2>/dev/null | wc -l` -gt 0 ] ; then
    for f in ${scx_main}; do
        main_files="${main_files} "`ls scalix-${f}*.deb`
        dropme="${dropme} | grep -v $f"
    done
 
    for f in ${scx_apps}; do
        app_files="${app_files} "`ls scalix-${f}*.deb`
        dropme="${dropme} | grep -v $f"
    done
 
    other_files=`eval "ls -1 scalix-*.deb ${dropme}"`
 
    pid=$$
    host=$(hostname)
    fqdn=$(hostname -f)
    short=${host:0:1}${host: -1:1}
    base=/var/opt/scalix/${short}
    config_files="${base}/webmail/swa.properties \
      ${base}/caa/scalix.res/config/ubermanager.properties \
      ${base}/res/config/res.properties \
      ${base}/platform/platform.properties \
      ${base}/mobile/mobile.properties \
      ${base}/sis/sis.properties"
  else
    echo 'Sorry, no scalix-\*.deb packages found.'
    echo "Please change to the directory which contains the files and try again."
    exit 1
  fi
}
}


reconfigure=`dirname $0`/scx-reconfigure.sh
# modify scalix deb packages (for lenny)
fix_scalix_debs ()
{
  deb=`/bin/ls -1 scalix-${1}*.deb`
  if  [ -e "$deb" ]; then
 
    [ -d old ] || mkdir old
    [ -d new_$1 ] && rm -rf new_$1
    [ -d new_$1/DEBIAN ] || mkdir -p new_$1/DEBIAN
    [ -e old/$deb ] || cp $deb old/$deb
 
    dpkg -x old/$deb new_$1
    dpkg -e old/$deb new_$1/DEBIAN
 
    case $1 in
        iconv)
            file=new_$1/DEBIAN/preinst
            cat $file | sed -e 's/ "\$1" -gt 1 / -n "\$1" /g' >$file.neu
            mv $file.neu $file
            chmod a+x $file


            file=new_$1/DEBIAN/postrm
            cat $file | sed -e 's/ "\$1" -eq 0 / -z "\$1" /g' >$file.neu
            mv $file.neu $file
            chmod a+x $file


# get actual scalix pakage filenames
            dpkg -b new_$1 $deb
# main_files, web_files, other_files
            ;;


for f in ${main_progs}; do
        server)
    main_files="${main_files} "`ls scalix-${f}*.deb`
            file=new_$1/DEBIAN/control
    dropme="${dropme} | grep -v $f"
            cat $file | sed -e 's/libsasl2,/libsasl2-2,/g' \
done
                -e 's/libmilter[^,]*,//g' \
for f in ${web_apps}; do
                -e 's/libstdc++2[^,]*,//g' >$file.neu
    web_files="${web_files} "`ls scalix-${f}*.deb`
            mv $file.neu $file
     dropme="${dropme} | grep -v $f"
 
done
            file=new_$1/DEBIAN/postinst
other_files=`eval "ls -1 scalix-*.deb ${dropme}"`
            cat $file | sed -e "s#OMLOGFILE='~/sys/install/log'#OMLOGFILE='~/sys/install/log';#g" >$file.neu
            mv $file.neu $file
            chmod a+x $file
 
            dpkg -b new_$1 $deb
            ;;
 
        postgres)
            file=new_$1/DEBIAN/control
            cat $file | sed -e 's/| postgresql-client-.\..//g' \
                -e 's/| postgresql-.\..//g' >$file.neu
            mv $file.neu $file
 
            dpkg -b new_$1 $deb
            ;;
 
        *)
            ;;
     esac
  fi
}
 
apache_config ()
{
  # Setup Apache
  file=/etc/apache2/conf.d/scalix-web-client.conf
  [ -e $file ] || ln -s /opt/scalix/global/httpd/scalix-web-client.conf $file


  cat << EOT > /etc/apache2/conf.d/scalix-access.conf
<Location />
        Allow from all
</Location>
EOT


# Now Update the scalix pakages
  file=/etc/opt/scalix-tomcat/connector/ajp/instance-$mnode.conf
# The Web applications will be removed first
  if [ ! -e $file ]; then
    echo 'Include /etc/opt/scalix-tomcat/connector/ajp/app-*.conf' > $file
  fi
 
  files="/etc/opt/scalix-tomcat/connector/ajp/*-$mnode*.conf \
      /etc/opt/scalix-tomcat/connector/jk/*-$mnode*.conf"
  for file in $files; do
    if [ -e $file ]; then
      sed -e 's;<VirtualHost;#<VirtualHost;g' \
          -e 's;</VirtualHost;#</VirtualHost;g' \
          $file > $file.neu
      mv $file.neu $file
    fi
  done
}
 
scx_update ()
{
    echo ""
    echo "Removing Scalix applications:"
    for file in ${app_files}; do
        pkgs="${pkgs} "`scx_pkgname ${file}`
    done
    echo "removing ${pkgs}"
    aptitude remove ${pkgs}


if [ -n "${main_files}" ]; then
     echo "Updating Scalix Server"
     echo "Updating Scalix Server"
     dpkg -i -E ${main_files}
 
     dpkg -i -E ${other_files}
     dpkg -i --force-overwrite $opt_update ${main_files}
     dpkg -i --force-overwrite $opt_update ${other_files}


     echo ""
     echo ""
     echo "Reinstalling Scalix Webapplications:"
     echo "Reinstalling Scalix applications:"
     for file in ${web_files}; do
     for file in ${app_files}; do
         pkg=`scx_pkg ${file}`
         pkg=`scx_pkgname ${file}`
         echo "updating ${pkg}: ${file}"
         echo "updating ${pkg}: ${file}"
        dpkg -r ${pkg}
         if ! dpkg -i --force-overwrite ${file} ; then
         if ! dpkg -i ${file} ; then
           echo ">>> Warning: dpkg returned an error. <<<"
           echo ">>> Warning: dpkg returned an error. <<<"
           echo ""
           echo ""
         fi
         fi
    done
    echo "Scalix Configuration files must be reconfigured."
}
# configure scalix
scx_configure ()
{
    if [ "x$dbpwd" == "x" ]; then
        echo .
        echo "Scalix configuration:"
        echo "---------------------"
        echo "Scalix DB-Password ? "
        read dbpwd
    fi
    tomcatport=80
    for file in ${config_files}; do
      sed -e "s;%LOCALDOMAIN%;$ldomain;g" \
          -e "s;%LOCALHOST%;$fqdn;g" \
          -e "s;%IMAPHOST%;$fqdn;g" \
          -e "s;%SMTPHOST%;$fqdn;g" \
          -e "s;%DBHOST%;$fqdn:5733;g" \
          -e "s;%DBPASSWD%;$dbpwd;g" \
          -e "s;%LDAPPORT%;389;g" \
          -e "s;http://%PLATFORMURL%:8080/api;http://$fqdn/api;g" \
          -e "s;%PLATFORMURL%;http://$fqdn/api;g" \
          -e "s;swa.platform.enabled=false;swa.platform.enabled=true;g" \
          -e "s;__SECURED_MODE__;false;g" \
          -e "s;ubermanager/__FQHN_HOST__@__KERBEROS_REALM__;;g" \
          -e "s;__KERBEROS_REALM__;;g" \
          -e "s;__FQHN_FOR_KDC_HOST__;;g" \
          -e "s;__FQHN_QUERY_SERVER_NAME__;$fqdn;g" \
          -e "s;__UBERMGR_USE_EXTERNAL_AUTH__;false;g" \
          -e "s;__UBERMGR_ALLOW_EXTERNAL_AUTH__;false;g" \
          -e "s;__UBERMGR_MAXLIST_SIZE__;100;g" \
          -e "s;__UBERMGR_MAIL_DOMAINS_LIST__;$ldomain;g" \
          -e "s;__UBERMGR_EXTERNAL_DOMAIN_AUTH_LIST__;;g" \
          -e "s;__CONFIGURED__;true;g" \
          -e "s;__FQHN_FOR_UBERMANAGER__;$fqdn;g" \
          -e "s;__TOMCAT_PORT__;$tomcatport;g" \
          -e "s;localhost;$fqdn;g" \
          -e "s;%INDEX-WHITELIST%;$fqdn;g" \
          -e "s;%SEARCH-WHITELIST%;$fqdn;g" \
          -e "s;%INDEXADMIN-WHITELIST%;$fqdn;g" \
          -e "s;%SIS-LANGUAGE%;German;g" \
          ${file} > ${file}.new
        mv $file.new $file
     done
     done


else
    # some (optional) GERMAN settings
     echo 'Sorry, no scalix-\*.deb pakages found.'
     for file in ${config_files}; do
     echo "Please change to the directory which contains the files and try again."
      sed -e "s;ubermanager.console.defaultCountry=US;ubermanager.console.defaultCountry=DE;g" \
    exit 1
          -e "s;ubermanager.console.defaultLanguage=AMERICAN;ubermanager.console.defaultLanguage=GERMAN;g" \
fi
          -e "s;swa.user.locale=en_US;swa.user.locale=de_DE;g" \
          -e "s;swa.user.preferredDateTimeFormat=1;swa.user.preferredDateTimeFormat=2;g" \
          -e "s;swa.user.dateSeparatorChar=/;swa.user.dateSeparatorChar=.;g" \
          -e "s;swa.user.weekStart=0;swa.user.weekStart=1;g" \
          -e "s;swa.user.defaultCalendarView=0;swa.user.defaultCalendarView=2;g" \
          ${file} > ${file}.new
        mv $file.new $file
    done
 
    # If SAC Login doesn't work, try this
    # Write Ldappassword to psdata
    file=${base}/caa/scalix.res/config/psdata
     if [ ! -e ${file} ]; then
        if [ "x$ldappwd" == "x" ]; then
          echo "Scalix LDAP-Password [DB-Password]? "
          read ldappwd
          [ -z "$ldappwd" ] && ldappwd=$dbpwd
        fi
        echo "${ldappwd}" > ${file}
        chown root:root ${file}
        chmod 400 ${file}
        ommodu sxqueryadmin -p $ldappwd
    fi
}
 
# backup scalix config files
scx_backup_config ()
{
    for f in ${config_files}; do
      mkdir -p `dirname ${base}/scalix-config-backup-${pid}${f}`
      cp ${f} ${base}/scalix-config-backup-${pid}${f}
      cp ${f} ${f}.bak
    done
}
 
# show differences to new config files
scx_diff_config ()
{
    for file in ${config_files}; do
 
      sed -e 's/#.*//g' \
          -e '/^$/ D' \
          ${file} | sort > ${file}.new
 
      sed -e 's/#.*//g' \
          -e '/^$/ D' \
          ${base}/scalix-config-backup-${pid}${file} | sort > ${file}.old
 
      if ! diff -q ${file}.old ${file}.new; then
          echo "-------------------------------------------------"
          echo "Check changes in ${file}:"
 
          diff ${file}.old ${file}.new
 
          echo ">>> Restore old Configfile [y] ?"
          read a


echo "We have to reconfigure the Scalix Configuration files."
          if [ -z "$a" -o "$a" == "y" -o "$a" == "Y" ]; then
${reconfigure}
            cp ${file} ${file}.new.update
            cp ${base}/scalix-config-backup-${pid}${file} ${file}
            echo "restored ${file} !!! <<<"
          fi
          echo "-------------------------------------------------"
          echo ""
      fi


echo "Scalix Config-files are reconfigured."
    done
</pre>
 
    echo ">>> Remove temp. Backupfiles (${base}/scalix-config-backup-${pid}) [y] ?"
    read a


Dieses Skript rekonfiguriert Scalix nach Änderungen:
    if [ -z "$a" -o "$a" == "y" -o "$a" == "Y" ]; then
<pre>
          rm -rf ${base}/scalix-config-backup-${pid}
#!/bin/sh
          echo "${base}/scalix-config-backup-${pid} deleted"
#
    fi
}


echo "Scalix Password ? "
scx_tomcat_restart ()
read geheim
{
    echo "Scalix tomcat restart..."
    /etc/init.d/apache2 restart
    /etc/init.d/scalix-tomcat restart
}


dbpwd=$geheim
scx_restart ()
ldappwd=$geheim
{
    echo "Scalix restart..."
    for f in /etc/rc1.d/K*scalix* /etc/rc1.d/K*apache2; do $f stop 2>/dev/null; done
    for f in /etc/rc2.d/S*apache2 /etc/rc2.d/S*scalix*; do $f start; done
    echo "Scalix restarted."
}


tomcatport=80
# get pakage name (used by dpkg -r <package>)
ldomain=$(hostname -d)
scx_pkgname ()
host=$(hostname)
{
fqdn=$(hostname -f)
    dpkg -I $1 | awk '/Package/ {print $2}'
short=${host:0:1}${host: -1:1}
}


base=/var/opt/scalix/${short}
# set script options
files="$base/webmail/swa.properties \
opt_update="-E"
      $base/caa/scalix.res/config/ubermanager.properties \
      $base/res/config/res.properties \
      $base/platform/platform.properties \
      $base/mobile/mobile.properties \
      $base/sis/sis.properties"


for file in $files; do
while getopts "chi" option
  sed -e "s;%LOCALDOMAIN%;$ldomain;g" \
do
    -e "s;%LOCALHOST%;$fqdn;g" \
        case $option in
    -e "s;%IMAPHOST%;$fqdn;g" \
        c)  opt_configure=1
    -e "s;%SMTPHOST%;$fqdn;g" \
            ;;
    -e "s;%DBHOST%;$fqdn:5733;g" \
        h)  usage
    -e "s;%DBPASSWD%;$dbpwd;g" \
            ;;
    -e "s;%LDAPPORT%;389;g" \
        i)  opt_update=""
    -e "s;http://%PLATFORMURL%:8080/api;http://$fqdn/api;g" \
            ;;
    -e "s;%PLATFORMURL%;http://$fqdn/api;g" \
        *)  usage
    -e "s;swa.platform.enabled=false;swa.platform.enabled=true;g" \
            ;;
    -e "s;__SECURED_MODE__;false;g" \
        esac
    -e "s;ubermanager/__FQHN_HOST__@__KERBEROS_REALM__;;g" \
    -e "s;__KERBEROS_REALM__;;g" \
    -e "s;__FQHN_FOR_KDC_HOST__;;g" \
    -e "s;__FQHN_QUERY_SERVER_NAME__;$fqdn;g" \
    -e "s;__UBERMGR_USE_EXTERNAL_AUTH__;false;g" \
    -e "s;__UBERMGR_ALLOW_EXTERNAL_AUTH__;false;g" \
    -e "s;__UBERMGR_MAXLIST_SIZE__;100;g" \
    -e "s;__UBERMGR_MAIL_DOMAINS_LIST__;$ldomain;g" \
    -e "s;__UBERMGR_EXTERNAL_DOMAIN_AUTH_LIST__;;g" \
    -e "s;__CONFIGURED__;true;g" \
    -e "s;__FQHN_FOR_UBERMANAGER__;$fqdn;g" \
    -e "s;__TOMCAT_PORT__;$tomcatport;g" \
    -e "s;localhost;$fqdn;g" \
    -e "s;%SIS-LANGUAGE%;German;g" \
    -e "s;%INDEX-WHITELIST%;$fqdn;g" \
    -e "s;%SEARCH-WHITELIST%;$fqdn;g" \
    $file > $file.neu
  mv $file.neu $file
done
done


# If SAC Login doesn't work, try this
# Update scalix pakages:
# Write Ldappassword to psdata
# backup config-files
if [ ! -e ${base}/caa/scalix.res/config/psdata ]; then
# update scalix pakages: Web applications need 'remove' first
    echo "$ldappwd" > ${base}/caa/scalix.res/config/psdata
# reconfigure scalix
    chown root:root ${base}/caa/scalix.res/config/psdata
    chmod 400 ${base}/caa/scalix.res/config/psdata
fi


for f in /etc/rc1.d/K*scalix*; do $f stop; done
scx_initvars
for f in /etc/rc2.d/S*scalix*; do $f start; done
scx_backup_config
 
fix_scalix_debs iconv
fix_scalix_debs server
fix_scalix_debs postgres
 
[ -z "$opt_configure" ] && scx_update
scx_configure
apache_config
 
scx_diff_config
#scx_tomcat_restart
scx_restart
</pre>
</pre>
Das Skript konfiguriert Scalix, z.B. nach einem update, da die Konfig-Files beim Update überschrieben werden.
Siehe auch mein (Re-)[http://www.neobiker.de/wiki/index.php?title=Scalix_mit_Debian_Etch#Installation Installationsskript für Scalix].

Aktuelle Version vom 14. Februar 2010, 17:25 Uhr

Scalix Update

Scalix Sourcen laden und updaten.

scx:~# cd /usr/src
wget -c http://downloads.scalix.com/.community/11.4/scalix-11.4.0-GA-unsupported-debian-intel.bin
sh ./scalix-11.4.0-GA-unsupported-debian-intel.bin

cd scalix-debian-11.4.0-GA/software/scalix_server

/usr/src/scx-update.sh

In Version 11.4.0 war (mal wieder) ein Deb-Paket (leicht) fehlerhaft, ich zeige hier beispielhaft, wie solche Fehler korrigiert werden können. Nach Fehlerbereinigung einfach das Paket entfernen und neu installieren.

scx:/usr/src# cd scalix-debian-11.4.0-GA/software/scalix_server/

mkdir -p old new/DEBIAN
mv scalix-iconv-extras_1.2-1_i386.deb old
dpkg -x old/scalix-iconv-extras_1.2-1_i386.deb new
dpkg -e old/scalix-iconv-extras_1.2-1_i386.deb new/DEBIAN

vi new/DEBIAN/preinst
# ... Zeile 3 korrigieren
    if [ -n "$1" ]; then
# ...

vi new/DEBIAN/postrm
# ... Zeile 2 korrigieren
    if [ -z "$1" ]; then
# ...

# Jetzt das korrigierte Paket bauen
dpkg -b new scalix-iconv-extras_1.2-1_i386.deb 

# Fertig :-)
dpkg -r scalix-iconv-extras
dpkg -i scalix-iconv-extras_1.2-1_i386.deb

In 11.4.3 musste ich die Apache Konfiguration fixen, da Scalix die Konfigfiles umbenannt hat, aber das nicht im entsprechendem Setup-File aktualisiert hat.

scx:/etc/apache2/conf.d# grep 'ajp/' scal*
scalix-tomcat-connector.conf:#Include /etc/opt/scalix-tomcat/connector/ajp/instance-*.conf
scalix-tomcat-connector.conf:Include /etc/opt/scalix-tomcat/connector/ajp/app-*.conf

Das Update-Script scx-update.sh habe ich unter /usr/src liegen, da ich dort auch die verschiedenen scalix-sourcen installiert habe:

scx:/usr/src# ls
scalix-11.3.0-U1-GA-unsupported-debian-intel.bin
scalix-11.4.0-GA-unsupported-debian-intel.bin
scalix-debian-11.3.0-GA/
scalix-debian-11.4.0-GA/
scx-install.sh*
scx-update.sh*

Hier ist das Scalix Update-Script. /usr/src/scx-update.sh

#!/bin/sh
# Scalix 11.x update script
# Author: neobiker
# Version: $Id: scx-update.sh,v 1.6 2009/02/04 17:30:28 root Exp root $

scalix11version=11.4.6
dbpwd=""
ldappwd=""

# load and decompress scalix packages
scalix11downloadurl="http://downloads.scalix.com/.community/${scalix11version}/scalix-${scalix11version}-GA-unsupported-debian-intel.bin"
scalix11bin=`basename $scalix11downloadurl`
scalix11dir=scalix-debian-${scalix11version}-GA

usage ()
{
cat << EOF
Usage: $0 [-c|-i]  # update scalix packages with: dpkg -i -E <package>

Options are:
  -c    configure scalix, don't update/install packages
  -i    (re-)install scalix packages with: dpkg -i <package>

EOF
exit 0
}

# Initialise some settings
# get scalix pakage filenames: main_files, app_files, other_files
# define config files etc.
scx_initvars ()
{
  scx_main="server postgres"
  scx_apps="tomcat- tomcat_ swa sac mobile platform res sis"

  # Extract and install packages
  if [ ! -e $scalix11dir ]; then

    # Download Scalix 11
    if [ ! -e $scalix11bin ]; then
        cd $src_dir
        wget -N $scalix11downloadurl
    fi

    sh ./$scalix11bin
  fi
  cd $scalix11dir/software/scalix_server/

  if [ `ls -1 scalix-*.deb 2>/dev/null | wc -l` -gt 0 ] ; then
    for f in ${scx_main}; do
        main_files="${main_files} "`ls scalix-${f}*.deb`
        dropme="${dropme} | grep -v $f"
    done

    for f in ${scx_apps}; do
        app_files="${app_files} "`ls scalix-${f}*.deb`
        dropme="${dropme} | grep -v $f"
    done

    other_files=`eval "ls -1 scalix-*.deb ${dropme}"`

    pid=$$
    host=$(hostname)
    fqdn=$(hostname -f)
    short=${host:0:1}${host: -1:1}
    base=/var/opt/scalix/${short}
    config_files="${base}/webmail/swa.properties \
       ${base}/caa/scalix.res/config/ubermanager.properties \
       ${base}/res/config/res.properties \
       ${base}/platform/platform.properties \
       ${base}/mobile/mobile.properties \
       ${base}/sis/sis.properties"
  else
    echo 'Sorry, no scalix-\*.deb packages found.'
    echo "Please change to the directory which contains the files and try again."
    exit 1
  fi
}

# modify scalix deb packages (for lenny)
fix_scalix_debs ()
{
  deb=`/bin/ls -1 scalix-${1}*.deb`
  if  [ -e "$deb" ]; then

    [ -d old ] || mkdir old
    [ -d new_$1 ] && rm -rf new_$1
    [ -d new_$1/DEBIAN ] || mkdir -p new_$1/DEBIAN
    [ -e old/$deb ] || cp $deb old/$deb

    dpkg -x old/$deb new_$1
    dpkg -e old/$deb new_$1/DEBIAN

    case $1 in
        iconv)
            file=new_$1/DEBIAN/preinst
            cat $file | sed -e 's/ "\$1" -gt 1 / -n "\$1" /g' >$file.neu
            mv $file.neu $file
            chmod a+x $file

            file=new_$1/DEBIAN/postrm
            cat $file | sed -e 's/ "\$1" -eq 0 / -z "\$1" /g' >$file.neu
            mv $file.neu $file
            chmod a+x $file

            dpkg -b new_$1 $deb
            ;;

        server)
            file=new_$1/DEBIAN/control
            cat $file | sed -e 's/libsasl2,/libsasl2-2,/g' \
                -e 's/libmilter[^,]*,//g' \
                -e 's/libstdc++2[^,]*,//g' >$file.neu
            mv $file.neu $file

            file=new_$1/DEBIAN/postinst
            cat $file | sed -e "s#OMLOGFILE='~/sys/install/log'#OMLOGFILE='~/sys/install/log';#g" >$file.neu
            mv $file.neu $file
            chmod a+x $file

            dpkg -b new_$1 $deb
            ;;

        postgres)
            file=new_$1/DEBIAN/control
            cat $file | sed -e 's/| postgresql-client-.\..//g' \
                -e 's/| postgresql-.\..//g' >$file.neu
            mv $file.neu $file

            dpkg -b new_$1 $deb
            ;;

        *)
            ;;
    esac
  fi
}

apache_config ()
{
  # Setup Apache
  file=/etc/apache2/conf.d/scalix-web-client.conf
  [ -e $file ] || ln -s /opt/scalix/global/httpd/scalix-web-client.conf $file

  cat << EOT > /etc/apache2/conf.d/scalix-access.conf
<Location />
        Allow from all
</Location>
EOT

  file=/etc/opt/scalix-tomcat/connector/ajp/instance-$mnode.conf
  if [ ! -e $file ]; then
    echo 'Include /etc/opt/scalix-tomcat/connector/ajp/app-*.conf' > $file
  fi

  files="/etc/opt/scalix-tomcat/connector/ajp/*-$mnode*.conf \
       /etc/opt/scalix-tomcat/connector/jk/*-$mnode*.conf"
  for file in $files; do
    if [ -e $file ]; then
      sed -e 's;<VirtualHost;#<VirtualHost;g' \
          -e 's;</VirtualHost;#</VirtualHost;g' \
          $file > $file.neu
      mv $file.neu $file
    fi
  done
}

scx_update ()
{
    echo ""
    echo "Removing Scalix applications:"
    for file in ${app_files}; do
        pkgs="${pkgs} "`scx_pkgname ${file}`
    done
    echo "removing ${pkgs}"
    aptitude remove ${pkgs}

    echo "Updating Scalix Server"

    dpkg -i --force-overwrite $opt_update ${main_files}
    dpkg -i --force-overwrite $opt_update ${other_files}

    echo ""
    echo "Reinstalling Scalix applications:"
    for file in ${app_files}; do
        pkg=`scx_pkgname ${file}`
        echo "updating ${pkg}: ${file}"
        if ! dpkg -i --force-overwrite ${file} ; then
          echo ">>> Warning: dpkg returned an error. <<<"
          echo ""
        fi
    done
    echo "Scalix Configuration files must be reconfigured."
}

# configure scalix
scx_configure ()
{
    if [ "x$dbpwd" == "x" ]; then
        echo .
        echo "Scalix configuration:"
        echo "---------------------"
        echo "Scalix DB-Password ? "
        read dbpwd
    fi

    tomcatport=80

    for file in ${config_files}; do
      sed -e "s;%LOCALDOMAIN%;$ldomain;g" \
          -e "s;%LOCALHOST%;$fqdn;g" \
          -e "s;%IMAPHOST%;$fqdn;g" \
          -e "s;%SMTPHOST%;$fqdn;g" \
          -e "s;%DBHOST%;$fqdn:5733;g" \
          -e "s;%DBPASSWD%;$dbpwd;g" \
          -e "s;%LDAPPORT%;389;g" \
          -e "s;http://%PLATFORMURL%:8080/api;http://$fqdn/api;g" \
          -e "s;%PLATFORMURL%;http://$fqdn/api;g" \
          -e "s;swa.platform.enabled=false;swa.platform.enabled=true;g" \
          -e "s;__SECURED_MODE__;false;g" \
          -e "s;ubermanager/__FQHN_HOST__@__KERBEROS_REALM__;;g" \
          -e "s;__KERBEROS_REALM__;;g" \
          -e "s;__FQHN_FOR_KDC_HOST__;;g" \
          -e "s;__FQHN_QUERY_SERVER_NAME__;$fqdn;g" \
          -e "s;__UBERMGR_USE_EXTERNAL_AUTH__;false;g" \
          -e "s;__UBERMGR_ALLOW_EXTERNAL_AUTH__;false;g" \
          -e "s;__UBERMGR_MAXLIST_SIZE__;100;g" \
          -e "s;__UBERMGR_MAIL_DOMAINS_LIST__;$ldomain;g" \
          -e "s;__UBERMGR_EXTERNAL_DOMAIN_AUTH_LIST__;;g" \
          -e "s;__CONFIGURED__;true;g" \
          -e "s;__FQHN_FOR_UBERMANAGER__;$fqdn;g" \
          -e "s;__TOMCAT_PORT__;$tomcatport;g" \
          -e "s;localhost;$fqdn;g" \
          -e "s;%INDEX-WHITELIST%;$fqdn;g" \
          -e "s;%SEARCH-WHITELIST%;$fqdn;g" \
          -e "s;%INDEXADMIN-WHITELIST%;$fqdn;g" \
          -e "s;%SIS-LANGUAGE%;German;g" \
          ${file} > ${file}.new
        mv $file.new $file
    done

    # some (optional) GERMAN settings
    for file in ${config_files}; do
      sed -e "s;ubermanager.console.defaultCountry=US;ubermanager.console.defaultCountry=DE;g" \
          -e "s;ubermanager.console.defaultLanguage=AMERICAN;ubermanager.console.defaultLanguage=GERMAN;g" \
          -e "s;swa.user.locale=en_US;swa.user.locale=de_DE;g" \
          -e "s;swa.user.preferredDateTimeFormat=1;swa.user.preferredDateTimeFormat=2;g" \
          -e "s;swa.user.dateSeparatorChar=/;swa.user.dateSeparatorChar=.;g" \
          -e "s;swa.user.weekStart=0;swa.user.weekStart=1;g" \
          -e "s;swa.user.defaultCalendarView=0;swa.user.defaultCalendarView=2;g" \
          ${file} > ${file}.new
        mv $file.new $file
    done

    # If SAC Login doesn't work, try this
    # Write Ldappassword to psdata
    file=${base}/caa/scalix.res/config/psdata
    if [ ! -e ${file} ]; then
        if [ "x$ldappwd" == "x" ]; then
          echo "Scalix LDAP-Password [DB-Password]? "
          read ldappwd
          [ -z "$ldappwd" ] && ldappwd=$dbpwd
        fi
        echo "${ldappwd}" > ${file}
        chown root:root ${file}
        chmod 400 ${file}
        ommodu sxqueryadmin -p $ldappwd
    fi
}

# backup scalix config files
scx_backup_config ()
{
    for f in ${config_files}; do
       mkdir -p `dirname ${base}/scalix-config-backup-${pid}${f}`
       cp ${f} ${base}/scalix-config-backup-${pid}${f}
       cp ${f} ${f}.bak
    done
}

# show differences to new config files
scx_diff_config ()
{
    for file in ${config_files}; do

      sed -e 's/#.*//g' \
          -e '/^$/ D' \
          ${file} | sort > ${file}.new

      sed -e 's/#.*//g' \
          -e '/^$/ D' \
          ${base}/scalix-config-backup-${pid}${file} | sort > ${file}.old

      if ! diff -q ${file}.old ${file}.new; then
          echo "-------------------------------------------------"
          echo "Check changes in ${file}:"

          diff ${file}.old ${file}.new

          echo ">>> Restore old Configfile [y] ?"
          read a

          if [ -z "$a" -o "$a" == "y" -o "$a" == "Y" ]; then
            cp ${file} ${file}.new.update
            cp ${base}/scalix-config-backup-${pid}${file} ${file}
            echo "restored ${file} !!! <<<"
          fi
          echo "-------------------------------------------------"
          echo ""
      fi

    done

    echo ">>> Remove temp. Backupfiles (${base}/scalix-config-backup-${pid}) [y] ?"
    read a

    if [ -z "$a" -o "$a" == "y" -o "$a" == "Y" ]; then
          rm -rf ${base}/scalix-config-backup-${pid}
          echo "${base}/scalix-config-backup-${pid} deleted"
    fi
}

scx_tomcat_restart ()
{
    echo "Scalix tomcat restart..."
    /etc/init.d/apache2 restart
    /etc/init.d/scalix-tomcat restart
}

scx_restart ()
{
    echo "Scalix restart..."
    for f in /etc/rc1.d/K*scalix* /etc/rc1.d/K*apache2; do $f stop 2>/dev/null; done
    for f in /etc/rc2.d/S*apache2 /etc/rc2.d/S*scalix*; do $f start; done
    echo "Scalix restarted."
}

# get pakage name (used by dpkg -r <package>)
scx_pkgname ()
{
    dpkg -I $1 | awk '/Package/ {print $2}'
}

# set script options
opt_update="-E"

while getopts "chi" option
do
        case $option in
        c)   opt_configure=1
             ;;
        h)   usage
             ;;
        i)   opt_update=""
             ;;
        *)   usage
             ;;
        esac
done

# Update scalix pakages:
# backup config-files
# update scalix pakages: Web applications need 'remove' first
# reconfigure scalix

scx_initvars
scx_backup_config

fix_scalix_debs iconv
fix_scalix_debs server
fix_scalix_debs postgres

[ -z "$opt_configure" ] && scx_update
scx_configure
apache_config

scx_diff_config
#scx_tomcat_restart
scx_restart

Das Skript konfiguriert Scalix, z.B. nach einem update, da die Konfig-Files beim Update überschrieben werden.

Siehe auch mein (Re-)Installationsskript für Scalix.