Git : Gitolite et Gitlab sur Debian 6.0

De wikiGite

Pré-requis

Installer les dépendances :

aptitude install -y git-core wget curl gcc checkinstall libxml2-dev libxslt1-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev openssh-server git-core python-dev python-pip libyaml-dev libyaml-ruby libicu-dev tcl8.5 python-setuptools python-dev

Installer Redis Server

Depuis les dépots (1.2.6):

aptitude install redis-server

Depuis les sources :

wget http://redis.googlecode.com/files/redis-2.4.15.tar.gz
tar xvzf redis-2.4.15.tar.gz
cd redis-2.4.15.tar.gz
make && make test
make install

Ruby

Installation

Par compilation en récuperant les sources sur http://ftp.ruby-lang.org/pub/ruby/1.9/ :

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.X.tar.gz
tar xfv ruby-1.9.X.tar.gz
./configure
make
make install

Ne pas s'inquieter si chemin d'installation de correspond pas à la version de ruby installé (1.9.1 ou lieu de 1.9.4), cela est fait pour faciliter la mise a jour de ruby.

Pour être sûr :

ruby -v

Gems

Mise à jour des gems :

gem update --system


Installation de rails :

gem install rails

Installer gitolite

Gitolite permet d'héberger des dépôts git, en y ajoutant une gestion des droits d'accès, non seulement par dépôt, par branche et par tag. Il permet notamment de préciser si un utilisateur (ou groupe d'utilisateur) a le droit de push sur une branche.

Gitolite permet de gérer un grand nombre de dépôt et d'utilisateurs, sans même avoir besoin de leur donner un compte sur le serveur, mais juste en intégrant leur clef publique.

Depuis le gestionnaire de paquet (recommendé)

aptitude install gitolite

Générer une paire de clef :

su - gitolite
ssh-keygen
exit

puis configurer gitolite :

dpkg-reconfigure gitolite

Rentrer le chemin de la clef public lorsque demandé : /var/lib/gitolite/.ssh/id_rsa.pub

Puis donner les droit par defaut aux depots :

sed -i 's/0077/0007/g' /var/lib/gitolite/.gitolite.rc

et les droits à l'utilisateur :

chmod 770 /var/lib/gitolite/repositories
chown -R gitolite:gitolite /var/lib/gitolite

Depuis le sources

cd /var/lib/

Installer gitolite :

git clone git://github.com/gitlabhq/gitolite

Créer un utilisateur gitolite qui utilisera gitolite :

adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /var/lib/gitolite gitolite
chown -R gitolite:gitolite gitolite/

Générer une paire de clef pour l'utilisateur gitolite :

su - gitolite
ssh-keygen

Installation de gitolite:

PATH=/var/lib/gitolite/bin:$PATH
/var/lib/gitolite/src/gl-system-install
sed -i 's/0077/0007/g' /var/lib/gitolite/share/gitolite/conf/example.gitolite.rc
gl-setup -q .ssh/id_rsa.pub
exit

Modification des permissions :

chmod -R 770 /var/lib/gitolite/repositories/
chown -R gitolite:gitolite /var/lib/gitolite/repositories/

Test de gitolite ( A faire obligatoirement )

CLoner le repo admin pour ajouter localhost à known_hosts et s'assurer que l'utilisateur peut acceder à gitolite :

su - gitolite
git clone gitolite@localhost:gitolite-admin.git /tmp/gitolite-admin

Si la commande fonctionne, le supprimer

rm -rf /tmp/gitolite-admin
exit

Apache et Phusion passenger

Phusion Passenger sert à connecter des applis Rack ou Rails avec Apache (ou Nginx).


Installation de apache :

aptitude install apache2


Installation de passenger

gem install passenger


Installation des dépendances de passenger :

aptitude install apache2-dev

Compilation et activation de passenger

passenger-install-apache2-module

Créez le fichier de configuration du module Passenger pour Apache 2 (a adapater en fonction de la sortie précedente) :

echo "LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so" > "/etc/apache2/mods-available/passenger.load"
echo "PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12
PassengerRuby /usr/local/bin/ruby
PassengerDefaultUser www-data" > "/etc/apache2/mods-available/passenger.conf"

activer le module :

a2enmod passenger

Gitlab

Dépendances

pip install pygments
gem install bundler

Installation

cd /var/www

git clone git://github.com/gitlabhq/gitlabhq.git -b stable

cd gitlabhq/

Renommer les fichiers de configuration

cp config/gitlab.yml.example config/gitlab.yml

Modifier la configuration de gitlab /var/www/gitlabhq/config/gitlab.yml :

git_host:
  system: gitolite
  admin_uri: gitolite@URL_DU_SITE:gitolite-admin
  base_path: /var/lib/gitolite/repositories/
  host: URL_DU_SITE
  git_user: gitolite
  # port: 22

Séléctionner la base de donnée :

  • sqlite :
cp config/database.yml.sqlite config/database.yml
  • Mysql :
aptitude install mysql-server
mysql -u root -p
CREATE DATABASE  `gitlabhq_production`;
CREATE USER `gitlab`@`localhost` IDENTIFIED BY 'MDP' ;
GRANT ALL PRIVILEGES ON `gitlabhq_production` . * TO 'gitlab'@'localhost';
cp config/database.yml.example config/database.yml

Penser à changer username/password dans config/database.yml


Dans le répertoire de gitlab :

bundle install

Configuration de la BDD :

rake db:setup RAILS_ENV=production
rake db:seed_fu RAILS_ENV=production

Tester la configuration

su gitolite
rake gitlab:app:status RAILS_ENV=production
Starting diagnostic
config/database.yml............exists
config/gitlab.yml............exists
/var/lib/gitolite/repositories/............exists
/var/lib/gitolite/repositories/ is writable?............YES
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 726 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Can clone gitolite-admin?............YES
UMASK for .gitolite.rc is 0007? ............YES

Ignorer les erreurs de droits


Créer ensuite le fichier gitlab.http dans /etc/apache2/sites-available :

<VirtualHost *:80>
    ServerName www.yourhost.com
    # !!! Be sure to point DocumentRoot to 'public'!
    DocumentRoot /var/www/gitlabhq/public    
    <Directory /var/www/gitlabhq/public>
        # This relaxes Apache security settings.
        AllowOverride all
        # MultiViews must be turned off.
        Options -MultiViews
    </Directory>
</VirtualHost>

Puis activer le site :

a2ensite gitlab.http

Autoriser apache à utiliser gitlab

Se connecter a vec l'utilisateur apache pour creer les fichiers de conf ssh :

chown -R www-data:www-data /var/www/

su -l www-data -s /bin/bash
ssh localhost
exit
cp -f /var/lib/gitolite/.ssh/id_rsa /var/www/.ssh/ 
chown www-data:www-data /var/www/.ssh/id_rsa 
chmod 600 /var/www/.ssh/id_rsa

Ajouter apache au groupe gitolite :

usermod -a -G gitolite www-data

Lui donner les droits :

chown -R www-data:www-data /var/www/gitlabhq

Donner les permissions au repo :

chmod 770 /var/lib/gitolite/repositories/

lancer apache :

/etc/init.d/apache2 restart

Afin d'eviter une lenteur au premier démarage précharger le site :

curl -k URL_DU_SITE

Afin de tester si la configuration est bonne. Se connecter avec apache :

git clone gitolite@localhost:gitolite-admin.git /tmp/gitolite-admin


Se connecter sur l'interface

user: admin@local.host
pass: 5iveL!fe

Références

Installation de gitlab sur fedora 16[1]
Wiki installation de gitlab[2]