Par exemple je souhaite installer Imp Horde 5 sous Ubuntu, mon serveur dispose d'un disque de bonne capacité mais d'une distribution trop ancienne. La solution que j'ai mise en œuvre est d'installer une distribution stable mais plus récente dans un environnement confiné chroot dans un sous-répertoire qui va contenir une distribution minimale.

Installation de schroot

Exécuter la commande :
sudo apt-get install schroot debootstrap

Installation d'Ubuntu schrooté

Créer un répertoire :
sudo mkdir /home/schroot-horde

Comme la nouvelle distribution n'est pas déclarée il faut ajouter un lien symbolique :
sudo ln -s gutsy /usr/share/debootstrap/scripts/lucid

Téléchargement et installation :
sudo debootstrap --arch i386 lucid /home/schroot-horde http://fr.archive.ubuntu.com/ubuntu/
Installation Ubuntu Lucid avec debootstrap(...)Installation Ubuntu Lucid avec debootstrap (fin)

Recopie des utilisateurs et nom de machine :
sudo cp /etc/passwd /etc/group /etc/sudoers /etc/hosts /etc/hostname /home/schroot-horde/etc

Ajout à la fin du fichier /etc/schroot/schroot.conf des lignes suivantes :
[horde]
description=Serveur Webmail Horde 4
location=/home/schroot-horde
users=thierry
root-groups=root
root-users=root
type=directory
aliases=default
run-setup-scripts=true
run-exec-scripts=true

Il faut se connecter à l'environnement schroot :
schroot -c horde

Contourne le problème de fonctionnement d'initctl en schroot :
sudo dpkg-divert --local --rename --add /sbin/initctl
sudo ln -s /bin/true /sbin/initctl

Installation de quelques outils :
sudo apt-get install vim

Mise à jour des repository exécuter la commande suivante :
sudo vim /etc/apt/sources.list
Remplacer par les lignes suivantes :
deb http://fr.archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu lucid-security main restricted universe multiverse

Mise à jour de la liste des paquets et mise à jour des paquets :
sudo apt-get update
sudo apt-get dist-upgrade

(voir si nécessaire sudo apt-key update)

Définition des langues et paramètres de localisation

Créer un fichier /var/lib/locales/supported.d/fr avec les langues et jeux de caractères (en UTF8 et ISO8859-1 pour Horde) :
fr_FR.UTF-8 UTF-8
en_US.UTF-8 UTF-8
fr_FR.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1

Générer les paramètres correspondants avec la commande : sudo locale-gen.

Installation de Horde Groupware Webmail Edition

Il faut se connecter à l'environnement schroot :
schroot -c horde

Puis installer Apache, PHP et Pear :
sudo apt-get install apache2 php5 php-pear php5-dev

Puis installer les modules complémentaires de PHP :
sudo apt-get install php5-gd php5-geoip php5-imagick php5-mysql

Ajouter à la fin du fichier .profile une ligne :
export PHP_PEAR_SYSCONF_DIR=/etc/pear

Se déconnecter puis relancer schroot.

Enregistrer le canal Pear de Horde :
sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf channel-discover pear.horde.org

Préparation de l'installation de Horde :
sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf install horde/horde_role
sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf run-scripts horde/horde_role

Saisir l'emplacement où installer horde (par exemple /var/www/horde).

Installation des modules complémentaires :
sudo apt-get install php5-xmlrpc php5-tidy php5-curl libidn11-dev libssh2-1-dev libimage-exiftool-perl

Installation de Horde avec toutes les dépendances y compris les dépendances binaires :
sudo pear -c $PHP_PEAR_SYSCONF_DIR/pear.conf install -a horde/webmail

Installation des dépendances non stables :
sudo pear install -a SOAP-0.12.0 Date_Holidays-0.21.5 Text_CAPTCHA-0.4.3 XML_Serializer-0.20.2 Numbers_Words-0.16.2
sudo pecl install idn-0.2.0 ssh2-0.11.3

Ajouter dans php.ini (/etc/php5/apache2/php.ini) les lignes suivantes :
extension=lzf.so
extension=memcache.so

extension=idn.so
extension=ssh2.so

Configuration d'Apache schroot

Modifier le fichier ports.conf (sudo vim /etc/apache2/ports.conf) :
NameVirtualHost *:8080
Listen localhost:8080

Modifier le fichier sites-available/default (sudo vim /etc/apache2/sites-available/default) :
<VirtualHost *:8080>
   ServerAdmin webmaster@monsite.com
   DocumentRoot /var/www/horde
   <Directory />
      Options Indexes FollowSymLinks MultiViews
      AllowOverride None
      Order allow,deny
      allow from all
   </Directory>
   ErrorLog /var/log/apache2/error.log
   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn
   CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Démarrer le service manuellement avec la commande sudo /etc/init.d/apache2 start.

Configuration d'Apache sur l'installation principale

Depuis Webmin créer un nouveau serveur virtuel :
Création du serveur virtuel webmail4

Pour ce serveur virtuel modifier le fichier de directives en ajoutant :
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Proxy *>
allow from all
</Proxy>

Configuration de Horde

Sur l'installation principale créer une base de données Mysql avec son utilisateur et les droits Select, Insert, Update, Delete, Create, Drop, Index et Alter.

Exécuter la commande sudo webmail-install puis répondre aux questions suivantes :

  • What database backend should we use? mysqli (le nom du pilote Mysql)
  • Username to connect to the database as* [] horde (le nom de l'utilisateur créé dans Mysql pour accéder à la nouvelle base de données)
  • Password to connect with horde (le mot de passe de l'utilisateur Mysql)
  • How should we connect to the database?
        (unix) UNIX Sockets
        (tcp) TCP/IP
    Type your choice [unix]: tcp (la base de données est sur l'installation principale de Linux donc il faut utiliser tcp)
  • Database server/host* [] localhost (Mysql est installé sur le serveur local)
  • Port the DB is running on, if non-standard [3306] (pour le port Mysql on laisse la valeur par défaut)
  • Database name to use* [] horde (le nom de la base de données créée dans Mysql)
  • Internally used charset* [utf-8] (lors de la création de la base de données Mysql j'ai mis cet encodage par défaut)
  • Use SSL to connect to the server?
        (1) Yes
        (0) No
    Type your choice [0]: (comme il s'agit d'une configuration locale la connexion n'est pas sécurisée)
  • Certification Authority to use for SSL connections [] (il n'y a pas de certificat)
  • Split reads to a different server?
        (false) Disabled
        (true) Enabled

    Type your choice [false]: (il n'y a qu'un seul serveur)
  • Specify an existing mail user who you want to give administrator
    permissions (optional): thierry (nom de mon utilisateur qui est administrateur)
Dans le fichier de configuration de horde (/var/www/horde/config/conf.php) il faut modifier les lignes suivantes :
$conf['use_ssl'] = 0;
$conf['server']['name'] = 'webmail4.test2.martin-thierry.nom.fr';
$conf['cookie']['domain'] = $conf['server']['name'];

Depuis mon serveur Horde de test je vais utiliser mon serveur mail Internet réel et non un serveur de test. Dans le fichier de configuration du serveur mail de imp (/var/www/horde/imp/config/backends.php) il faut laisser uniquement la configuration du serveur imap (les autres exemples peuvent être commentés ou supprimés) :
$servers['imap'] = array(
    // ENABLED by default
    'disabled' => false,
    'name' => 'Mon serveur IMAP',
    'hostspec' => 'mondomaine.fr',
    'hordeauth' => false,
    'protocol' => 'imap',
    'port' => 993,
    // Plaintext logins are disabled by default on IMAP servers (see RFC 3501
    // [6.2.3])
    'secure' => 'ssl',
    'maildomain' => '',
    // 'smtphost' => 'smtp.example.com',
    // 'smtpport' => 25,
    'cache' => false,
);

Ensuite la configuration peut se poursuivre via le navigateur web à l'adresse du serveur web (dans mon cas http://webmail4.test2.martin-thierry.nom.fr/).

Dans la fenêtre de connexion indiquer l'identifiant de l'administrateur et son mot de passe :
Connexion au serveur Horde

Cliquer sur le menu Administration puis Configuration :
Horde menu Administration
Horde menu Administration/Configuration

Cliquer sur Horde puis Mailer et sélectionner le type Use a SMTP server qui est par défaut sur localhost ce qui convient :
Configuration Horde/Mailer

Puis dans Image Manipulation pour Image Manipulation Settings sélectionner The PECL Imagick Library et pour Image Metadata Driver Settings sélectionner Exiftool :
Configuration Horde/Image Manipulation

Dans Menu supprimer la possibilité de rapporter un problème en répondant Never a Should we display problem reporting links in the menu :
Configuration Horde/Menu

Dans ActiveSync à la question Enable ActiveSync server sélectionner Disabled pour désactiver cette fonction :
Configuration Horde/ActiveSync

Ensuite cliquer sur Générer la configuration de Horde et copier/coller le contenu dans le fichier config/conf.php (avec sudo vim /var/www/horde/config/conf.php).

Test de la configuration de Horde

Aller dans la configuration de Horde (comme dans le paragraphe précédent) et dans l'onglet General décocher Disable the test script :
Configuration Horde/Test

Puis générer la configuration comme dans le paragraphe précédent.

Configuration de Imp (Courrier)

Comme pour configurer Horde dans le menu Administration/Configuration cliquer sur Courrier (imp) puis dans l'onglet User Capabilities and Constraints cocher select sentmail folder afin de permettre à l'utilisateur de choisir dans quel dossier placer le message envoyé :
Configuration Imp/User Capabilities and Contraints

Comme pour la configuration de Horde cliquer sur Générer la configuration de Courrier et copier/coller le contenu dans le fichier imp/config/conf.php (avec sudo vim /var/www/horde/imp/config/conf.php).

Ensuite pour voir les emails html il faut faire un réglage directement dans le fichier mime_drivers.php (sudo vim /var/www/horde/imp/config/mime_drivers.php) et modifier inline à true dans la partie suivante :
    'html' => array(
        /* NOTE: Inline HTML display is turned OFF by default. */
        'inline' => true,

Configuration de Turba (Carnet d'adresses)

Comme pour configurer Horde dans le menu Administration/Configuration cliquer sur Carnet d'adresses (turba) puis sélectionner les applications qui doivent apparaître dans le menu :
Configuration Turba

Comme pour la configuration de Horde cliquer sur Générer la configuration de Carnet d'adresses et copier/coller le contenu dans le fichier turba/config/conf.php (avec sudo vim /var/www/horde/turba/config/conf.php).

Configuration de Mnemo (Notes)

Comme pour configurer Horde dans le menu Administration/Configuration cliquer sur Notes (mnemo) puis sélectionner les applications qui doivent apparaître dans le menu :
Configuration Mnemo

Comme pour la configuration de Horde cliquer sur Générer la configuration de Notes et copier/coller le contenu dans le fichier mnemo/config/conf.php (avec sudo vim /var/www/horde/mnemo/config/conf.php).

Configuration de Nag (Tâches)

Comme pour configurer Horde dans le menu Administration/Configuration cliquer sur Tâches (nag) puis sélectionner les applications qui doivent apparaître dans le menu :
Configuration Tâches

Comme pour la configuration de Horde cliquer sur Générer la configuration de Tâches et copier/coller le contenu dans le fichier nag/config/conf.php (avec sudo vim /var/www/horde/nag/config/conf.php).

Démarrage automatique de l'Apache schroot

Depuis l'environnement principal créer le script de démarrage schroot-horde suivant (sudo vim /etc/init.d/schroot-horde) :
#!/bin/bash

#******************************************************************************
# Fichier       : /etc/init.d/schroot-horde
#
# Auteur        : Thierry MARTIN
#
# Date création : dimanche 9 octobre 2011, 20:49:51
# Description   : Démarrer automatiquement schroot et le service Apache pour le
#                 serveur Horde
#******************************************************************************

. /lib/lsb/init-functions

NAMESCRIPT=`readlink $0`
if [ -z $NAMESCRIPT ]; then
   NAMESCRIPT=$0
fi
NAMESCRIPT=`basename $0`

IDFILENAME=/var/run/$NAMESCRIPT.uid

do_start() {

   if [ ! -e "$IDFILENAME" ]; then

      SCHROOT_ID=$(schroot -b -c horde)

      schroot -r -c $SCHROOT_ID /etc/init.d/apache2 start

      echo $SCHROOT_ID > $IDFILENAME

   elif [ -e "$IDFILENAME" ]; then
      echo "$NAMESCRIPT is already running"
   fi
}

do_stop() {

   if [ -e "$IDFILENAME" ]; then
      SCHROOT_ID=$(cat $IDFILENAME)
      schroot -r -c $SCHROOT_ID /etc/init.d/apache2 stop
      schroot -e -c $SCHROOT_ID

      rm $IDFILENAME
   elif [ ! -e "$IDFILENAME" ]; then
      echo "$NAMESCRIPT is not starting"
   fi
}

case $1 in
 start)
   log_daemon_msg "Starting configuration" $NAMESCRIPT
   if [[ $EUID = 0 ]]
   then
      do_start
      log_end_msg 0
   else
      log_end_msg 1
      echo "You are not root !"

   fi
   ;;
 stop)
   log_daemon_msg  "Stopping configuration" $NAMESCRIPT
   if [[ $EUID = 0 ]]
   then
      do_stop
      log_end_msg 0
   else
      log_end_msg 1
      echo "You are not root !"
   fi
   ;;
 restart)
   log_daemon_msg  "restarting" $NAMESCRIPT
   if [[ $EUID = 0 ]]
   then
      do_stop
      do_start
      log_end_msg 0
   else
      log_end_msg 1
      echo "You are not root !"
   fi
   ;;
 status)
   if [[ $EUID = 0 ]]
   then
      if [ ! -e "$IDFILENAME" ]; then
         echo "$NAMESCRIPT isn't running"
      elif [ -e "$IDFILENAME" ]; then
         SCHROOT_ID=$(cat $IDFILENAME)
         echo "$NAMESCRIPT is running : $SCHROOT_ID"
      fi
   else
      echo "You are not root !"
   fi
   ;;
     *)
   log_daemon_msg  "$0 [start|stop|restart|status]"
   ;;
esac

Ensuite il faut rendre le fichier exécutable et indiquer quand il doit être exécuté :
sudo chmod a+x /etc/init.d/schroot-horde
sudo update-rc.d schroot-horde start 92 2 3 4 5 . stop 08 0 1 6 .

Alarmes

Depuis l'environnement principal créer le script schroot-horde-alarms (sudo vim /usr/bin/schroot-horde-alarms) comme suit :
#!/bin/bash

#******************************************************************************
# Fichier       : /usr/bin/schroot-horde-alarms
#
# Auteur        : Thierry MARTIN
#
# Date création : dimanche 9 octobre 2011, 20:13:54
# Description   : Envoi d'un email pour les alarmes du serveur Horde
#******************************************************************************

IDFILENAME=/var/run/schroot-horde.uid

SCHROOT_ID=$(cat $IDFILENAME)
schroot -r -c $SCHROOT_ID /usr/bin/horde-alarms

Ensuite il faut rendre le fichier exécutable :
sudo chmod a+x /usr/bin/schroot-horde-alarms

Et ajouter le cron en créant un script horde4 (sudo vim /etc/cron.d/horde4) suivant :
MAILTO=
* * * * * root /usr/bin/schroot-horde-alarms

Migration des données

Comme l'ancienne installation de horde est très ancienne (horde 3.1.7/imp 4.1.4) et que j'ai seulement quelques utilisateurs du webmail alors je n'ai pas pu utiliser de script de mise à jour de la base de données. Je suis donc parti de la base initiale après installation de horde 4 et j'ai exporté depuis horde3 puis importé dans horde4 les données de chaque utilisateur.

Sécurité

Dans l'environnement schroot il faut modifier les droits des répertoires de configuration :
cd /var/www/horde
sudo chown -R root.www-data config */config

sudo find config */config -type f -exec chmod 0440 '{}' ';'
sudo find config */config -type d -exec chmod 0755 '{}' ';'

Mise à jour

Afin de mettre à jour l'installation dans l'environnement schroot il faut exécuter les commandes suivantes :
sudo apt-get update
sudo apt-get dist-upgrade
sudo pear upgrade-all
sudo pecl upgrade-all

Si nécessaire de nouveau mettre à jour le fichier imp/config/backends.php.

Si nécessaire se connecter avec l'administrateur et mettre à jour les bases de données et les fichiers de configuration.

Fin

Maintenant le serveur doit fonctionner correctement.