Planet Evolix

July 02, 2009

Gregory Colpart

JCE non limitées sous Debian

Les packages Debian de Java n’intègrent pas de mécanisme pour faciliter l’utilisation des versions non limitées des JCE (Java Cryptography Extension), utiles pour avoir des fonctions de chiffrement dites « fortes » (#466675). L’idée est de créer des diversions locales pour conserver les versions non limitées, même en cas de mise-à-jour :

# dpkg-divert --divert /usr/share/doc/sun-java6-jre/US_export_policy.jar.ori \
 --rename /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/US_export_policy.jar
Adding `local diversion of /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/US_export_policy.jar
 to /usr/share/doc/sun-java6-jre/US_export_policy.jar.ori'
# dpkg-divert --divert /usr/share/doc/sun-java6-jre/local_policy.jar.ori \
--rename /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/local_policy.jar
Adding `local diversion of /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/local_policy.jar
to /usr/share/doc/sun-java6-jre/local_policy.jar.ori'

Attention, bien garder à l’esprit que si une faille de sécurité survient, il faudra mettre à jour manuellement ces fichiers.

by Gregory Colpart at July 02, 2009 09:45 PM

June 19, 2009

Thomas Martin

Gérer plusieurs instances de MySQL

Voici un résumé de la mise en oeuvre de multiples instances MySQL sur un
serveur Debian, à l'aide de l'outil mysqld_multi. Cette solution permet par
exemple d'offrir un accès complet à MySQL dans le cadre d'un hébergement
mutualisé (l'utilisateur peut alors créer ses propres bases, gèrer ses
utilisateurs, etc). Cela peut être aussi utilisé pour cloisonner totalement les
bases de données de différentes applications, et ainsi d'ajuster finement des
paramètres tels que max_connections pour chacune d'elles.

Voici les étapes :

  • Ajouter une ou plusieurs sections [mysqldN] dans /etc/mysql/my.cnf, où N
    correspond au numéro d'instance, et <instance> à son nom.
[mysqldN]
user = mysql-<instance>
port = 3307
socket = /var/run/mysqld-<instance>/mysqld.sock
pid-file = /var/run/mysqld-<instance>/mysqld.pid
datadir = /var/lib/mysql/<instance>

Si vous utilisez les options --log, --log-bin ou --log-error, il est
nécessaire de les redéfinir dans chaque configuration d'instances (voir
Running Multiple MySQL Servers on the Same Machine).

Note : pour faire tourner l'instance avec un utilisateur différent (comme dans
cette exemple) il est à priori nécessaire de commenter le paramètre user = mysql dans
la section [mysqld] du my.cnf, sinon mysqld_multi retourne une erreur :

Ignoring user change to 'mysql-<instance>' because the user was set to 'mysql'
earlier on the command line

Décommenter ce paramètre ne gène pas le lancement de l'instance initiale.

  • Créer le compte système qui fera tourner l'instance.
useradd -r mysql-<instance>

  • Créer le répertoire de données de l'instance, et les répertoires annexes.
mysql_install_db --datadir=/var/lib/mysql/<instance>
chown -R mysql-<instance> /var/lib/mysql/<instance>
mkdir /var/run/mysqld-<instance>
chown mysql-<instance> /var/run/mysqld-<instance>

A noter que je place le datadir dans /var/lib/mysql/<instance>, j'ai donc
préalablement déplacé ailleurs les données de l'instance initiale. Libre à vous
de placer le datadir où bon vous semble.

  • Démarrage de l'instance
mysqld_multi --verbose --no-log start N

Où N fait référence au numéro de l'instance.

Il est maintenant possible de s'y connecter en utilisant le numéro de port
TCP/IP spécifié plus haut, puis de modifier le mot de passe root :

mysql -h 127.0.0.1 --port=3307 -u root

June 19, 2009 06:00 PM

June 08, 2009

Sebastien Dubois

Petit déjeuner Evolix autour de la virtualisation avec Xen - 27 Mai 2009

Le 27 mai dernier, Evolix a organisé un petit-déjeuner sur le sujet de Xen et la virtualisation de serveurs.

Petit Déjeuner 27 Mai Xen Evolix

Voici une partie des slides qui ont été présentés durant ce petit déjeuner.

Pour rappel le sommaire était :

1. Présentation d’Evolix / Offres de virtualisation d’Evolix

Les slides sont ici

2. Présentation et démonstration sur la virtualisation axée
sur Xen pour gérer des serveurs Linux virtuels
* Introduction à la virtualisation, revue des différentes
technologies
* Présentation de Xen : installation / gestion / performances
* Demonstration avec Xen-HVM pour des OS non modifiés
(Windows, Linux)
* Démonstration avec une migration “à chaud” d’une machine
virtuelle

Les slides sont ici
Le screencast réalisé par Grégory Colpart (disponible en HD):

3. Témoignage d’un client d’Evolix sur l’utilisation pour une
banque française d’une plateforme de services
Apache/Tomcat/JBoss/MySQL

* Présentation des besoins initiaux
* Retour sur la solution après plus d’un an d’utilisation

Slides disponibles sur demande.
L’infrastructure présentée par le client d’Evolix (Nouveaux Territoires) était la suivante :

Architecture Xen pour NT

by Sdubois at June 08, 2009 01:44 PM

May 10, 2009

Gregory Colpart

Fichier special /dev/megaraid0 pour les noyaux Linux récents

En février 2008, la gestion du fichier spécial pour le management des cartes SCSI Megaraid (en général, /dev/megaraid0) a changé dans le noyau Linux. Auparavant, on notait la présence de megadev dans /proc/devices, car un numéro majeur (et dynamique) de périphérique lui était attribué. Les différents scripts utilisaient donc des scripts ressemblant à :

MAJOR=`grep megadev /proc/devices|awk '{print $1}'`
mknod /dev/megadev0  c $MAJOR 0

Mais un numéro majeur ne semblait pas utile, car seul un fichier spécial est nécessaire (même avec plusieurs cartes Megaraid) et le numéro mineur n’était jamais utilisé. Cela a donc changé à partir du noyau Linux 2.6.25, et c’est désormais un numéro mineur (et dynamique) et un numéro majeur correspondant à misc qui définit le périphérique /dev/megaraid0. On retrouve ainsi des bugreports chez Debian (#399783) et Gentoo (#233295) à propos de ce changement.

Concrètement, ce matin lors d’une mise-à-jour d’un noyau Linux de 2.6.21 en 2.6.28, le fichier spécial /dev/megaraid0 avec les numéros majeur/mineur 253/0 n’était plus utilisable par les outils de management du RAID. La suppression de ce fichier et l’installation d’udev a permis de retrouver un /dev/megaraid0 fonctionnel.

by Gregory Colpart at May 10, 2009 04:11 PM

May 08, 2009

Gregory Colpart

Driver bnx2 du noyau Lenny et carte Broadcom NetXtreme II

Le driver bnx2 du noyau Linux 2.6.26 de Debian Lenny (et du 2.6.24 d’half-and-etch) nécessite un firmware pour fonctionner avec les cartes réseau Broadcom NetXtreme II (présentes par exemple sur les serveurs DELL PowerEdge 1950/2950), au contraire du noyau Linux 2.6.18 de Debian Etch. Lors de la mise-à-jour vers l’un de ces noyaux, il faut donc installer le paquet firmware-bnx2 (section non-free) et s’assurer de mettre à jour les images initramfs (update-initramfs -u -k all).

by Gregory Colpart at May 08, 2009 09:38 PM

April 25, 2009

Gregory Colpart

Chroot SSH et PTY allocation avec Debian Lenny

Pour mettre en place des serveurs de backup, j’utilise un script chroot-ssh.sh qui permet la construction d’un chroot minimal pour faire tourner un serveur SSH et faire du rsync. Avec la mise-à-jour vers Lenny, l’allocation PTY réalisée par SSHD change : il ne semble plus possible de mettre en place un serveur SSH sans monter PROCFS et DEVPTS. Sans cela, on rencontre les erreurs suivantes côté serveur SSH :

debug1: Allocating pty
openpty: No such file or directory
session_pty_req: session 0 alloc failed

Si uniquement DEVPTS est monté, et pas PROCFS :

debug1: Allocating pty
openpty: returns device for which ttyname fails.

Voici donc les étapes pour lancer le serveur SSH chrooté avec Debian Lenny :

#  chroot /backup/jails/myserver mount -t proc proc-chroot /proc/
#  chroot /backup/jails/myserver mount -t devpts devpts-chroot /dev/pts/
#  chroot /backup/jails/myserver /usr/sbin/sshd > /dev/null

by Gregory Colpart at April 25, 2009 11:48 AM

April 19, 2009

Gregory Colpart

Un exemple de migration Debian Etch->Lenny [0]

Dans la même optique que mes précédents exemples de migration Debian Sarge->Etch ([0], [1], [2] et [3]), je repars sur une série portant sur des migrations Debian Etch->Lenny. Je rappelle rapidement le principe : j’administre une centaine de serveurs pour plusieurs dizaines de sociétés, et la plupart vont être concernés par une migration vers Debian Lenny d’ici un an. Je vais en choisir quelques uns pour illustrer les opérations nécessaires et problèmes recontrés. Et j’incite tout le monde à faire de même afin d’avoir de multiples astuces disponibles sur le web.

Pour ce premier post, la question classique : quand faut-il migrer sa machine vers Debian Lenny ? Tout d’abord, Etch reste maintenu environ un an après la sortie de Lenny, soit jusqu’en février 2010. Il n’y a donc aucune raison d’être pressé à migrer si l’on a pas besoin de nouveaux logiciels. Et surtout, je recommande le principe de précaution, à savoir attendre un certain temps ce qui permettra d’avoir une grande quantité d’informations disponibles sur Internet (ressources Debian, moteurs de recherche, blogs). Enfin, il est important de bien planifier sa migration en fonction du métier de la société (haute/basse saison, vacances, etc.).

Évidemment, les précautions suivantes sont nécessaires : faire des essais de migration sur des serveurs de test, avoir des backups tout frais, couper les services durant la migration et bien prévenir à l’avance tous les utilisateurs et personnes concernées.

Entrons dans le vif du sujet. Au menu, un serveur web situé chez un hébergeur low-cost français. Ce serveur fait parti d’un pool de plusieurs serveurs (load-balancing via du round-robin DNS), donc il faut au préalable le désactiver et attendre que le time-to-live le rende totalement inactif. Ensuite, on reprend les Releases Notes, on modifie le sources.list et on se lance.

On s’assure que les partitions /usr et /tmp ont les bonnes options de montage:

# mount -o remount,rw /usr && mount -o remount,exec /tmp

On lance une mise-à-jour minimale :

# aptitude update && aptitude upgrade

Puis une mise-à-jour complète :

# aptitude dist-upgrade

Rien de bien complexe. Il reste à croiser les doigts pendant les opérations ci-dessus, mais si votre système est « propre », cela se passe très bien, comme souvent sur un système Debian. Il est ensuite important de lire les éventuelles instructions de mise-à-jour situées dans le fichier NEWS d’un paquet (en utilisant apt-listchanges, cela peut être affiché automatiquement).

En ce qui concerne la mise-à-jour du kernel, de mauvaises surprises sont possibles après le redémarrage. Il est notamment recommandé d’avoir un accès à la machine (accès physique, accès « rescue », etc.) pour corriger d’éventuels problèmes. Dans mon cas, l’interface réseau a été renommée de eth0 à eth1 suite à la mise-à-jour d’udev : le fichier  /etc/udev/rules.d/z25_persistent-net.rules se transforme en /etc/udev/rules.d/70-persistent-net.rules, jusqu’ici tout est normal, mais un problème surnaturel semble s’être produit, la carte e1000 (MAC=00:0c:29:65:ae:04) est « devenue » une r8168 (MAC=00:1c:c0:51:12:45) ; au final, c’est plutôt un soucis lié au matériel, enquête en cours chez l’hébergeur low-cost…

Un vrai problème s’est par contre posé avec la mise-à-jour du paquet nginx (un petit serveur web très performant). Suite à sa mise-à-jour, il ne démarre plus :

Starting nginx: 2009/04/19 20:45:26 [emerg] 28783#0: could not build the server_names_hash,
you should increase server_names_hash_bucket_size: 32

Il faut donc ajouter dans la section http {} du fichier nginx.conf :

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

# Necessaire depuis l'upgrade Etch->Lenny
# (ajoute le 19.06.2009 by reg)
server_names_hash_bucket_size 33;
...

Voilà pour ce premier exemple de migration. Il s’agissait d’un serveur « simple » sans installation particulière, donc assez peu de problèmes rencontrés. Les prochains exemples seront certainement un peu plus complexes !

by Gregory Colpart at April 19, 2009 07:05 PM

February 28, 2009

Gregory Colpart

Administration d’un serveur NIS sous OpenBSD

NIS est un protocole réseau de distribution d’informations système (utilisateurs, groupes, machines, etc.). De plus en plus remplacé par LDAP, il reste encore souvent présent sur des réseaux avec des systèmes hétérogènes.

Un problème assez classique avec NIS est l’administration de la base d’utilisateurs. Déportée dans une base distincte (/var/yp/DOMAINNAME/), on peut :
- la gérer comme une source de données indépendante, mais cela rend assez complexe l’administration, car on ne peut pas vraiment utiliser les outils classiques (commande adduser, détection du max(UID), etc.)
- gérer les utilisateurs/groupes locaux, et générer la base NIS à partir des données locales. Dans ce cas, la problèmatique est de ne pas exporter les utilisateurs/groupes système !

Dans le second cas, il n’existe pas de distinction des utilisateurs/groupes système dans le Makefile.yp distribué par OpenBSD. Heureusement, Antoine Jacoutot a écrit un petit patch pour gérer des MINUID/MINGID/MAXUID/MAXGID : voici le patch.

by Gregory Colpart at February 28, 2009 04:06 PM

February 23, 2009

Gregory Colpart

Astuce Vim du jour

Pour faire un remplacement dans une “visual selection (Ctrl+v)”, notamment pour restreindre un remplacement à une sélection dans une longue ligne :

:'<,'>s/\%Vfoo/bar/

by Gregory Colpart at February 23, 2009 04:58 PM

February 01, 2009

Gregory Colpart

Ferme ton Bind !

Il est important de fermer complètement son Bind, à savoir mettre dans son named.conf :

allow-query { localhost;};
allow-recursion { localhost; };
allow-transfer { none; };

Cela provoque un statut REFUSED pour toutes les requêtes non autorisées. Si refuser les transferts (requêtes AXFR dévoilant toute votre zone) est sage et refuser les requêtes récursives est logique (vous ne voulez pas être serveur DNS pour le monde entier), il faut également refuser toutes les requêtes par défaut afin d’éviter de potentiels dénis de service.

Vous noterez que les directives ci-dessus autorisent les requêtes classiques de la part de localhost dans la mesure où il est fréquent que votre machine se serve de son propre Bind. Si ce n’est pas le cas, mettre toutes les directives à none.

Un moyen simple de vérifier qu’un serveur DNS refuse bien toutes les requêtes :

dig google.fr @<serveur DNS>

Vous ne devez pas obtenir la(les) réponse(s), ni même obtenir la liste des ROOT SERVERS. Vous devez obtenir status: REFUSED (ou alors un timeout…).

J’ai souvent eu du mal à expliquer pourquoi il fallait fermer complètement son Bind, car la menace des attaques DOS restait un peu vague. Ce n’est désormais plus le cas depuis quelques semaines où chaque administrateur d’un Bind assiste (dans ses logs ;-) aux multiples requêtes “. NS IN” générées par des robots/virus :

client 76.9.16.171#39068: query (cache) './NS/IN' denied
client 69.64.87.156#42646: query (cache) './NS/IN' denied

On déplore même des victimes de ces attaques DDOS de grande ampleur, notamment NetworkSolutions qui l’explique sur son blog. Pour contrer cela, on peut refuser les paquets en amont : voici un fameux paquet (format PCAP). On voit donc que l’on peut interdire les paquets comportant une requête DNS récursive (flags = 0×0100). Sur une machine Linux, on peut le faire avec iptables et le module u32 (attention, il semble y avoir des bugs avec certaines versions) :

iptables -A INPUT -p udp --dport domain -m u32 --u32 "0>>22&0x3C@10=0x01000001" -j DROP

SI vous ne voulez pas interdire toutes les requêtes récursives, j’ai trouvé sur Internet une règle plus précise qui matche sur le “. NS IN” (voir commentaires de ce post) :

iptables -A INPUT -j DROP -p udp --dport domain -m u32 --u32 \
"0>>22&0x3C@12>>16=1&&0>>22&0x3C@20>>24=0&&0>>22&0x3C@21=0x00020001"

Enfin, sur l’excellent blog de Stéphane Bortzmeyer, vous trouverez plus de détails et des outils pour mesurer le nombre d’attaques sur votre serveur.

by Gregory Colpart at February 01, 2009 09:02 PM

January 26, 2009

Sebastien Dubois

License et Open Source (GPL et AGPL)

Dans mes souvenirs, la v3 de la GPL devait régler le contournement classique réalisé par beaucoup sur la v2 (alias le “ASP loophole” en anglais) ( exemple : Free et le code de sa freebox, différents prestataires en ASP/SAAS)

Petite mise à jour sur ce sujet :

La GPLv3 n’a pas tenu ses promesses sur ce sujet du SAAS et au final ne le couvre pas.
Par contre l’AGPL est née.
Le lien wikipedia qui va bien : http://fr.wikipedia.org/wiki/GNU_Affero_General_Public_License
Le lien plus complet en anglais : http://en.wikipedia.org/wiki/Affero_General_Public_License
Le texte en anglais de la licence AGPLv3 : http://www.fsf.org/licensing/licenses/agpl-3.0.html
Relatif au sujet : https://www.fsf.org/blogs/licensing/2007-03-29-gplv3-saas
La version 1 de l’AGPL : http://www.affero.org/oagpl.html

Mon résumé : La GNU Affero General Public License, version 3 a été publiée par la Free Software Foundation (FSF) en November 2007 (sur les bases des versions 1 et 2 de l’AGPL publiée par Affero), et est très proche de la GNU General Public License, version 3 (GPLv3)). C’est une license copyleft, reconnue par l’OSI.
La FSF conseille l’utilisation de l’AGPL pour tout logiciel amené à être utilisé par le réseau (alias utilisé en SAAS)
L’AGPLv3 est compatible avec la version 3 de la GPL (via leurs sections 13) dans le sens où l’on peut ajouter du code GPLv3 a du code AGPLv3 pour donner un code AGPLv3
L’AGPLv3 oblige un individu modifiant un logiciel sous cette license et souhaitant le diffuser via le réseau (mode SAAS par exemple) à donner un accès aux sources modifiées de ce logiciel aux internautes.
Actuellement très peu de logiciels utilisent cette license. On peut citer : EyeOS

by Sdubois at January 26, 2009 05:07 PM

January 18, 2009

Gregory Colpart

Utiliser mailgraph sans CGI

Que ça soit pour des raisons de performance, de sécurité ou de simplicité, il est assez commun de ne pas avoir de module CGI sur un serveur (installer du CGI avec nginx est fastidieux par exemple). Or, l’outil de stats mailgraph n’est prévu que pour tourner en CGI. Voici un petit script qui permet de s’en affranchir et de générer les graphes mailgraph sans CGI :

#!/bin/sh
MAILGRAPH_PATH=/usr/lib/cgi-bin/mailgraph.cgi # Debian
#MAILGRAPH_PATH=/usr/local/www/cgi-bin/mailgraph.cgi # FreeBSD
#MAILGRAPH_PATH=/usr/local/lib/mailgraph/mailgraph.cgi # OpenBSD

MAILGRAPH_DIR=/var/www/mailgraph

umask 022

mkdir -p $MAILGRAPH_DIR

$MAILGRAPH_PATH | sed '1,2d ; s/mailgraph.cgi?//' > $MAILGRAPH_DIR/index.html

for i in 0-n 0-e 1-n 1-e 2-n 2-e 3-n 3-e; do
        QUERY_STRING=$i $MAILGRAPH_PATH | sed '1,3d' > $MAILGRAPH_DIR/$i
done

Il peut être placé en crontab, ce qui permet une sauvegarde régulière des graphes générés. Testé sous Debian, FreeBSD et OpenBSD (variable MAILGRAPH_PATH à adapter).

by Gregory Colpart at January 18, 2009 09:58 PM

January 07, 2009

Gregory Colpart

Tropic0°C

Un joli manteau neigeux a recouvert Marseille, pour le bonheur des enfants, un peu moins pour les automobilistes. Ci-dessous, le Jarret (une des artères principales de Marseille) bloqué par le neige :

Ou encore le Pôle Média Belle de Mai, où se trouvent les bureaux d’Evolix :

Edit : toutes mes excuses aux lecteurs de Planet-Libre et Planet-Debian-Fr/Planet-Debian-Fr-Users, j’ai mis ce post dans une mauvaise catégorie ! Le ciel m’est vraiment tombé sur la tête ce mercredi…

by Gregory Colpart at January 07, 2009 10:46 AM

January 06, 2009

Gregory Colpart

La crise ? Quelle crise ?

Depuis plusieurs semaines, on a assisté à une déferlante médiatique à propos de la crise. À tel point qu’un grand nombre de français a désormais pris l’habitude de mentionner cette fameuse crise à tout bout de champ : “à cause de la crise”, “malgré la crise”, etc. Or, il faut vraiment souligner que l’origine de cette crise est boursière. Je me permets de rappeler ce qu’est la bourse (en tous cas, ce que j’en ai compris) : c’est un lieu d’échange de titres qui sont des estimations virtuelles de la valeur d’une entreprise. Et ces estimations fluctuent chaque jour en fonction d’élements divers : annonces de résultats, rumeurs, situations géopolitiques, météo, etc. Bref, une somme d’élements qui laisse une bonne part d’interprétations, voire de hasard, et souvent annoncés par les médias. C’est donc un cercle vicieux : à partir du moment où l’on médiatise les évènements boursiers… qui dépendent fortement des médias. Et l’on est en plein dans ce cercle vicieux. L’élément déclencheur, l’écroulement d’un château de cartes faites de paris américains trop risqués, est bien loin. Les bourses se trouvent dépendantes du contexte médiatique morose, et peinent à rebondir véritablement. Mais pire, les conséquences vont au-delà de la bourse, les acteurs économiques ralentissent leurs investissements en fonction de ce contexte… ce qui influe directement sur tout le système économique : les fournisseurs et sous-traitants se trouvent également ralentis, cela débouche sur moins d’embauches, voir des licenciement et des fermetures. Impactés ou non, les citoyens adoptent un comportement similaire, et l’économie dans son ensemble menace d’être ralentie.

Plus l’on parle de la crise, plus elle progresse. Anticiper la crise, c’est l’accélérer.

En conséquence, il est du devoir des acteurs économiques et de chacun d’adopter un comportement pragmatique : il ne s’agit pas de faire de la méthode Coué en l’occultant complètement, mais il s’agit de ne pas faire d’exagération et de s’en tenir aux conséquences factuelles. Il est notamment un peu facile d’attribuer à la crise le ralentissement du marché automobile : pour des raisons écologiques et économiques (le prix de l’essence augmentant inexorablement depuis des dizaines d’années), le marché est amené à se renouveler et la crise semble davantage être un bon prétexte. Le danger se situe aussi à ce niveau, car la surmédiatisation de la  crise offre une excuse en or à de nombreux acteurs pour faire passer des plans de licenciement, délocalisations, etc. Elle offre même une excuse pour tout évènement négatif… À l’inverse, on pourrait mettre en avant les effets positifs à la crise : le prix de l’essence a baissé (le baril de pétrole est passé de 150 $ à 50 $), l’envolée des prix de l’immobilier s’est arrêtée, des aides à l’embauche ont été mises en place pour les petites entreprises, les taux d’intérêts des prêts baissent, et même le prix de la vie est en baisse, le marché de l’offre devant s’adapter au marché de la demande désormais … frileux ! Bref, pas de quoi tomber dans la morosité ambiante.

Pour conclure, la surmédiatisation de la crise est dangereuse pour l’économie. Afin de revenir à une situation plus raisonnable, les médias, les entreprises et les individus devrait prendre la bonne résolution d’éviter de parler de la crise à tort et à travers, mais de s’en tenir aux faits. Par exemple, beaucoup d’entreprises sont en pleine progression. C’est le cas d’Evolix, PME en constante croissance, et qui va sortir un beau bilan 2008 avec un chiffre d’affaires entre 200.000 et 250.000 EUR. Et qu’on ne me dise plus qu’Evolix ne connaît pas la crise, je vous répondrais : “La crise ? quelle crise ?”

by Gregory Colpart at January 06, 2009 09:59 AM