User:Lartigue/copie linterweb/mise en place depots
Contents
- 1 Documentations Gitorious
- 2 Procédure d'installation de Gitorious sous Debian
- 3 Intégration à la solution en place
- 4 Exemples des fichiers de configuration
- 5 Problèmes rencontrées et solutions
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
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