SOGo…What else ?
Dans 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
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 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
Sources :
– http://wiki.auf.org/wikiteki/ZA/Montr%C3%A9al/SOGo/ProcedureInstallation