Gu!oN@'s Blog

Open WEBOS sort en béta 1.0

Vous avez certainement entendu parler dernièrement que HP arrêtait la fabrication de ses tablettes PC TouchPad. Ces tablettes étaient munies du système d’exploitation WebOS, suite à cet arrêt de production HP a eu la bonne idée de mettre en open source le code de son système.

Ceci a donné naissance au projet Open webOS (http://www.openwebosproject.org) sous licence libre Apache 2.0 (http://www.openwebosproject.org/overview/license).

Le code source du projet est disponible sur github (https://github.com/openwebos) avec pas moins de 450000 lignes de code afin de fournir un OS a destination des appareils mobiles et des PC.

Une petite image du bureau afin de donner un aperçu:

En espérant que ce projet fera autant de bruit que l’a fait HP avec son annonce….

FileZ : Une application Web Open Source d’échanges de fichiers

Suite au besoin personnel d’un outil simple d’échange de fichiers, je suis tombé sur FileZ, une application web open source développée à l’origine par l’Université d’Avignon et des Pays de Vaucluse qui permet de déposer et de gérer des fichiers destinés à être partagés. Grâce à une URL unique courte et éventuellement un mot de passe à intégrer dans vos mails ou à diffuser directement depuis le portail, il est aisé de partager vos documents.

L’application est basée sur PHP/Mysql et permet une authentification compatible avec les standards du marché (LDAP, CAS+LDAP ou base de données).

Parallèlement à cette démarche, l’équipe du Planet-Libre a reçu un courriel de William Larrieu, l’un des gestionnaires du dépôt git, afin de nous parler de cet outil : j’ai donc sauté sur l’occasion pour lui poser quelques questions.

Gu!oN@* :

Bonjour William, en quelques lignes, peux-tu nous présenter le projet FileZ?

William :

FileZ est une application s’installant sur un serveur Web pour offrir un service tel que YouSendIt, MegaUpload, BayFiles, … afin de faciliter l’échange de fichiers lourds.

Ce logiciel libre a été développé par l’université d’Avignon qui propose ce service Web au personnel et aux étudiants de l’université.
Alexandre Cuniasse a développé FileZ 1.0 (PHP/MySQL) qu’il publie le 6 décembre 2007 (http://gpl.univ-avignon.fr/2007/12/06/filez-10/).
Deux ans plus tard, Arnaud Didry refonde FileZ (avec le micro-framework Modèle-Vue-Controleur Limonade PHP, Zend pour l’autoloader, la localisation, l’envoi de mail et le cache, jquery pour le client) et publie le 24 octobre 2009 FileZ 2.0 Alpha sur github (636 files with 262,668 additions : https://github.com/UAPV/FileZ/).
Il publie le traditionnel billet sur la vitrine logiciel libre de l’université : http://gpl.univ-avignon.fr/2009/10/26/actualite-gpl-a-luniversite-davignon/
On remarque au passage l’importance de la philosophie du libre au sein de la DSI de l’université. FileZ est un résultat de cette philosophie *

A l’automne 2011, l’université passe la main à la communauté : http://gpl.univ-avignon.fr/2011/11/02/filez-et-rdvz-il-est-temps-pour-nous-de-passer-la-main/.
L’organisation FileZ https://github.com/FileZ est créée le 18 octobre pour gérer le dépôt et recrute depuis à tour de bras ! (nous sommes 3 owners pour l’instant…, manifestez-vous pour nous rejoindre !).

* Page à propos:
« toutes nos nouvelles applications sont développées dans l’idée d’être utilisées par d’autres universités évidemment, mais également et surtout par des particuliers et des entreprises. Par exemple, nous utilisons essentiellement des fonctionnalités LDAP dans nos applications, cependant, nous implémentons tout de même une couche base de données afin que tout le monde puisse utiliser l’application. Bref, l’idée est donc bel et bien d’ouvrir notre travail afin d’en faire profiter tout le monde.
Toutes nos applications ou contributions sont déposées sous licences CeCILL (GPL à la française) et GPLv3 ou GPLv2 selon les besoins. Quant aux graphismes et design ils devraient être sous licences Creative Commons »

Gu!oN@* :

Peux-tu nous faire un présentation succincte de l’équipe?

William :

L’équipe était au début composée du personnel de la DSI de l’université. Puis elle s’est composée au gré des arrivées et des départs de contributeurs.
Il y a une vingtaine de contributeurs au code et à la liste de discussions. J’intègre leurs contributions à FileZ, ce sont les auteurs de la plupart des corrections depuis mai 2011. A noter également le fork de l’Université d’Hildesheim avec de nombreuses adaptations (https://github.com/UNIHI/FileZ).

Les 3 personnes de l’organisation sont:

Gu!oN@* :

Avez-vous des contributeurs réguliers? Comment contribuez au code?

William :

FileZ 2 a été amélioré plusieurs fois par une quinzaine de contributeurs différents, et nous échangeons avec eux pour intégrer les modifications.

Il y a différentes manières de contribuer, se manifester sur github c’est déjà participer. Suivre le projet, publier un message, commenter le code, tester le logiciel, forker, écrire sur le wiki…

Rendez-vous sur github.com !

Gu!oN@* :

L’université d’Avignon ne prend plus en charge le projet, comment faites-vous?

William :

On n’a plus de développeur professionnel (à part le fork de UNIHI) mais il y a quelques contributeurs réguliers et il y aura toujours des contributeurs occasionnels.

Je souhaite ouvrir l’organisation FileZ à d’autres développeurs, envoyez-moi un message :) .

Gu!oN@* :

Par rapport à des produits comme OpenUpload ou Jyraphe, quels sont les points forts de filez?

William :

Son design, l’utilisation de limonade PHP, sa base d’utilisateurs (particuliers et professionnels) qui réagit au développement.
Je ne connais pas suffisamment les autres solutions ; différents frameworks, designs, fonctionnalités, communautés, (http://xtrafile.com/demo/, http://openupload.sourceforge.net/, http://codingteam.net/project/koload, il en existe beaucoup).

Gu!oN@* :

Et inversement ses points faibles?

William :

Pas de drag-and-drop ni de multiupload

Gu!oN@* :

Quelles sont les prochaines évolutions qu’on peut s’attendre à voir apparaître dans les prochaines versions? (upload multifichier, compression, html5,…)

William :

Le prochain FileZ verra sans doute apparaître ce que tu cites et j’espère davantage :

  • une interfacte d’admin digne de ce nom,
  • un meilleur script d’installation,
  • le support de sqlite pour pouvoir se passer de base de données Postgres ou Mysql,
  • une option pour configurer FileZ en mode « Envoyez-nous vos fichiers » (permettant aux visiteurs d’envoyer des fichiers, éventuellement signés),
  • une option pour configurer FileZ en mode similaire à http://bayfiles.com/ avec url et code de deletion,
  • le téléchargement d’une collection de fichiers (multi-upload, multi-download),
  • a gestion des upload via ftp,

Le leitmotiv est de continuer à répondre aux besoins des DSI (d’universités ou autres), des SSLL, et des particuliers ; et d’agrandir notre communauté. Rendez-vous sur Github :)

Gu!oN@* :

Merci William d’avoir répondu à mes questions.


Vous l’aurez bien compris la communauté FileZ à besoin de contributeurs donc si vous avez installé l’application et que vous avez corrigé des bugs ou traduit dans une langue ou apporté une amélioration il ne faut pas hésiter à le faire savoir via l’adresse https://github.com/FileZ/FileZ.

De mon côté j’ai installé FileZ sans difficulté sur une VM Centos 6.2 avec une authentification LDAP (Active Directory Windows 2003 SP2) et dans un second temps avec un serveur CAS (Central Authentification Service) pour le SSO (promis des articles à ce sujet suivront).

Le premier constat est que c’est une application fonctionnelle, simple d’utilisation et qui va à l’essentiel. Donc si vous cherchez une application pour échanger vos fichiers plutôt que de surcharger votre serveur de messagerie, essayez FileZ vous ne serez pas déçu.

A titre comparatif, vous trouverez à l’adresse suivante une liste de service de partage de fichier http://www.hongkiat.com/blog/file-sharing-tools/

Recherche et remplacement recursif?

Qui n’a jamais eu besoin de faire une recherche récursive afin de remplacer une occurrence dans plusieurs fichiers?
Pour se faire, nous allons combiner les commandes find, xargs et sed en version GNU obligatoirement sinon les options utilisées ne seront pas reconnues.

Dans l’exemple ci-dessous nous allons remplacer l’occurence « redmine.bilboplanet.com » par « chili.kiwais.com/projects/bilboplanet » dans tout le code source du Bilboplanet:

Nous allons commencer par rechercher tous les fichiers avec l’utilitaire « find », pour cela on va utiliser deux options:

  • L’option « -type f »: permet de ne rechercher que des fichiers.
  • L’option « -print0»: permet de remplacer le caractère espace par le caractère générique null (\0)

Ce qui nous donne la commande suivante:

$ find . -type f -print0

En suivant, nous allons (au travers d’un pipe) utiliser la commande xargs pour gérer la sortie du process find avec l’option suivante:

  • L’option -0 permet la gestion du caractère null

Suivi de « ce que l’on veut faire », nous allons utiliser la commande sed:

  • L’option « -i » permet une modification du fichier courant
  • L’expression suivante indique ce que l’on souhaite faire, elle se découpe en 4 et est encadré par des simples quotes « ‘ »:
    1. le « s » indique substitute: de ce fait on va remplacer toutes les occurences d’une expression par une autre
    2. La chaîne de caractère après le « s/ » indique qu’elle occurence nous recherchons, cela peut être une expression régulière, et elle se termine par un « / »*
    3. La chaîne de caractère suivante (après le deuxième « / ») indique quelle chaîne de caractère remplacera l’occurence trouver et elle se termine par un « / »*
    4. Le « g » indique que l’on procède à un remplacement global

Ce qui nous donne la ligne de commande:

$ xargs -0 sed -i 's/SEARCH/REPLACE/g'

Si nous mettons les deux commandes bout à bout sans oublier le pipe « | » cela nous donne donc:

$ find . -type f -print0 | xargs -0 sed -i 's/SEARCH/REPLACE/g'

* Dans sed (et beaucoup d’autres programmes) le caractère « \ » est le caractère d’échappement pour les caractères spéciaux tel que « / », « @ », « $ », …. De ce fait si vous recherchez une chaîne contenant le caractère « / » il faudra saisir « \/ » pour que celui-ci ne soit pas interprêté.

Voici à présent ce que cela donne lorsqu’on souhaite remplacer la chaîne de caractère « redmine.bilboplanet.com » par « chili.kiwais.com/projects/bilboplanet » (en n’oubliant pas le caractère d’échappement)*:

$ find . -type f -print0 | xargs -0 sed -i 's/redmine.bilboplanet.com/http:\/\/chili.kiwais.com\/projects\/bilboplanet/g'

Comment supprimer le caractère ^M avec vi

Lorsqu’un fichier est édité sur un system Windows/DOS à la fin de chaque ligne le caractère « ^M » apparaît.

Si vous souhaitez supprimer ce caractère sur l’ensemble du fichier avec l’éditeur vi voici la commande a utilisée:

:%s/^M//g

Si vous saisissez directement les caractères cela ne fonctionnera pas, pour pallier à ce problème il faut utiliser les combinaisons de touches suivantes:

:%s/[ctrl+V][ctrl+M]//g

Perl: Couper les lignes d’un fichier a un nombre de caractères définis

Ceci n’est pas un article proprement dit, il est question d’une astuce afin de découper les lignes d’un fichier à un nombre de caractères définis avec une commande Perl et d’une simple expression régulière.

On considère un fichier en entrée dont le marqueur de fin de ligne (LF) n’est pas présent et nous souhaitons le mettre en place chaque 20 caractères par exemple.

Le fichier en entrée se nommant input:

Ceci est un fichier de tests dont le caractère de fin de ligne est manquant et nous souhaitons decouper le fichier chaque 20 caractères. Pour cela nous allons utiliser Perl.

La commande Perl:
$ perl -0777 -pe 's/(.{20})/\1\n/sg' input

Le résultat:

Ceci est un fichier
de tests dont le car
actère de fin de lig
ne est manquant et n
ous souhaitons decou
per le fichier chaqu
e 20 caractères. Pou
r cela nous allons u
tiliser Perl.

Si l’on souhaite mettre en place les marqueurs CR et LF la commande devient:

$ perl -0777 -pe 's/(.{20})/\1\r\n/sg' input

Comment renommer une carte ethernet sous Linux?

Le but de cet article est de décrire la marche à suivre pour renommer une interface ethernet sur un système Linux disposant de Udev.

Toutes les actions réalisées dans cet article sont faites dans le contexte « root » ou travers de « sudo » et en connexion console directe.

Description:

Lorsqu’on rajoute une nouvelle interface réseau sur un serveur celle-ci est nommée ethN où N correspond à un chiffre incrémental.
Il en est de même lorsqu’on remplace la carte réseau existante car le système connaît eth0 avec son adresse MAC personnelle (et unique) de ce fait s’il détecte une nouvelle adresse MAC il va créer une nouvelle interface même si la première n’existe plus.

NB: Cela s’applique également lors d’un clone VMWare

Mais pourquoi cela?

Tout simplement car le gestionnaire de périphérique Udev garde la configuration des périphériques dans des fichiers de configurations.
Pour les cartes réseaux il s’agit du fichier « /etc/udev/rules.d/70-persistent-net.rules »:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
 
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:96:00:13", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:96:01:19", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Ici on voit que le système connaît deux interfaces réseaux:

  1. eth0 avec l’adresse MAC 00:50:56:96:00:13
  2. eth1 avec l’adresse MAC 00:50:56:96:01:19

Mode opératoire

Si l’on souhaite que la carte réseau avec l’adresse MAC 00:50:56:96:01:19 se nomme eth0 il faut modifier le champs « NAME » et modifier également le champs « NAME » de l’interface se nommant, à l’instant T, eth0 ou carrément supprimer la ligne correspondante:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
 
 
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:96:01:19", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Une fois notre fichier de configuration modifier il faut redémarrer le daemon « udevd »:

  • Sur un système Debian:
  • $ service udev restart
    Stopping the hotplug events dispatcher: udevd.
    Starting the hotplug events dispatcher: udevd.
  • Sous Rhel:
  • $ start_udev
    Starting udev:                                             [  OK  ]

A cet instant notre configuration des périphériques est bonne mais la machine n’est pas sur le réseau!!!
Pour cela il faut modifier le fichier de configuration de l’interface réseau « /etc/sysconfig/network-scripts/ifcfg-eth0″ en mettant à jour l’adresse MAC (champs HWADDR) avec celle ce la nouvelle interface:

DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPADDR=192.168.1.10
NETMASK=255.255.255.0
DNS2=192.168.1.2
GATEWAY=192.168.1.254
DNS1=192.168.1.1
USERCTL=no
HWADDR=00:50:56:96:00:13

Devient:

DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPADDR=192.168.1.10
NETMASK=255.255.255.0
DNS2=192.168.1.2
GATEWAY=192.168.1.254
DNS1=192.168.1.1
USERCTL=no
HWADDR=00:50:56:96:01:19

Une fois fait, on redémarre le service réseau:

  • Sur un système Debian:
  • $ /etc/init.d/networking restart
  • Sous Rhel:
  • $ service network restart

    Notre serveur est à présent à nouveau sur le réseau avec la nouvelle interface réseau:

    $ ifconfig eth0
    eth0      Link encap:Ethernet  HWaddr 00:50:56:96:01:19
              inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:617 errors:0 dropped:0 overruns:0 frame:0
              TX packets:518 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:55550 (54.2 KiB)  TX bytes:90797 (88.6 KiB)

Au revoir Dennis Ritchie aka dmr

Aujourd’hui un homme emblématique du monde Unix nous a quitté Denis Ritchie, il n’en était pas moins que le créateur tout comme le langage C.

Je ne vais pas faire de long discours car suis très mauvais dans cet exercice, je tenais juste à lui rendre hommage et à le remercier pour le travail effectué tout au long de sa carrière.

Paix à son âme.

Ubuntu Unity: Purger l’historique des fichiers et dossiers

Sous Unity, la purge de l’historique des fichiers consultés n’est pas aussi facile que sous Gnome avec son simple clic sur « Clear Recents Documents ».

Alors comment faire?

Tout se passe dans un terminal en deux lignes de commandes:

  1. Supprimer le fichier « .local/share/zeitgeist/activity.sqlite » de votre home directory:
  2. $ rm -f ~/.local/share/zeitgeist/activity.sqlite
  3. Réinitialiser le daemon zeitgeist*:
  4. $ zeitgeist-daemon --replace

* zeitgeist est un framework de journalisation livré par défaut avec Natty pour plus de détails je vous renvois sur la page Wikipedia

Shell script : Comment connaître le nombre de jour dans un mois?

Ceci est une astuce plus qu’un article mais elle peut être utile dans le cadre d’un shell script.

On va utiliser le binaire « cal » qui, lorsqu’on l’utilise tout seul, génère dans un terminal un calendrier du mois courant:

$ cal
       février 2011
dim lun mar mer jeu ven sam
         1   2   3   4   5
 6   7   8   9  10  11  12
13  14  15  16  17  18  19
20  21  22  23  24  25  26
27  28

Une fois que l’on a le calendrier il nous suffit de l’exploiter en commençant par retirer les caractères alphabétiques:

$ cal | grep -v '[a-zA-Z]'
         1   2   3   4   5
 6   7   8   9  10  11  12
13  14  15  16  17  18  19
20  21  22  23  24  25  26
27  28

L’étape suivante consiste maintenant à compter le nombre de mots:

$ cal | grep -v '[a-zA-Z]' | wc -w
      28

Maintenant, si vous souhaitez rendre exploitable cette valeur dans un script il suffit de définir une variable de type entier (integer) dans laquelle vous stockez le résultat de la commande:

$ typeset -i NB_DAYS=$(cal | grep -v '[a-zA-Z]' | wc -w)
$ echo ${NB_DAYS}
28

Nous venons de voir comment faire pour le mois courant maintenant pour un mois spécifique il suffit de spécifier quel mois on désire (en numérique) et quelle année:

$ typeset -i NB_DAYS=$(cal 6 2011| grep -v '[a-zA-Z]' | wc -w)
$ echo ${NB_DAYS}
30

ou

$ typeset -i NB_DAYS=$(cal 6 $(date +%Y) | grep -v '[a-zA-Z]' | wc -w)
$ echo ${NB_DAYS}
30

Si vous souhaitez pousser un peu plus le vice on peut imaginer travailler avec une fonction dans un script se nommant « test.sh »:

#!/usr/bin/sh
function day_in_month {
        if [[ -n ${1} && -n ${2} ]] ; then
                month=${1}
                year=${2}
        else
                eval $(date "+month=%m year=%Y")
        fi
 
        echo $(cal ${month} ${year} | grep -v '[a-zA-Z]' | wc -w)
}
 
 
echo "Mois?"
read check_month
echo "Annee?"
read check_year
 
day_in_month ${check_month} ${check_year}
 
exit 0

Si on l’execute:

$ ./test.sh
Mois?
2
Annee?
2012
Le mois 2/2012 compte 29 jours.

Petite astuce en suivant: Comment récupérer le dernier Samedi du mois:

$ cal 02 2012 | awk '{ print $6 }' | grep -v '^$' | tail -1
25

ou

$ cal 02 2012 | awk '{ print $6 }' | grep -v '^$' | sed '$!d'
25

ou encore

$ cal 02 2012 | awk '{ print $6 }' | awk 'NF{ s=$0 } END { print s }'
25

En espérant que cette petite astuce pourra vous aider.

Grub Customizer – Un outil graphique pour configurer grub2

Aujourd’hui nous partons à la découverte d’un utilitaire fort sympathique pour tout ceux qui ont peur de jouer avec la configuration de Grub.

 

Présentation

Cet utilitaire se nomme « Grub Customizer », il est écrit en C++ sous licence GNU GPL v3 par Daniel Richter.
Il vous permettra au travers d’une simple interface graphique de configurer votre chargeur de démarrage (boot loader) en toute sérénité.

 

Installation

Installation depuis les sources

A l’instant où j’écris cet article, la version publiée est 2.1.2.
Celle-ci est disponible en téléchargement sur la page launchpad du projet: https://launchpad.net/grub-customizer (lien direct).
Pour pouvoir installer depuis les sources, il vous faudra disposer des près-requis suivants:

  • libgtkmm-2.4-dev
  • cmake
  • make
  • gcc

Généralement ces paquets sont disponibles dans les dépôts de vos distributions.
Une fois les près-requis installés et l’archive téléchargée nous pouvons passer à l’installation:

  • Extraire les sources:
  • $ mkdir /tmp/grub-customizer_2.1.2
    $ cd /tmp/grub-customizer_2.1.2
    $ wget http://launchpad.net/grub-customizer/2.1/2.1.2/+download/grub-customizer_2.1.2.tar.gz
    $ tar -xzf grub-customizer_2.1.2.tar.gz
  • Compilation:
  • $ cmake .
    $ make
  • Installation:
  • $ sudo make install

Installation Ubuntu

Il est possible d’installer le paquet directement sous Ubuntu:

$ sudo add-apt-repository ppa:danielrichter2007/grub-customizer
$ sudo apt-get update
$ sudo apt-get install grub-customizer

 

Lancement

$ sudo grub-customizer

A partir de cette interface vous allez pouvoir activer et/ou désactiver des entrées dans le menu Grub:

Si vous cliquez sur « Preferences » vous allez pouvoir personnaliser votre menu:

  • Doit-on le voir ou pas?
  • Si on le voit alors pendant combien de temps?
  • Modifier les paramètres d’affichages (couleur, résolution, …)
  • etc…

Une fois que vous avez ajusté votre configuration, il suffit de cliquer sur « Save » et tout sera automatiquement fait.
Il n’est plus nécessaire de lancer « update-grub2″.

Nous constatons que l’utilisation de cet outil est relativement simple, mais il faut de même faire attention à ce que l’on fait!

Pour de plus amples informations je vous invite à lire la FAQ (anglais).

 

Conclusion

Je trouve cet utilitaire fort intéressant pour tout ceux qui ont peur de modifier directement les fichiers de configurations (petit rappel: il faut toujours faire une copie de sauvegarde avant toute modification d’un fichier).
Il permet de présenter simplement les possibilités que peut offrir Grub2 en termes de configuration et de personnalisation.