In questa guida spiegherò come installare ChiliProject (il fork del più famoso Redmine), Gitolite e come gestire i repository GIT da ChiliProject grazie al plugin (che funziona anche con Redmine) redminegithosting (del plugin ho indicato il mio fork che permette di impostare una cartella temporanea custom, dato che la mia /tmp viene montata noexec e il plugin non funziona. L'originale lo trovate qui).

Il tutto verrà installato su Ubuntu server 10.04 LTS.

A differenza delle guide che si trovano in giro la mia configurazione farà tutto con i permessi di un utente utilizzando RVM e Passenger. Tutti i comandi che citerò sono lanciati dalla shell dell'utente, quindi quando ho bisogno di permessi elevati utilizzo sudo. L'utente usato sarà lo stesso che userà gitolite, quindi se non volete "sporcare" il vostro potete crearne uno ad-hoc, ad esempio git.

Installare RVM

La wiki del progetto è molto dettagliata. I passaggi, in breve, sono questi.

Iniziamo installando un po' di pacchetti:

sudo aptitude install build-essential curl libssl-dev zlib1g-dev libreadline5-dev libxml2-dev git-core imagemagick libmagick-dev libmagickcore-dev

Si può quindi installare RVM:

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

Se lo script non lo avesse fatto inserite la seguente riga in fondo a .bashrc (o .zshrc, a seconda di quale shell usate):

[[ -s "/home/drwolf/.rvm/scripts/rvm" ]] && source "/home/drwolf/.rvm/scripts/rvm"

Date comunque una lettura all'output dello script di installazione di RVM.
Riloggatevi e potrete lanciare il comando rvm. Fatelo per installare Ruby, io userò Ruby Enterprise Edition, volendo si può usare Ruby 1.8.7:

rvm install ree
rvm use --default ree

La mia scelta per il database è MySQL, voi fate la vostra:

sudo aptitude install mysql-server libmysqlclient-dev

A questo punto il necessario è installato e posso creare il gemset per ChiliProject e installare le gemme necessarie:

rvm gemset create chiliproject
rvm gemset use chiliproject
gem install bundler

Installare ChiliProject

Come spiegato farò tutto da utente, quindi posso clonare il repository di ChiliProject direttamente nella home:

cd
git clone git://github.com/chiliproject/chiliproject.git
cd chiliproject
git checkout stable

Con bundle è immediato installare le gemme necessarie:

bundle install --without=test sqlite postgres mysql

Se non avete scelto MySQL 5.1 come me guardate la pagina della wiki per lanciare bundler con le giuste opzioni.
A questo punto bisogna creare il database e l'utente per usarlo:

create database chiliproject character set utf8;
grant all on chiliproject.* to 'chiliproject'@'localhost' identified by 'my_password' with grant option;

Questi dati vanno inseriti in ChiliProject, in config/database.yml (fate attenzione all'adapter, che ho cambiato in mysql2):

production:
  adapter: mysql2
  database: chiliproject
  host: localhost
  port: 3306
  username: chiliproject
  password: my_password

Il file database config/database.yml.example è il template da usare per config/database.yml. Stessa cosa dicasi per config/configuration.yml.example. Usate l'apposita pagina della wiki per configurare quest'ultimo file.
Per concludere lanciate questi rake:

bundle exec rake generate_session_store
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data

Per testare l'installazione si può lanciare Webrick e collegarsi via HTTP al server sulla porta 3000:

bundle exec script/server -e production

Installare Passenger per Apache

Per servire ChiliProject sulla porta 80 bisogna installare Apache e Passenger:

sudo apt-get install apache2 apache2-threaded-dev libcurl4-openssl-dev
gem install passenger
passenger-install-apache2-module

Terminata l'installazione bisogna creare il file del modulo di apache (/etc/apache2/mods-available/passenger.load) con il contenuto suggerito dall'installer, nel mio caso:

LoadModule passenger_module /home/tommyblue/.rvm/gems/ree-1.8.7-2011.03@chiliproject/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
PassengerRoot /home/tommyblue/.rvm/gems/ree-1.8.7-2011.03@chiliproject/gems/passenger-3.0.9
PassengerRuby /home/tommyblue/.rvm/wrappers/ree-1.8.7-2011.03@chiliproject/ruby

Per attivare il modulo:

sudo a2enmod passenger

Infine bisogna creare un VirtualHost (o modificare, come ho fatto io, quello di default) facendo puntare la DocumentRoot alla cartella /public di ChiliProject:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /home/tommyblue/chiliproject/public
        <Directory /home/tommyblue/chiliproject/public>
                AllowOverride all              
                Options -MultiViews            
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

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

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Riavviamo Apache e ChiliProject sarà sulla porta 80. I dati per il primo accesso sono admin/admin.

Premessa: le chiavi

Mi è stato fatto giustamente notare che non risulta molto chiaro quali chiavi usare e quando, quindi aggiungo una breve panoramica.

Da qui in poi serviranno 3 coppie di chiavi (volendo anche 2 con la coincidenaza della prima e della terza, ma meglio 3 "per stare manzi" [cit. Sciamp]):

  • Una chiave YourName usata per l'amministrazione iniziale di Gitolite. Questa chiave potrà essere sempre usata per amministrare i repository su Gitolite, ma dato che lo scopo della guida è quello di usare Chiliproject proprio a tal fine, questa sarà una chiave usata soltanto all'inizio per poter dare alla chiave gitolite i permessi di amministrazione
  • La sovracitata chiave gitolite, usata da Chiliproject per amministrare i repository di Gitolite via via che dall'interfaccia vengono creati o vengono modificati i permessi degli utenti
  • Una chiave per l'utente finale, non citata in questa guida, la cui parte pubblica andrà inserita nell'apposito form generato dal plugin Redmin Git Hosting nel proprio profile in Chiliproject. Questo sarà l'utente che userete sempre per lavorare con Chiliproject e la chiave è quella che vi permette di clonare e pushare i repository su cui avete i giusti permessi (esattamente come fa GitHub).

Installare Gitolite

Come citato nella stessa documentazione di Gitolite i passaggi sono pochi e semplici:

cd ~
git clone git://github.com/sitaramc/gitolite
cd gitolite
src/gl-system-install
gl-setup ~/YourName.pub

Dove YourName.pub è la chiave pubblica dell'amministratore di gitolite. Cambiate il nome con quello che poi userete per amministrare gitolite.
La documentazione completa si trova qui: http://sitaramc.github.com/gitolite/

Combinare le due cose

Per permettere la gestione di Gitolite a ChiliProject è necessario il plugin Redmine Git Hosting. Per iniziare bisogna creare una coppia di chiavi per un utente gitolite:

ssh-keygen -t rsa -f gitolite

Si clona quindi il repository di gestione di Gitolite:

git clone git@server:gitolite-admin

dove git di git@server è l'utente di sistema usato per l'installazione del tutto (nel primo paragrafo suggerivo di usare git).
Si sposta il file gitolite.pub in gitolite-admin/keydir e si modifica gitolite-admin/conf/gitolite.conf aggiungendo l'utente gitolite al repository gitolite-admin:

repo    gitolite-admin
        RW+     =   YourName gitolite

Si committa e si pusha. Adesso l'utente gitolite ha i giusti permessi per configurare Gitolite.

A questo punto si torna a lavorare su ChiliProject, creando la cartella ~/chiliproject/.ssh e spostandoci le chiavi pubblica/privata generate precedentemente:

cd ~/chiliproject
mkdir .ssh
cp /somewhere/gitolite .ssh/gitolite
cp /somewhere/gitolite.pub .ssh/gitolite.pub
chmod 700 .ssh
chmod 600 .ssh/gitolite
chmod 644 .ssh/gitolite.pub

Finalmente si può installare il plugin:

cd ~/chiliproject/vendor/plugins
git clone https://github.com/tommyblue/redmine_git_hosting.git
rm -rf redmine_git_hosting/.git

Prima di lanciare la migrazione bisogna modificare il file redminegithosting/init.rb per adattarlo al proprio sistema. Consiglio di leggere direttamente nella wiki il significato dei vari parametri.
Si può quindi lanciare la migrazione, nel mio caso mi ha anche chiesto di aggiungere alcune gemme, quindi:

bundle install
RAILS_ENV=production rake db:migrate_plugins
touch tmp/restart.txt

Adesso loggandosi in Chiliproject, nella pagina "Il mio utente" è possibile inserire la propria chiave pubblica, che deve essere unica (quindi non tra quelle usate finora).

Per concludere si va in Amministrazione > Plugin e si configura il plugin. Le opzioni sono le stesse che si trovano in init.rb, in teoria avendo configurato init.rb dovreste già trovare tutto a posto, ma a volte i dati sono nuovamente da impostare. In più ho abilitato Automatically Initialize Git Repositories For New Projects: in questo modo ogni volta che creo un progetto, ChiliProject mi crea un repository Git su cui posso lavorare.
Una volta configurato il plugin andate anche in "Ruoli e permessi" e abilitate per il Gestore i nuovi permessi per creare i mirror dei repository.

blog comments powered by Disqus