SOGo…What else ?

sogoDans la série groupware, je me suis mis en tête de tester SOGo (Scalable OpenGroupware.org).  Un outil collaboratif que j’avais complètement occulté lors de mes recherches, il y a maintenant quelques mois.

J’ai eu l’agréable surprise de découvrir qu’il existait un paquet pour Squeeze, mais après une bonne soirée d’acharnement, je n’ai pas réussi à obtenir quelque chose de vraiment fonctionnel. Une interface web pleine de bugs, des modules manquants, bref, pas génial génial.

L’installation étant bien documentée, sur le site officiel, pour une distribution RedHat, je me suis finalement résigné à tenter le coup sur une CentOS 5.  Après tout, je n’avais pas mis le nez dans une RedHat depuis des lustres, c’était l’occasion.

Heureux de cette expérience réussie sous CentOS, j’ai ressenti une pointe de frustration de n’avoir pas pu faire tourner le binious sous ma distribution préférée. J’ai finalement consacré une dernière soirée à une installation à partir des sources, sous Lenny.

CentOS 5

La documentation officielle est très bien faite et ne justifie pas un article dédié à l’installation sous CentOS. Il faut veiller cependant à adapter la configuration du dépôt utilisée dans cette doc, en remplaçant RHEL5 par CentOS5.

/etc/yum.repos.d/inverse.repo

[RHEL5]
 
name=Inverse SOGo Repository
 
#baseurl=http://inverse.ca/downloads/SOGo/RHEL5/$basearch
 
baseurl=http://inverse.ca/downloads/SOGo/CentOS5/nightly/$basearch
 
gpgcheck=0

Note : J’ai utilisé la branche « nightly » après avoir rencontré des problèmes de dépendances avec la branche classique (inverse.ca/downloads/SOGo/CentOS5/$basearch). C’est évidemment peu recommandé pour une machine en production.

A noter également que la doc est basée sur une utilisation avec postgresql, mais passe sous silence l’installation de ce dernier. Un petit coup de « yum » règle rapidement le problème :

# yum install postgresql-server

Enfin, j’ai bloqué un petit moment à cause du firewall SeLinux qui interdit par défaut les connexions sur le port http. Pour autoriser les connexions au port 80 :

# setsebool httpd_can_network_connect=1

sogo2

Debian Lenny

Pré-requis

SOGo utilise un LDAP pour l’authentification et les annuaires mails centralisés, un serveur SMTP et IMAP pour la gestion des mails. Dans cet exemple, je vais me baser sur l’architecture décrite ici :

Installation d’un serveur mail brique par brique… (OpenLDAP, Postfix, Cyrus-imap, TLS, SASL, Spamassassin, Amavis, etc…)

Installation de quelques paquets nécessaires au fonctionnement et à la compilation de SOGo ( Apache2, GNUStep, Postgresql, etc…)

# aptitude install apache2 apache2-mpm-prefork apache2-prefork-dev
# aptitude install postgresql
# aptitude install make patch subversion monotone
# aptitude install gobjc gnustep-make libgnustep-base1.16 libgnustep-base-dev libpq5 libpq-dev libldap2-dev libxml2-dev libmysqlclient15-dev gnustep-base-common gnustep-base-runtime

La compilation de SOGo nécessite la librairie Memcached (libmemcached2 libmemcached-dev), non disponible par défaut sous Lenny. Les paquets peuvent cependant être empruntés à Squeeze :

http://packages.debian.org/squeeze/libmemcached2
http://packages.debian.org/squeeze/libmemcached-dev

# aptitude install memcached
# dpkg -i libmemcached2_0.31-1_i386.deb libmemcached-dev_0.31-1_i386.deb

Postgresql

Création d’un utilisateur « sogo » dans postgresql et création d’un base « sogo« .

# su – postgres
$ createuser –no-superuser –no-createdb –no-createrole –encrypted –pwprompt sogo
$ createdb -O sogo sogo

Note : Pour l’exemple, j’ai utilisé « sogopasswd » comme mot de passe.

Récupération des sources

SOGo  ( monotone )

$ mtn db init –db=db.mtn
$ mtn –db=db.mtn pull inverse.ca ca.inverse.sogo
$ mtn –db=db.mtn checkout –branch ca.inverse.sogo SOGo

SOPE (Subversion)

$ svn export -r 1660 http://svn.opengroupware.org/SOPE/trunk/ SOPE

Compilation

SOPE

$ cd SOPE
$ patch -p0 < ../SOGo/SOPE/sope-patchset-r1660.diff
$ patch -p0 < ../SOGo/SOPE/sope-gsmake2.diff
$ source /usr/share/GNUstep/Makefiles/GNUstep.sh
$
./configure –with-gnustep –enable-strip –enable-debug
$ make
$ su
# make install
# exit

SOGo

$ cd ../SOGo
$ source /usr/share/GNUstep/Makefiles/GNUstep.sh

$ ./configure –enable-strip –enable-debug
$ make
$ su
# make install
# cp Scripts/sogod-wrapper /usr/sbin/

# cp debian/sogo.init /etc/init.d/sogo

# chmod +x /etc/init.d/sogo

Edition du fichier /etc/init.d/sogo pour affecter 3 à la variable PREFORK. Ce qui permet de lancer 3 démons Sogo simultanément.

/etc/init.d/sogo

...
 
# specify more if you are using a load-balancer
 
# PREFORK=1
 
PREFORK=3
 
SOGO_ARGS=""
 
USER=sogo
 
...

Configuration

Création d’un utilisateur « sogo » :

# adduser sogo –home /var/lib/sogo

Création des répertoires :

# mkdir /var/spool/sogo /var/run/sogo /var/log/sogo
# chown -R sogo /var/spool/sogo /var/run/sogo /var/log/sogo

Création du fichier de configuration :

# su – sogo
$ mkdir -p GNUstep/Defaults
$ vi GNUstep/Defaults/.GNUstepDefaults

/var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults

{
     NSGlobalDomain = {
     };
     gdnc = {
};
 
sogod = {
    NGImap4DisableIMAP4Pooling = YES;
    NGUseUTF8AsURLEncoding = YES;
    OCSFolderInfoURL = "postgresql://sogo:sogopasswd@localhost:5432/sogo/sogo_folder_info";
    SOGoACLsSendEMailNotifications = YES;
    SOGoAppointmentSendEMailNotifications = YES;
    SOGoAuthenticationMethod = LDAP;
    SOGoCalendarDefaultRoles = (
     PublicViewer
);
 
SOGoDefaultLanguage = French;
SOGoDefaultMailDomain = linet.jopa.fr;
SOGoDraftsFolderName = INBOX/Drafts;
SOGoFallbackIMAP4Server = mail.linet.jopa.fr;
SOGoFoldersSendEMailNotifications = YES;
SOGoLDAPSources = (
{
     CNFieldName = cn;
     IDFieldName = uid;
     UIDFieldName = uid;
     baseDN = "dc=linet,dc=jopa,dc=fr";
     bindDN = "cn=guest,dc=linet,dc=jopa,dc=fr";
     bindFields = uid;
     IMAPHostFieldName = site;
     bindPassword = "MotDePasseGuestLDAP";
     canAuthenticate = YES;
     displayName = "Adresses Jopa";
     hostname = localhost;
     id = public;
     isAddressBook = YES;
     port = 389;
     scope = SUB;
}
);
SOGoMailingMechanism = smtp;
SOGoOtherUsersFolderName = "Other Users";
SOGoProfileURL = "postgresql://sogo:sogopasswd@localhost:5432/sogo/sogo_user_profile";
SOGoSMTPServer = mail.linet.jopa.fr;
SOGoSentFolderName = INBOX/Sent;
SOGoServerTimeZone = Europe/Paris;
SOGoSharedFolderName = "Shared Folders";
SOGoTrashFolderName = INBOX/Trash;
WOApplicationRedirectURL = "http://labo.linet.jopa.fr";
WOMessageUseUTF8 = YES;
WOParsersUseUTF8 = YES;
WOPort = 20000;
 
WOUseRelativeURLs = NO;
SOGoSuperUsernames = (joel);
SOGoForceIMAPLoginWithEmail = NO;
 
};
}

Notes :

– J’utilise l’utilisateur Guest pour la lecture de l’annuaire LDAP. C’est utilisateur a des droits en lecture seule sur la branche contenant mes utilisateurs. Si l’annuaire autorise une lecture anonyme, la connexion à l’annuaire sous un utilisateur particulier n’est pas nécessaire.
– labo.linet.jopa.fr est l’url de la machine sur laquelle est installée Sogo.

Apache

Création d’un fichier de configuration : /etc/apache2/conf.d/sogo.conf

Alias /sogo.woa/WebServerResources/ \\
        /usr/local/lib/GNUstep/SOGo/WebServerResources/
Alias /SOGo.woa/WebServerResources/ \\
        /usr/local/lib/GNUstep/SOGo/WebServerResources/
Alias /SOGO.woa/WebServerResources/ \\
        /usr/local/lib/GNUstep/SOGo/WebServerResources/
 
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*jpg">
  SetHandler default-handler
</LocationMatch>
 
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*png">
  SetHandler default-handler
</LocationMatch>
 
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*gif">
  SetHandler default-handler
</LocationMatch>
 
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*css">
  SetHandler default-handler
</LocationMatch>
 
<LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*js">
  SetHandler default-handler
</LocationMatch>
 
AliasMatch /SOGo/so/ControlPanel/Products/(.*)/Resources/(.*) \\
           /usr/local/lib/GNUstep/SOGo/$1.SOGo/Resources/$2
 
<Proxy balancer://sogocluster>
  RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0"
  RequestHeader set "x-webobjects-remote-host" "127.0.0.1"
 
  RequestHeader set "x-webobjects-server-port" "80"
  RequestHeader set "x-webobjects-server-name" "labo.linet.jopa.fr"
  RequestHeader set "x-webobjects-server-url" "http://labo.linet.jopa.fr"
 
 
  BalancerMember http://127.0.0.1:20000 retry=1 max=1 timeout=120
  BalancerMember http://127.0.0.1:20001 retry=1 max=1 timeout=120
  BalancerMember http://127.0.0.1:20002 retry=1 max=1 timeout=120
  ProxySet lbmethod=byrequests maxattempts=1
  Order allow,deny
  Allow from all
</Proxy>
 
SetEnv proxy-nokeepalive 1
ProxyRequests Off
ProxyPass /SOGo balancer://sogocluster/SOGo

Activation des modules apache :
# a2enmod proxy
# a2enmod proxy_http
# a2enmod proxy_balancer
# a2enmod headers

Démarrage

# /etc/init.d/apache2 restart
# /etc/init.d/sogo start

Si tout se passe bien, l’interface Web de Sogo est disponible via l’url : http://votre_serveur/SOGo

sogo1

Sources :

http://www.scalableogo.org

http://wiki.auf.org/wikiteki/ZA/Montr%C3%A9al/SOGo/ProcedureInstallation

Vus : 2284
Publié par Jopa : 29