Installation Indefero

De wikiGite

Excellent tuto : http://www.siteduzero.com/tutoriel-3-318320-indefero-un-bug-tracker-tres-complet.html

Installation v.1.3.2

Pré-requis

apt-get install php5-gd php-pear unzip

Installation du framework Pluf

pear upgrade-all
pear install --alldeps Mail
pear install --alldeps Mail_mime
pear install --alldeps Console_Getopt

wget http://projects.ceondo.com/p/pluf/source/download/master/ -O pluf-master.zip
cd pluf-master
mv src/ /home/www/indefero/pluf

Installation Indefero

Il est recommandé de ne pas mettre l'arborescence dans /var (on aura besoin de place pour les projets !).

Donc créer l'arborescence dans /home :

mkdir -p /home/www/
mkdir -p /home/git/repositories

cd /home/www/
wget http://projects.ceondo.com/p/indefero/downloads/get/indefero-1.3.2.tar.bz2
tar -xvjf indefero-1.3.2.tar.bz2
cd indefero/
cp src/IDF/conf/idf.php-dist src/IDF/conf/idf.php
cp src/IDF/conf/path.php-dist src/IDF/conf/path.php

Générer une clé qui sera utilisée lors de l'installation (par copié/collé dans "$cfg['secret_key']"):

dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0

Configurer idf.php et path.php selon votre système, notamment les URL, le repository Git, activer Git comme gestionnaire de version et désactiver Mercurial (par défaut).

Laisser vide $cfg['idf_base'] = ; car on utilisera le mod_rewrite.

NOTE Issue 179 : si SVN n'est pas utilisé, COMMENTER AUSSI LES 3 LIGNES :

$cfg['idf_plugin_syncsvn_authz_file'] = '/home/svn/dav_svn.authz';
$cfg['idf_plugin_syncsvn_passwd_file'] = '/home/svn/dav_svn.passwd';
$cfg['idf_plugin_syncsvn_svn_path'] = '/home/svn/repositories';

[PLUS]: idem si Mercurial n'est pas utilisé, commenter aussi :

$cfg['idf_plugin_syncmercurial_passwd_file'] = '/home/mercurial/auth/.htpasswd';
$cfg['idf_plugin_syncmercurial_path'] = '/home/mercurial/repositories';

Exemples de chemins dans path.php, d'après les répertories créés ci-dessus :

define('PLUF_PATH', dirname(__FILE__).'/../../../pluf');
define('IDF_PATH', dirname(__FILE__).'/../..');

Créer la base MySQL et un utilisateur dédié

mysql -p
mysql> create database indefero;
mysql>  grant all on indefero.* to indefero@localhost identified by 'indefero';

Lancer l'installation

cd src
php /home/www/indefero/pluf/migrate.php --conf=IDF/conf/idf.php -a -i -d -u # test uniquement, voir d'éventuelles erreurs
php /home/www/indefero/pluf/migrate.php --conf=IDF/conf/idf.php -a -i -d # installation

Créer un fichier /home/www/indefero/www/bootstrap.php pour créer l'utilisateur admin :

<?php
require '/home/www/indefero/src/IDF/conf/path.php';
require 'Pluf.php';
Pluf::start('//home/www/indefero/src/IDF/conf/idf.php');
Pluf_Dispatcher::loadControllers(Pluf::f('idf_views'));

$user = new Pluf_User();
$user->first_name = 'Admin';
$user->last_name = 'Admin'; // Required!
$user->login = 'admin'; // must be lowercase!
$user->email = 'support@systea.net';
$user->password = 'cela2I!'; // the password is salted/hashed 
                                 // in the database, so do not worry :)
$user->administrator = true;
$user->active = true;
$user->create();
print "Bootstrap ok\n";
?>

Et le lancer en ligne de commande :

php www/bootstrap.php

Si le retour est "Bootstrap ok", supprimer le fichier

rm www/bootstrap.php

Vérifier dans www/index.php que les chemins sont bons (à priori oui si on garde l'arborescence ci-dessus)

Après l'install, on crée des liens vers les fichiers utiles :

cd /var/www
mkdir indefero
chown www-data.www-data indefero
cd indefero
ln -s /home/www/indefero/www/index.php
ln -s /home/www/indefero/www/media

Créer un virtualhost Apache (ici en HTTPS)

<VirtualHost *:443>

ServerName indefero.systea.fr
DocumentRoot /home/www/indefero/

# add ssl protocol
SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

<Directory /home/www/indefero>
        AllowOverride All
#        Options Indexes
#        Allow from all
        <IfModule mod_access.c>
                Order allow, deny
                Allow from all
        </IfModule>

<IfModule mod_ssl.c>
        SSLRequireSSL
        SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
</IfModule>

</Directory>
</VirtualHost>

Et pour réécrire l'URL (enlever le "index.php"), créer un fichier /home/www/indefero/.htaccess :

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.php/$1

On peut maintenant essayer de se connecter sur https://<SERVEUR INDEFERO> avec l'utilisateur "admin" créé par le bootstrap.

Note sur Debian/Postfix

Postfix semble incapable de comprendre le "From" du mail envoyé par PHP::Mail qu'Indefero utilise pour avertir de certains évènements.

l'expéditeur est *toujours* www-data@localhost.localdomain

Solution possible : ajouter dans /etc/postfix/main.cf

sender_canonical_maps = hash:/etc/postfix/canonical
myhostname = applis.systea.fr
mydomain =  systea.fr

Créer les maps /etc/postfix/canonical (remplace le sender www-data par support):

www-data    support

/etc/postfix/aliases (au cas ou support n'existe pas localement, renvoyer les messages de retour vers root (ou autre)):

support	root

postmap /etc/postfix/canonical postmap /etc/postfix/aliases

Intégration de GIT

Créer l'utilisateur git

adduser \
         --system \
         --shell /bin/bash \
         --gecos 'git version control' \
         --group \
         --disabled-password \
         --home /home/git \
         git
chown - R git.git /home/git
usermod -a -G git www-data
/etc/init.d/apache2 restart

Créer un fichier de clés qui recevra celles des utilisateurs autorisés à utiliser le dépôt

su git
mkdir /home/git/.ssh
touch /home/git/.ssh/authorized_keys
chmod 0700 /home/git/.ssh
chmod 0600 /home/git/.ssh/authorized_keys

Ce cron synchronise toutes les 5 minutes les clés SSH déposées par apache lors de l'ajout d'une clé par un utilisateur, dans /tmp/SYN-GIT (par défaut, voir idf.php), avec /home/git/.ssh/authorized_keys (accessible uniquement par git) :

# crontab -e
5 * * * * php /var/www/indefero-src/scripts/gitcron.php

Utilisation

1. Création d'un projet dans le webUI en tant qu'admin -> administration de la forge / projets / Créer un projet
obligatoire : nom, nom court, description, type de dépôt
Nom court = http://<SERVEUR INDEFERO>/index.php/p/projetTest
donner un propriétaire, cocher "projet privé pour qu'il n'apparaisse pas sur la page de la forge sans connexion

2. Entrer dans le projet / Accès aux onglets et notifications paramétrer notifications et vues des membres

3. Une fois créé dans l'interface, sur le poste du développeur (qui a enregistré sa clé sur son utilisateur indefero !)

mkdir projectname
cd projectname
git init
touch README # Important ! il faut au moins un fichier avant le premier commit, sinon erreurs possibles au "push".
git add .
git commit -m 'the first commit'
git remote add origin git@<SERVER NAME>:<PROJECT NAME>.git
git push origin master # Important ! "master" est obligatoire pour le premier push

Le projet est alors réellement créé sur le serveur. Il ne reste qu'à l'alimenter par des commit/push.

4. Un autre développeur n'a qu'à enregistrer sa clé (en + de l'autre clé sur le même utilisateur indefero, ou sur un autre) et récupérer le projet

git clone git@<SERVER NAME>:<PROJECT NAME>.git

Penser à paramétrer l'utilisateur localement sur le poste développeur pour que les commits apparaissent avec le bon nom de contributeur dans Indefero :

git config --global user.email "email@domain.com" # Doit être le même email que celui enregistré sur le compte Indefero pour faire le lien !