User:Lartigue/copie linterweb/mise en place depots

From www.coria-cfd.fr
Jump to: navigation, search

Documentations Gitorious

A défaut d'avoir une documentation à jour, le groupe de discussion Google concernant le projet Gitorious permet de récupérer pas mal d'informations et de demander de l'aide à ses développeurs et ses utilisateurs:

  • Groupe de discussion Google [1]

Documentation concernant l'intégration LDAP

Authentification LDAP

Permissions LDAP

  • Lien vers la branche LDAPAuthorization en cours de développement: [2]
  • Dossier en question déjà validé par la communauté: /var/www/gitorious/lib/gitorious/authorization

Procédure d'installation de Gitorious sous Debian

/!\ Les versions des différents packages utilisés sont à modifier dans les scripts et commandes, ceux-ci évoluant avec le temps /!\

/!\ Lors des différentes installations, taper sur "Entrée" pour choisir les chemins de destination par défaut lorsque demandé /!\

/!\ Les chemins d'accès aux exécutables (notamment au sein du dossier d'installation Ruby Enterprise) peuvent être différents suivant les versions /!\

Prérequis:

apt-get install build-essential zlib1g-dev libcurl4-openssl-dev apache2 mysql-server mysql-client apg geoip-bin libgeoip1 libgeoip-dev libpcre3 libpcre3-dev zlib1g 
apt-get install zlib1g-dev libyaml-dev libmysqlclient-dev apache2-dev libonig-dev zip unzip memcached git-core git-svn git-doc git-cvs libreadline-dev openjdk-6-jre
apt-get install sqlite3 libsqlite3-dev libmagick++3 libmagick++-dev libapache2-mod-xsendfile

Installation de Ruby Enterprise

Se placer dans un répertoire de travail pour télécharger et dés-archiver Ruby Enterprise.

wget http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2011.03.tar.gz
tar zxf ruby-enterprise-1.8.7-2011.03.tar.gz  
sudo ruby-enterprise-1.8.7-2011.03/installer  
cd /opt && sudo ln -s ruby-enterprise-1.8.7-2011.03/ ruby-enterprise  
sudo ln -s /opt/ruby-enterprise/bin/ruby /opt/ruby-enterprise/bin/rake /opt/ruby-enterprise/bin/gem /usr/local/bin

Installation de Sphinx

Se placer dans un répertoire de travail pour télécharger et dés-archiver Sphinx.

wget http://sphinxsearch.com/files/sphinx-2.0.3-release.tar.gz
tar zxf sphinx-2.0.3-release.tar.gz && cd sphinx-2.0.3  
./configure --prefix=/usr/local/sphinx-2.0.3  
make && sudo make install  
cd /usr/local && sudo ln -s sphinx-2.0.3 sphinx  
sudo ln -s /usr/local/sphinx/bin/* /usr/local/bin

Installation de Apache ActiveMQ

Se placer dans un répertoire de travail pour télécharger et dés-archiver Activemq. En téléchargement sur le site d'Apache (version 5.5.1 ici: [3]).

tar zxf apache-activemq-5.5.1-bin.tar.gz
sudo mv apache-activemq-5.5.1 /usr/local  
cd /usr/local && sudo ln -s apache-activemq-5.5.1 apache-activemq && cd apache-activemq  
sudo bin/activemq setup /etc/default/activemq && sudo chmod 600 /etc/default/activemq  
sudo adduser --system --no-create-home --home /usr/local/apache-activemq --shell /bin/bash activemq  
sudo chown -R activemq:nogroup /usr/local/apache-activemq-5.5.1

Editer le fichier /etc/default/activemq:

ACTIVEMQ_HOME=/usr/local/apache-activemq
ACTIVEMQ_USER="activemq"

Editer le fichier /usr/local/apache-activemq/conf/activemq.xml et modifier le "transportConnector pour qu'il ressemble à ceci:

<transportConnectors>
    <transportConnector name="stomp" uri="stomp://localhost:61613"/>  
</transportConnectors>

Récupération de Gitorious via Git

sudo git clone git://gitorious.org/gitorious/mainline.git /var/www/gitorious

Installation des gems

cd /var/www/gitorious &&  /opt/ruby-enterprise/bin/bundle install

Configuration des services

cd /var/www/gitorious/doc/templates/ubuntu
sudo cp git-daemon git-ultrasphinx /etc/init.d
sudo vi /etc/init.d/git-poller

Y coller le script ci-dessous:

#!/bin/sh
# Start/stop the git poller  
#  
### BEGIN INIT INFO  
# Provides:          git-poller  
# Required-Start:    activemq mysql  
# Required-Stop:  activemq mysql  
# Default-Start:     2 3 4 5  
# Default-Stop:      1  
# Short-Description: Gitorious poller  
# Description:       Gitorious poller  
### END INIT INFO  

/bin/su - git -c "cd /var/www/gitorious;env RAILS_ENV=production script/poller $@"
sudo vi /etc/init.d/activemq

Y coller le script ci-dessous:

#!/bin/sh -e
### BEGIN INIT INFO  
# Provides:          activemq  
# Required-Start:    $network $local_fs  
# Required-Stop:     $network $local_fs  
# Default-Start:     2 3 4 5  
# Default-Stop:      0 1 6  
# Short-Description: Start/stop activemq for stomp services.  
### END INIT INFO  

/usr/local/apache-activemq/bin/activemq "$@"

En étant toujours placé dans /var/www/gitorious/doc/templates/ubuntu:

sudo cp gitorious-logrotate /etc/logrotate.d/gitorious
sudo chmod 755 /etc/init.d/git-ultrasphinx /etc/init.d/git-daemon /etc/init.d/git-poller /etc/init.d/activemq
sudo insserv /etc/init.d/git-ultrasphinx /etc/init.d/git-daemon /etc/init.d/git-poller /etc/init.d/activemq
sudo ln -s /var/www/gitorious/script/gitorious /usr/local/bin/

Configuration du serveur Apache

sudo /opt/ruby-enterprise/bin/passenger-install-apache2-module

Si erreur lors de la tentative d'installation:

sudo /opt/ruby-enterprise/bin/gem install passenger
vi /etc/apache2/mods-available/passenger.load

Y coller les lignes ci-dessous en vérifiant bien que les chemins d'accès à passenger sont en adéquation avec notre version (il suffit d'aller vérifier le nom du répertoire "passenger-X.X.X"):

LoadModule passenger_module /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.5/ext/apache2/mod_passenger.so
PassengerRoot /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.5  
PassengerRuby /opt/ruby-enterprise/bin/ruby  
sudo a2enmod passenger rewrite ssl xsendfile
vi /etc/apache2/sites-available/gitorious

Y coller les lignes ci-dessous:

<VirtualHost *:80>
       ServerAdmin webmaster@localhost

       DocumentRoot /var/www/gitorious/public  

       ErrorLog /var/log/apache2/gitorious-error.log  
       # Possible values include: debug, info, notice, warn, error, crit,  
       # alert, emerg.  
       LogLevel warn

       CustomLog /var/log/apache2/gitorious-access.log combined

       <IfModule mod_xsendfile.c>  
               XSendFile on  
               XSendFileAllowAbove on  
       </IfModule>

</VirtualHost>
vi  /etc/apache2/sites-available/gitorious-ssl

Y coller les lignes ci-dessous:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>  
   ServerAdmin webmaster@localhost

   DocumentRoot /var/www/gitorious/public

   ErrorLog /var/log/apache2/gitorious-error.log

   # Possible values include: debug, info, notice, warn, error, crit,  
   # alert, emerg.  
   LogLevel warn

   CustomLog /var/log/apache2/gitorious-ssl_access.log combined

   SSLEngine on

   SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem  
   SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

   BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0

   <IfModule mod_xsendfile.c>  
           XSendFile on  
           XSendFileAllowAbove on  
   </IfModule>

</VirtualHost>  
</IfModule>
sudo a2dissite default default-ssl
sudo a2ensite gitorious gitorious-ssl
sudo /etc/init.d/apache2 restart

Configuration de Gitorious

BDD

mysql -u root -p

Le mot de passe root d'accès à la BDD sera demandé, le renseigner.

create database gitorious_production;  
grant all privileges on gitorious_production.* to 'git'@'localhost' identified by 'XXXXXX';

Système

sudo adduser --system --home /var/www/gitorious --no-create-home --group --shell /bin/bash git
sudo chown -R git:git /var/www/gitorious  
sudo su - git  
git submodule init  
git submodule update  
mkdir .ssh  
touch .ssh/authorized_keys  
chmod -R go-rwx .ssh  
mkdir tmp/pids repositories tarballs  tarballs-work  
cp config/database.sample.yml config/database.yml  
cp config/gitorious.sample.yml config/gitorious.yml  
cp config/broker.yml.example config/broker.yml
vi config/database.yml

Vérifier que:

user=git
password=git4coria


vi config/gitorious.yml

Vérifier que:

repository_base_path=/var/www/gitorious/repositories
cookie_secret=[clé obtenue en faisant un 'apg -m 64' dans le shell]
gitorious_client_port=80
gitorious_host=gitorious.coria-cfd.fr
archive_cache_dir=/var/www/gitorious/tarballs
archive_work_dir=/var/www/gitorious/tarballs-work
hide_http_clone_urls=true
is_gitorious_dot_org=false

Exécuter ces commandes en étant toujours en tant qu'utilisateur git dans le shell:

export RAILS_ENV=production
bundle exec rake db:create
bundle exec rake db:migrate
export PATH=/usr/local/sphinx/bin:$PATH

Pour activer le module de recherche de Gitorious via sphinx:

bundle exec rake thinking_sphinx:configure
bundle exec rake thinking_sphinx:index
crontab -e

Y coller:

10 * * * * /var/www/gitorious/bin/rake ts:rebuild >/dev/null

Finalisation

sudo /etc/init.d/git-daemon start
sudo /etc/init.d/git-ultrasphinx start  
sudo /etc/init.d/activemq start  
sudo /etc/init.d/git-poller start  
sudo /etc/init.d/apache2 restart

Intégration de l'authentification LDAP

Lien vers la structure du LDAP Coria: Coria-cfd

Tout se passe dans le fichier /var/www/gitorious/config/authentication.yml

production:
  disable_default: false
  - adapter: Gitorious::Authentication::LDAPAuthentication
  • host: IP du serveur LDAP
host: localhost
  • port: Pour spécifier un autre port que celui par défaut (389)
port: 389
  • base_dn: Racine de l'annuaire
base_dn: dc=cloud-cfd,dc=fr
  • group_search_dn: DN répertoriant la branche groups
group_search_dn: OU=groups,dc=coria-cfd,dc=fr
  • login_attribute: Attribut LDAP à utiliser pour l'authentification des utilisateurs. CN par défaut.
login_attribute: uid
  • distinguished_name_template: Règle de construction du DN des utilisateurs. {} = login_attribute de l'utilisateur. Le champs de login de Gitorious ne permet pas le '@'; il faut absolument le préciser dans la variable ci-dessous pour que les utilisateurs n'aient qu'à spécifier leur login sans le '@[domaine]'.
distinguished_name_template: "uid={},OU=people,DC=coria-cfd,DC=fr"
  • attribute_mapping: Règle de renommage des champs LDAP aux champs BDD. Par défaut, displayname => fullname; mail => email.
attribute_mapping:
     givenName: fullname
     publicEmail: email
  • encryption: Méthode de connexion au serveur LDAP. Par défaut: simple_tls.
encryption: none
  • bind_user: Compte admin pour vérifier les autorisations des utilisateurs dans l'annuaire LDAP
    • username: login
    • password: mot de passe
bind_user:
     username: admin
     password: XXXXXX
  • membership_attribute_name: Attribut de l'utilisateur qui spécifie son groupe d'appartenance dans le cadre d'une gestion des autorisations. Par défaut: memberof.
membership_attribute_name: memberof
  • members_attribute_name: Attribut du groupe qui spécifie les membres de celui-ci dans le cadre d'une gestion des autorisations. Par défaut: member (ou uniquemember).
members_attribute_name: member
  • cache_expiry: Pour améliorer les performances de recherche, Gitorious stocke les résultats de ses recherches au fil de son parcours dans l'annuaire LDAP. Ce paramètre permet de spécifier le nombre de minutes pendant lesquelles Gitorious gardera ces données en mémoire. Par défaut: 0 (pas de mémoire cache).
cache_expiry: 0

Tester la configuration LDAP

bundle exec script/test_ldap_connection admin XXXXXX

Configuration du module LDAPAuthorization

AUTORISATIONS VIA LDAP NON MISES EN PLACE CAR OBLIGATION DE RESTRUCTURER L'ANNUAIRE

/!\ La communauté Gitorious n'a pas encore documenté cette partie du projet, ça va être sportif /!\

cd /var/www/gitorious && vi config/gitorious.yml

Laisser cette ligne tel quel:

use_ldap_for_authorization: false

Intégration à la solution en place

Trac

  • Installer GitPlugin
  • Modifier les fichiers de configuration

[4]

Modifier le .ini à chaque création d'environnement trac dans /home/coria/tracenv/<nom_projet>/conf/trac.ini (à scripter dans genproject.php)

[components]
tracopt.versioncontrol.git.* = enabled
[trac]
repository_type = git
repository_dir = /chemin/vers/mon/repertoire/git/
repository_sync_per_request = nom_du_depot

genproject.php

--En cours--

<?php 

define('MYSQL_ROOT_PASSWORD','uiGTpart');
$ldaprdn  = 'cn=admin,dc=coria-cfd,dc=fr';
$ldappass = 'XXXXXX';

chdir(dirname(__FILE__));

if ( $argc < 2 ) die("Usage: genproject.php [project name]\n");
$name = $argv[1];

if ( !preg_match('%^[-a-zA-Z0-9_]{3,}$%',$name) ) 
	die("Merci de choisir un nom de projet formé d'au moins 3 caractères dans la classe de caractères [-a-zA-Z0-9_].\n");

require_once('includes.php');

// ***************************************
// -- Création du dépot GIT --------------

echo "Création du dépot GIT $name\n";

if ( checkDir("/home/coria/repositories/$name") ) {
	exec("cd /home/coria/repositories/$name");
	exec("git init");
	postCheckDir("/home/coria/repositories/$name");
}
else {
	exec("cd /home/coria/repositories/");
	exec("mkdir $name");
	exec("cd $name");
	exec("git init");
	postCheckDir("/home/coria/repositories/$name");
}

// ****************************************
// -- Création du groupe LDAP -------------

$ldapconn = ldap_connect("localhost") or die("Could not connect to LDAP server.");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind($ldapconn, $ldaprdn, $ldappass) 
  or die("Connexion au LDAP impossible. Vérifiez ldaprdn et ldappass dans genproject.php.\n");
  
if ( ! ldap_group_find($name) ) ldap_group_create($name);
if ( ! ldap_group_find($name.'_committer') ) ldap_group_create($name.'_committer');

  
// ****************************************
// -- Création de l'environement TRAC -----

echo "Création de l'environement TRAC $name\n";

if ( checkDir("/home/coria/tracenv/$name") ) {
	exec("trac-admin /home/coria/tracenv/$name initenv $name \"sqlite:db/trac.db\"");
	postCheckDir("/home/coria/tracenv/$name");
	file_put_contents("/home/coria/tracenv/$name/conf/trac.ini", 
		str_replace('#Name#',ucfirst($name),str_replace('#name#',$name,file_get_contents('trac.ini'))));
	exec("trac-admin /home/coria/tracenv/$name permission add coria TRAC_ADMIN");
}

// ***************************************
// -- Création du front-end TRAC ---------

echo "Création du front-end TRAC $name\n";

if ( checkDir("/home/coria/tracwww/$name") ) {
	exec("trac-admin /home/coria/tracenv/$name deploy /home/coria/tracwww/$name");
	postCheckDir("/home/coria/tracwww/$name");
	file_put_contents("/home/coria/tracwww/$name/cgi-bin/trac.cgi", str_replace('#name#',$name,file_get_contents('trac.cgi')));
}


// ***********************************************************************
// -- Création de la configuration apache (/etc/apache2/sites-enabled) ---

if ( apacheConfigs($name,$filename) ) {
	if ( confirm( "Il existe déjà un fichier de configuration /etc/apache2/sites-enabled/$filename pour le projet $name. 
	Souhaitez-vous écraser ce fichier ? ", true ) )
		exec("sudo /home/coria/genproject/gensudoer.sh rmapache $name $filename");
	if ( apacheConfigs($name,$filename) ) die("L'installation s'arrète donc là.\n");
}

echo "Création de /etc/apache2/sites-enabled/$filename\n";
exec("sudo /home/coria/genproject/gensudoer.sh setapache $name $filename");

echo "Redémarrage d'apache...\n";
system("sudo /home/coria/genproject/gensudoer.sh reloadapache");

// ***************************************************
// -- Création de la base de donnée du mediawiki -----
 
echo "Création de la base de données du mediawiki.\n";
if ( ! mysql_connect( 'localhost', 'root', MYSQL_ROOT_PASSWORD ) )
	die("! Impossible de se connecter à mysql. Vérifier la constante MYSQL_ROOT_PASSWORD définie dans genproject.php \n");
if ( ! mysql_select_db("wikidb_$name") ) {
	if ( ! mysql_query("CREATE DATABASE wikidb_$name") )
		die("! Création de la base de données wikidb_$name impossible. \n");
	mysql_select_db("wikidb_$name");
}
if ( ! mysql_query("GRANT ALL ON wikidb_$name.* to wikiuser@\"%\"") )
	die("! Impossible de fournir les droit d'accès à wikiuser sur la base de données wikidb_$name . \n");

$fh = fopen('wikidb.sql','r');
$mh = popen("mysql -u root -p".MYSQL_ROOT_PASSWORD." wikidb_$name",'w');
while ( $row = fgets($fh) ) {
	fwrite( $mh, str_replace('#Name#',ucfirst($name),str_replace('#name#',$name,$row )) );
}
fclose($mh);
fclose($fh);


// ********************************************
// -- Configuration du mediawiki --------------

echo "Configuration du mediawiki http://$name.coria-cfd.fr \n";
$model = file_get_contents('LocalSettings.php.model');
if ( !$model ) die("! Ne peux trouver le fichier LocalSettings.php.model\n");

file_put_contents("/home/coria/mediawiki/$name.LocalSettings.php", str_replace('Template:Name',$name,$model));

// *********************************************
// -- Doxygen ----------------------------------

@mkdir("/home/coria/doxygen/$name", 0755);

?>

Exemples des fichiers de configuration

gitorious.yml

production:
 gitorious_client_port: 80
 gitorious_host: gitorious.coria-cfdb.fr
 repository_base_path: "/var/www/gitorious/repositories"
 archive_cache_dir: "/var/www/gitorious/tarballs"
 archive_work_dir: "/var/www/gitorious/tarballs-work"
 cookie_secret: ekWunMostutyarnevdaftEgwegjadcefHocNilzulocDiljubdeidNibNofEthocCubPynAlZegjaHalwoishuicInkAltubDedcubbulCeessadfithmucdalfEufyurhircAkyagunyefhoochJurbeskuvcibEtGanObHarjorcIcegsAcbor4OvRelb`ceOjulfockIcCiappitsOchEegnoansOadhefEcigitsOttUgAvNumJuhewyfsetVowoylbyemcymvavPhibzinnIgPidWibWob3!FejPiOfek(Grupkenbomvadtyg3symOnIpCyRawchIatlortyoyhefEetnuOdTadWutDochtenayQuoilEpdohafJec
 use_ssl: true
 gitorious_user: git
 exception_notification_emails:
 messaging_adapter: stomp
 disable_record_throttling: false
 symlinked_mirror_repo_base : "/var/www/gitorious/repo-mirror"
 hide_http_clone_urls: true
 is_gitorious_dot_org: false
 use_ldap_for_authorization: false

authentication.yml

production:
 disable_default: false
 methods:
 - adapter: Gitorious::Authentication::LDAPAuthentication	
   host: localhost
   port: 389
   base_dn: dc=coria-cfd,dc=fr
   group_search_dn: ou=groups,dc=coria-cfd,dc=fr
   login_attribute: uid
   distinguished_name_template: "uid={},OU=people,DC=coria-cfd,DC=fr"
   attribute_mapping:
    givenName: fullname
    publicEmail: email
   encryption: none
   bind_username: admin
   bind_password: XXXXXX
   membership_attribute_name: memberof
   members_attribute_name: member
   cache_expiry: 0

Problèmes rencontrées et solutions

ruby

bundle

se trouve dans le dossier bin installé à l'endroit spécifié lors de l'install.
ex si /opt spécifié pendant l'install: /opt/bin/bundle

problème concernant les gemmes

installer les gems via: gem install nom_premiere_gem nom_seconde_gemme ...

Si une gemme refuse de s'installer c'est qu'il manque des librairies dont elle dépend. Voir le site lié à la gemme généralement donné avec l'erreur

Gitorious

Problème lors de la création d'un dépôt:

exécuter: 
su - git
env RAILS_ENV=production script/poller start
puis mettre le champs "ready" du dépôt à 1 dans la table "repositories" mysql
NOTE: Problème récurrent, to fix la semaine prochaine

Catégorie: Git