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.
Dist-Zilla - distribution simplifiée pour auteur CPAN
Dist::Zilla
Tutorial
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.
Fortune-vimtips
Github fortune-vimtips
Fichier original
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.
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.
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.
Prosody
First page: First page
Next page: 2
Last page: Last page