Git et Redmine pour les adminsys

9 octobre 2009 par flo

Cette semaine, je me suis aperçu avec horreur que je ne me souviens plus du tout de la façon dont sont installées et configurées les 3/4 des applications de mon serveur perso.
La faute en revient à plusieurs éléments pas très glorieux :

  • Bah ! ça marche bien comme ça, je toucherais plus de toute façon !
  • Pff ! ça me broute de commenter mon installation dans un wiki !

(Pour le second argument, le fait est qu’à chaque modification d’un fichier de configuration, il faudrait le remettre à jour sur le Wiki… très contraignant pour un informaticien qui se doit d’être flemmard !)

Après en avoir discuté avec les rigolos de Gnoulibre.org, je me suis laissé convaincre de tester une de leurs solutions à ce problème.

Gnoulibre.org

Git + Redmine

Je pensais ce genre de solution destinée exclusivement aux affreux développeurs d’applications, alors que non, un administrateur système peut également y trouver son compte !

Berk ! Un développeur Web !

Berk ! un développeur Web !

Note : La combinaison Git + Redmine n’est pas la seule solution. Il est possible de faire globalement la même chose en combinant au choix, SVN/Git/Mercurial avec Trac/Redmine/GForge.
SVN, Git et Mercurial sont des systèmes de gestion de versions.
Trac, Redmine et GForge sont des applications Web de gestion de projets capables de fonctionner avec les systèmes de gestion de versions.

Le but n’est pas ici d’expliquer en détail le fonctionnement de ces outils qui servent normalement à des projets de développement de logiciels, mais globalement :

  • Les fichiers sources sont affichés sur l’application web.
  • Tous les collaborateurs peuvent participer à la rédaction d’un Wiki pour expliquer le fonctionnement du programme.
  • Les utilisateurs peuvent poster des tickets pour signaler des problèmes ou faire des demandes d’ajout de fonctionnalités.
  • L’avantage de ces outils étant que les fichiers sources sont toujours à jour à l’aide du système de gestion de version.

Les raisons d’utiliser Git pour vos fichiers de configuration :

  • « Sauvegarde » des fichiers
  • Versionning des fichiers avec possibilité d’afficher les modifications entre deux versions d’un même fichier
  • Possibilité de propager les fichiers de configuration sur une autre machine

Git

L’installer à l’aide du gestionnaire de paquet.
Ensuite les commandes de base :
Se mettre dans le répertoire contenant les fichiers à suivre puis :

Initialiser le dépôt Git :

$ git init

Ajouter des fichiers à l’index du dépôt :

$ git add nom_fichier

Faire un commit :

$ git commit -a -m "commentaire décrivant le commit"

Puisqu’il s’agit de surveiller des fichiers de configuration, il peut être bon de lancer un commit régulièrement. Un p’tit cron, ça fait pas de mal :

$ crontab -e

Dans l’éditeur de texte qui s’ouvre, sous la ligne de commentaire, entrer la ligne :

00 05 * * * cd /chemin/vers/le/rep && git commit -a -m "Cron autocommit"

Enregistrer et quitter.
Comme ça, quoi qu’il arrive, un commit des fichiers sera fait quotidiennement à 5h du matin (à condition que le PC soit allumé).

Redmine

Maintenant, il faut mettre en place Redmine, je ne détaillerais pas la mise en place car d’autres s’en chargent mieux que moi. Une note tout de même, j’ai pour l’instant abandonné temporairement l’idée de le faire tourner avec Apache en utilisant Mongrel, Passenger ou Fast-CGI, n’ayant pas réussi à obtenir de résultat digne de ce nom après deux journées de bidouillage. (Oui, je suis mauvais !)

Personnellement je me contente de lancer Redmine avec Webrick :
Depuis le répertoire d’installation de Redmine :

$ ruby script/server -e production

Commande à lancer dans un screen ou en mode daemon.

J’accède ensuite à l’application en entrant l’adresse http://ADRESSE_DE_MON_SERVEUR:3000 sur mon navigateur Web.

Il peut être sympa de rendre cette page disponible depuis l’extérieur histoire de ne pas y avoir accès qu’en local. Il faut bien sur pour cela ajouter une règle sur le firewall du serveur pour autoriser le port 3000 en TCP et faire de même sur la box qui relie votre serveur à Internet.

Pour iptables, rajouter la ligne suivante à votre liste de règle :

iptables -A INPUT -p tcp -i eth0 --dport 3000 -j ACCEPT

Bon, c’est une solution un peu crade « en attendant » de me débloquer avec mon Apache qui semble faché avec tout ce qui est Ruby on Rails…

Mais bon, peu importe, on peut enfin accéder à Redmine ! Joie !
(Si, si : Joie ! Après avoir suivi un tuto d’installation et configuration, quand ça marche, on peut être content !)

Youpi, c'est la fête !

Youpi, C'est la fête !

Pour la première connexion, les identifiants par défaut sont :

  • login : admin
  • mdp : admin

Merci de modifier rapidement le mot de passe dans l’interface de l’application, surtout si Redmine est accessible depuis l’extérieur…

Un test pour se faire la main

Pour se familiariser avec Redmine, je conseille de se créer un dépôt Git de test dans un dossier test avec des fichiers de test (et le mot du jour est…….. TEST !)

$ mkdir test
$ cd test/
$ echo "pouet" > toto.txt # creation des fichiers
$ echo "color : blue" > watchmenbigdong.conf
$ git init
$ git add toto.txt
$ git add watchmenbigdong.conf
$ git commit -a -m "Premier commit"
$ echo "color : red" > watchmenbigdong.conf # modification d'un des fichiers
$ git commit -a -m "Second commit : Watchmen pour daltoniens"

Puis, dans Redmine, créer un projet test. Ensuite dans ce projet, aller sur Configuration, puis Dépôt. Dans SCM, choisir Git et dans le champs en dessous, mettre le chemin complet vers le répertoire .git. Exemple : /home/utilisateurtest/test/.git

Configuration du dépôt dans Redmine

Configuration du dépôt dans Redmine

Enfin, cliquer sur Créer.

Explorer au passage tous les onglets du volet Configuration pour bien mettre sa sauce. Puis cliquer sur Dépôt (celui à côté de Configuration) pour voir la liste des fichiers et leurs « commit » respectifs. On voit bien que le fichier watchmenbigdong.conf a été modifié depuis le premier commit mais pas le fichier toto.txt.

Il est possible à partir de cette fenêtre de comparer les différentes versions d’un même fichier.

Pour bien saisir l’intérêt de Redmine, il est bon de farfouiller tous les onglets. Le plus intéressant à mes yeux après l’onglet Dépôt est l’onglet Wiki. Ce wiki permet de s’étendre sur les explications d’installation et configuration de la machine et de différents programmes !

Redmine pour gérer sa configuration

Lors de la création de projets, bien décocher la case « Public » si le projet doit contenir des fichiers de configurations…

Pour l’instant, je me sers de cette solution avec deux projets :

  • /home : qui contient les fichiers de conf du dossier /home de l’utilisateur :
    • .gnupg/
    • .irssi/
    • .ssh/
    • .bashrc
    • .vimrc
  • /etc : qui contient les fichiers de conf :
    • /apt/sources.list
    • fstab
    • irssi.conf
    • mpd.conf
    • screenrc
Oui, j'ai des choses à cacher !

mon home dans Redmine

En bref, tous les fichiers de configuration que je peux être amené à modifier moi-même ! (et pour lesquels je souhaite un suivi)
Si un logiciel venait à ne plus marcher, je pourrais ainsi rapidement savoir si cela vient d’une mauvaise configuration et je pourrais rapidement revenir en arrière !

Pour finir, il peut être bon de clôner vos dépôt Git sur d’autres PC ou des supports externes. Si le serveur plante complètement et devient incapable de lancer Redmine, il sera possible de voir les modifications depuis un autre PC.

La petite pelle de liens utiles

Un bon informaticien se doit de faire des blagues de bit(e)… hum, pas tip top après un diplôme Blague+3 en informatique.

Bon versionning à tous !


Birthday – pour ceux qui n’ont aucune mémoire (comme moi)

23 juillet 2009 par flo

Il y a quelques temps j’avais découvert l’excellente application OSMO qui permet de gérer à merveille ses contacts en inscrivant tout un tas d’info sur eux. Ce logiciel embarquait également un gestionnaire de notes, un gestionnaire de tâches (ou to do list) et un calendrier. L’une des fonctions les plus utiles d’OSMO se situe dans la partie contact, une icône en forme de cadeau permet d’afficher tous les anniversaires à venir du plus proche au plus lointain !

anniversaires à venir sous OSMO

anniversaires à venir sous OSMO

Avec ça, aucune chance de rater l’anniversaire de Tati Rosanna ! Alors oui, c’est de la triche, on ne devrait pas avoir à utiliser un logiciel pour ça… Mais c’est pas de ma faute si ma génération préfère utiliser des calculatrices pour faire des calculs simples plutôt que de faire du calcul mental ou préfère reposer sur des outils informatiques pour se rappeler de tout à sa place ! (héhé la bonne excuse)

Bien que je trouve OSMO génial, je lui reproche tout de même deux choses, tout d’abord son côté tout en un et ensuite… son interface graphique !

J’ai donc trouvé un petit programme tout simple et tout bête qui remplace à merveille cette fonctionnalité indispensable de rappel d’anniversaires : birthday.

Birthday

Birthday devrait être disponible sur à peu près toutes les distributions Linux et s’installe facilement à l’aide de votre gestionnaire de paquets favori.

Utilisation :

La première chose à faire et qui peut paraître fastidieuse est de créer en remplir le fichier « ~/.birthdays »

Sa syntaxe est très simple, il faut inscrire le nom de la personne suivit du signe ‘=’ suivi de sa date de naissance au fomat « JJ/MM/AAAA » ou « JJ/MM » suivit éventuellement d’une option.

Les options sont les suivantes :

  • bd : anniversaire d’une personne, c’est l’option par défaut si rien n’est précisé (exemple : l’anniversaire de Maurice)
  • ann : anniversaire d’un événement quelconque (exemple : anniversaire de mariage)
  • ev : annonce d’un événement. Si l’année est précisée, le rappel n’aura lieu que cette année là (exemple : rdv chez le dentiste)

Pour vous montrer à quoi celà ressemble, je vous donne le .birthdays de mon pote Robert Grouchu :
# birthdays
Maurice Bien-membré=26/07/1975
Maurissette Bien-membré=05/08/1977
# anniversaries
Lucette and I married=29/07/1999 ann # ça va faire 10 ans, cette année, va pas falloir se rater !
# events
RDV Dentiste=09/08 ev

Et voici ce que Robert obtiens en entrant la commande birthday :
$ birthday
Maurice Bien-membré is 34 years old in 3 days' time.
Lucette and I married 10 years ago in 6 days' time.
Maurissette Bien-membré is 32 years old in 1 week and 6 days' time.
RDV Dentiste in 2 weeks and 3 days' time.

Par défaut, la commande birthday va afficher tout ce qui va se passer dans les 21 prochains jours. Il est possible de modifier ce comportement avec une option dans le fichier « .birthdays » ou avec une option passée à la commande birthday.

Calendrier

Il est également possible d’afficher une sorte de calendrier horrible avec l’option « $ birthday -c » mais même en jouant sur les options d’affichage, le résultat reste toujours immonde.

Conclusion :

On peut voir une plus grande utilité à cette commande en la lançant automatiquement dans une console au démarrage de l’ordinateur. Personnellement je la laisse tourner sur mon serveur dans un screen à l’aide de la commande watch qui va réactualiser la commande de temps en temps ($ watch -n 3000 ‘birthday’).

Il suffit de jeter un petit coup d’oeil de temps en temps à la fenêtre virtuelle pour s’asurer de ne rien manquer !

Comme d’habitude, pour découvrir à fond toutes les particularités de cette commande : RTFM ! (la page man de birthday est très simple).


Screen – l’outil magique

22 juillet 2009 par flo

Je commence une série d’articles basés sur le thème de l’interface en ligne de commande ou CLI en anglais. Ces articles auront pour but de découvrir des logiciels en ligne de commande qui permettent de remplacer souvent efficacement les grosses applications usine à gaz graphiques habituelles. Souvent ces outils se montrent, plus rapides, plus stables et plus flexibles. Ils limitent également l’utilisation de la souris et dans mon cas c’est un gros avantage puisque je subis des douleurs assez atroces dans tout le bras droit lorsque je l’emploie.

Pour débuter, je propose la découverte de screen. Pour simplifier son fonctionnement, disons que screen permet de créer des « fenêtres virtuelles ». Pour bien saisir toute l’utilité de la chose, le mieux est de commencer à l’utiliser.

Screen

Installez le paquet screen si ce n’est pas déjà fait puis lancez le avec la commande « screen » depuis votre terminal préféré.
Une page va s’ouvrir dans le terminal présentant l’outil et la version utilisée. Appuyez sur la touche « entrée » pour lancer la première fenêtre virtuelle. Son apparence sera identique au terminal précédent. Vous pouvez donc à partir de là taper des commandes comme dans n’importe quel autre terminal.

Les commandes de Screen :

Toutes les commandes concernant Screen sont basées sur la combinaison de touches ctrl+a puis dans un second temps, sur l’appui d’une autre touche, ou combinaison de touche.

Créer une nouvelle fenêtre :

Appuyez maintenant sur ctrl+a puis sur la touche ‘c‘, une nouvelle fenêtre virtuelle est créée. Vous pouvez là encore entrer des commandes.

Rennomer une fenêtre :

Pour rennomer cette fenêtre virtuelle, appuyez sur ctrl+a puis sur ‘A‘.

Se ballader parmi les fenêtres :

Pour revenir à la fenêtre précédente, appuyez sur crtl+a puis sur la touche <« > (en dessous du nombre 3). Vous verrez apparaître la liste des fenêtres . Vous pouvez vous déplacer dans cette liste et entrer dans n’importe laquelle.

Détacher le screen :

Une des fonctions les plus utiles de screen est qu’il permet de « détacher » les fenêtres. Il faut pour cela faire la combinaison de touche ctrl+a puis ‘d‘. On retombe dans le terminal de base ayant servi à lancer screen. Mais les fenêtres virtuelles existent encore et si vous avez lancés une application comme « top« , elle continue à tourner dedans.

Rattacher le screen :

Pour retrouver ses fenêtres virtuelles, il faut relancer screen avec l’option -r : « screen -r« .
Vous retrouverez les fenêtres créées. Les applications lancées ont tourné sans interruption de service.

Partager un screen :

Un autre intérêt est celui de partager la session screen avec quelqu’un d’autre. Si deux personnes sont connectées sur la même machine, ils pourront utiliser le même screen.
Une fois que la première personne a lancé screen, la seconde le rejoint en tapant « screen -x » et elle verra alors tout ce que l’autre fait. Utile dans le cas d’un dépannage ou d’une explication à distance.

En conclusion :

Voilà pour un aperçu rapide de screen, on a fait le tour des commandes les plus utiles, si vous voulez appronfondir le sujet comme des gros boeufs de l’informatique, je vous laisse avec un joli RTFM !

Il est par exemple possible de changer les raccourcis clavier pour ceux qui ne trouvent pas pratique de sacrifier l’habituel ctrl+a qui permet d’ordinaire de revenir en début de ligne dans une invite de commande…

L’utilité principale de screen est de fournir une non interruption de service aux commandes lancées dedans. Prenons l’exemple d’une compilation effectuée sur une machine distante à l’aide d’une connexion en ssh. Si cette compilation est effectuée à l’aide de screen et que la connexion coupe, elle pourra se terminer et le résultat sera lisible dès que la connexion sera de nouveau opérationnelle.

Quand il s’agit de travailler à distance sur une autre machine, screen est donc un excellent réflexe à avoir !


Un peu de légereté

13 mai 2009 par flo

C’est mon premier post sur ce blog, en guise de présentation, je propose un petit article sur quelques sujets qui me sont chers : GNU/Linux, les logiciels libres, la réduction des dépenses énergétiques mais également quelques élucubrations pour détendre l’atmosphère !

Le sujet du jour reviendra sûrement souvent sur le tapis. En effet, la légereté du système est pour moi un élément très important de l’ergonomie. Je préfère largement la rapidité d’éxecution et d’affichage aux effets 3D qui n’apportent finalement pas grand chose au quotidien. Attention, cela ne m’empêche pas de respecter la prouesse technologique que les bureaux 3D peuvent représenter.

Ces derniers temps, l’ergonomie a tendance à rimer avec toujours plus plus d’effets graphiques. Je peux comprendre que l’on puisse chercher à rendre son système plus « sexy » mais tout à un coût. Rajouter des effets graphiques du type bureau 3D amène forcément de nouvelles sources potentielles d’instabilité. Suivant le système d’exploitation, ces effets ne sont pas gérés de la même façon mais ils augmentent la consommation mémoire, processeur et/ou carte graphique. Autant de ressources qui pourraient être allouées autre part ou bien simplement pas utilisées du tout. Pour un usage bureautique standard, aucun intérêt à faire chauffer la carte graphique par exemple. Bien sûr il y a l’argument du matériel capable d’accomplir de telles prouesses, alors pourquoi s’en passer ?

L’une des raisons principales serait de consommer moins et ainsi économiser un peu sur sa facture d’électricité.
Consommer moins d’électricité permet également pour les portables de décharger moins rapidement la batterie ou de la recharger plus rapidement.
Consommer moins de ressources permet d’obtenir un système globalement plus réactif. Même si avoir plus de 2Go de RAM permet de tout faire tourner aisément, ce n’est plus la même chose lorsqu’il s’agit de virtualiser plusieurs OS sur son PC !
Enfin, retirer quelques effets graphiques permet d’améliorer la stabilité du système.

Ces dernières années j’ai passé pas mal de temps sous Windows XP. Je n’aimais déjà pas le thème par défaut de XP lui préférant le bon vieux thème Windows 98. Ce n’était alors pas pour gagner en performance mais simplement pour ne pas saigner des yeux en utilisant mon PC. A force de différentes bidouilles pour tenter de contourner les limites incompréhensibles imposées le système, lassé de devoir formater régulièrement mon PC pour le garder relativement propre et réactif, fatigué de configurer antivirus, pare-feu, anti-spyware, défragmenteurs et anti-adwares tous plus inefficaces les uns que les autres, après avoir pesté de nombreuses fois en essayant de réparer le système en espérant qu’un simple redémarrage suffira, j’ai décidé de passer à autre chose.

J’avais déjà fait quelques expérimentations avec GNU/Linux et n’étant pas très attiré par les produits Apple, j’ai testé différentes distributions Linux histoire de trouver chaussure à mon pied.
Après avoir testé Ubuntu, Xubuntu, Zenwalk, Fedora, Mandriva et Archlinux j’ai fini par adopter Debian. Je l’utilise en version Stable sur mon serveur et en version testing sur mon portable. Les raisons principales de ce choix sont le fait que cette distribution est largement utilisée et le fait qu’elle soit en rolling release, donc pas besoin de réinstaller le système à chaque nouvelle version de la distribution.

Après le choix de la distribution vient le choix de l’environnement de bureau. J’ai testé KDE, Gnome et XFCE. Mais dès que l’on cherche à alléger son système, ces environnements de bureau montrent vite leurs limites. Les environnements de bureau consomment énormément de ressources. Généralement leur mise en place procède à l’installation de tout un tas de programmes dont on n’aura pas forcément l’usage mais les retirer peut amener à rendre une partie du système inutilisable.
Concrètement, on va se retrouver avec des outils de connexion à distance, de messagerie instantannée, de gestion d’imprimantes, de gestion bluetooth etc.

C’est pourquoi j’ai décidé de passer à un environnement de bureau plus léger : LXDE.
L’avantage est qu’il n’installe pas beaucoup de dépendances. Il est toujours plus facile de partir d’un système minimaliste pour lui rajouter ensuite les fonctionnalités que l’on souhaite plutôt que de partir d’un environnement complet et de tenter de l’épurer.

L’avantage est que l’on maîtrise totalement son système, on sait ce que l’on installe, pourquoi on l’installe et en cas de problème il sera plus facile d’orienter les recherches.

Le but de l’article du jour était simplement d’amener à réfléchir sur ce que l’on attend de son PC et de ce qu’on a vraiment besoin qu’il fasse.
Pour information : mon installation Windows avec des logiciels installés prend environ 12Go, la partition ou est installée Ma Debian allégée prend moins de 3Go… et je ne parle qu’en terme d’espace disque ! la différence de consommation mémoire doit également être impressionnante. Le plus frustrant au final avec Windows XP est de voir qu’il prend autant de place alors qu’il faut se battre pour contourner ses limites (comme par exemple la limite de téléchargements…).
Bien qu’il existe des versions allégées de Windows, c’est sous Linux que m’est venue cette volonté de déterminer précisément mon utilisation du système. Au final, il ne s’agit plus de chercher un système qui peut tout faire mais d’avoir quelque chose de minimaliste qui « suffise » à mon usage quotidien.

Après tout, est il logique pour quelqu’un qui ne fait que de la bureautique et du surf sur Internet de disposer d’une copie à l’identique du système d’exploitation d’un comptable, d’un médecin, d’un joueur ou d’un développeur ?

Le but est de déterminer ce qui répondra à nos besoins : si je dois faire ça et ça, alors je peux me contenter de ceci, par contre si en plus je dois faire telle ou telle chose, alors je suis obligé d’installer celà même si c’est plus lourd.

Avant de passer par le choix du thème et du fond d’écran, la personnalisation de l’ordinateur devrait peut être commencer par le système d’exploitation en lui-même.
Personnaliser son installation peut être rapide si l’on a déjà ciblé ses besoins…

Dans le même ordre d’idée, on peut se poser des questions sur ses achats. Par exemple : ai-je besoin d’un véhicule 4×4 si je ne roule qu’en ville ?