## page was renamed from ZAO/Configuration/Trac
Configuration du serveur Trac http://trac.sn.auf.org/

= Installation du système de base =

 * Instance Xen Debian 4.0 (Etch), accessible également en IPv6 pour frimer.
 * Paquets : `apache2`, `trac`, `subversion`, `subversion-tools`, `libapache2-svn` 
 * Plugin [[http://trac.edgewall.org/wiki/WebAdmin|webadmin pour trac]]

''A ajouter ici'' : la doc de la configuration de base de tout cela...

= Ajouter un projet =

 1. Ajouter un dépot SVN : {{{
# svnadmin create /srv/subversion/nom-du-projet
# chgrp -R subversion  /srv/subversion/nom-du-projet/*     # note : www-data est dans le groupe subversion
# chmod -R g+w /srv/subversion/nom-du-projet/*
}}}

 1. Ajouter un site trac associé : {{{
# mkdir /srv/trac/nom-du-projet
# trac-admin /srv/trac/nom-du-projet initenv
... et répondre aux questions :
Project Name [My Project]> Nom Du Projet
Database connection string [sqlite:db/trac.db]>
Repository type [svn]> 
Path to repository [/path/to/repos]> /srv/subversion/nom-du-projet
Templates directory [/usr/share/trac/templates]> 
# chown -R www-data:www-data /srv/trac/nom-du-projet
}}}

 1. Configurer le site trac dans `/srv/trac/nom-du-projet/conf/trac.ini` : {{{
#
# extraits de /srv/trac/nom-du-projet/conf/trac.ini
#

(...)

[header_logo]
alt = 
height = -1
link = http://trac.sn.auf.org/nom-du-projet
src = common/trac_banner.png
width = -1

(...)

[project]
descr = La description du projet
footer = Un petit texte affiché en bas des pages du Trac
icon = common/trac.ico
name = nom-du-projet
url = http://trac.sn.auf.org/nom-du-projet

(...)

# à ajouter à la fin pour activer le plugin webadmin :
[components]
webadmin.* = enabled
}}}

 1. Créer le fichier htpasswd pour trac et subversion : {{{ 
# htpasswd -c /etc/trac/projet.htpasswd thomas
New password: 
Re-type new password: 
Adding password for user thomas
# htpasswd /etc/trac/projet.htpasswd tini
... etc ...
}}}
  . Note : on peut parfaitement copier des lignes de `/etc/shadow` ou d'un autre fichier `/etc/trac/xxx.htpasswd` déjà existant.

 1. Configurer les droits sur le Trac.
  a. D'abord on met les utilisateurs dans un groupe `admin` : {{{
# trac-admin /srv/trac/nom-du-projet permission add thomas admins
# trac-admin /srv/trac/nom-du-projet permission add tini admins
}}}
  a. Ensuite on donne les droits à ce groupe : {{{
trac-admin /srv/trac/nom-du-projet permission add admins MILESTONE_ADMIN REPORT_ADMIN ROADMAP_ADMIN TICKET_MODIFY TRAC_ADMIN WIKI_ADMIN
}}}
  a. Et on peut même vérifier si tout semble ok : {{{
# trac-admin /srv/trac/nom-du-projet permission list       # pour vérifier
}}}
 . Note : avec les droits ci-dessus le site Trac reste '''très''' ouvert, notamment la partie wiki où tout le monde peut écrire. C'est un wiki, quoi !

 1. Et enfin ajouter l'accès via Apache : {{{
# extrait de /etc/apache2/sites-available/trac-svn

        # trac "nom-du-projet" 
        ScriptAlias /nom-du-projet /usr/share/trac/cgi-bin/trac.cgi
        <Location /nom-du-projet>
                SetEnv TRAC_ENV "/srv/trac/nom-du-projet"
        </Location>
        <Location "/nom-du-projet/login">
                AuthType Basic
                AuthName "Trac Nom du Projet"
                AuthUserFile /etc/trac/nom-du-projet.htpasswd
                Require valid-user
        </Location>
        # svn "nom-du-projet"
        <Location "/svn/nom-du-projet">
                DAV svn
                SVNPath /srv/subversion/nom-du-projet
                AuthType Basic
                AuthName "Nom du Projet Subversion Repository"
                AuthUserFile /etc/trac/nom-du-projet.htpasswd
                # The following three lines allow anonymous read, but make
                # committers authenticate themselves.  It requires the 'authz_user'
                # module (enable it with 'a2enmod').
                <LimitExcept GET PROPFIND OPTIONS REPORT>
                        Require valid-user
                </LimitExcept> 
        </Location> 
}}}
 . Pour la configuration complète, voir [[attachment:fichier-complet-apache2-default.txt]]

Vérifications et finitions :
 1. Aller sur `http://trac.sn.auf.org/nom-du-projet` et vérifier qu'on peut naviguer
 1. Se loger sur le site Trac et aller dans l'interface d'administration (bouton Admin en haut à droite), modifier des détails si besoin
 1. Tenter des ''checkout'', ''update'' puis des ''commit'' sur le dépot svn
 1. Eventuellement, modifier /var/www/index.html pour référencer ce nouveau projet sur http://trac.sn.auf.org/

Ouf ! Fini !

= A faire =

 * authentification apache via `libapache2-mod-auth-pam`
 * Ajouter ''mod_python'' le jour où trac deviendra lent, ou bien en `tracd`
 * CNAME `svn.sn.auf.org` pour que les URL svn soient encore plus courtes (svn.sn.auf.org/guai au lieu de trac.sn.auf.org/svn/guai)
 * Lancer un "vrai" serveur ''svnserver'' ?

= Mise à jour automatique de demo-guia =

Sur un serveur en ''virtualhost'' nommé demo-guia.sn.auf.org on fait tourner une démo "live" de GUIA. A chaque commit SVN l'application est mise à jour. Le principe est assez simple :

 1. au niveau du déport SVN de GUAI, on a un script `hooks/post-commit` : {{{
#!/bin/sh
# Mise a jour de la demo live sur demo-guia.sn.auf.org
/usr/local/bin/guia-update
}}}
 2. le script guia-update : {{{#!/bin/sh

PATH=/bin:/usr/bin
cd /home/wilane/guia

# On backupe la base de donnée de démo
cp -f schema.db /tmp

# On met à jour le soft
svn update -q

# si la base a été mis à zéro par SVN, on met la nouvelle version de coté (.new)
# et on remet la base précédement sauvegardé dans /tmp
if ! cmp -s /tmp/schema.db schema.db
then
        cp -f schema.db schema.db.new
        cp -f /tmp/schema.db .
fi

####
# NOTE : ceci posera des soucis en cas de changement dans le format de la base !!!
# C'est pour cela qu'on garde tout de même le schema.db.new au cas où...
####

# On efface le backup
rm -f /tmp/schema.db

# On relance apache pour prendre en compte la nouvelle version du soft
# Note : www-data a les autorisation sudo pour lancer apache-graceful
#        sans mot de passe, ce script effectuant un simple apache2ctl graceful
sudo /usr/local/bin/apache-graceful
}}}