Utiliser Dist::Zilla pour vos distributions

17/05/2012 15:30:00 - Comments(0)

Introduction

Toute personne ayant écrit des modules Perl disponible sur le CPAN, sait à quel point il peut être lourd de maintenir les fichiers pour l'installation de la distribution, sans parler des erreurs potentiels. C'est là qu'intervient Dist::Zilla initié par Ricardo Signes avec comme slogan Rooar, car lui aussi préfère se concentrer sur le code de son projet, plutôt que sur des licences et autres.

Rappel

Une distribution est une archive tar compressé, versionné car il arrive qu'il y est des fixes de bugs ou l'ajout de nouvelle fonctionalité, une distribution répond à un certains nombres de convention pour diverses raisons mais notamment pour pouvoir être installé via des clients comme cpanm par exemple. Une distribution contient un certains nombres de choses, du code pour commencer, les modules se trouvent dans le répertoire lib à la racine du projet et respecte une certaine hiérarchie. Il se peut aussi que la distribution soit accompagné de programmes ou d'outils, qu'on trouve dans le répertoire bin. Elle contient aussi un script d'installation qui peut utiliser soit ExtUtils::MakeMaker qui génère un makefile, soit Module::Build. Une distribution contient aussi un fichier appelé Manifest contenant la liste des fichiers du projet. Des tests et de la documentation. Voilà principalement ce que contient une distribution, il peut y avoir d'autres choses, mais ce sont les principales.

Des conventions

Il y a aussi un certains nombres de convetions que le code se doit de respecter. La fsf recommande que chaque fichiers contienne l'en-tête avec le copyleft, que l'on peut retrouver dans beaucoup de projets. Chaque module doit aussi contenir des paragraphes, AUTHOR, LICENSE, NAME et de la documentation.

Les solutions

Il existe plusieurs solutions pour créer sa distribution, mais aucune qui facile la tache de l'auteur, avec beaucoup de choses redondante à faire qui ne sont pas très amusante. Il y a ExtUtils::MakeMaker et Module::Build pour écrire le script d'installation et générer les fichiers MANIFEST et meta.yml, ce qui va créer l'archive tar, il faut néanmoins penser à lancer la commande pour mettre à jour les fichiers. Il y a Module::Starter qui génére les différents fichiers nécessaire et module un squelette. Il y aussi Module::Release qui permet de pousser la distribution sur différents sites. Ce sont de bon point de départ, mais ce n'est pas suffisant, il reste un gros travail pour l'auteur de la distribution.

Le graal

C'est là que Dist::Zilla rentre en scéne. En plus d'aider dans la création de la distribution, Dist::Zilla posséde un grand nombre de plugin pour aller encore plus loin. Il sera utilisé uniquement par l'auteur de la distribution, la distribution sera la même qu'une distribution classique et s'installera de la même manière.

Installation

Pour l'installation comme pour n'importe quel module, il suffit d'utiliser un client cpan.

cpanm Dist::Zilla

C'est un projet assez lourd avec un certains nombres de dépendances, mais ce n'est pas très important aux vues des facilités apporté ensuite pour la création de distrubtion, sans compter qu'aujourd'hui on est capable de gérer correctement des dépendances et comme-dit il sera utilisé uniquement par l'auteur de la distribution, donc invisible pour l'auteur final, dans son côté il n'aura pas toutes ses dépendances.

Fonctionnement

Pour utiliser Dist::Zilla pour sa distribution, il faut un fichier dist.ini à la racine de son projet. Dans ce fichier sera présent différentes informations statiques et les différents plugin à utiliser pour créer la distribution. Voici un exemple de configuration:

name    = Dancer-Plugin-RequireSSL
author  = Hobbestigrou
license = Perl_5
copyright_holder = Hobbestigrou
copyright_header = 2012

[AutoVersion]
major = 0

; -- Remove files
[GatherDir]
[PruneCruft]
[ManifestSkip]

; -- Get prereqs
[AutoPrereqs]

; -- Munge files
[NextRelease]
[PkgVersion]
[PodWeaver]
[Prepender]
copyright = 1

; -- Generate meta files
[License]
[MakeMaker]
[ModuleBuild]
[MetaYAML]
[Readme]
[InstallGuide]
[Manifest]

; -- Release
[CheckChangeLog]
[Git::Commit]
[Git::Tag]
[Git::Push]
[UploadToCPAN]

Utilisation

Une fois la configuration effectué, il faut utiliser la commande dzil pour effectuer ses différentes actions.

Pour lancer les tests:

dzil test

Pour créer la distribution:

dzil build

Pour installer la distribution:

dzil install

Pour publier la distribution:

dzil release

Pour créer un projet contentant une configuration de base:

dzil new Nom::Projet

Ce qui fait déjà gagner quelques commandes en moins à taper. Je ne vais pas aller plus loin, car plutôt que d'écrire un énorme article long à écrire et à lire, je préfère découper en petit article, je présenterai des plugins intéressants et que j'utilise au fil du temps.

Conclusion

Dist::Zilla est vraiment un projet que je trouve formidable qui facilite beaucoup le travail de l'auteur, en automatisant toutes les taches redondantes à la création d'une distribution. Il y aussi énormément de plugins très intéressants qui permette d'allers encore plus loin. Il fait partit des outils dont je ne peux plus me séparer, et je pense que toutes auteurs devrait au moins l'avoir essayé pour se faire son opinion. En attendant de prochains articles, je vous conseille de lire l'article Dist-Zilla - distribution simplifiée pour auteur CPAN duquel je me suis inspiré pour cette article, écrit par Jérôme Quelin et paru dans Gnu/linux magazine 128 de juin 2010, très complet qui donne toutes les cartes pour commencer à utiliser Dist::Zilla pour ses distributions.

Drapeau Fr Dist-Zilla - distribution simplifiée pour auteur CPAN

Drapeau En Dist::Zilla

Drapeau En Tutorial

Des tips vim

10/05/2012 21:33:00 - Comments(1)

Introduction

Vim-fortune est un petit projet qui a pour but de rassembler divers tips Vim. Lors du lancement de Vim un tip sera affiché dans un buffer. Le plugin fait appel au programme fortune pour récupérer et afficher un tip.

Historique

L'idée est venu en discutant avec quelques personnes de la commaunté vim-fr, par un utilisateur qui afficher des tips dans Vim, après une longue recherche on a finit par trouver le fichier original qu'il avait utilisé. Il ne semblait pas être sur github. Très rapidement, on a pensé qu'il serait intéressant qu'il soit versionné et sur github, d'avoir une version française, et ajouter nos tips. On c'est donc lancé dans la création d'un projet sur github, et on a commencé à ajouter de nouveaux tips, et faire la version fr. Je tiens encore à remercier enikar et z3bra pour l'aide apporté. Après quelques jours, on a pensé qu'il serait intéressant d'écrire un plugin pour afficher les tips, je me suis donc lancé dans l'écriture du script, c'était mon premier script en vimscript, je suis assez content car j'ai été plutôt rapide et j'ai appris beaucoup de choses. Depuis, j'ai reçu des contributions, et pas mal d'aide de enikar qui le développe avec moi. Des options seront ajouté, le plugin et pour le moment encore pas mal en mouvement.

Installation

L'installation est très simple cloner le projet

git clone https://github.com/hobbestigrou/vimtips-fortune.git
cd vim-fortune

Puis lancer le script d'installation:

./install.sh

Sur une Debian like si l'application fortune n'est pas installé, elle sera lancé avec apt-get.

Des tips dans Vim

Pour avoir des tips à l'ouverture d'un fichier, il vous suffit de copier les répertoires plugin et autoload dans $HOME/.vim.

Conclusion

Un petit plugin sympa qui permet de découvrir ou redécouvrir des utilisations de Vim. Je suis ravi d'écrire ce plugin, qui m'a permis d'apprendre pas mal de choses. Je tiens encore à remercier enikar, z3bra et Baptiste Fontaine pour la création original du fichier de tips vimtweets.

Drapeau En Fortune-vimtips

Drapeau En Github fortune-vimtips

Drapeau En Fichier original

Multiple instance de Perl

29/04/2012 17:32:00 - Comments(1)

Introduction

Pour Python il y a virtualenv, pour Ruby il y a rvm et pour Perl il y a Perlbrew. C'est outil qui va permettre notamment de gérer facilement de multiple installation de différentes version Perl dans son $HOME. Avec une isolation complète perl universe, ce qui est plutôt pratique et offre plusieurs avantages.

Fonctionnalités

Je vais ici lister les différentes fonctionnalités repris du site officiel.

  • Plus besoin d'avoir les droits adminstrateur c'est-à-dire root, pour installer de nouveaux modules, tant-donné qu'ils sont installé dans le home utilisateurs.
  • Essayer les dernières versions de Perl
  • Apprendre les dernières nouveautés du langage
  • Tester du code de production
  • Hacker les internal de Perl

Installation

Il y a plusieurs façon d'installer perlbrew. Soit en utilisant par exemple cpanm, soit en récupérant simplement le script.

curl -kL http://install.perlbrew.pl | bash

Avec cette manière de faire, on a pas besoin d'être root.

sudo cpanm App::Perlbrew

En l'installant de cette manière le chemin de l'exécutable sera /usr/bin/perlbrew ou /usr/bin/local/perlbrew. Il sera disponible pour tous les utilisateurs qui souhaite utiliser perlbrew, il faudra au préalble faire un perlbrew init.

Le répertoire par défaut de perlbrew est $HOME/perl5/perlbrew, il est possible de le changer via la variable d'environnement PERLBREW_ROOT avant l'installation et l'initialisation. Pour plus de détails consulter la documentation, personnelement le chemin par défaut me convient parfaitement.

Une fois installé, il vous faudra aussi ajouter une ligne à votre bashrc ou zshrc, ou toutes autres shell.

source $HOME/perl5/perlbrew/etc/bashrc

Fonctionne aussi pour zsh, ajoute notamment des variables d'environnement utile à perlbrew.

Utilisation de perlbrew

L'utilisation de perlbrew est vraiment très simple.

Lister les versions de Perl disponible:

perlbrew available

Installer une version de Perl:

perlbrew install perl-5.14.2

Lister les différentes versions de Perl installé:

perlbrew list

Utiliser une version de Perl permanante pour tous le système:

perlbrew switch perl-5.14.2

Utiliser une version de Perl simplement pour le shell courant:

perlbrew use perl-5.14.2

Ne plus utiliser perlbrew:

 perlbrew off

Obternir l'aide de perlbrew:

perlbrew help

Installer cpanm

Alors cpanm est un client CPAN dont j'ai déjà parlé sur ce blog qui est génial, rapide et léger. Je n'utilise plus que cpanm, et il y a une manière de l'installer pour toutes les versions utilisé. Si vous installer cpanm avec l'utilitaire cpan dans une installation de perlbrew de cette manière:

perlbrew use perl-5.14.2
cpan App::cpanminus
cpanm Moose

Cela va fonctionner et vous pourrez utiliser cpanm pour installer des modules, mais si vous changer de version Perl:

perlbrew use perl-5.15.7
cpanm Moose

Cela ne va pas fonctionner. La raison est simple, lorsque vous avez installé cpanm avec le client cpan, il a installé le binaire dans le chemin de la version perl donc $HOME/perl5/perlbrew/perls/5.14.2/bin, et lorsqu'on change de version variable $PATH est modifié. Si vous souhaiter utiliser uniquement cpanm, sans avoir besoin de l'installer pour chaque version, il faut utiliser install-cpanm, tout simplement.

perlbrew install-cpanm

Le binaire va être installé dans $HOME/perl5/perlbrew/bin et sera toujours accesible.

Utiliser switch ou use

Il y a deux manière d'utiliser une des versions de Perl que perlbrew à installer dans notre home, switch ou use, je conseil d'utiliser le deuxième. Avec switch on change de version pour le système ce qui peut poser des problème à certains moment. Avec use la version est changé uniquement pour le shell courant, donc les scripts utilisant Perl vont continuer à utiliser la version Perl du système. Je conseil donc d'ajouter une ligne à son bashrc ou zshrc:

perlbrew use perl-5.14.2

Puis la changer de temps en temps, lorsqu'une nouvelle version de Perl arrive.

Ligne de shebang

Avec perlbrew il est important de laisser ceci à la charge de l'environnement plutôt que de mettre le chemin du binaire Perl, commencer vos scripts par:

#!/usr/bin/env perl

Cela vous évitera quelques problèmes. J'ai honte j'ai perdu quelques bonnes minutes à comprendre un problème du au fait que j'utilise pas le bon interprète.

Conclusion

En conclusion, c'est vraiment un très bon outil, qui permet d'avoir de multiple instance de Perl installer et de switcher facilement d'une version à une autre. Meilleur isolation chaque version ayant ses modules installés indépendament.

Exclure des fichiers lors de la création d'un tar

15/01/2012 02:45:00 - Comments(0)

Introduction

Un article assez rapide pour indiquer comme exclure des fichiers ou répertoires lors de la création d'un tar. Ce qui peut parfois arriver.

Utilisation

Il existe une option de tar pour exclure un certain nombre de fichier ou répertoire lors de la création d'un tar, qui n'est autre que --exclude, il faut bien faire attention à la syntaxe, autrement cela ne va pas fonctionner.

tar -zcvf my_dir.tar.gz --exclude='file' --exclude='.git' my_directory

Le fichier file et le répertoire .git ne seront pas inclus dans le tar.

C'est bien pratique mais si il y a plus de deux ou trois fichiers, la commande peut rapidement être fastidieuse à écrire. Pour résoudre ce problème, il existe une autre possibilité qui est d'utiliser l'option -X pour spécifier de multiple nom de fichier. Il faudra au préalable créer une fichier que l'on va par exemple appeler exclude.txt, il faudra indiquer les fichiers à exclure.

file
file1
file2
file3
foo
*.bak
.git

Les fichiers matché seront seront exclus.

tar -zcvf my_dir.tar.gz -X exclude.txt my_directory

Il existe aussi l'option -T qui est l'inverse de -X, on indique uniquement les fichiers qu'on souhaite inclure dans le tar.

file
file1
file2
file3

Uniquement les fichiers matché seront inclus dans le tar.

tar -zcvf my_dir.tar.gz -T exclude.txt my_directory

Conclusion

Un article rapide qui présente simplement un petit tips mais qui peut s'avérer très pratique.

Migration sur prosody

15/01/2012 00:20:00 - Comments(0)

Introduction

Suite à un article de rom1v, j'ai décidé de migrer mon serveur jabber. J'avais déjà entendu parler de prosody, mais ejabberd me convenait. Cependant ejabberd est lourd, pas forcément très agréable à administrer et configurer, et plus complexe.

Présentation

Prosody est serveur jabber de messagerie instantanée développer en Lua. Ses avantages sont notammentet léger et peut consommateur, et facile d'utilisation.

Migration

J'ai décidé de migrer lorsque j'ai eu un soucis avec ejabberd que j'ai eu du mal à résdoure, beaucoup de mal, le problème était que le serveur ne voulait tout simplement plus se lancer, et ce n'était pas la première fois, du je pense à une mauvaise configuration. Il reste que c'est un très bon logiciel, qui offre un grand nombre de fonctionnalité, mais qui demande beaucoup de temps pour être utiliser correctement, et aussi pas mal de maintenance, certainement un peu trop pour un petit serveur. J'ai vu l'article de rom1v et j'ai été séduit par la simplicité d'utilisation et de mise en oeuvre. C'est je dirai limite vraiment trop simple et donc pas très amusant. J'ai du mettre peut-être 15 minutes pour la mise en place du serveur. Le temps de lire un peu de documentation.

Installation

Bien que je sois depuis quelques temps un utilisateur de arch, j'ai décidé de continuer à utiliser Debian sur mes serveurs pour sa stabilité, mais l'installation ne sera pas plus difficile quelque soit la distribution utilisé.

apt-get install prosody

Voilà prosody est installé, nous allons maintenant passer à sa configuration.

Configuration

Nous allons commencer par définir le Host qui sera utilisé utilisé pour les addresses. Il est possible de configurer plusieurs host. Les options de configuration seront différentes pour chacun des hosts. Nous allons donc ouvrir le fichier de configuration /etc/prosody/prosody.cfg et éditer la ligne concernant le host:

Host: "domaine.com"

Remplacer domaine.com par votre domaine. Ensuite, il faudra modifier la valeur enabled pour rendre le domaine actif, autrement ça risque de ne pas fonctionner.

enabled = true

Il est aussi possible d'indiquer un timeout pour les clients non authentifié afin d’éviter une éventuelle surcharge de connexions:

c2s\_timeout = 120

Il sera aussi possible d'activer la création ou non de nouveaux comptes via un client jabber, n'importe qui pourra créer un compte si l'option est à true:

allow\_registration = false;

Un certainement nombres d'autres options sont possible, je laisserai les gens approfondir selon leurs propres besoins.

Certificat

Il y a un certficat qui créé par défaut, cependant les champs sont avec des valeurs non pertinentes, il faudra donc en créer un nouveau.

Placer vous directement dans le répertoire /etc/prosody/certs puis exécuter la commande openssl, des questions seront posées:

openssl req -new -x509 -nodes -out domaine.cert -keyout domaine.key

Il faudra ensuite de nouveau éditer le fichier de configuration pour remplacer les lignes contenant les chemin pour le certificat:

ssl = {
  key = "/etc/prosody/certs/domaine.key";
  certificate = "/etc/prosody/certs/domaine.cert";
}

Ouvrir les ports

Si ce n'est pas déjà, il faudra ouvrir les ports TCP qui vont bien, c'est-à-dire 5222 et 5269.

iptables -A INPUT -p tcp --dport 5222 -j ACCEPT
iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 5269 -j ACCEPT

Un exemple pour iptables. Le port 5222 sert à la connexion des clients au serveur, et le port 5269 à la communication entre les serveurs.

Ajouter des contacts

Maintenant que la configuration du serveur est terminé, il est possible de créer des comptes sur le serveur.

prosodyctl adduser user@domaine.com

Le mot de passe pour l'utilisateur sera demandé au passage. Si l'option allow_registration est active, il est possible d'utiliser n'importe quel client pour créer un compte.

Il est aussi possible de supprimer un utilisateur:

prosodyctl deluser user@domaine.com

Ajouter de component

Nous pouvons souhaiter ajouter des services supplémentaires que le serveur pourra fournir. Ainsi il est par exemple possible d'ajouter le composant muc qui permet de rendre disponible les chatroom c'est-à-dire les canaux multi-utilisateur, cela-dit irc le fait très bien.

Component "conference.domaine.com" "muc"

Démarrer le serveur

Maintenant, la dernière étape et de bien-sûr démarrer le serveur.

prosodyctl start

ou

sudo /etc/init.d/prosody start

Configuration d'un client

La configuration d'un client ce fait comme pour tous serveurs jabber, dans pidgin par exemple, choisir le protocole xmpp.

Bakcup

Les données sont stockées dans des fichiers plat, ce qui facilite leur sauvegarde et redeploiment. Ils se trouvent dans le répertoire /var/lib/prosody, si vous utilisez un logiciel de backup penser à ajouter ce répertoire, autrement n'oublier de régulièrement sauvegarder ce fichier d'une manière quelconque.

Etats de mon serveur

Je n'ai pas jugé utile d'activer la possibilité de créer des comptes, mais si ça peut intéresser des gens, faites le moi savoir. Je tâcherai dans cas de garantir une certaine disponibilité, et ferai des annonces en cas de mise à jour, migration ou problème sur le serveur qui entraînerait une indisponibilité pour un certain temps.

Conclusion

Je suis très content de prosody et me voit soulager en terme de maintenance, c'est un très bonne exemple de logiciel écrit dans le langage Lua, qui est très agréable à configurer. Je le recommande pour quiconque souhaiterai hébérger son serveur jabber.

Drapeau En Prosody

 

First page: First page Next page: 2 Last page: Last page