Installer une boîte à outils permanente comme un nul(l) 2/6

Vous venez de vous acheter un serveur personnel, c’est bien, mais que pourriez-vous y installer ?

Vous pouvez par exemple commencer par installer de quoi héberger les sources de vos projets.

Vous n’aurez alors plus besoin de Github et consorts. Les services secrets n’auront plus accès à vos sources et vos documents. Vous pourrez conserver plusieurs versions de vos documents officiels (lettres de motivations, CV, etc.) et même les gérer avec des branches et des tags, comme tout projet informatique ! (Comptes 2012-tag, Comptes 2013-tag, etc.)

Bref, nous allons voir comment installer un système de gestion de sources sur votre serveur.

Une bibliothèque dématérialisée.

Prérequis

Pour mener à bien les étapes décrites dans cet article, vous devez avoir :

  • un serveur avec Debian installé et fonctionnel.
  • une connexion Internet.
  • les droits suffisants pour ouvrir des ports sur votre routeur ADSL (voir la documentation de votre boîtier ADSL)

Introduction

Parmi la nuée de logiciels de gestion de sources, j’ai choisi d’installer un système récent et très utilisé : git.

Administrer un gestionnaire de sources en lignes de commandes n’est pas très convivial. En plus, les personnes de votre foyer (pas forcément geek) vont l’utiliser !

Je décrirai aussi comment installer un site Internet comme Github pour administrer votre serveur. J’ai choisi Gitorious.

Tout au long de cet article, je suivrai les étapes décrites sur le site officiel de Gitorious, corrigeant et adaptant les étapes pour convenir à une installation fraîche de Debian Wheezy.

En cas de doute, cette commande vous permet de connaître quelle version de Debian vous utilisez :

lsb_release -d

Vous pouvez bien entendu effectuer toutes les actions qui vont suivre via SSH. Vous n’avez donc plus besoin d’écran, de souris ou de clavier pour votre serveur.

Installer les paquets nécessaires

Déjà, à cette étape, la documentation (certes obsolète) du site officiel oublie un paquet : memcached.

La commande à entrer est :

sudo apt-get install git build-essential ruby1.8-dev ruby-switch bundler libapache2-mod-passenger libapache2-mod-xsendfile activemq mysql-server mysql-client sphinxsearch git apg imagemagick unzip libmysqlclient-dev libxml2-dev libxslt1-dev memcached vim zsh

Notez que j’ai ajouté vim et zsh, respectivement un éditeur de texte et un shell, à mon sens plus agréables à utiliser.

Récupérer Gitorious

Par souci de cohérence sans doute, Gitorious est hébergé sous git. 🙂

Récupérons les sources de l’application :

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

Ajouté le 12 septembre 2013 : Pour ceux qui voudraient utiliser GIT derrière un proxy HTTP et qui auraient une erreur du type « Couldn’t resolve host », il faut configurer le proxy sous GIT et utiliser une URL du type http:// :

sudo git config --global http.proxy http://<NOM D'UTILISATEUR>:<MOT DE PASSE>@<PROXY>:<PORT>
sudo git clone http://git.gitorious.org/gitorious/mainline.git /var/www/gitorious

Fin de l’ajout.

Cet article n’a pas pour but de vous faire un cours sur GIT, concrètement, cette commande permet de récupérer tout ce qui se trouve sur le référentiel de sources de Gitorious et de copier celui-ci dans le dossier /var/www/gitorious.

Pour plus de stabilité, nous utiliserons un tag de ce référentiel.

… Je vois que je viens d’en perdre un certain nombre… Un tag, dans le domaine de la gestion de sources, permet de figer l’état du code à un instant donné. Concrètement, il permet de sauvegarder les versions stables d’une application.

Nous pouvons lister les tags disponibles grâce à la commande :

git tag

Tags de gitorious

Par souci de stabilité, je ne choisirai pas la version v3-rc1, mais la v2.4.9.

Nous récupérons donc les sources de la version 2.4.9 :

sudo git reset --hard v2.4.9

Puis, comme indiqué dans la documentation, nous récupérons les sous-modules :

sudo git submodule update --init

Ajouté le 12 septembre 2013 : pour ceux qui utiliseraient GIT derrière un proxy, vous devrez modifier quelques fichiers pour utiliser le protocole http:// à la place de git://. Vous pouvez utiliser grep pour vous aider :

grep -R "git://gitorious.org" .

Il faudra que vous remplaciez « git://gitorious.org » par « http://git.gitorious.org &raquo; là où les variables url sont initialisées.

Fin de l’ajout.

Configurer ruby

Il vous faut forcer ruby 1.8 pour utiliser Gitorious :

sudo ruby-switch --set ruby1.8

Il faut ensuite installer les gemmes ruby :

sudo bundle install

Vous devez également configurer le dossier d’installation de ruby dans le fichier /var/www/gitorious/doc/templates/ubuntu/git-daemon, à la variable RUBY_HOME.

Ce dossier peut être trouvé à l’aide de la commande :

gem environment

Il s’agit de la variable RUBY EXECUTABLE à laquelle on retire /bin/ruby1.8.

Là encore, la documentation n'explique pas cette étape.

Là encore, la documentation n’explique pas cette étape.

Configurer les droits utilisateurs

Avoir un serveur sécurisé, c’est quand-même mieux non ? (Surtout pour un pirate)

La documentation décrit très bien comment créer un utilisateur avec des droits restreints pour votre application et lui donner les droits pour le strict nécessaire :

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
mkdir .ssh tmp/pids repositories tarballs  tarballs-work
touch .ssh/authorized_keys
chmod -R go-rwx .ssh

Voici ce que font ces commandes :

  1. Nous créons un utilisateur système (technique), dont le dossier-utilisateur est le dossier où vous avez installé Gitorious. Vu que ce dossier existe, on demande à ce qu’il ne soit pas créé. Un groupe portant le même nom que l’utilisateur est aussi créé. Son shell sera bash et le nom de cet utilisateur (et de son groupe) est git.
  2. Ce nouvel utilisateur, nous le nommons propriétaire du dossier où est installé Gitorious, ainsi que de tous ses sous-répertoires et fichiers.
  3. Nous nous connectons en tant que git dans son répertoire personnel.
  4. Nous créons quelques dossiers nécessaires à Gitorious
  5. … ainsi qu’un fichier pour supporter SSL.
  6. Nous restreignons au seul propriétaire les droits pour le dossier .ssh, et tout ce qu’il contient.

Configurer Gitorious

Avant tout, je vous conseille de générer deux mots de passe ( l’un de 16 caractères, l’autre de 64 ) et de les noter dans un coin de fichier.

Pour faire ce qui suit, vous devez toujours être connecté en tant que git.

Vous pouvez utiliser les commandes suivantes pour vous aider :

apg -m 16
apg -m 64

Nous nous fonderons sur les fichiers d’exemple de Gitorious :

cp ~/config/database.sample.yml ~/config/database.yml
cp ~/config/gitorious.sample.yml ~/config/gitorious.yml
cp ~/config/broker.yml.example ~/config/broker.yml

Ouvrons le fichier ~/config/database.yml pour y renseigner le nom d’utilisateur et le mot de passe MySQL que nous allons créer. J’utilise par exemple l’utilisateur gitorious et le mot de passe de 16 caractères que j’ai généré.

Modifions maintenant ~/config/gitorious.yml :

  1. Retirons les sections development et test à la fin du fichier.
  2. Configurons notre nom de domaine aux variables gitorious_host et gitorious_client_host. Si vous n’avez pas encore de nom de domaine, vous pouvez temporairement utiliser le nom de votre ordinateur en minuscules, que vous retourne la commande hostname. Pour rendre disponible Gitorious sur Internet, vous êtes obligé d’avoir un nom de domaine, sans quoi, vous ne pourrez pas vous authentifier !
  3. Configurons également le dossier d’installation de Gitorious :
    • repository_base_path: "/var/www/gitorious/repositories"
    • archive_cache_dir: "/var/www/gitorious/tarballs"
    • archive_work_dir: "/var/www/gitorious/tarballs-work"
  4. Pour utiliser HTTPS, nous devons configurer quelques variables supplémentaires
    • cookie_secret: <VOTRE MOT DE PASSE DE 64 CARACTÈRES>
    • hide_http_clone_urls: true
  5. Enfin, nous devons spécifier que nous ne sommes pas gitorious.org (qui utilise ruby 1.9) :
    • is_gitorious_dot_org: false

Créer la base de données

Par souci de simplicité, j’utilise MySQL, mais il me semble qu’on peut configurer d’autres types de bases de données.

Nous nous connectons à MySQL pour créer une base de données appelée gitorious, qui appartiendra à un utilisateur du même nom ayant le mot de passe que nous avons configuré dans le fichier ~/config/database.yml :

mysql -u root -p
>> CREATE DATABASE gitorious;
>> GRANT ALL PRIVILEGES ON gitorious.* to 'gitorious'@'localhost' identified by '<VOTRE MOT DE PASSE DE 16 CARACTÈRES>';

Remplissons la base de données à l’aide des scripts fournis par Gitorious :

export RAILS_ENV=production
bundle exec rake db:create  
bundle exec rake db:migrate

Construire l’annuaire Sphinx

Notez ici que la documentation obsolète… l’est réellement. La version 2.4.9 de Gitorious n’utilise en effet plus ultrasphinx, mais thinking_sphinx. Il faut s’adapter :

rake ts:conf
rake ts:rebuild
bundle exec rake thinking_sphinx:configure
bundle exec rake thinking_sphinx:index

Paramétrons ensuite une tâche planifiée pour réindexer nos fichiers régulièrement :

crontab -e
>> * * * * * cd /var/www/gitorious && bundle exec rake thinking_sphinx:index rails_env=production

Si vous n’êtes pas à l’aise avec l’éditeur de texte qui vient de s’ouvrir, Ctrl+O permet de sauvegarder, vous devez ensuite taper sur Entrée pour valider. Ctrl+X permet de quitter.

A cause de l’utilisation de thinking_sphinx, le script de démarrage du démon n’existe pas.

Nous devons créer le fichier /var/www/gitorious/doc/templates/ubuntu/git-thinking-sphinx, contenant les données suivantes :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          git-thinking-sphinx 
# Required-Start:    mysql 
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: thinking_sphinx daemon
# Description:       Starts the thinking_sphinx daemons needed by Gitorious
### END INIT INFO

# Author: Fabio Akita <fabioakita@gmail.com>

PATH=$PATH:/var/lib/gems/1.8/bin
GITORIOUS_HOME="/var/www/gitorious"
RETVAL=0
START_CMD="cd $GITORIOUS_HOME && rake thinking_sphinx:start RAILS_ENV=production"
STOP_CMD="cd $GITORIOUS_HOME && rake thinking_sphinx:stop RAILS_ENV=production"
RESTART_CMD="cd $GITORIOUS_HOME && rake thinking_sphinx:restart RAILS_ENV=production"
LOCK_FILE=/var/lock/git-thinking-sphinx
PID_FILE=$GITORIOUS_HOME/db/sphinx/log/searchd.pid

case "$1" in
  start)
    echo -n "Starting git-thinking-sphinx"
    /bin/su - git -c "$START_CMD" 1>/dev/null 2>/dev/null && echo "." || echo ": FAILURE (already running?)"
    ;;
  stop)
    echo -n "Stopping git-thinking-sphinx"
    /bin/su - git -c "$STOP_CMD" 1>/dev/null 2>/dev/null && echo "." || echo ": FAILURE (maybe not running?)"
    ;;
  restart)
    echo -n "Restarting git-thinking-sphinx"
    /bin/su - git -c "$RESTART_CMD" 1>/dev/null && echo "."  || echo ": FAILURE"
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart}"
    RETVAL=1
esac
exit $RETVAL

Modifiez maintenant les autorisations sur ce fichier pour pouvoir l’exécuter :

sudo chmod a+x /var/www/gitorious/doc/templates/ubuntu/git-thinking-sphinx

Ce fichier peut être récupéré ici : https://github.com/brugidou/gitorious-cookbook/blob/master/templates/default/git-thinking-sphinx.erb

Installer les scripts et démarrer les services

Vous devez à présent quitter l’utilisateur git et reprendre vos droits standard.

Installer

Vérifiez que vous avez bien configuré la variable RUBY_HOME dans le fichier /var/www/gitorious/doc/templates/ubuntu/git-daemon pour faire référence au bon dossier.

Installer le démon git, logrotate, gitorious et thinking-sphinx :

sudo ln -s /var/www/gitorious/doc/templates/ubuntu/git-daemon /etc/init.d/
sudo ln -s /var/www/gitorious/doc/templates/ubuntu/git-thinking-sphinx /etc/init.d/
sudo ln -s /var/www/gitorious/doc/templates/ubuntu/gitorious-logrotate /etc/logrotate.d/gitorious
sudo ln -s /var/www/gitorious/script/gitorious /usr/local/bin/

Certaines tâches de Gitorious sont asynchrones. Nous devons configurer le démon qui lira les messages envoyés dans une file d’attente.

Créons le script de lancement de ce démon, dans le fichier /etc/init.d/git-poller :

#!/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;RAILS_ENV=production script/poller $@"

Nous devons en autoriser l’exécution :

sudo chmod 755 /etc/init.d/git-poller

Démarrer

Démarrons les services. Si vous avez la moindre erreur ici, Gitorious ne fonctionnera pas correctement.

sudo service git-daemon start
sudo service git-thinking-sphinx start
sudo service git-poller start

Si tout s’est bien passé, nous pouvons activer ces services au démarrage :

sudo insserv git-daemon git-thinking-sphinx git-poller

ActiveMQ

Comme je l’ai expliqué plus haut, Gitorious utilise des files d’attentes pour ses tâches asynchrones. Nous devons alors configurer ActiveMQ. Commençons par créer les fichiers par défaut pour notre file d’attente :

cd /etc/activemq/instances-available
sudo cp -r main gitorious

Modifions le fichier /etc/activemq/instances-available/gitorious/activemq.xml pour le faire correspondre à notre configuration :

<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!-- Allows us to use system properties as variables in this configuration file -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

    <broker xmlns="http://activemq.apache.org/schema/core"
            brokerName="localhost"
            dataDirectory="${activemq.base}/data">

        <!--
            Configure message persistence for the broker. The default persistence
            mechanism is the KahaDB store (identified by the kahaDB tag).
            For more information, see:

            http://activemq.apache.org/persistence.html
        -->
        <persistenceAdapter>
            <kahaDB directory="${activemq.base}/data/kahadb"/>
        </persistenceAdapter>

        <!--
            The transport connectors expose ActiveMQ over a given protocol to
            clients and other brokers. For more information, see:

            http://activemq.apache.org/configuring-transports.html
        -->
          <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="64 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="256 mb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="32 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

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

    </broker>

</beans>

Plusieurs choses sont importantes ici :

  • systemUsage doit se situer avant transportConnectors car les éléments doivent être classés par ordre alphabétique pour que le XML soit valide.
  • l’URI commence bien par stomp:// et non pas tcp:// (J’ai fait l’erreur…).
  • le paramétrage par défaut de systemUsage est tout simplement délirant (100 Giga-octets de stockage et 50 Giga-octets de mémoire temporaire), il faut absolument le configurer.

Nous activons ensuite cette nouvelle file d’attente :

cd /etc/activemq/instances-enabled
sudo ln -s ../instances-available/gitorious .

Enfin, nous redémarrons ActiveMQ :

sudo service activemq restart

Apache

Nous en avons bientôt terminé (ouf!). Il ne nous reste plus qu’à démarrer le site. Pour ce faire, nous le publierons sur un serveur apache.

Nous devons créer deux fichier :

  • /etc/apache2/sites-available/gitorious
<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  
                XSendFilePath /var/www/gitorious/tarballs  
        </IfModule>

</VirtualHost>
  • /etc/apache2/sites-available/gitorious-ssl
<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

    <IfModule mod_xsendfile.c>  
            XSendFile on  
            XSendFilePath /var/www/gitorious/tarballs  
    </IfModule>

</VirtualHost>  
</IfModule>

Note : si vous voulez configurer d’autres ports, n’oubliez pas de modifier le fichier /etc/apache2/ports.conf.

Il faut ensuite désactiver le site par défaut (libérant le port 80) :

sudo a2dissite default

Puis activer le module ssl et nos deux sites :

sudo a2enmod ssl
sudo a2ensite gitorious gitorious-ssl

Nous pouvons enfin redémarrer apache et accéder à Gitorious !

sudo service apache2 restart
Et en plus, ça fonctionne !

Et en plus, ça fonctionne !

Créer un utilisateur

Nous créerons un utilisateur en utilisant simplement le lien register.

Oui, les informaticiens n'ont aucune imagination.

Non, les informaticiens n’ont aucune imagination…

Sauf que voilà : il vous demande de cliquer sur le lien de vérification d’un mail, qu’il n’a pas pu vous envoyer car vous n’avez jamais configuré de boîte d’envoi de mail…

Vous ne pouvez pas encore désactiver cette validation... c'ets bête hein? ;-)

Vous ne pouvez pas encore désactiver cette validation… c’est bête hein? 😉

Qu’à cela ne tienne ! On n’a pas installé tout ça pour rien !

Nous allons activer notre utilisateur à la main :

sudo su - git
env RAILS_ENV=production ruby script/console
>> user = User.find_by_login "toto"
>> user.activate
>> user.save
>> exit
exit

Vous pouvez aussi donner les droits d’administration à votre utilisateur :

sudo su - git
env RAILS_ENV=production ruby script/console
>> user = User.find_by_login "toto"
>> user.is_admin = true
>> user.save
>> exit
exit

Vous pouvez dès à présent savourer les joies d’une application installée à la sueur de votre front (et du mien) !

Si c'est pas beau ça !

Si c’est pas beau ça !

Utiliser Gitorious

Lors de la création de votre premier projet, Gitorious va vous demander une clef publique.

Ne paniquez pas, installez Turtoise GIT et suivez ce tutoriel à la lettre (comme je vous l’ai dit, cet article n’est pas un cours sur l’utilisation de GIT) : https://help.cloudforge.com/entries/22336541-TortoiseGIT-Create-and-upload-your-public-key-to-CloudForge

Une fois la clef publique ajoutée, nous pouvons créer notre premier projet. (Enfin !)

Je n'ai toujours pas d'inspiration...

Je n’ai toujours pas d’inspiration…

Deux clics de souris plus loin, notre projet est créé.

Création du projet...Quelques secondes plus tard, nous pouvons cloner le référentiel avec Turtoise Git et commencer à travailler dessus !

Tout est expliqué, comme sur github !

Tout est expliqué, comme sur Github !

Le pire c'est que ça fonctionne !

Le pire c’est que ça fonctionne !

Conclusion

C’est un peu long, mais… le jeu en vaut la chandelle !

Installer un logiciel open-source sans documentation à jour pour votre distribution, c’est un peu comme s’asseoir sur un cactus, mais avec un peu de patience, de persévérance… et Google, on peut y arriver !

Si vous rendez votre Gitorious visible sur Internet, vous pourrez sans problème travailler sur vos projets avec des amis sans dépendre d’un quelconque site web.

Si vous l’utilisez pour stocker vos documents officiels, vous pourrez y accéder où que vous soyez !

Je pense vraiment que le jeu en vaut la chandelle. Un logiciel de gestion de sources peut être utilisé de bien des manières. Gitorious et Turtoise Git proposent des interfaces conviviales, permettant à toute la famille d’utiliser ces outils.

Parce que je n’ai pas la science infuse : sources

En cas de problème lorsque vous installez Gitorious, je vous invite à parcourir ces liens. Les explications sur ces pages m’ont beaucoup aidé à écrire cet article.

Publicités
À propos

Un informaticien, qui tente de faire comprendre au public que l'informatique n'est pas si compliquée, malgré des acronymes et autres termes obscurs pour faire croire que c'est difficile (et que c'est de votre faute si "ça ne marche pas")

Tagged with: , , , , , , , , , , , , , , , , , , , , , , , , ,
Publié dans Développement, Informatique, Installations, Windows

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

MystCaster
septembre 2013
L M M J V S D
« Août   Oct »
 1
2345678
9101112131415
16171819202122
23242526272829
30  
Catégories
Archives
%d blogueurs aiment cette page :