The trashiest blog in the World...

Aller au contenu | Aller au menu | Aller à la recherche

Installer Redmine 0.9 sur CentOS

Pour les besoins du boulot, je me suis récemment plongé dans les différents logiciels de gestion de projets. J'en avais sorti quelques uns du lot en fonction de critères qui nous sont propres, à savoir : Redmine, DotProject, Collabtive, ...
Une seconde, puis une troisième sélection ont laissé en lice Redmine et DotProject.

DotProject - en dehors de son interface pour le moins vieillotte - avait semblé répondre à nos attentes, mais voilà : la dernière version stable n'est pas compatible PHP 5.3, et la branche 2.0 du logiciel ne semble plus évoluer au profit de la future version 3 qui sera basée sur Zend Framework. Cette ré-écriture n'en est qu'à son tout début. Pas très engageant que tout cela...

Redmine de son côté semble bénéficier d'un développement très régulier, et d'une communauté relativement importante et vivante. Un hic : c'est du ruby-on-rails ; et je ne connais pas le moins du monde cette technologie.

Autre « souci » à prendre en considération, le serveur sur lequel devra tourner cette application est sous CentOS et non sous Fedora ; je vais y revenir sous peu...

Donc, je me lance, je récupère une version 0.8 de Redmine que j'essaie d'installer sur mon PC du boulot, en Fedora 12. Pas trop de problèmes à noter, j'ai balbutié un peu et me suis complètement cassé les dents lorsque j'ai voulu brancher apache sur l'installation...

Entre temps, je découvre qu'une demande de revue a été faite sur le Bugzilla pour redmine ! Youpi :-) En y regardant de plus près, la page des pré-requis de Redmine m'apprend que la version de Rails de Fedora 12 n'est pas suffisante (2.3.4) ; de même que la version de Rack (1.0.0). Je vérifie sous Fedora 13, on a un Rails en 2.3.5 et un Rack en 1.1.0. Ça devrait aller.

Oui, mais... ça devrait :-/ La version de Rack requise est la version 1.0.1, strictement. Ni la version 1.0.0, ni la version 1.1.0 ne fonctionnent ! En local et à des fins de tests, il est toujours possible d'installer la bonne version du composant avec la commande :

$ gem install rack -v 1.0.1

Il est bien entendu hors de question que je lance une telle commande avec un utilisateur privilégié, la bonne version de rack reste donc installée sur un compte utilisateur local ; du coup, l'intégration dans apache ne fonctionne pas (ben oui, la version système de rack n'est pas la bonne, suivez un peu :-D ). Un petit coup d'oeil sur ma CentOS m'apprend que de ce côté je ne dispose pas non plus de la bonne version de Ruby, etc. Y'a plus qu'à ; comme dirait l'autre.

Dans un premier temps, je crée un utilisateur dédié à ce service :

# useradd -r -m redmine

Ensuite, je récupère la dernière version du trunk de Redmine (récupérer cette version n'est pas une obligation, bien loin de là ; mais l'intégration il y a quelques jours de la notion de sous-tâches directement dans Redmine m'intéressait au plus haut point :-p ).

$ svn co http://redmine.rubyforge.org/svn/trunk ./redmine

Voyons à installer les versions de Ruby et consorts dont nous avons besoin. J'ai re-compilé un certain nombre de paquets sur mon dépôt personnel EL5 (en version 64bits uniquement) à cet effet :

  • ruby
  • rubygems
  • rubygem-actionmailer
  • rubygem-actionpack
  • rubygem-activerecord
  • rubygem-activeresource
  • rubygem-activesupport
  • rubygem-fcgi
  • rubygem-mocha
  • rubygem-rack
  • rubygem-rails
  • rubygem-sqlite3-ruby
  • ruby-mysql
  • ruby-RMagick
  • ImageMagick-6.5.8.10

Pour bénéficier de ces versions, vous pouvez soit les récupérer sur mon dépôt à l'adresse http://rpms.ulysses.fr/el5/x86_64/ ; soit installer mon dépôt :

# rpm -ivh http://rpms.ulysses.fr/el5/x86_64/trashy-release-el5-1.noarch.rpm

Pour ensuite installer les programmes (ruby-RMagick n'est requis que pour l'export PNG des diagrammes de Gantt. Vous pouvez l'omettre si cette fonctionnalité ne vous est pas utile ;-) ) :

# yum --enablerepo=trashy install rubygem-rails ruby-mysql ruby-RMagick

/!\ ATTENTION /!\ Ce dépôt personnel est intrusif et remplace des paquets de base de CentOS. Ne l'activez pas par défaut, ou alors à vos risques et périls.

Nous voilà parés ; tous les composants logiciels sont présents, nous pouvons procéder à l'installation. Dans un premier temps, créons notre base MySQL (PostgreSQL est également supporté, référez-vous à la documentation de Redmine pour connaître la procédure à suivre) :

$ mysql -u root -p
mysql> create database redmine character set utf8;
mysql> create user 'redmine'@'localhost' identified by 'my_password';
mysql> grant all privileges on redmine.* to 'redmine'@'localhost';
mysql> flush privileges;

Depuis le dossier où vous avez stocké votre Redmine (/var/www/redmine dans mon cas), copiez le fichier config/database.yml.example vers config/database.yml puis éditez-le de la sorte :

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password
  encoding: utf8
  socket: /var/lib/mysql/mysql.sock

Les variables sont bien entendu à renseigner en fonction des choix que vous avez faits. Notez l'ajout de l'entrée socket sans laquelle je m'étais heurté à de jolies erreurs (il semblerait que ce soit un bogue d'un des composants ruby).
Redmine permet l'utilisation de diverses instances (production, développement, ...). Vous devrez donc dupliquer les informations relatives à la base dans les différentes instances que vous souhaitez utiliser. Une fois de plus, référez-vous à la documentation de Redmine pour en savoir plus à ce sujet.

Puisque j'ai utilisé une version SVN ultérieure à la révision 3055 ; j'ai eu à lancer la commande :

$ rake generate_session_store

Initialisons ensuite la base de données, et profitons-en pour y placer quelques données par défaut :

$ RAILS_ENV=production rake db:migrate
(in /var/www/redmine)
==  Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})
   -> 0.0812s
[...]
$ RAILS_ENV=production rake redmine:load_default_data
(in /var/www/redmine)

Select language: bg, bs, ca, cs, da, de, el, en, es, eu, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en] fr
====================================
Default configuration data loaded.

Fort bien ! Nous avons désormais une installation de Redmine fonctionnelle :-) Certains répertoires doivent être accessibles en écriture, mais le checkout svn ayant été fait avec l'utilisateur redmine qui se chargera de lancer le serveur de tests, nous n'avons pas à nous en préoccuper... Lançons donc ce fameux serveur :

$ ruby script/server webrick -e production
=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-03-16 20:15:58] INFO  WEBrick 1.3.1
[2010-03-16 20:15:58] INFO  ruby 1.8.6 (2010-01-11) [x86_64-linux]
[2010-03-16 20:15:58] INFO  WEBrick::HTTPServer#start: pid=14469 port=3000

Et voilà ; en vous connectant à http://monhote:3000 vous accéderez à votre instance Redmine. admin est le login et le mot de passe par défaut. Vous aurez peut-être à ouvrir le port 3000 pour la durée de ce test, ne l'oubliez pas ;-)

Vient ensuite la mise en ligne de l'application... À des fins de tests, je me suis risqué à essayer une technique très peu orthodoxe depuis apache... Mais qui n'a pas fonctionné comme escompté. Voici le fichier de configuration que j'avais utilisé (en substance) :

<VirtualHost *:80>
  ServerName redmine.mondomaine.com

  ErrorLog /var/log/httpd/redmine_error_log
  AccessLog /var/log/httpd/redmine_access_log combined

  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Un peu barbare, certes, mais c'était pour tester « rapidement ». Cette configuration a d'ailleurs fonctionné... Sur certains postes :-( Sur d'autres, j'avais la page de login correcte ; et une fois loggué ; plus de CSS ni de JS. Pas top donc. J'ai décidé de pousser le test plus loin, et d'utiliser le mod_fcgid pour accéder à cette application. Il faudra pour ce faire installer les composants qui vont bien :

# yum --enablerepo=trashy install mod_fcgid rubygem-fcgi

Créons ensuite le fichier de configuration apache qui va bien (/etc/httpd/conf.d/redmine.mondomaine.com.conf par exemple) :

<VirtualHost *:80>
        ServerName redmine.mondomaine.com

        # Logs :
        ErrorLog /var/log/httpd/redmine_errors.log
        CustomLog /var/log/httpd/redmine_access.log combined

        # Dossier contenant les pages
        DocumentRoot /var/www/redmine/public/

        <Directory /var/www/redmine/public/>
                Options Indexes ExecCGI FollowSymLinks
                Order allow,deny
                Allow from All
                AllowOverride All
        </Directory>
</VirtualHost>

Côté redmine, copiez le fichier fcgi d'exemple vers sa destination finale :

$ cp public/dispatch.fcgi.example public/dispatch.fgci

Attribuons maintenant les droits adéquats aux dossiers :

# cd /var/www/redmine
# chown -R apache:redmine files log tmp public/plugin_assets
# chown -R redmine: files/.svn log/.svn tmp/.svn

N'oubliez pas de spécifier ensuite quelle instance de Redmine devra être démarrée (production, development, ...). Pour ce faire, éditez le fichier config/environment.rb puis décommentez (et éditez au besoin) la ligne :

ENV['RAILS_ENV'] ||= 'production'

Pour vérifier que ça ne va pas vous claquer de suite entre les doigts, essayez simplement de lancer le dispatch.fcgi en ligne de commande (vous pouvez ignorer sereinement les erreurs sur les accès aux fichiers de log pour l'heure) :

$ /var/www/redmine/public/dispatch.fcgi

Enfin, une fois que tout est OK, relancez votre serveur apache :

# service httpd restart

Et admirez le résultat :-)

Il m'est arrivé, en fonction des configurations, que ça ne fonctionne pas comme escompté... Dans ce cas, l'une des premières choses à faire, est de commenter les ifModule (et leur contenu, évidemment) pour les mod_cgi mod_fastcgi ; ça ma « sauvé la vie » ;-)

Commentaires

1. Le mercredi 17 mars 2010, 09:43 par Pascal

Oh, qu'il est beau ce post. En plus pour centos :) Quand j'ai vu le basard que c'était, j'avais mis trac. Je vais pouvoir reessayer.

Me reste à l'adapter pour lightty mais je crois que je vais aussi essayer la méthode "orthodoxe" :)

2. Le mercredi 17 mars 2010, 23:29 par Pascal

Après recompilation des srpms pour centos 32 bits, j'ai suivis le tuto et tout marche comme sur des roulettes.

J'ai utilisé la méthode barbare avec lighttpd et ça marche nickel.

3. Le jeudi 18 mars 2010, 20:58 par Cocaaladioxine

J'ai installé redmine sur une centos il y a un an. Redmine est vraiment un outil génial, tout de suite adopté par tous les employés et les clients de mon client... :-) Je n'ai pas lu tout ton article mais je le garde sous la main car je vais devoir reinstaller ca :-D Tu vas voir, Redmine est très efficace!

4. Le dimanche 21 mars 2010, 16:06 par said

bonjour,

juste un mot : dotproject a ete repris par web2project.net
et est en cours de developpement

5. Le dimanche 21 mars 2010, 16:17 par trashy

@said : Le souci, c'est qu'aujourd'hui, côté DotProject, je n'ai le choix qu'entre une version stable un peu vieillissante, qui n'est pas compatible php 5.3 et une version en cours de développement qui semble être plus dans sa phase de départ que dans sa phase finale :-)

S'il s'agissait de prendre une décision plus tard, j'aurai certainement conservé DotProject en lice (en fonction bien entendu de ce qu'aurait donné l'actuelle version de développement d'ici là).

6. Le mercredi 7 avril 2010, 09:51 par Dö

Salut,

Déjà merci pour le tuto qui m'a bien aidé.
Sinon, j'ai un petit problème effectivement quand je lance la commande :

ruby script/server webrick -e production

je peux me connecter à Redmine.

Après je lance la commande :

yum --enablerepo=trashy install mod_fcgid rubygem-fcgi

Mais là j'ai cette erreur : No package mod_fcgid available.
No package rubygem-fcgi available.

Enfin je continu et tente la suite avec le fichier de conf de apache mais rien y fait car après je lance la commande suivante pour tester le cgi :

/var/www/redmine/public/dispatch.fcgi

et là les grosses erreur arrivent et impossible d'accéder à redmine :

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- fcgi (MissingSourceFile)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /var/www/redmine/vendor/rails/activesupport/lib/active_support/dependencies.rb:158:in `require'
from /var/www/redmine/vendor/rails/railties/lib/fcgi_handler.rb:1
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /var/www/redmine/vendor/rails/activesupport/lib/active_support/dependencies.rb:158:in `require'
from /var/www/redmine/public/dispatch.fcgi:22

Voila, si quelqu'un à une idée je suis preneur, car j'aimerai bien profiter de ce magnifique outil.

@+ et encore merci.

7. Le mercredi 7 avril 2010, 18:21 par trashy
@Dö : le mod_fcgid n'est pas fourni par mon dépôt, mais par Epel (http://fedoraproject.org/wiki/EPEL/FAQ#howtouse).
Je ne l'ai effectivement pas précisé dans mon billet je vais aller l'y ajouter :-)
Pour le rubygem-fcgi, je suis un peu plus surpris... Une solution serait de le télécharger (http://rpms.ulysses.fr/el5/x86_64/rubygem-fcgi-0.8.8-1.el5.trashy.x86_64.rpm) et d'utiliser yum localinstall ; voir si ça corrige le souci. Sans ces deux paquets, l'erreur que tu obtiens est « normale » ; il ne trouve pas le gem fcgi (et pour cause !).
8. Le jeudi 8 avril 2010, 14:12 par Dö

Bonjour trashy,

merci pour ta réponse c'est sympa.
Bon j'ai réussi à avancer l'installation de tes paquets marches sans problème (merci).
Seulement voilà, après avoir fais un fichier dans: /etc/httpd/conf.d/

Et avoir suivi toutes les étapes je redémarre apache et là j'ai cette erreur :

Démarrage de httpd :Warning: DocumentRoot /var/www/redmine/public/ does not exist

Quand je me connecte sur l'ip du serveur avec firefox j'ai ça :

Forbidden

You don't have permission to access / on this server.
Apache/2.2.3 (CentOS) Server at 192.168.122.158 Port 80

J'ai essayer de changer le propriétaire de public en faisant :

chown -R apache:redmine files log tmp public/

mais rien y fait si tu as une idée, je suis toujours preneur.

Encore merci @+.

9. Le lundi 12 avril 2010, 08:01 par trashy

Ton dossier var/www/redmine/public existe-t-il ?

S'il existe, je ne vois pas trop le problème...

10. Le mardi 13 avril 2010, 10:57 par Dö

Oui ce dossier existe bien.
Je sais plus quoi faire j'ai été voir la doc officielle, c'est toujours pareil.
Est-ce une déclaration à faire pour qu'il arrive à lire les cgi ou que pour apache puisse interpréter ruby ou perl; ou est-ce un problème avec subversion.

En tout cas je sèche complètement.

Mais merci de ton aide.

@+

11. Le vendredi 16 avril 2010, 23:21 par trashy

@Dö

Il faut prendre les choses dans l'ordre je pense... D'abord, t'assurer que Redmine fonctionne, via la commande :

ruby script/server webrick -e production

Si ça fonctionne ; tout est OK côté Redmine, et le souci vient alors soit du CGI (qu'il faut déjà exécuter en ligne de commande pour éviter certaines erreurs - je l'ai expliqué dans l'article) ; soit de la configuration apache/whatever :-)