Planet Asrall

July 24, 2016

Luc Didry

Retour sur le « No poo »

Suite à mon jour­nal sur le Seitan sur LinuxFr (ou à la paru­tion de mon article de blog sur Diaspo­ra*, je sais plus), on m’a parlé du « No poo » et notam­ment de cet article. C’est un mouve­ment qui consiste à ne plus se laver les cheveux.

« Beurk, c’est dégueu­lasse ! » me direz-vous. Et bien non :-)

J’ai donc essayé le No poo. Ça fait un peu plus de deux mois main­te­nant que je ne me lave plus les cheveux qu’au bicar­bo­nate et jus de citron.

« Mais pourquoi donc faire cela ? »

Ma foi, j’ai toujours trouvé cela embê­tant de me mettre sur les cheveux un truc dont la compo­si­tion est impos­sible à comprendre à moins d’avoir un docto­rat en chimie.

Un peu moins de chimie dans la vie dans la vie quoti­dienne, ça ne peut pas faire de mal :-)

Résul­tat au bout de deux mois : je ne me lave plus les cheveux tous les jours, ils sont plus épais et plus doux, et après un lavage, ils sont aussi bien démê­lés qu’a­vec un sham­pooing clas­sique (j’ai les cheveux longs et légè­re­ment bouclés, ils s’em­mêlent faci­le­ment). Le prix ? J’ai pas fait trop gaffe… un paquet de 500g de bicar­bo­nate coûte un peu moins de 4€ et on en a pour plus de 2 mois. ± 3€ pour 50cl de jus de citron, qui dure plus de 2 mois… Alors oui, les bouteilles de sham­pooing peuvent coûter moins cher, mais si je ne dis pas de bêtises, je les vidais vite. Pour moi, c’est gagnant au niveau qualité et au niveau prix.

Je ne peux donc que vous encou­ra­ger à tester :-)

EDIT : dans le jour­nal LinuxFr que j’ai fait de cet article, Wendigo a pointé ce docu­men­taire. C’est sur le gel douche, mais ce qui s’y dit doit être valable pour les sham­pooings.

Parta­ger

Flattr this!

by Luc at July 24, 2016 12:20 PM

July 18, 2016

Luc Didry

Mise à jour de Lufi

Je viens de pous­ser la correc­tion de failles sur Lufi. Pour ceux qui l’ont installé sur leur serveur, mettez à jour rapi­de­ment !

Pour ceux qui utilisent https://demo.lufi.io ou https://frama­drop.org, ces deux instances ont été mises à jour dans la foulée du commit.

Parta­ger

Flattr this!

by Luc at July 18, 2016 12:56 PM

July 14, 2016

Luc Didry

Lance­ment de mes pages Tipeee et Libe­ra­pay

Libre ne veut pas dire gratuit. Et oui, les déve­lop­peurs de logi­ciels libres doivent manger aussi.

Le problème est que cet état de fait n’est pas toujours dans les têtes de tout le monde, parti­cu­liers comme entre­prises. Des exemples ?

Heureu­se­ment, certaines orga­ni­sa­tions comme Frama­soft (dont je suis sala­rié), à force de péda­go­gie, de répé­ti­tion et de campagnes de dons, arrivent à faire passer le message (certes, Frama­soft ne produit pas (enfin si, mais très peu) de logi­ciel, mais four­nit un énorme effort pour faire connaître le logi­ciel libre au grand public et contri­bue au logi­ciel libre par des traduc­tions, des tuto­riels, des patchs, des rapports de bugs, etc).

Mais qu’en est-il pour les déve­lop­peurs isolés ? Ceux qui n’ont pas le temps de faire leur promo ? Géné­ra­le­ment, on a droit à un pauvre petit bouton paypal sur le site du logi­ciel ou leur site person­nel. C’est déjà ça, mais ça limite le soutien à ceux qui ont un compte paypal (oui, je sais, on peut aussi payer par carte bancaire, mais je sais d’ex­pé­rience qu’il faut que la personne qui met le bouton confi­gure sa page paypal pour ça et que paypal ne s’amuse pas à chan­ger ses confi­gu­ra­tions sans rien dire) et à un don ponc­tuel. Et la sauce de Flattr n’a malheu­reu­se­ment pas pris.

Heureu­se­ment, il y a main­te­nant de nouvelles façons de soute­nir les personnes que l’on souhaite aider : Tipeee, Libe­ra­pay, Patreon et autres plate­formes de dons.

Ces plate­formes ont l’avan­tage de permettre les dons récur­rents et de four­nir une page person­na­li­sée pour le créa­teur, lui permet­tant d’ex­pliquer ce qu’il fait, pourquoi il propose de le soute­nir, et même pour certaines d’entre elles de propo­ser des contre­par­ties.

« Oui mais on peut déjà faire une page sur son site ». Oui mais c’est beau­coup plus simple de créer la page sur ces outils et surtout, cette page est la même que celle où l’on peut donner, détail d’im­por­tance.

Bref, tout ça pour dire que je lance mes pages Tipeee (pour l’as­pect plate­forme connue) et Libe­ra­pay (pour être sur une plate­forme libre, on ne se refait pas :D ).

À ma connais­sance, il n’y a pas de déve­lop­peur de logi­ciel libre sur ce genre de plate­forme (Tipeee, tout du moins), je teste­rai donc :-)
Il faut bien tester les diffé­rentes pistes à notre dispo­si­tion en atten­dant le revenu de base ou le salaire à vie.

Soyons clair : je ne cherche pas à gagner suffi­sam­ment de sous pour vivre de mes logi­ciels (bossant pour Frama­soft, je gagne déjà ma vie grâce au logi­ciel libre). Par contre, je permets à ceux qui le souhaitent de me remer­cier en me donnant de quoi me payer une bière de temps en temps, tout en rece­vant une contre­par­tie. Car oui, je propose des contre­par­ties :-) Vous pouvez voir lesquelles sur https://www.tipeee.com/fiat-tux (et quelles sont mes réali­sa­tions dans le domaine du logi­ciel libre sur https://luc.frama.io/, en cliquant sur Réali­sa­tions).

Et histoire de donner le bon exemple, sachez que je soutiens :

  • Neil Jomunsi, écri­vain libre
  • JcFrog, musi­cien/chan­teur/inter­prète paro­dique libre
  • Gee, dessi­na­teur libre
  • ZeMar­mot, film d’ani­ma­tion libre

N’hé­si­tez pas à les soute­nir, ainsi que Frama­soft, la Quadra­ture du Net et l’April :-)

Me soutenir sur Tipeee Me soutenir sur Liberapay

Parta­ger

Flattr this!

by Luc at July 14, 2016 11:15 AM

July 08, 2016

Sebastien Badia

Let's Encrypt using DNS challenge

Logo Let's Encrypt

On va encore parler de Let's Encrypt, non pas du fait que Comodo a essayé d'enregistrer la marque « Let's Encrypt » (oui rien que ça… ils ne doutent rien ces gens… voir cet article).

Mais on va parler de la possibilité de faire du challenge/response DNS pour la génération de nos certificats. En effet dans un précédant article, j'expliquais comment utiliser le client acme-tiny afin de générer des certificats SSL. Le soucis avec cette méthode (et le challenge/response en HTTP) c'est, comme son nom l'indique, qu'il utilise du HTTP(s); il faut donc obligatoirement avoir un serveur web qui va répondre aux challenges (afin de vérifier que nous avons bien le contrôle du domaine que nous souhaitons certifier).

Dans certains cas, il est nécessaire de générer des certificats sans disposer d'un serveur web (soit parce que le service est en interne et donc pas accessible depuis internet, ou alors c'est du mail ou autre… (dans mon cas)).

Yet another script to manage Let's Encrypt...

Après acme-tiny, voici letsencrypt.sh, l'avantage de celui-ci est qu'il est ultra modulaire! Il supporte les challenges par http (classique), mais aussi par DNS (ajout d'un enregistrement txt dans la zone correspondante, voir la doc pour plus d'infos).

Donc nous disions, le truc cool c'est qu'il fonctionne via des hooks, et ils sont nombreux!. Lorraine Data Network n'a pas encore de DNS contrôlé via une API, il faut donc faire un hook spécifique (en mode old-school via puppet/git :-D)

Cas concret avec l'infra de Lorraine Data Network

./letsencrypt.sh -c -t dns-01 -d webmail.ldn-fai.net -d bender.ldn-fai.net -k ./hooks/ldn.sh

Le hook en question, ce petit bout de bash fait donc:

  • Mise à jour du dépot puppet LDN local
  • Ajout de l'enregistrement TXT correspondant au domaine à certifier
  • Mise à jour du serial de la zone
  • Commit et push, puis lancement de puppet
  • Attente d'une validation / certificat de la part de letsencrypt
  • Nettoyage du TXT

Tout cela pour montrer que c'est assez trivial de tout automatiser avec ce système de hooks.

by Sebastien Badia at July 08, 2016 04:00 PM

June 25, 2016

Sebastien Badia

Bug plutôt gênant de flickering avec le noyau 4.6.x

Avec la mise à jour du noyau Linux en 4.6.0 dans Debian, est apparu un bug bien embêtant… L'écran de mon Thinkpad se met à clignoter… (ou flickering) de manière aléatoire (et ça uniquement dans une session X window).

Si ça peut aider, voici quelques pointeurs!

Correctif

Le soucis est connu, on trouve d'ailleurs pas mal de pointeur sur l'Internet! Le problème est d'ailleurs patché et releasé dans la version 4.6.2 du noyau Linux.

The default of 0 is 500us of link training, but that's not enough for
some platforms. Decoding this correctly means we're using 2.5ms of
link training on these platforms, which fixes flickering issues
associated with enabling PSR.

Liens sur les Internettes

Pour les impatient⋅e⋅s

Coté Debian, Salvator à releasé un nouveau paquet 4.6.2-1, il est à l'écriture de ce billet disponible dans Debian unstable, ou sur snapshot.d.o:

Sinon il faut juste attendre que 4.6.2-1 arrive dans testing :)

by Sebastien Badia at June 25, 2016 09:03 AM

June 19, 2016

Sebastien Badia

IPv6, NetworkManager et vie privée

noplacelike

Sur la plus part des réseaux IPv6, les adresses sont crées/distribuées via SLAAC (Stateless address autoconfiguration)

En pratique ça fonctionne comme cela:

  • L'host envoie une router solicitation request (salut, ça à l'air cool ici, il y a des routeurs dans le coin?)
  • Le routeur réponds avec un préfixe (salut, c'est moi le routeur, ton adresse devra commencer par ce préfixe)
  • L'host utilise alors le préfixe et l'adresse MAC de son interface pour générer une adresse IPv6

Le format des adresses générées par l'host est aussi appelé EUI-64. Pour plus de détails à propos de ce procédé, la page de l'IEEE explique tout, le wiki d'ArchLinux est pas mal aussi!

D'un point de vue, sécurité et vie privée

Bon SLAAC, ça marche bien et c'est pratique, mais ça permet de quand même leaker pas mal d'informations à propos du périphérique qu'on utilise… (avec l'adresse MAC, et une recherche OUI-Search, on connais facilement le périphérique), on peut aussi effectuer du tracking assez précis…

Il est aussi possible d'en extraire des informations de localisation assez précises.

Adresses temporaires

Mais comme disait l'autre, en informatique, rien n'est impossible! Il existe donc un système d'adresses temporaires. Pour Apple et Windows, je ne sais pas trop, mais pour la mojorité des Linux ce n'est pas activé par défaut.

On peut l'activer coté système, via sysctl:

# Do not use a temporary address
net.ipv6.conf.all.use_tempaddr = 0
# Set a temporary address, but do not make it the default
net.ipv6.conf.all.use_tempaddr = 1
# Set a temporary address and make it the default
net.ipv6.conf.all.use_tempaddr = 2

Via NetworkManager, c'est presque la même chose, et on peut activer les adresses temporaires via nmcli via l'attribut ipv6.ip6-privacy. Pour les interfaces filaires, on spécifie directement l'interface, et pour les connexions wifi, c'est par contre par point d'accès (via le nom du point d'accès).

nmcli con modify eth0 ipv6.ip6-privacy 2
nmcli connection modify courgette ipv6.ip6-privacy 2

courgette étant le nom d'un point d'accès wifi.

L'activation est alors automatique, l'adresse MAC de l'interface n'est alors plus utilisé pour « construire » l'adresse IPv6 globale de l'interface.

ip a s eth0

Pour briller en société

Les adresses temporaires sont construites en se basant sur l'adresse MAC et une chaine de caractères aléatoire, l'adresse assignée change alors à chaque fois. Ce n'est donc pas à envisager si vous avez besoin d'accéder à votre système par IPv6 (ip renseignée dans un DNS, serveur, ou device non-mobile).

by Sebastien Badia at June 19, 2016 12:02 PM

June 18, 2016

Sebastien Badia

Memo: Monter une image qcow2

Un billet plus en mode mémo, ou comment monter une image qcow2/qcow en vue d'accéder au système de fichier qu'il contient.

Utilisation de qemu-nbd

Dans mon cas, j'avais besoin d'accéder à une machine virtuelle (au format qcow2) mais sans la démarrer, il suffisait donc de monter le qcow2 et d'accéder direct au filesystem (un peu plus compliqué que dans le cas d'un lvm, mais ça reste simple).

modprobe nbd max_part=8
qemu-nbd -c /dev/nbd0 /srv/images/ma-super-vm.qcow2
mount /dev/nbd0p1 /mnt

On fait ce qu'on veux faire avec la partition ainsi montée… et une fois fini,

umount /mnt
qemu-nbd -d /dev/nbd0

Et voila :-)

by Sebastien Badia at June 18, 2016 09:03 AM

June 10, 2016

Romain Dessort

Upgrade to Debian Jessie, introducing smtpd_relay_restrictions in Postfix

TL;DR: since debconf appends a smtpd_relay_restrictions at the end of your main.cf file with same values of smtpd_recipient_restrictions, you have to do the same on all your services listed in master.cf. smtpd_relay_restrictions intends to replace smtpd_recipient_restrictions on next Postfix releases.

After upgrading my mail server to Debian Jessie, I was faced with a weird problem with Postfix: emails sent from authenticated clients were rejected with a “Relay access denied” error.

I have a particular setup, though not so uncommon I think, since it should be the standard: port 25 is dedicated to server-to-server communications, no authentication is supported on that port. Instead, clients which want to send emails have to submit them on submission port (obviously). Concretely on my master.cf file, I override smtpd_recipient_restrictions for submission service to allow sending of emails with minimum restrictions if clients get authenticated.

On my main.cf file:

smtpd_recipient_restrictions =
   permit_mynetworks,
   check_client_access hash:/etc/postfix/client_access,
   #check_sender_access hash:/etc/postfix/sender_access,
   check_recipient_access hash:/etc/postfix/recipient_access,
   reject_unauth_destination,
   reject_invalid_helo_hostname,
   reject_non_fqdn_helo_hostname,
   reject_non_fqdn_sender,
   reject_non_fqdn_recipient,
   reject_unknown_sender_domain,
   reject_unknown_recipient_domain,
   check_policy_service unix:private/whitelister.ctl,
   check_policy_service inet:127.0.0.1:10023,
   permit

And on my master.cf file:

submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_restrictions=permit
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

So in my case, it seemed that the smtpd_recipient_restrictions option passed to submission process was ignored, or the one set up on my main.cf file won. Enabling debugging didn't tell me anything, but confirmed me that the smtpd_recipient_restrictions option for submission process was ignored since I saw Postfix testing all conditions specified on my main.cf

Then after some time, I have seen a new line at the end of my main.cf file: smtpd_relay_restrictions, with all the tests of smtpd_recipient_restrictions. Searching this on postconf(5) manual confirmed me that it replace smtpd_recipient_restrictions in Postfix 2.10, although this one is always supported and not planed to be removed on the next coming versions. This directive indents to simplify and unify the use of smtpd_*_restrictions.

So debconf has added this new directive on my main.cf file, without any debconf notice as far as I remember, and, in my opinion, without reason (Postfix don't even raise a depreciation warning about other smtpd_*_restrictions), and that breaks other services set up on master.cf.

Strangely, no one on the Internet seem to have encountered a similar problem with this directive when upgrading to Jessie.

So I simply do the replacement on my submission service in master.cf and that solve my problem.

June 10, 2016 10:51 AM

June 03, 2016

Alexandre Bailly

NetBSD sur une carte Olimex LIME 2

Photo d'une carte Olimex LIME 2

Un petit article tout simple, qui explique comment installer rapidement NetBSD sur une carte Olimex LIME 2.

Ça ne servira pas forcément à grand-chose. C'est plus pour le sport/fun/amusement/parce que c'est possible (rayer les mentions inutiles).

Pour commencer, il faut :

  • Une carte Olimex LIME 1 ou LIME 2. Perso, j'ai utilisé ma Brique Internet que j'utilise pour faire les tests.
  • Une carte au format microSD (que j'appellerai SD dans l'article par commodité) et un adaptateur microSD -> SD. Le minimum serait 2 Go, j'ai utilisé une microSD de 16 Go en classe 10.
  • Un câble série à brancher sur le connecteur UART de la carte, et un logiciel (genre microcom) pour pouvoir l'utiliser.
  • Un ordinateur sous GNU/Linux (de préférence) ou *BSD. Les MACs, ça a beau être basé sur FreeBSD (+ micronoyau MACH), ça ne compte pas. Windows, on oublie. Je n'ai pas testé sur Haiku ni sur MonaOS.
  • De la place sur le disque dur.
  • Une connexion internet qui fonctionne.
  • Avoir de quoi compiler fex2bin serait un plus.

Pour être franc, je n'ai rien inventé. Je me suis basé sur la page d'installation de NetBSD pour ARM/Allwinner. J'ai utilisé le noyau de la carte BananaPi, carte qui est "relativement" proche de la LIME2. J'avais la flemme de compiler le noyau BSD exprès pour la carte.


Donc, commençons par récupérer l'image système de NetBSD, en version ARM, se trouvant là :
http://ftp.netbsd.org/pub/NetBSD/NetBSD-7.0.1/evbarm-earmv7hf/binary/gzimg/

Récupérons le bootloader (u-boot) pour la carte, en l'occurence, la LIME 2, ici :
http://dl.linux-sunxi.org/nightly/u-boot-sunxi/u-boot-sunxi-mainline/u-boot-sunxi-mainline-latest/


Décompressons l'image de NetBSD.

gunzip armv7.img.gz

Décompressons l'archive u-boot

tar xf u-boot-sunxi-mainline-a20-olinuxino-lime2.tar.xz

Déplaçons les fichiers décompressés dans le répertoire courant

mv u-boot-sunxi-mainline-a20-olinuxino-lime2-20160428T000127-e25b369/* ./

Copions le bootloader sur l'image de NetBSD, au bon endroit

dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1k seek=8 conv=notrunc

Flashons la carte SD (ici, /dev/sdb, ne vous trompez surtout pas de périphérique ou alors prévoyez un bon backup de votre machine) avec l'image modifiée de NetBSD.

sudo dd if=armv7.img of=/dev/sdb bs=1M

Éjecter et réinsérer la carte SD


À ce stade, on a une carte SD bootable avec u-boot, et contenant un système NetBSD. Cependant, le système n'est pas utilisable.


Monter la carte SD (sdb1 dans mon cas), et se déplacer dessus.

pmount /dev/sdb1 /media/sdb1
cd /media/sdb1

Comme il n'y a pas de noyau NetBSD prévu pour la LIME 2, on va utiliser celui du Banana Pi.

Copions alors le noyau, comme suit :

cp netbsd-BPI.ub netbsd.ub

Préparons le fichier de configuration pour u-boot.

vim boot.cmd

Ajoutons dans ce fichier :

setenv kernel_addr      82000000
setenv kernel           netbsd.ub
setenv bootargs         "root=ld0a"

fatload mmc 0:1 ${kernel_addr} ${kernel}
bootm ${kernel_addr}

Compilons ce fichier cmd à l'aide de mkimage (paquet u-boot-tools sous debian).

mkimage -C none -A arm -T script -d boot.cmd boot.scr

Il faut maintenant la configuration de la carte. Pour cela, télécharger le fichier a20-olinuxino_lime2.fex depuis https://github.com/linux-sunxi/sunxi-boards/tree/master/sys_config/a20.

Récupérer au passage (si ce n'est pas déjà fait) https://github.com/linux-sunxi/sunxi-tools, et compiler au moins fex2bin (pas sur la carte SD, bien entendu)

Convertir le fichier fex en fichier bin. Ne pas oublier de copier le fichier .bin sur la carte SD.

fex2bin a20-olinuxino_lime2.fex > lime2.bin

Créer (ou modifier) le fichier uEnv.txt

vim uEnv.txt

contenu du fichier uEnv.txt

bootargs=root=ld0a sysconfig=0x43000000
uenvcmd=mmc dev 0; mmc rescan; fatload mmc 0:1 43000000 lime2.bin;
fatload mmc 0:1 82000000 netbsd.ub; bootm 82000000

Si tout va bien, vous devriez avoir ces fichiers sur la carte SD (j'aurais pu effacer les kernels des autres cartes, mais bon, flemme) :

LICENCE.broadcom
a20-olinuxino_lime2.fex
boot.cmd
boot.ini
boot.scr
bootcode.bin
cmdline.txt
fixup.dat
fixup_cd.dat
kernel7.img
lime2.bin
netbsd-BEAGLEBOARD.ub
netbsd-BEAGLEBONE.ub
netbsd-BPI.ub
netbsd-CUBIEBOARD.ub
netbsd-CUBIETRUCK.ub
netbsd-HUMMINGBIRD_A31.ub
netbsd-ODROID-C1.ub
netbsd.ub
start.elf
start_cd.elf
uEnv.txt

Démonter proprement la carte avant de l'éjecter

cd
pumount /dev/sdb1

Insérer la carte SD dans le lecteur de la carte Olimex, brancher le câble série sur le connecteur UART (Bleu -> GND, Rouge -> RX, Vert -> TX), lancer microcom, et alimenter la LIME 2 pour la démarrer.

microcom -p /dev/ttyUSB0 -s 115200

Si tout va bien, u-boot devrait apparaître à l'écran

U-Boot SPL 2016.05-rc3-ge25b369 (Apr 28 2016 - 00:13:29)
DRAM: 1024 MiB
CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
Trying to boot from MMC1


U-Boot 2016.05-rc3-ge25b369 (Apr 28 2016 - 00:13:29 +0200) Allwinner Technology

CPU:   Allwinner A20 (SUN7I)
Model: Olimex A20-OLinuXino-LIME2
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment

Après les tests initiaux, NetBSD devrait démarrer. Quelques instants plus tard, un message indiquant que le système redimensionne la partition devrait apparaître. Cette étape est nécessaire pour que toute la carte SD soit utilisable.

Growing ld0 disklabel (1111MB -> 15343MB)
Resizing /

Dès que cette opération est terminée, le système redémarre automatiquement.

Si tout va bien, le message suivant devrait apparaître

NetBSD/evbarm (armv7) (console)

login:

Se connecter via le login root. Il n'y a pas de mot de passe.


Et voilà, NetBSD est désormais utilisable (quoique, encore au stade expérimental). Je ne connais pas l'impact de l'utilisation du noyau du Banana Pi sur cette carte, je n'ai pas assez de recul. Je ne serai en aucun cas responsable en cas d'explosion du CPU.

J'espère n'avoir rien oublié lors de la rédaction de cet article.


Juste à titre indicatif, voici le log complet du démarrage de la LIME 2.

by nah at June 03, 2016 09:30 PM

May 10, 2016

Luc Didry

RequestT­ra­cker : telle­ment puis­sant

RequestT­ra­cker (RT) est un outil de tickets extrê­me­ment puis­sant et flexible. Telle­ment flexible qu’on en vient à se prendre la tête pour faire des trucs de oufs.

Je suis en train d’en mettre un en place pour Frama­soft depuis quelques semaines. Je mets long­temps à le mettre en place pour plusieurs raisons :

  • j’ai d’autres projets à fouet­ter
  • il a fallu que je fasse des aller/retours avec Pouhiou pour cerner au mieux les besoins de notre équipe de support
  • je fais faire des trucs rigo­los à RT qui sont assez galère à mettre en place

Je vais faire un petit tour des trucs que j’ai mis en place sur un RT 4.4.0.

Utili­ser le plus addres­sing

De façon simple, pour que RT traite les tickets qui arrivent sur l’adresse email dédiée, on la met dans le /etc/aliases de sa machine. Ça fait un truc comme ça :

rt:         "|/opt/rt4/bin/rt-mailgate --queue general --action correspond --url https://rt.example.org/"
rt-comment: "|/opt/rt4/bin/rt-mailgate --queue general --action comment --url https://rt.example.org/"

Vous note­rez que cela met les mails à desti­na­tion de cette adresse dans la queue (ou file) general. Or on utilise géné­ra­le­ment plus d’une queue dans un système de ticket : cela permet de diri­ger auto­ma­tique­ment vers les personnes les plus à même d’y répondre.

Le problème avec ce système, c’est qu’il faudrait ajou­ter une adresse dédiée à chaque fois que l’on crée une nouvelle file. Ça peut vite deve­nir usant.

On va donc utili­ser le plus addres­sing. Cette tech­nique, toute bête, consiste à ajou­ter un discri­mi­nant à une adresse mail, précédé géné­ra­le­ment d’un + (mais on peut confi­gu­rer son serveur de mail pour utili­ser n’im­porte quel carac­tère). rt@example.org aura alors pour alias (par exemple) rt+file_bidule@example.org.

Pour que RT puisse utili­ser cette tech­nique, il faut ajou­ter --extension=queue dans la commande du /etc/aliases :

rt:         "|/opt/rt4/bin/rt-mailgate --extension=queue --queue general --action correspond --url https://rt.example.org/"
rt-comment: "|/opt/rt4/bin/rt-mailgate --extension=queue --queue general --action comment --url https://rt.example.org/"

Voilà ! Il ne vous reste plus qu’à créer vos files via l’in­ter­face web. Atten­tion, créez-les avec un nom qui passera dans une adresse mail. Pas d’es­pace par exemple.

RT récu­pé­rera le nom de la file kiva­bien dans la partie entre le + et le @ et placera auto­ma­tique­ment le ticket dans cette file, tout en gardant la file general par défaut.

Les articles

Quoi de plus casse-pieds que de se répé­ter encore et encore en donnant toujours la même réponse ? Heureu­se­ment il y a les articles qui peuvent vous servir de réponses pré-enre­gis­trées :-)

Créa­tion des classes et des articles

Allez dans le menu Administration > Articles > Classes > Ajouter, créez vos classes (j’en ai créé une par file, n’ayant pas réussi à assi­gner auto­ma­tique­ment des articles aux files), cochez Tous les articles de cette classe doivent être disponibles sous forme de liste sur la page de réponse d'un ticket, déco­chez Inclure le résumé de l'article et Inclure le nom de l'article et cochez Include le champs personnalisé 'Content' > Value (oh la belle typo de traduc­tion) qui appa­raî­tra après avoir enre­gis­tré la classe (pour ces trois derniers, vous faites comme vous le sentez hein).

Liez la classe à une file via le menu S'applique à.

Voilà, vous n’avez plus qu’à créer vos articles dans la classe que vous venez de créer via le menu Articles > Ajouter.

Et là, magie, lorsque vous répon­dez via l’in­ter­face web, vous pour­rez choi­sir une réponse pré-enre­gis­trée.

Place­ment des articles dans la réponse

Je suis un grand fan du bottom-post­ing, mais RT place l’ar­ticle au-dessus de la cita­tion du message précé­dent. Remé­dions à cela.

cd /opt/rt4
mkdir -p local/html/Elements/
cp share/html/Elements/MessageBox local/html/Elements/
vi local/html/Elements/MessageBox

Cher­chez la ligne conte­nant

% $m->comp('/Articles/Elements/IncludeArticle', %ARGS) if $IncludeArticle;

et rempla­cez-la par

% if ($IncludeArticle) {
%    my $article = $m->scomp('/Articles/Elements/IncludeArticle', %ARGS);
%    $article    =~ s{\n}{<br />}g;
%    $article    = RT::Interface::Email::ConvertHTMLToText($article);
%    $Default   .= $article unless ($Default =~ s/(.*)(-- .*)/$1$article$2/m);
% }

Hop ! votre article se trouve main­te­nant entre la cita­tion et votre signa­ture :-)

(un redé­mar­rage de RT est peut-être néces­saire pour que cela soit pris en compte)

Ajout des articles perti­nents dans le mail de noti­fi­ca­tion d’un nouveau message

Une des forces de RT est de permettre aux inter­ve­nants de répondre aux tickets par mail. Le problème est que cela empêche de piocher dans les réponses pré-enre­gis­trées.

Qu’à cela ne tienne, ajou­tons-les au mail de noti­fi­ca­tion envoyé aux membres du support.

Allez dans Administration > Global > Modèles > Choisir. Il faut modi­fier le modèle Notification de modification HTML (oui, j’ai traduit le nom de mes modèles, mais il est simple à repé­rer, il est utilisé par les scrips 8 et 11).

Ajou­tez ceci en bas du modèle :

{ my $hotlist = RT::Articles->new( RT->SystemUser );
  $hotlist->LimitHotlistClasses;
  $hotlist->LimitAppliedClasses( Queue => $Ticket->QueueObj );
  my $content   = "-- \n<p><b>Réponses pré-enregistrées pour cette catégorie de tickets:</b></p>";

  if ($hotlist->Count) {
    while (my $article = $hotlist->Next) {
      $content .= '<p><b>'.$article->Name.'</b><br/>';
      my $class   = $article->ClassObj;
      my $cfs     = $class->ArticleCustomFields;
      my %include = (Name => 1, Summary => 1);
      $include{"CF-Title-".$_->Id} = $include{"CF-Value-".$_->Id} = 1 while $_ = $cfs->Next;
      $include{$_} = not $class->FirstAttribute("Skip-$_") for keys %include;

      while (my $cf = $cfs->Next) {
        next unless $include{"CF-Title-".$cf->Id} or $include{"CF-Value-".$cf->Id};
        my $values = $article->CustomFieldValues($cf->Id);
        if ($values->Count == 1) {
          my $value = $values->First;
          if ($value && $include{"CF-Value-".$cf->Id}) {
            $content .= '<br/>';
            my $c     = $value->Content || $value->LargeContent;
            $c =~ s/\r?\n/<br\/>/g;
            $content .= $c;
          }
        } else {
          my $val = $values->Next;
          if ($val && $include{"CF-Value-".$cf->Id}) {
            $content .= '<br/>';
            my $c     = $value->Content || $value->LargeContent;
            $c =~ s/\r?\n/<br\/>/g;
            $content .= $c;
          }
          while ($val = $values->Next) {
            if ($include{"CF-Value-".$cf->Id}) {
              $content .= '<br/>';
              my $c     = $value->Content || $value->LargeContent;
              $c =~ s/\r?\n/<br\/>/g;
              $content .= $c;
            }
          }
        }
      }
      $content .= "<br/>-----------</p>\n";
    }
  }
  $content;
}
{$content}

C’est moche et long, je sais. Dites-vous que j’ai passé plus d’une après-midi pour trou­ver ça, la docu­men­ta­tion est inexis­tante pour faire ça.

Les inter­ve­nants n’au­ront plus qu’à copier-coller l’ar­ticle qui se trouve au bas de leur mail de noti­fi­ca­tion dans leur réponse :-)

Commandes par mail

C’est beau de répondre par mail, mais il faut encore se connec­ter à l’in­ter­face web pour effec­tuer certaines actions. Comme je suis fier d’être fainéant, j’ai créé un scrip pour auto­ri­ser certaines actions par mail.

Mais avant ça, préci­sions :

  • RT permet aux inter­ve­nants de discu­ter du ticket sans que cela soit vu par le créa­teur du ticket : c’est le but de l’adresse rt-comment@example.org du début de l’ar­ticle. On va utili­ser cette adresse pour pilo­ter RT par mail
  • un scrip est une action effec­tuée par RT en réponse à un évène­ment, en utili­sant de façon option­nelle un modèle. Typique­ment, il y a un scrip qui envoie (action) un mail (d’après un modèle) aux membres du support lorsqu’un ticket est créé (évène­ment).

Créons donc un scrip. Menu Administration > Scrips > Ajouter.

  • Condi­tion (évène­ment) => Lors d’un commen­taire
  • Action => défi­nie par l’uti­li­sa­teur
  • Modèle => Modèle vide

Dans le Programme de préparation d'action personnalisé: :

if ($self->TransactionObj->Attachments->First->Content =~ m/#(JePrends|Fermeture|Spam)/i) {
    return 1;
} else {
    return 0;
}

Oui, j’au­rais pu faire un one-liner, mais il faut que ça reste lisible faci­le­ment, et quand on passe des heures à faire des bidouilles comme ça, on appré­cie les codes lisibles en un coup d’œil.

Dans le Code d'action personnalisée (commit): :

if ($self->TransactionObj->Attachments->First->Content =~ m/#JePrends/i) {
    if ( $self->TicketObj->OwnerAsString eq '' ) {
        my $id = $self->TransactionObj->Creator;
        $RT::Logger->info("Setting owner to ".$id);
        $self->TicketObj->SetOwner($id, 'SET');
    }
} elsif ($self->TransactionObj->Attachments->First->Content =~ m/#Fermeture/i) {
    $RT::Logger->info("Closing ticket");
    $self->TicketObj->SetStatus('resolved');
} elsif ($self->TransactionObj->Attachments->First->Content =~ m/#Spam/i) {
    my $ticket = $self->TicketObj;
    my ($status, $msg) = $ticket->SetStatus('rejected');
    $RT::Logger->error("Couldn't delete ticket: $msg") unless $status;

    my $requestors = $ticket->Requestor->UserMembersObj;
    while (my $requestor = $requestors->Next) {
        $requestor->SetDisabled(1);
        $RT::Logger->info("Disabling user ".$requestor->Format." because he's likely a spammer");
    }
}

return 1;

Voilà, enre­gis­trez et c’est bon.

Lorsqu’un commen­taire contien­dra une commande, elle sera exécu­tée :

  • #JePrends => l’in­ter­ve­nant s’as­signe le ticket
  • #Fermeture => le ticket est marqué comme résolu
  • #Spam => le ticket est supprimé et son auteur ne pourra plus ouvrir de tickets, son adresse mail sera black­lis­tée

Et le spam alors ?

Pour le spam, prépa­rez d’abord un spamassassin pour votre serveur de mails. Ce n’est pas l’objet de cet article, il n’y a qu’à fouiller un peu le web pour trou­ver des tutos.

On va recréer un scrip, mais avant cela on va créer une nouvelle file nommée spam (menu Administration > Files > Ajouter).

Pour notre nouveau scrip :

  • Condi­tion (évène­ment) => Lors d’une créa­tion
  • Action => défi­nie par l’uti­li­sa­teur
  • Modèle => Modèle vide

Dans le Programme de préparation d'action personnalisé: :

if ( $self->TicketObj->Subject !~ /\[ .* \]/i ) {
  my $inMessage = $self->TransactionObj->Attachments->First;

  # if no message attachment - assume web UI
  return 0 if (!$inMessage);

  # exit if not email message
  return 0 if (!$inMessage->GetHeader('Received'));

  return ($inMessage->GetHeader('X-Spam-Level') =~ m/\*+/) ? 1 : 0;
} else {
  return 1;
}

Dans le Code d'action personnalisée (commit): :

my $spamlevel = $self->TransactionObj->Attachments->First->GetHeader('X-Spam-Level');
if ($spamlevel =~ m/\*\*\*+/) {
  if ($spamlevel =~ m/\*\*\*\*\*/) {
    $RT::Logger->info("This mail seems to be a spam => deleting");
    $self->TicketObj->Delete();
  } else {
    $RT::Logger->info("This mail seems to be a spam => queue spam");
    $self->TicketObj->SetQueue('spam');
  }
}
return 1;

Avec cela, les mails ayant un score de 5 ou plus au spamLe­vel seront suppri­més, et ceux qui ont entre 3 et 5 vont au purga­toire, dans la file spam.

Prenez soin de dépla­cer ce scrip tout en haut de la liste pour qu’il soit le premier exécuté.

Plugins

En vrac, les plugins que j’uti­lise :

Les deux premiers sont main­te­nant inté­grés à RT, il n’y a pas besoin de les instal­ler, juste de les confi­gu­rer. Ils servent respec­ti­ve­ment à assu­rer l’au­then­ti­fi­ca­tion LDAP à l’in­ter­face web, et à impor­ter en masse les comptes du LDAP pour permettre à l’ad­mi­nis­tra­teur de mettre les colla­bo­ra­teurs dans les bons groupes sans attendre qu’ils se soient logués une première fois.

Le dernier plugin ajoute un S dans le menu des tickets, permet­tant de les décla­rer comme spam d’un simple clic.

Conclu­sion

On peut faire de merveilleuses choses avec RT, pour peu que l’on ait le temps de fouiller dans la docu­men­ta­tion (offi­cielle ou non)… et dans le code !

Une fois bien confi­guré, il devrait permettre d’al­lé­ger la charge de travail du groupe de support et je peux vous dire que pour en faire depuis plus de deux ans pour Frama­soft et bien plus pour mon ancien boulot, ce n’est pas quelque chose à négli­ger :-)

NB : bien évidem­ment, ce superbe logi­ciel est en Perl :D

Crédits de la photo d’illus­tra­tion : CC-BY GotC­re­dit, trou­vée sur Flickr

Parta­ger

Flattr this!

by Luc at May 10, 2016 06:51 PM

May 01, 2016

Luc Didry

#WeMa­keSei­tan

J’es­saye de manger moins de viande.

Pour une raison fort simple : l’éco­lo­gie. Le bétail consomme de l’eau, pète des gaz à effet de serre, néces­site géné­ra­le­ment la culture de céréales et autre four­rage, etc (voir par là). Tout ça pour un rende­ment éner­gé­tique (pour l’homme) moindre que si on mangeait direc­te­ment l’équi­valent de la nour­ri­ture des bêtes.

Bref, c’pas top. Et puis entre les salo­pe­ries chimiques qu’on balance sur les champs et les gavages aux médi­ca­ments des bestiaux, ben c’est pas trop la fête.

Manger unique­ment des végé­taux, ça enlève déjà la dose d’an­ti­bio­tiques qu’on ingère via la viande.

Reste les pesti­cides et autres cochon­ne­ries sur les végé­taux. Bon, là faut manger bio, et encore : « la plupart des fermes biolo­giques évitent en grande partie les pesti­cides de synthèse » (source : Wiki­pé­dia).

Même si on n’évite pas toutes les salo­pe­ries possibles en cessant de manger de la viande, réduire leur nombre dans notre alimen­ta­tion ne peut être que béné­fique, non ?

Bon. Du coup, j’es­saye de manger le moins de viande possible. Je n’em­bête cepen­dant pas mes amis et ma famille quand je vais manger chez eux, et j’adore toujours autant la viande, mais chez moi, j’évite.

Ce n’est parfois pas facile, tant je suis habi­tué à ma pièce de viande dans l’as­siette. Le plus simple est donc de trou­ver un substi­tut.

Du coup j’ai d’abord pensé au tofu. On en trouve main­te­nant même dans les super­mar­chés. Résul­tat mitigé. Soit je suis infoutu de le prépa­rer comme il faut, soit c’est vrai­ment fade avec une texture bizar­roïde.

Et puis au détour d’une conver­sa­tion avec Bram, j’ai (re)décou­vert l’exis­tence du seitan (redé­cou­vert parce que j’en avait déjà entendu parler il y a long­temps) et surtout décou­vert à quel point c’est simple d’en faire et adap­table à ses envies : du gluten, tu mélanges avec ce que tu veux et du liquide (géné­ra­le­ment du bouillon de légumes). Pouf, voilà.

En plus, géné­ra­le­ment, le gluten qu’on trouve est bio, donc c’est tout bénéf.

Ma recette (mais y en a plein d’autres sur les Inter­netz)

(les doses sont à la louche, je suis plutôt instinc­tif quand je fais à manger)

  • du gluten (moi j’ai trouvé celui-ci chez BioCoop)
  • une boîte de hari­cots rouges en conserve (poids total 400g, poids égoutté 250g)
  • de l’huile d’olive
  • du jus de citron
  • de la sauce Worces­ter­shire
  • du cumin
  • du sel

Pour la suite, on aura besoin d’un bouillon de légumes, on verra ça après.

  • Réchauf­fer les hari­cots rouges avec le jus dans une casse­role
  • Verser les hari­cots rouge avec le jus dans un sala­dier
  • Écra­ser les hari­cots avec une four­chette (ou ce que vous voulez, j’ai pris ce que j’avais chez moi, le presse-purée ou le mixer seront sans doute plus effi­caces)
  • Mettre deux gros schlouks d’huile d’olive
  • Deux gros schlouks de jus de citron aussi
  • Mettre une bonne dose de sauce Worces­ter­shire
  • Bien mélan­ger
  • Goûter pour voir si on sent bien la sauce Worces­ter­shire, en rajou­ter au besoin
  • Balan­cer du cumin et du sel selon ses goûts (ne pas hési­ter à regoû­ter)
  • Re-bien mélan­ger
  • Mettre du gluten en remuant bien. Quand il n’est plus possible de remuer avec la four­chette, pétrir le tout comme de la pâte à pain
  • Le mélange final doit avoir une consis­tance un peu comme de la pâte à mode­ler, le modèle qui rebon­dit un peu

Ensuite, il faut faire des boules avec votre pâte, genre de la taille d’un poing. Cela fera une portion pour une ou deux personnes.

seitan

C’est là qu’on en vient au bouillon de légumes évoqué plus tôt. On va faire cuire les boules de seitan dans ce bouillon de légumes pendant ± 45 minutes. Il est possible que votre boule se délite un peu dans le bouillon, mais ce n’est pas grave : on conser­vera le bouillon qui reste au congé­la­teur pour la prochaine four­née de seitan :-)

Une fois les boules cuites, on les égoutte, et on les congèle pour quand on voudra les utili­ser (ou pas, si vous souhai­ter les manger rapi­de­ment (je dirais quelques jours, mais disons le lende­main au plus tard pour plus de sûreté)).

Comment servir son seitan ?

Person­nel­le­ment, je découpe mes boules en tranches pas trop épaisses et je les fais reve­nir à la poêle avec de l’huile d’olive. D’autres personnes l’uti­lisent comme n’im­porte quelle pièce de viande : en bœuf bour­gui­gnon, dans une soupe, etc.

Moi je mange les tranches en accom­pa­gne­ment, comme de la viande, ou alors je m’en fais un sand­wich (j’adore :D).

Bref, le seitan, c’est bon, c’est facile à faire, vous en faites au goût que vous aimez et ça remplace quand même bien la viande. Pour ce qui est du prix, 500g de gluten de blé revienne à plus ou moins 6€, ce qui n’est pas très cher, sachant que je fais envi­ron 9 boules de seitan avec (donc 9 repas), soit ± 66 centimes de gluten pour une boule. Compa­rez au prix de la viande ! (alors oui, je rajoute une boîte de hari­cots, mais on n’est pas obligé hein !)

Ce chat mange un sandwich vegan :P

Ce chat mange un sand­wich vegan :-)

Crédit de la photo du chat vegan : Ariel Ophe­lia, CC-BY-NC-ND

EDIT on me souffle dans l’oreillette une recette libre de seitan : http://www.cuisine-libre.fr/seitan?lang=fr

Parta­ger

Flattr this!

by Luc at May 01, 2016 03:03 PM

April 02, 2016

Sebastien Badia

Tips GIT: nom de la remote par défaut différent de « master »

Une petite astuce en mode mémo pour changer la branch par défaut d'un repo GIT, assez pratique lorsqu'on utilise gitflow.

Via l'option set-upstream-to (Git >= 1.8.0) en local

Pour changer les informations de suivi de sa branch local vis-à-vis de l'upstream (disponible depuis git 1.8.0).

❯ git branch --set-upstream-to origin/develop

Changement aussi du coté upstream

Il faut aussi changer l'HEAD sur le repo GIT remote, les commandes suivante fonctionnent dans mon cas.

❯ git symbolic-ref HEAD refs/heads/develop
❯ git update-server-info

Coté client on vérifie:

❯ git remote show origin
* remote origin
  Fetch URL: git.debian.org:/git/collab-maint/taskd.git
  Push  URL: git.debian.org:/git/collab-maint/taskd.git
  HEAD branch: develop
  Remote branches:
    develop      tracked
    pristine-tar tracked
    upstream     tracked
  Local branch configured for 'git pull':
    develop merges with remote develop
  Local ref configured for 'git push':
    develop pushes to develop (up to date)

La HEAD branch est bien develop, c'est tout ok :-)

by Sebastien Badia at April 02, 2016 10:01 AM

March 07, 2016

Luc Didry

Retour sur mon nouveau boulot, partie 2

Après 2 mois de télé-travail pour Frama­soft, mon ressenti a-t’il changé ?

Et bien non :

  • j’ap­pré­cie toujours autant de ne pas perdre de temps dans les trans­ports en commun
  • mes horaires souples me permettent de déga­ger du temps dans l’après-midi, ce qui est toujours pratique quand on doit aller cher­cher un colis à la Poste (même si je suis là quand le facteur passe, il n’a pas l’air d’ai­mer sonner si un truc ne rentre pas dans la boîte aux lettres)
  • la théière est toujours là, ainsi que le chat, mais j’ai main­te­nant un fauteuil de bureau : je ne suis plus vautré dans un fauteuil de salon. Même si j’étais scep­tique, je dois avouer qu’a­voir un coin travail est plutôt pas mal pour sépa­rer le boulot de la vie de maison
  • je conti­nue encore et toujours de contri­buer au Libre, que ce soit par des tickets ou des patchs… j’ai même bossé pour Lstu, histoire que sa frama­sof­ti­sa­tion en frama.link soit plus simple, et pour le rendre plus robuste
  • je teste toujours tant et plus de logi­ciels pour nos prochains services (je pense que j’ai installé et testé toutes les solu­tions libres de visio-conf sur le web qui existent, ou pas loin)

Par contre, la vache ! On se tape des bugs et des problèmes bizarres, à se deman­der comment on a fait pour passer entre les gouttes jusque là. La chance sans doute ;-)

Et un bémol, tempo­raire toute­fois : je pensais que j’au­rais plein de temps pour mes projets et en fait, entre les cours pour les ASRALL et la fatigue, c’est à peine si je touche mon pc en dehors des heures de boulot. Je pense qu’une fois que j’au­rais fini les cours et que j’au­rai vrai­ment pris mes marques, ça ira mieux :-)

Parta­ger

Flattr this!

by Luc at March 07, 2016 08:35 PM

Sebastien Badia

Yet another tutorial about Let's Encrypt

Logo Let's Encrypt

Voilà 1 million de certificats Let's Encrypt délivrés (les certificats délivrés par Let's Encrypt); La littérature sur le sujet ne manque pas, mais je vais quand même en apporter une de plus, pour la partie compilation :-)

Pour rappel, Let's Encrypt, est un projet porté par l' « Internet Security Research Group » (ISRG), qui vise à automatiser, rendre accessible à tous, de manière ouverte et gratuite, des certificats SSL

Génération

Nous allons ici, ne pas utiliser le client officiel; Principalement parce qu'il intègre trop de fonctionnalités (serveur web intégré, …), mais aussi parce qu'il ne réponds pas vraiment aux besoins de cet article (arborescence flexible, serveur nginx, …; et que c'est plus facile à lire un script de 200 lignes qu'un énorme client…)

Le client que nous allons utiliser est donc le acme-tiny (écrit en python). Lors de mes pérégrinations sur la toile (oui ok ça fait un peu vieillot, j'aurais pu dire « alors que je surfais sur le web », … :-D), je suis tombé sur ce script letsencrypt.sh. Le coté FQDN à un endroit, et le rechargement lorsque les AltNames changent sont des features appréciables. Après c'est du bash, donc comme vous voulez :)

Création des certificats

De mon coté, j'ai opté pour une arborescence de ce type (certificats générés dans un répertoire dédié, avec un utilisateur dédié).

$ mkdir -p /etc/letsencrypt/{certs,challenges,csr,pem,private}
/etc/letsencrypt/
├── certs
├── challenges
├── csr
├── pem
└── private

Il suffit donc alors de :

  • Créer une clé pour le domaine en question
  • Créer une demande de signature (CSR) en y incluant les noms DNS alternatifs
  • Lancer le client (qui va se charger de créer un challenge) et signer si le challenge est ok.
  • Télécharger et concaténer le certificat obtenu avec le certificat intermédiaire de Let's Encrypt

Le challenge sert ici à ce que let's encrypt vérifie que nous contrôlons bien le domaine pour lequel nous demandons un certificat. Il faut d'ailleurs ajouter à la configuration du serveur web, l'endroit où seront stockés ces challenges.

location /.well-known/acme-challenge/ {
  alias /etc/letsencrypt/challenges/asrall.fr/;
  try_files $uri =404;
}

Coté certificat intermédiaire, ils sont disponibles sur le site de Let's Encrypt.

srg-keys

Bon donc du coup ça donne cela dans un mini-script (pas super beau…)

#!/bin/bash
# bootstrap letsencrypt

account=$1
cert=$2
dns=$3

mkdir -p /etc/letsencrypt/{certs,challenges,csr,pem,private}

pushd /etc/letsencrypt
  if [[ ! -f "./private/${account}.key" ]]; then
    openssl genrsa 4096 > "./private/${account}.key"
  fi
  if [[ ! -f ./pem/intermediate.pem ]]; then
    wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > ./pem/intermediate.pem
  fi
  echo "##### ${cert} #####"
  if [[ ! -f "./private/${cert}.key" ]]; then
    openssl genrsa 4096 > "./private/${cert}.key"
  fi
  mkdir -p "./challenges/${cert}"
  openssl req -new -sha256 -key "./private/${cert}.key" -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=%s" "${dns}")) > "./csr/${cert}.csr"
  acme_tiny.py --account-key "./private/${account}.key" --csr "./csr/${cert}.csr" --acme-dir "/etc/letsencrypt/challenges/${cert}/" > "./certs/${cert}.crt"
  cat "./certs/${cert}.crt" ./pem/intermediate.pem > "./pem/${cert}.pem"
popd

Qu'il suffit de lancer comme ceci (pour l'exemple je génère un certificate asral.fr avec comme domaines gérés asrall.fr et planet.asrall.fr (oui de la pub au passage))

$ bash bootstrap-letsencrypt.sh asrall asrall.fr 'DNS:asrall.fr,DNS:planet.asrall.fr'
##### asrall.fr #####
Parsing account key...
Parsing CSR...
Registering account...
Already registered!
Verifying planet.asrall.fr...
planet.asrall.fr verified!
Verifying asrall.fr...
asrall.fr verified!
Signing certificate...
Certificate signed!

Plutôt cool non? Il suffit alors d'adapter la configuration du serveur web, pour prendre en compte ces certificats. Et passer tout en HTTPS! (dans notre cas, c'est un nginx en reverse proxy qui gère le SSL et forward en HTTP sur une IP privée).

# Asrall
server {
  server_name asrall.fr planet.asrall.fr;
  rewrite ^(.*) https://$host$1 permanent;
}

# Asrall SSL
# DNS:asrall.fr,DNS:planet.asrall.fr
server {
  listen 443;
  ssl on;
  client_max_body_size 20M;
  server_name asrall.fr planet.asrall.fr asrall.sebian.fr;
  ssl_certificate /etc/letsencrypt/pem/asrall.fr.pem;
  ssl_certificate_key /etc/letsencrypt/private/asrall.fr.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
  ssl_session_cache shared:SSL:50m;
  ssl_prefer_server_ciphers on;
  ssl_dhparam /etc/letsencrypt/dh4096.pem;
  ssl_ecdh_curve secp384r1;
  add_header Strict-Transport-Security max-age=15768000;
  resolver 127.0.0.1;
  location /.well-known/acme-challenge/ {
    alias /etc/letsencrypt/challenges/asrall.fr/;
    try_files $uri =404;
  }
  location / {
    proxy_pass       http://10.41.1.143;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Ssl on;
  }
}

Pour la génération du dhparams (4096 bits c'est bien)

openssl dhparam -out dh4096.pem 4096

Et vous voila donc avec une super config et du HTTPS automatisé, on peut aller faire un tour sur imirhil pour un check de la conf et bien sûr pour pouvoir briller en société…

Supervision

Bon c'est bien beau, mais avec tout ça les certificats sont valables que 90j (oui mort à CertPatrol :-() mais pour le coup il va donc falloir superviser tout cela.

Via Certificate Monitor

Si vous utilisez le sympa certificatemonitor (code source) de Raymii, il suffit alors d'ajouter vos FQDN dans l'interface. Et ainsi recevoir une notification avant l'expiration de vos certificats.

Via Checkmk

Sinon si vous avez déjà une bonne veille supervision à base de nagios ou checkmk ou compatible, il suffit d'ajouter les checks via le script check_http.

Dans la conf main.mk de checkmk:

# /etc/checkmk/main.mk
legacy_checks = [
  ## Asrall
  ( ( "check-certificate!asrall.fr", "Certificate Asrall - Letsencrypt", True), ['baloo.sebian.fr']),
  ( ( "check-certificate!planet.asrall.fr", "Certificate Planet Asrall - Letsencrypt", True), ['baloo.sebian.fr']),
]

Et ne pas oublier la check_command associée (on émet un warning lorsque que le certificat expire à J-30 et un critical à J-7)

# /etc/checkmk/conf.d/commands_extra.mk
define command {
  command_name    check-certificate
  command_line    $USER1$/check_http -H $ARG1$ -C 30,7 --sni
}

Renouvellement

Il existe des scripts de renouvellement automatique:

Mais je ne sais pas encore quoi en penser, pour le moment je réagit lorsque que le check passe en warning avec ce mini script bash.

#!/bin/bash

account='asrall'
certs='asrall.fr planet.asrall.fr'

pushd /etc/letsencrypt
  for cert in $certs
  do
    echo "##### ${cert} #####"
    acme_tiny.py --account-key ./private/labriqueinternet.key --csr ./csr/${cert}.csr --acme-dir /etc/letsencrypt/challenges/${cert}/ > ./certs/${cert}.crt
    cat ./certs/${cert}.crt ./pem/intermediate.pem > ./pem/${cert}.pem
  done
popd
systemctl restart nginx

Chocolat

Même si le modèle des CA et bancal, il n'y a plus de raison maintenant de ne pas proposer du HTTPS partout!

by Sebastien Badia at March 07, 2016 07:00 PM

February 12, 2016

Luc Didry

Le coin des jardi­niers : un temps de login trop long

Une nouvelle caté­go­rie est appa­rue sur Frama­cloud : le coin des jardi­niers. C’est là que l’équipe des tech­ni­ciens Frama­soft (dont je fais partie) mettra ses petites astuces, les problèmes que nous avons pu rencon­trer ainsi que leur solu­tion. Je reco­pie­rai ici les articles que j’y écri­rai et je commence aujourd’­hui :-)

Résoudre un temps de login trop long

Sur quelques machines, nous avions un temps de login via ssh extrê­me­ment long. Un sudo su prenait égale­ment beau­coup de temps.

Sans vouloir trol­ler, le coupable était Systemd : un simple sudo systemctl restart systemd-logind.service a résolu le problème.

C’est bête, mais il fallait y penser.

Parta­ger

Flattr this!

by Luc at February 12, 2016 09:21 AM

February 10, 2016

Florent Peterschmitt

Fézon du C - i3status - luminosité

Huehuehuehuehue. Fézon du C qu’y dit. MÉILÉFOU.

Dernièrement j’ai try Rust, mais sans rien avoir à en faire. Donc c’est passé à la trappe. Et puis récemment je suis tombé sur une petite limitation de Nginx qui ne permet pas de décompresser le body d’une requête HTTP, avant de la transmettre à un backend défini avec proxy_pass.

Et comme Nginx est écrit en C, et que je suis un peu… rouillé dans ce langage, je me suis dit que s’y remettre tranquillement, ça serait une bonne idée avant d’attaquer.

Donc, séance de dégrippage, petit patch pour i3status, afin d’afficher le pourcentage actuel de luminosité de l’écran, sur un laptop.

Et la conf ~/.i3status.conf :

brightness {
    max = "/sys/class/backlight/intel_backlight/max_brightness"
    cur = "/sys/class/backlight/intel_backlight/brightness"
    #txt = "lum: "
}

Inutile au possible, je sais.

by Florent Peterschmitt at February 10, 2016 02:55 PM

January 31, 2016

Romain Dessort

Québec − janvier 2016 : gastronomie québécoise

Gastronomie québécoise

En amateur de bonne bouffe, parlons un peu de la gastronomie d'ici.
Si on s'intéresse à la gastronomie du Québec, on devrait plutôt parler d'archéogastronomie, car aujourd'hui il n'en reste que quelques traces, à part les produits dérivés du sirop d'érable et la poutine (si on considère ça comme un plat) qui restent courant. La culture américaine a largement pris le dessus. Je trouve que comparativement à la France, il n'est pas rare de manger dans des resto (hors fast-food) des trucs sans goût, aseptisés, fades… En fait, après 5 mois ici, j'ai remarqué que les québécois, et je pense que c'est généralisable à tout le Canada et l'Amérique du Nord, accordent beaucoup moins d'importance aux repas, à la qualité de la nourriture et au plaisir de manger. Les « repas » sont souvent expédiés et pris sur le pouce d'ailleurs, pas question de s'éterniser à table comme on a l'habitude en France. Ils mangent presque par contrainte, juste pour satisfaire leur faim. Ou plutôt leur envie de manger, car d'un autre coté je vois régulièrement des gens obèses, dans le sens vraiment maladif.

Mais Montréal abrite pourtant des milliers de restaurants qui représentent à peu près toutes les cuisines du monde (Montréal est une ville extrêmement cosmopolite). J'ai lu souvent dans les guides touristiques que Montréal est une destination de choix pour quelqu'un qui veut gouter à la gastronomie de différent pays. Mais même si les plats sont cuisinés effectivement avec le savoir faire du pays d'origine, les ingrédients eux sont (au moins en partie) ce qu'on trouve sur le continent américains, et j'ai du mal à croire qu'une choucroute ou une pizza ici soit aussi bonne qu'en Allemagne ou qu'en Italie.

Mais bref, on trouve donc à Montréal une très grande quantité de restaurants qui reprennent la gastronomie de différents pays, sauf… celle du Canada, en particulier du Québec ! Et forcement, si elle est déjà peu cuisinée ici, en dehors du Canada elle est quasiment méconnue. Donc pour y gouter, il faut souvent cuisiner les plats soit-même.

Le blog d'À Boire et À Manger en parle à peine malheureusement (voir pas du tout malgré les 4 épisodes), donc je vais vous en parler moi, mais sans dessins…

Malgré qu'elle soit très peu connue, je trouve que la gastronomie québécoise vaut quand même le détour. Elle est assez particulière dans le sens où les associations sont souvent surprenantes et inhabituelles. C'est à l'opposé de la fine cuisine, les plats sont généralement simples, sans raffinements, copieux et bien caloriques. Tout tourne autour de la viande ou de la charcuterie.
La raison est que, premièrement, les pionniers de la Nouvelle France (je ferrai peut-être un article sur l'histoire de la Nouvelle France, c'est assez intéressant, et encore une fois complètement méconnu, je ne me souviens même pas ne serait-ce que l'avoir entrevue en cours d'histoire à l'école) étaient généralement assez pauvres (paysans ou ouvriers) et n'avaient pas une très grande variété d'aliments à leur portée. Mais ils bénéficiez quand même de beaucoup de produits importés grâce au commerce maritime entre la Nouvelle France, les Antilles et la France, ou encore entre la Nouvelle France et la Martinique. D'où la présence de sucre, de mélasse (résidu de raffinage de la canne ou betterave à sucre, bien moins cher que le sucre à l'époque), de rhum depuis les Antilles ou de vin et de sel depuis la France, dans leur cuisine.
L'omniprésence de viande s'explique par l'abondance de gibier et la liberté de chasse (dans le sens pas contrôlée par un seigneur comme en France). Le climat et le travail était difficile, donc il fallait quelque chose de très calorique.

Parmi les plus connues, et le top du top pour moi, on trouve donc les fèves au lard, appelées aussi bines, de l'anglais bean (haricot/fève) qui ne sont donc pas des fèves mais des haricots blanc (même si à l'époque c'était des gourganes appelées aussi fèves des marais, si vous suivez toujours), qu'il faut faire cuire au four pendant une dizaine d'heures à basse température, avec beaucoup de lard, de la mélasse, du coulis de tomate et des épices comme du gingembre et de la moutarde. Ça donne des haricots fondant et bien imprégné du gras du lard, vraiment très bon mais à manger avec des pommes de terre ou du pain, sinon seul c'est vraiment très gras.

Connu surtout pour les controverses quand à son origine et sa facilité de préparation, il y a le pâté chinois, qui consiste en un gratin composé d'une couche de viande hachée, une couche de maïs en grains ou en crème (aussi appelé blé d'Inde) et une couche de purée de pomme de terre. Certains affirment que ce nom a été donné car le plat était consommé quotidiennement par les ouvriers chinois lors de la construction de la ligne ferroviaire pancanadienne, d'autres pensent que ça n'a rien à voir avec les chinois, et que son origine viendrait de la traduction de china pie, une spécialité locale de la ville de South China, dans l'état du Maine. Il y a d'autres théories, mais en résumé on a perdu son origine.

Autre plat typique, pour lequel presque chaque région a sa variante, la tourtière à la viande. Au Sagenay-Lac-Saint-Jean, il s'agit de la tourtière du Lac-Saint-Jean, en Gaspésie de la cipaille, etc… chacune est à priori différente, mais le plat consiste en une couche de pâte, de la viande, hachée ou en petits cubes, de gibier, de bœuf ou de porc, éventuellement marinée, des épices, éventuellement des pommes de terre en cubes, et une seconde couche de pâte pour fermer hermétiquement. Le tout cuit au four à basse température. On peut aussi rajouter des légumes (carottes, navets…) ou remplacer la viande par de la morue, ou encore du saumon. Bref, plein de variantes existent. C'est pas très compliquer à faire, mais on en trouve assez facilement des toutes prêtes dans des boucheries ou boulangeries.

Et puis plein d'autres encore à base de viande toujours : ragout de boulettes de viande, pain de viande, bouillons et ragoût en tout genre etc…

En charcuterie, ils ont moins de chose qu'en France, mais on trouve le fameux cretons, qui peut se comparer avec de la rillettes (d'ailleurs tous les 2 ne s'écrivent qu'au pluriel !) mais fait généralement avec de la viande de porc grasse, plus éventuellement du beurre (pour faire encore plus gras). C'est un plat qui était surtout mangé au petit-déjeuner sur du pain, comme les fèves au lard. On retrouve sinon plein de pâtés (de gibier, de tête, à la bière, etc…), du jambon fumé effiloché, qui est en fait un jambon cuit (blanc) puis fumé dans lequel on prélève non pas des tranches mais des lanières de viande, etc…

Outre tout ce gras, les colons faisaient quand même une très grande consommation de soupe à base de légumes d'hiver qu'ils cultivaient (genre carottes, pommes de terre, navets, courges, betterave etc…). Soupe dans laquelle ils pouvaient rajouter, aller pour changer… un peu de viande ! C'est peut-être la seule chose qui reste autant consommée aujourd'hui, quasiment n'importe quel fastfood, boulangerie etc… qui propose des plats à emporter propose des soupes (mais il ne faut pas s'attendre à un truc exceptionnel niveau goût).

Au niveau sucré, on trouve bien sûr toute sorte de produits de l'érable, allant de l'eau d'érable (aucune transformation) jusqu'au beurre et sucre d'érable, avec la fameuse tire d'érable dans les cabanes à sucre au printemps. Idem pour ce qui est des canneberges et des bleuets (variété de grosses myrtilles), disponible sous pleins de formes différentes : fraiches, en jus, dans des tartes, etc…

En dessert, le plus consommé encore aujourd'hui est le pouding-chômeur fait, encore une fois, avec des ingrédients bon marché : farine, beurre, œuf, lait et sirop de cassonade.

D'origine bien plus plus récente, les populaires beavertails (ou queues de castor) vendues dans des camions ambulants, lors des fêtes foraines et autres animations, sont des pâtisseries faites d'une sorte de pâte à gaufre mise en forme de queue de castor, puis frittes dans l'huile et recouvertes de diverses garnitures. J'imaginais ça bien bourratif, mais en fait pas du tout.

Le Québec fait une très grande production de pomme, principalement au début de l'automne, et est donc un gros producteur de cidre et cidre de glace. Le cidre de glace est fait à partir de jus de pomme concentré par l'action du froid (le jus est stocké dehors à une température largement négative, l'eau qui a formé des cristaux de glace est ainsi retirée au fur et à mesure. Ça permet d'obtenir un cidre plus sucré et alcoolisé, plus ou moins équivalent au vin.

D'origine plus récente, On trouve aussi plusieurs spécificités plus régionales, comme la viande fumée ou les bagels à Montréal, les microbrasseries artisanales un peu partout, les produits de la mer en Gaspésie, etc…

Les trucs chiants (cette fois-ci)

Les unités de mesure… un sujet classique mais je ne me serais jamais douté que c'était autant une prise de tête !
Tout d'abord il y a ceux qui parlent en pouces. Ça c'est simple. Ensuite ceux qui parlent en pieds, mais comme ça ne tombe pas rond, soit parlent ensuite en pouces, soit en fraction de pied. Tout en sachant qu'un pied n'équivaux évidemment pas à un nombre entier de pouces.
Pour illustrer la situation, pour une rallonge électrique de même taille on peut voir noter sur l'étiquette : 3 m, 9' 10", 118", 9,84' ou encore 9' 4/5'.

Et ils aime ça les fractions de pouce pour remplacer les millimètres, ils les utilisent partout. J'ai acheté par exemple une boite de tournevis de précision, dans lequel j'ai des tournevis de 3/32", 5/64" et 1/16". Exercice : classez les du plus petit au plus grand[1]. Bon oui, après avoir réfléchit un peu et avec l'habitude ça vient plus facilement, n'empêche que c'est bien moins simple que si ils avaient utilisé des millipouces (ou des poils de jambe pour continuer dans le délire). Je n'avais lu nul part qu'il fallait réviser ses cours de math avant de venir au Québec ! Car si je veux savoir combien fait 4mm en pouce, diviser 4mm par 2,54 ne m'avancera pas beaucoup avec une bête calculette, je n'aurai pas la fraction la plus proche… Un de mes meilleurs investissements est donc un mètre ruban, gradué à la fois en mètres, pouces et pieds, en un coup d'œil je trouve la bonne fraction.

Et puis, ces histoires de pouces, ça peut devenir dangereux. Un dialogue qui aurait pu arriver chez le coiffeur :

− Et pis, combien tu veux-tu que je t'enlève de pouces?
− Euh, ne touche pas a mes pouces, coupe moi juste mes cheveux, ce sera suffisant!

[1] Réponse : et bien ils sont déjà classés, ils ne sont pas sadiques au point de ranger les tournevis dans le désordre !

January 31, 2016 05:28 PM

January 21, 2016

Romain Dessort

Getting Galaxy S2 GPS to work on Replicant

Last week I gave a talk about Replicant with a live (re)installation of it on my phone at Club Linux Atomic. You can download the slides (in french) here (and LaTeX sources here). There are available under the Creative Common BY-SA 3.0 license.

But let's come back to the topic of this post, the GPS chip of the Samsung Galaxy S2. After my talk, someone asked me how I got the GPS module to work on my phone. There is indeed no support of it on Replicant as the chip (a SiRF star IV GSD4t) is not recognized by standard free software tools like gpsd. Someones already worked on it, but without success at this time. All the work is on this Replicant's wiki page. So if you really need it, you have to use the proprietary code.

I realize that there is no documentation explaining how to install this proprietary code, so here is what I did on my phone. Bear in mind that, unlike proprietary firmwares you need for WiFi/Bluetooth chipset, the proprietary code needed for the GPS is a “real” software which run on your main SoC, and could potentially have access to all your data.

  • First, let's download the CyanogenMod archive corresponding to the Galaxy S2. Replicant is based on CyanogenMod and we are sure that the code we need is chipped with the CyanogenMod distribution.
  • Then you need to extract and upload to your phone this 2 files: gps.exynos4.so and libsecril-client.so:

    adb push system/lib/hw/gps.exynos4.so /system/lib/hw/
    adb shell chmod 644 /system/lib/hw/gps.exynos4.so
    adb push system/lib/libsecril-client.so /system/lib/
    adb shell chmod 644 /system/lib/libsecril-client.so
    

And that's it! Pretty simple, just 2 files but we should have to know the good ones.

January 21, 2016 08:24 PM

January 13, 2016

Sebastien Badia

Le mirror GIT du pauvre (remotes multi URL)

Une petit astuce bien pratique! Non on ne va pas parler du git add -p :-)

Cette astuce là concerne le cas où vous avez deux repo GIT distant et que vous souhaitez les tenir synchronisés (dans le cas où vous n'avez pas accès à ces repos bare, et donc que le git mirror est compliqué).

On assume donc que nous avons un repo GIT local, avec un origin déjà correctement configuré.

❯ git remote show origin -n
* remote origin
  Fetch URL: git+ssh://github.com:22/sbadia/repo.git
  Push  URL: git+ssh://github.com:22/sbadia/repo.git

L'astuce consiste donc à ajouter une url à origin

❯ git remote set-url --add origin git+ssh://gogs@code.ffdn.org:55555/sbadia/repo.git

Dés lors, vous pouvez tout simplement pusher sur origin pour automatiquement envoyer vers les deux repos GIT, ok c'est pas grand chose, mais ça m'a bien rendu service dans mon cas :-)

by Sebastien Badia at January 13, 2016 09:31 AM

January 12, 2016

Luc Didry

Nouvelle année, nouveau boulot

Ça ne vous aura pas échappé, on a encore changé d’an­née. C’est souvent le moment où tout le monde prend de grandes réso­lu­tions que personne ne tien­dra, ou qu’on se met à espé­rer que les (ir)respon­sables poli­tiques cesse­ront leurs clow­ne­ries (fol espoir).

Pour moi, cette nouvelle année corres­pond à un grand chan­ge­ment : j’ai changé de boulot ! Depuis le 4 janvier, je suis offi­ciel­le­ment employé par Frama­soft \o/

C’est pour moi une véri­table joie, car je vais pouvoir bosser par le Libre, pour le Libre :-) Même si dans mon précé­dent boulot, à l’uni­ver­sité de Lorraine, j’uti­li­sais énor­mé­ment d’ou­tils libres, la fina­lité n’était pas la même. Pas que mon ancien boulot m’ait déplu hein, mais être payé pour faire avan­cer la cause du Logi­ciel Libre et de la Culture Libre, c’est juste mon rêve depuis que j’ai décidé de faire la licence ASRALL.

Que vais-je y faire, à Frama­soft ? Tout simple­ment ce que j’y faisais déjà depuis plus ou moins deux ans et demi de façon béné­vole sur mon temps libre : de l’ad­mi­nis­tra­tion système. Et ça, c’est mon kif, ma drogue, mon speed. Juste ce que j’aime :D

Ça fait main­te­nant une semaine que j’ai commencé, et je vois déjà quelques petites choses qui se dégagent de mon nouveau boulot :

  • le télé-travail, c’est quand même pas mal du tout. Je bosse de chez moi, tranquille pépère, la théière et le chat à côté de moi, pas de temps de trajet, je peux faire gueu­ler la musique et si j’ai envie de rester en pyjama toute la jour­née, je peux :P
  • ça demande par contre un poil d’or­ga­ni­sa­tion pour faire ses heures et noter les tâches effec­tuées, mais je m’en sors plutôt bien avec ktime­tra­cker : une tâche du nom de la jour­née, je lance le chrono, et je rajoute des sous-tâches pour chaque tâche à effec­tuer. On ne me demande pas de comp­ter combien de temps je passe sur chaque tâche, donc ça va bien comme ça. Je peux arrê­ter le chrono de la tâche “jour­née” pour faire une pause et reprendre après.
  • avoir des horaires vrai­ment souples, c’est un pur bonheur.
  • pour l’ins­tant, les tâches à effec­tuer sont plutôt courtes, les résul­tats rapides à évaluer… c’est très agréable de voir les choses évoluer rapi­de­ment. Pas de grand truc à faire en 6 mois avec 3 ou 4 personnes de services diffé­rents : au final, c’est plutôt agile comme fonc­tion­ne­ment, sans les contraintes d’une vraie méthode agile certi­fiée truc-muche.
  • la distance entre les diffé­rents sala­riés de Frama­soft (Lyon, Toulouse, en Ariège, Nancy) n’est pas gênante : une réunion télé­pho­nique en début de semaine pour voir les trucs à faire en prio­rité, et tout le reste passe par mail ou jabber (ou SMS ou télé­phone si c’est urgent ou compliqué/trop long à expliquer à l’écrit)
  • la toute-puis­sance : je suis embau­ché comme « respon­sable infra­struc­ture et systèmes ». En gros, au niveau tech­nique, je suis le chef (vous inquié­tez pas, je suis pas un despote, j’écoute les besoins et idées des autres hein :D). Du coup, bah ça me plaît ! Je connais bien l’in­fra­struc­ture (tu parles, c’est moi qui ait fait sa refonte), son fonc­tion­ne­ment et comment on la gère au quoti­dien, donc les déci­sions sont rapides à prendre..
  • Frama­soft, c’est plein de services, donc plein d’ou­tils libres auxquels poten­tiel­le­ment contri­buer : depuis le 4 janvier, j’ai déjà fait plusieurs merge-requests sur des projets qu’on utilise. Ça fait plai­sir d’avoir plus d’oc­ca­sions de contri­buer au Libre :-)
  • bosser toute la semaine plutôt que juste sur mon temps libre, je sens que ça va bien nous aider à sortir plein de nouveaux services en 2016
  • déga­ger du temps libre, ça va aussi m’ai­der à sortir de nouveaux outils !

Bref, j’en­tame 2016 du bon pied, et confiant !

Bonne année !

Parta­ger

Flattr this!

by Luc at January 12, 2016 09:42 AM

January 11, 2016

Sebastien Badia

LDN BGP - Two AS one server

Bon ok, on arrête tout de suite la similitude scabreuse…

État actuel

Nous n'avons jamais trop communiqué sur ce sujet (si ce n'est dans nos comptes-rendus de réunion, ou d'assemblé générale), cette configuration n'est maintenant plus d'actualité puisque Alsace Réseau Neutre vole maintenant de ses propres ailes et même bien mieux, ils disposent d'une demi baie en data center!

Introduction

Dans le cadre de Lorraine Data Network (Association pour la défense d'un Internet Libre Décentralisé et Neutre, dont un des moyens d'action est d'être fournisseur d'accès à Internet), pour des contraintes techniques et de future indépendance, nous avons mis en place deux AS (Autonomous System) sur une même machine physique.

Ce type de configuration n'est pas très commune, les autres solutions sont soit de virtualiser. Mais pour des routeurs de bordure (recevant une full-view (toutes les routes d'Internet)) ce n'est généralement pas conseillé, pour des raisons de performance (les fameux paquets par secondes), soit on utilise deux machines physiques :) mais nous sommes une petite association, et le but était de lancer une association amie ARN (Alsace Réseau Neutre) à moindre frais, et donc sur un seul serveur (celui-ci étant en Data Center).

Après de longues concertations et différents tests en bac à sable, nous avons finalement opté pour une solution à base de bird (daemon libre de routage) dans des namespaces réseau (netns).

Coté implémentation

Nous gérons toutes nos configurations avec l'outil de gestion de confs Puppet, nous avons donc développé un module pour bird, puppet-bird, celui-ci se charge d'installer bird, désactiver le service/init par défaut et installer la configuration bird{,6} et le script/unit d'init correspondant. Nous avons donc deux processus bird par netns:

  • bird-ldn et bird6-ldn dans le netns ARN
  • bird-ldn et bird6-ldn dans le netns LDN

Les unit d'init ont été adaptés pour lancer les processus dans les netsns correspondants.

/sbin/ip netns exec $name_space /usr/sbin/bird -c $config_file -s $ctl_file >> "$stdout_log" 2>> "$stderr_log" &
/sbin/ip netns exec $name_space /usr/sbin/bird6 -c $config_file -s $ctl_file >> "$stdout_log" 2>> "$stderr_log" &

Coté livraison BGP (Border Gateway Protocol) avec notre transitaire, nous avons un VLAN par association, ce qui permet « d'enfouir » facilement l'interface dans le namespace correspondant.

Julien à même fait un super schéma récapitulant tout notre configuration, celui-ci est nettoyé de toutes les IP de production ainsi qu'une vidéo d'explication de notre schéma d'adressage réseau.

Sinon pour la petite pub, Gitoyen à publié sa (plutôt bien faite) configuration BGP pour bird, c'est dispo sur la forge de la Fédération FDN.

Visualisation

Pour ce qui est des looking-glass et channel de contrôle, c'est tout pareil, il suffit juste de prendre en compte la contrainte du namespace, et donc d'adapter les commandes en conséquence.

Par exemple pour la commande ctl de brid:

alias birdc-ldn='ip netns exec ldn birdc -s /var/run/bird-ldn.ctl'
alias birdc6-ldn='ip netns exec ldn birdc6 -s /var/run/bird6-ldn.ctl'

Ou pour notre looking-glass qui utilise le looking-glass bird

DAEMON="/usr/local/lookingglass-ldn/lgproxy.py"
DAEMONUSER="lookingglass-ldn"
DEAMON_NAME="lookingglass"
PID="/var/run/lookingglass.pid"
/sbin/ip netns exec ldn /sbin/start-stop-daemon --background --name $DEAMON_NAME --start --quiet \
  --pidfile $PID --make-pidfile --chuid $DAEMONUSER --exec $DAEMON

Performances et gestion

Pour ce qui est gestion, cela demande forcement plus de configuration (tout est doublé), et il faut adapter les unit d'init et confs mais aussi les commandes de contrôle et de visualisation (lg). Par contre une fois tout ceci derrière, la gestion est exactement la même. Coté accès admin, les admins de confiance des deux structures ont accès à la machine, et donc peuvent potentiellement influer sur le routeur de l'association amie. (Ce n'est pas vraiment un problème dans notre cas).

Coté performances le fait de faire tourner bird dans un netns au lieu de directement sur l'hôte est complètement négligeable, par contre il faut dimensionner sa machine en conséquence car elle accueille alors pas deux full-views, pas 3 mais oui c'est bien 4 full-view mesdames et messieurs! (deux en IPv6 et deux en IPv4).

bird> s mem
BIRD memory usage
Routing tables:    172 MB
Route attributes:  125 MB
ROA tables:       8680  B
Protocols:         124 kB
Total:             297 MB

Niveau processus, 320m en virtuel et 310m en résidentiel

by Sebastien Badia at January 11, 2016 10:53 AM

January 07, 2016

Florent Peterschmitt

check_vmware_api.pl et Timeout

Si jamais ça arrive, que check_vmware_api.pl vous rende un vilain timeout, c’est sans doute que certaines libs perl ne sont pas dans la bonne version.

Donc, pour installer check_vmware_api.pl, il vous faudra :

  • Une saloperie de compte chez VMWare.
  • Un VMware-vSphere-Perl-SDK que l’on peut trouver ici. là., pour vSphere 6.0, 5.5 et 5.1.
  • http://search.cpan.org/dist/libwww-perl/ en version 5.x, en tout cas pour ce qui est de la version 5.5 du SDK Perl de VMWare. Sinon… samarchpa.

Et en gros :

# Installer les libs perl suivantes : Crypt::SSLeay, Data::Dumper, Class::MethodMaker, XML::LibXML, LWP, UUID, SOAP::Lite
apt-get install -y libcrypt-ssleay-perl libclass-methodmaker-perl libxml-libxml-perl libuuid-perl libsoap-lite-perl
tar xf VMware-vSphere-Perl-SDK-5.5.0-2043780.x86_64.tar.gz
cd vmware-vsphere-cli-distrib
perl Makefile.PL && make install

Et si notre distro pas préférée, genre, Debian Jessie, ne propose pas libwww-perl dans la bonne version… j’ai envie de dire qu’on va se contenter d’une installe en mode gros porc dégueulasse :

wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-5.837.tar.gz
tar xf libwww-perl-5.837.tar.gz
cd libwww-perl-5.837
perl Makefile.PL && make install

Normalement elle sera chargée en priorité sur un libwww-perl. Pour savoir si ça sera bien le cas, exécuter ceci :

$ perl -e 'print join "\n", @INC'
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.20.2
/usr/local/share/perl/5.20.2
/usr/lib/x86_64-linux-gnu/perl5/5.20
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.20
/usr/share/perl/5.20
/usr/local/lib/site_perl

WALA.

by Florent Peterschmitt at January 07, 2016 08:36 PM

January 05, 2016

Romain Dessort

Québec − novembre/décembre 2015 : le vélo et le ski à Montréal

Il n'a pas manqué du tout d'article pour novembre, c'est juste que cet article en contient 2 pour le prix d'un !

En fait ce n'est pas que les sujets à aborder manquent, mais plutôt que je préfère attendre afin d'avoir un avis plus précis et de ne pas passer à coté de choses que je n'aurai pas vu au premier abord. C'est le cas par exemple de randonnées et des réputés (à tord) grands espaces, de la gastronomie québécoise, complètement méconnue et pas mise en valeur à mon sens (à tord encore une fois), de la démocratisation du logiciel libre ici…

Mais tout ça ce sera pour après. Je vais plutôt parler de vélo et un peu de ski.

Le vélo à Montréal

Couramment appelé bicycle d'ailleurs, même si le terme vélo reste majoritairement utilisé.

Il y a énormément de vélo à Montréal. En fait, Montréal fait parti des villes d'Amérique du Nord les plus développées pour la pratique du vélo, et en conséquence (ou à cause) qui possède le plus grand nombre de personnes se déplaçant à vélo. Il est vraiment courant de faire une bonne partie de son trajet sur une bande ou carrément une piste cyclable.
Surtout quand il fait beau, il y a en fait tellement de monde sur les bandes cyclables que l'on ne peut pas doubler sans au moins regarder derrière soi, au cas où il y aurait déjà un autre vélo en train de doubler. Ça me semble naturel maintenant, mais à Marseille c'était tellement peu probable qu'un accident entre 2 vélos arrivent…

Concernant le comportement des automobilistes face aux vélos, et en comparaison avec Marseille toujours, c'est à peu près équivalent : ils ont moins tendance à forcer le passage aux priorités (mais ça ça semble être le cas de manière générale vis-à-vis des automobilistes entre eux, ils sont moins pressés, par contre ils respectent moins les distances de sécurités (les mêmes qu'en France), alors que les routes sont globalement plus larges. Je me suis déjà fait doubler en plusieurs fois à quelques dizaines de centimètres, en même pas quatre mois, alors qu'après plusieurs années à Marseille, ça ne m'était arrivé que très rarement (bon ils ne respectaient pas le 1 mètre non plus, mais ça restait raisonnable). Du coup j'ai quand même cette impression de ne pas être totalement en sécurité sur la route à Montréal, et de chercher à faire des détours pour prendre des bandes et pistes cyclables.

Il y a d'ailleurs beaucoup de pistes cyclables, les vraies, celles complètement séparées de la route, voir qui n'en suit pas. Elles se trouvent en général le long des berges et quand on s'éloigne du centre-ville. Ainsi on peut faire le tour complet de l'île de Montréal (attention, il faut être en forme, plus de 200 km !) uniquement sur des pistes cyclables qui longent le fleuve, traversent des parcs etc…
C'est vraiment cool pour avoir l'impression de sortir de la ville tout en commençant à pédaler de chez soi, sans avoir à prendre de voiture. Même au delà de l'île, le réseaux de pistes cyclables continu et traverse des endroits moins peuplés et avec bien plus de verdure.

Un bémol par contre, plusieurs bandes cyclables ne sont plus réservées aux cyclistes à partir de mi-novembre et deviennent des emplacements de stationnement. Mais parfois uniquement sur certaines portions, ce qui fait qu'on peut se retrouver d'un coup sans bande cyclable et à contre sens de la circulation ! Légèrement dangereux…

Il faut savoir aussi que globalement le Québec, mais Montréal particulièrement, se situe sur une forte zone sismique. Bon ce n'est pas vrai :-), mais à voir l'état des routes, c'est comme si ! Plein de fissures, d'affaissements et des nids de poules de partout, alors la ville les rebouche de temps en temps (ça devient des bosses, car c'est mal fait), puis d'autres nids de poule apparaissent sur la réparation, et ils en rajoutent encore une couche par dessus, etc… Ça donne des chaussés horribles. Je n'ai jamais vu ça en France, même sur des petites départementales dans les Alpes pas entretenues depuis une dizaine d'années.
Et pourtant, une grosse partie des gens roulent en vélo de course/route mais honnêtement je me demande comment ils font. Avoir un vélo un minimum costaud et des pneus pas trop fin pour absorber les chocs est pour moi à privilégier pour espérer qu'il dure longtemps. Ça s'appelle des hybrides ici, ce qui est à peu près l'équivalent des VTC en France.

Pour le vélo l'hiver, ça se fait très bien avec des pneus hiver, jusqu'à quelques centimètres de neige. Au delà ça se fait toujours mais c'est plus… sportif disons, mais je trouve ça amusant personnellement.
De toute façon, les bandes cyclables finissent par être déneigées au bout de quelques jours.

Le ski au Québec

Le Québec étant une région très plate, il se prête assez bien à la pratique du ski de fond ou de randonnée nordique. Malheureusement cette année la neige a mis du temps à arriver et je n'ai eu jusqu'à présent l'occasion de skier qu'une seule fois, mais ça n'empêche pas de commencer à en parler.

Vocabulaire

Déjà au Québec, les différents sports de ski ne s'appellent pas de la même façon qu'en France, donc voici un magnifique tableau pour s'y retrouver :

Dénomination françaiseDénomination québécoiseDénomination anglaise
ski de fond (alternatif)ski de fond (alternatif)cross-country skiing
skatingski de patinskate skiing
ski de randonnée nordique (SRN)ski hors-piste, ski de randonnée, ski de randonnée hors-pistepas de terme vraiment adapté
ski de piste, ski alpinski alpinalpine skiing
ski de randonnéeski de haute-route, ski hors-pisteski touring

En résumé, ça va à peu près sauf pour le SRN où tout le monde l'appelle un peu comme il veut, et on ne peut même pas utiliser le terme anglophone car c'est pas mieux chez eux. Certains nomment le ski de randonnée également ski hors-piste, donc ça porte encore plus à confusion pour le SRN…
Comme le texte vise plutôt les français nouvellement arriver au Québec, j'emploierai les termes français.

Location/achat de ski

Suivant votre utilisation, vous pouvez soit :

  • en louer sur place à la journée, suivant les endroits où vous allez ;
  • en louer pour un weekend ou la saison entière ;
  • en acheter neuf ou d'occasion.

Pour en acheter neuf, les boutiques principales sont MEC et La Cordée, sortes de Décathlon en plus petit et plus cher. Mais il y a à voir également D'un Sport à l'Autre (majoritairement d'occasion, et peu de choix quand j'y suis allé) et Sports aux Puces (de l'occasion aussi). Les 2 premières font de la location à la journée/weekend, mais ça revient très vite cher si vous comptez skier plus de quelques fois dans la saison (environ 20$/j).

Mais l'option clairement intéressante est d'aller à La Poubelle du Ski, magasin visiblement très connu à Montréal : ils proposent de louer des skis d'occasions pour la saison entière, ou des skis neufs avec possibilité de les acheter ensuite en fin de saison. C'est donc assez intéressant si vous comptez en faire beaucoup, et que vous n'êtes pas prêt à investir directement dans l'achat de skis neufs. Surtout que les tarifs sont plus qu'intéressants, les skis neufs étant des modèles des années passées ou d'exposition. À titre d'exemple, pour des skis de fond neufs à farter, fixations (pose comprise), bâtons et chaussures, j'en ai eu pour légèrement plus de 100 $ pour la saison. En fin de saison, je peux les acheter pour 100 $ de plus. Le personnel est visiblement assez compétant (beaucoup de jeunes), par contre vu la réputation de la boutique, il vaut mieux y aller tôt le matin à l'ouverture, en soirée c'est la cohue…

Pistes de ski de fond à Montréal

Le truc vraiment bien, c'est que la ville trace des pistes de ski de fond dans les grands parcs de la ville et en périphérie dans les parcs nature. Et L'accès y est gratuit ! Les parcs skiables et les conditions de neige sont consultables sur le site de la ville.

Par contre le skating étant moins populaire ici, les pistes ne sont faites que pour le pas alternatif, et des pistes distinctes (plus rares) sont damées pour la pratique du skating.

Les trucs marrants

  • Dans l'éternel et passionnant débat sur l'appellation pain au chocolat versus chocolatine, les québécois viennent soutenir l'effectif des sud-ouestien de France en appelant les pains au chocolat des chocolatines. Heureusement ici un sac plastique reste un sac plastique. Mais là où ils sont bons, c'est qu'ils ont enfin résolu le problème du choix entre croissant et pain au chocolat en inventant… le croissant au chocolat (et non la croissantine, preuve que c'était une bonne idée) !
  • Moi qui faisait toujours très attention à mettre une espace insécable avant la plupart des points de ponctuation, j'ai appris qu'au Québec personne ne s'embête avec ça, la règle est de ne rien mettre du tout (comme en anglais donc). Donc maintenant, je fais attention suivant à qui j'écris.

January 05, 2016 07:52 PM

December 20, 2015

Alexandre Bailly

Affichage de points sur une carte

Un petit article pour ceux qui veulent utiliser un fond de carte OpenStreetMap et ajouter des informations au dessus, avec la librairie javascript leaflet

Note : je m'étais inspiré de ce tutoriel pour écrire le script mi 2015 en octobre 2015, pour des besoins propres. Pour la rédaction de cet article, je suis reparti du script et non du tutoriel.

Note 2 : cet article ne couvre qu'une toute petite partie de ce que l'on peut faire avec leaflet. On peut en plus tracer des polygones sur la carte, tracer un cercle autour d'un point…

Un petit exemple :

<script src="http://blog.chibi-nah.fr/images/map/markers.json" type="text/javascript"></script> <script src="http://blog.chibi-nah.fr/images/map/leafScript.js" type="text/javascript"></script>

Comment faire ?

Il faut deux choses :

  • des données ;
  • du temps.

Commençons par les données.

Il faut à minima :

  • Les coordonnées des points à afficher
  • Un texte à afficher

Exemple simple

Prenons le cas de la Tour Eiffel. Elle se trouve aux coordonnées suivantes : latitude 48.8582, longitude 2.2945. Utilisons donc le nom « Tour Eiffel ».

Les données seront stockées au format json. Pour cet exemple, le fichier json est présent sous la forme d'un fichier texte et non généré automatiquement à partir de données stockées dans une base de données.

Contenu du fichier json :

markers = [
  {
      "name": "Tour Eiffel",
      "lat": 48.8582,
      "lng": 2.2945
  }
];

Peu d'explications sont nécessaires : j'utilise trois champs : name, qui contient le nom (ou le titre, peu importe le nom), lat, contient la latitude, et lng, la longitude. Le tout est stocké dans un array (tableau, d'où les []) nommé markers.

On a (pour le moment) une donnée. Maintenant, il faut l'afficher sur la carte. Pour cela, il faut inclure dans la page html :

  • Le script js et la css de leaflet, à inclure dans l'entête de la page html (section head)
  • Le script js de jquery, à inclure dans l'entête de la page html (section head).
  • Le script d'initialisation et de traitement/formatage des données pour leaflet. (détaillé plus bas).
  • Le fichier json contenant les données.

Éléments à inclure dans la page :

<head>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<script type="text/javascript" src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js?2"></script>
…
</head>
<body>
…
<div id="map" style="height: 800px; border: 1px solid #AAA;"></div>
<script type='text/javascript' src='//blog.chibi-nah.fr/images/map/markers.json'></script>
<script type='text/javascript' src='//blog.chibi-nah.fr/images/map/leafScript.js'></script>
…

Passons maintenant au script qui va initialiser leaflet et formater les données.

Contenu du script :

//Initialisation des coordonnées de la map. Ici, au dessus de Paris
var map = L.map( 'map', {
    center: [48.8662, 2.3124],
    minZoom: 2,
    zoom: 14
});

//Chargement des tuiles
// Consulter cette page pour la liste des serveurs : http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_servers
//
//mapquest : http://{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png
//OSM : http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png

L.tileLayer( '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '© <a href="http://osm.org/copyright" title="OpenStreetMap" target="_blank">OpenStreetMap</a> contributors | Demo by <a href="http://nah.re" target="_blank" tilte="nah">nah</a>',
    subdomains: ['a','b','c']
}).addTo( map );


//Gestion des popups. On boucle sur les données contenues dans le fichier json
for ( var i=0; i < markers.length; ++i )
{
   L.marker([markers[i].lat, markers[i].lng],{})
      .bindPopup('<b>' + markers[i].name + '</b>')
      .addTo( map );
}

Voilà. On a maintenant un marqueur bleu au dessus de la Tour Eiffel, sur la carte, ainsi qu'un popup qui est affiché lorsque l'on clique sur le marqueur.


Cet exemple, avec le code minimaliste (et non minifié) est visible ici : http://blog.chibi-nah.fr/images/map/test/demo-bleu.html


Second exemple

Maintenant, allons plus loin. Je veux afficher la Tour Eiffel, la Pyramide du Louvre et l'arc de triomphe sur une carte, avec des pointeurs rouges, une infobulle qui affiche une photo et un résumé provenant de wikipédia ainsi qu'un lien vers l'article de ce dernier.

Modifions le fichier de données comme suit :

Contenu du fichier json :

markers = [
    {
        "name": "Pyramide du Louvre",
        "comments": "La pyramide du Louvre est une pyramide constituée de verre et de métal, située au milieu de la cour Napoléon du musée du Louvre à Paris, où se situe le hall d’accueil.",
        "wikipedia":"http://fr.wikipedia.org/wiki/Pyramide_du_Louvre",
        "lat": 48.86102,
        "lng": 2.33582,
        "photo_uri": "https://commons.wikimedia.org/wiki/File%3ALouvre_Pyramid_-_censored_copyright_2.jpg",
        "photo_thumbnail": "https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Louvre_Pyramid_-_censored_copyright_2.jpg/128px-Louvre_Pyramid_-_censored_copyright_2.jpg",
        "attribution": "Par hakkun, Zscout370 [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons"
    },
    {
        "name": "Tour Eiffel",
        "comments": "La tour Eiffel est une tour de fer puddlé de 324 mètres de hauteur située à Paris, à l’extrémité nord-ouest du parc du Champ-de-Mars en bordure de la Seine dans le 7ᵉ arrondissement.",
        "wikipedia":"http://fr.wikipedia.org/wiki/Tour_Eiffel",
        "lat": 48.8582,
        "lng": 2.2945,
        "photo_uri": "https://commons.wikimedia.org/wiki/File%3AEiffelturm.JPG",
        "photo_thumbnail": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Eiffelturm.JPG/128px-Eiffelturm.JPG",
        "attribution": "Par Benutzer:BigBartimäus (Photographie personnelle) [Public domain], via Wikimedia Commons"
    },
    {
        "name": "L'arc de triomphe",
        "comments": "L’arc de triomphe de l’Étoile souvent appelé simplement l'Arc de Triomphe, dont la construction, décidée par l'empereur Napoléon Iᵉʳ, débuta en 1806 et s'acheva en 1836 sous Louis-Philippe, est situé à Paris, dans le 8ᵉ arrondissement.",
        "wikipedia":"http://fr.wikipedia.org/wiki/Arc_de_triomphe_de_l%27%C3%89toile",
        "lat": 48.87376,
        "lng": 2.29504,
        "photo_uri": "https://commons.wikimedia.org/wiki/File%3AParis_Arc_de_Triomphe_011.jpg",
        "photo_thumbnail": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Paris_Arc_de_Triomphe_011.jpg/128px-Paris_Arc_de_Triomphe_011.jpg",
        "attribution": "By Vassil (Own work) [Public domain], via Wikimedia Commons"
    }
];

J'ai ajouté quelques éléments en plus, notamment les commentaires (ou description), les liens vers les photos/vignettes, et bien entendu, les attributions pour les auteurs des photos.

À noter : on a un truc absurde en France, au niveau du droit d'auteur. La liberté de panorama n'est pas autorisée. On n'a pas le droit de publier une photo d'une sculpture/monument/œuvre d'art exposée dans rue, sans demander l'autorisation aux ayants droits.
Pour la Tour Eiffel (de jour, uniquement, de nuit, l'éclairage est sous droits d'auteur) et l'arc de triomphe, il n'y a pas de problème, les 70 ans après la mort du créateur/auteur/architecte sont largement dépassés.
Pour la pyramide du Louvre, datant du début des années 1990, ce n'est pas le cas. Du coup, la photo de la pyramide est censurée.

Plus d'infos sur cette absurdité : https://commons.wikimedia.org/wiki/Commons:Freedom_of_panorama/fr#France

Et le script comme suit :

Contenu du script :

//Initialisation des coordonnées de la map
var map = L.map( 'map', {
    center: [48.8662, 2.3124],
    minZoom: 2,
    zoom: 14
});

//Initialisation de l'icône du marqueur
var redIcon = L.icon({
    iconUrl: '//blog.chibi-nah.fr/images/map/marker-icon-red.png',
    iconSize: [25,41]
});


//Chargement des tuiles
// Consulter cette page pour la liste des serveurs : http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_servers
//
//mapquest : http://{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png
//OSM : http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png

L.tileLayer( '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '© <a href="http://osm.org/copyright" title="OpenStreetMap" target="_blank">OpenStreetMap</a> contributors | Demo by <a href="http://nah.re" target="_blank" tilte="nah">nah</a>',
    subdomains: ['a','b','c']
}).addTo( map );


//Gestion des popups.
for ( var i=0; i < markers.length; ++i )
{
   L.marker([markers[i].lat, markers[i].lng],
   {
        icon: redIcon
   })
      .bindPopup('<a title="' + markers[i].attribution + '" href="//blog.chibi-nah.fr/' + markers[i].photo_uri + '"><img src="//blog.chibi-nah.fr/' + markers[i].photo_thumbnail + '" /></a><br /><b>' + markers[i].name + '</b><br /><i>' +  markers[i].comments + "</i><br /><a href='//blog.chibi-nah.fr/" + markers[i].wikipedia + "'>Wikipédia</a>")
      .addTo( map );

}

Les modifications du script sont « simples ». On ajoute l'icône rouge et le traitement des infos (+formatage) dans l'info-bulle et le tour est joué.

Le résultat des modifications est visible en haut de cette page. C'est le code qui est utilisé pour afficher la carte de l'exemple.

Cet exemple, avec le code minimaliste (et non minifié) est visible ici : http://blog.chibi-nah.fr/images/map/demo.html

Il y aurait encore pas mal de choses à expliquer sur les fonctionnalités de leaflet, notamment sur le tracé de polygones, pour entourer un parking, par exemple, mais je vais m'arrêter là.

Liens

Leaflet : http://leafletjs.com/
Source des données : http://blog.chibi-nah.fr/images/map/markers.json
Script : http://blog.chibi-nah.fr/images/map/leafScript.js

Le script leafScript.js et le fichier de données markers.json sont sous licence WTFPL version 2.

by nah at December 20, 2015 04:11 PM

November 07, 2015

Romain Dessort

Québec − octobre 2015 : accès à Internet, meubles et un peu de tourisme

Petit d'état des lieux des FAI au Canada

Après l'achat d'un frigo et d'un matelas, dans l'ordre des priorités, vient celui d'un abonnement à un fournisseur d'accès à Internet (protip : en prenant d'abord un abonnement Internet, vous pouvez vous passer d'un matelas puisque vous pourrez ne plus dormir. Et en suivant un régime spécial vous pourrez en fait également vous passez aussi de frigo :-) ).

Home Organization

Attention, je ne vais parler que de l'offre résidentielle, il y en ai bien sûr autrement pour l'offre à destination des entreprises.

Au niveau offres disponibles sur le marché des FAI, c'est pas terrible : en fait il y a de nombreux FAI, certains sont uniquement présents sur certains secteurs (Grand Montréal, Ottawa-Gatineau, etc…), la majorité sur tout une province, et les quelques gros sur plusieurs, mais aucun ne couvrent la totalité du pays. Mais la concurrence ne semblent pas être très avantageuse pour les consommateurs, les tarifs sont finalement assez identiques d'un FAI à l'autre, de l'ordre de la quarantaine de dollars pour un accès ADSL en ligne sèche (équivalent d'une ligne dégroupée en France). Ça, c'est à condition d'accepter d'avoir une limite de ~150 Go téléchargés par mois. Pour avoir plus ou, soyons fou, aucune limite (genre… comme en France en fait), c'est plus cher. Et pour du VDSL ou de la fibre, pour votre santé mentale, ne rêvez pas :-). Les offres Internet/téléphonie VoIP/TV existent aussi, pour environ $100/mois…

D'un point de vu plus technique… ce n'est pas mieux. Commençons quand même par deux points positifs : plusieurs fournisseurs donnent la possibilité d'avoir une adresse IP fixe (moyennant quelques dollars de plus sur l'abonnement). Parmi eux, certains offrent aussi la possibilité d'avoir un /30, /29 voir /28 (!) moyennant un peu plus que quelques dollars par mois, mais c'est toujours intéressant d'avoir cette possibilité en tant que particulier).

Au niveau IPv6, à ma connaissance, seul TekSavvy fournit un accès en IPv6 natif (officiellement en beta, dans le sens où il ne font pas de support, mais relativement stable, et en place depuis plusieurs années). Quelques autres ont une beta en cours de mise en place, ou bien offrent un tunnel via Hurricane Electric. TekSavvy fournit une IPv6 pour l'interco via DHCP-PD et un /56, on peut donc se créer plusieurs réseaux locaux avec.

À priori, tous laissent la possibilité d'utiliser son propre modem[1], et d'héberger son serveur. TekSavvy bloque par défaut le port SMTP en sortie au niveau de leur réseau, désactivable sur demande.

Venons en là où ça fait mal : la gestion du réseau fonctionne un peu comme en France, dans le sens où les quelques très gros opérateurs (Bell et Telus au Québec) louent leurs infra aux opérateurs intermédiaires (équivalent de l'offre de collecte en France). La différence est que la partie réseau qui est louée passe d'abord par des équipements actifs des opérateurs de collecte, qui ont pris la mauvaise habitude de faire de la limitation de trafic à base de DPI. Donc au final, quelque soit l'opérateur qu'on choisisse, nos communications seront analysés par Bell ou Telus !
Quelques opérateurs intermédiaires et unions de consommateurs ont porté plainte contre Bell, sans trop de succès pour le moment. Du coup, quelques opérateurs offrent des solutions de contournement : de manière radicale, Acanac fournit un service de VPN, de l'abonné jusqu'à leur réseau par exemple. D'autres tel que TekSavvy donnent la possibilité de faire du SLPPP (Single Link PPP, donc du MLPPP à un seul lien PPP), ce qui permet (à l'heure actuelle) de passer au travers des limitations imposées.

Au sujet de la neutralité du net, y a-t-il des FAI associatifs qui visent à fournir une connexion la plus neutre possible, comme tous les petits FAI associatifs et FDN en France ?
Pas vraiment. Le seul qui s'en rapproche est NCF (National Capital Freenet), surtout présent comme son nom l'indique sur la région de la Capitale Nationale (Ottawa-Gatineau). C'est un OBNL (Organisme à But Non Lucratif, à peu près équivalent aux associations Loi 1901 en France) nait dans une université, dont le but affiché est plus de fournir un accès au plus pas prix possible au plus grand nombre qu'un accès le plus neutre possible. Bien qu'ils disent le contraire, je n'ai pas trouvé qu'ils étaient moins cher que les FAI commerciaux, et certains trucs m'ont un peu rebuté : ils donnent par défaut une IPv4 non fixe et font payer le fait d'avoir une IPv4 fixe, et comme ils passent par Bell, ils sont également impacté par le DPI. Ils n'offrent rien contre ça, mais pire (ce n'est pas officiel), j'ai compris qu'ils faisaient eux aussi de la limitation de débit sur certains ports. Sur Montréal, les différentes personnes impliquées dans le logiciel libre auxquelles j'ai pu parlé n'avait jamais entendu parlé de NCF…

Pour retrouver le sourire, un projet plus sympa existe sur Montréal : reseau-libre.ca, c'est un OBNL qui maintien un réseau mesh en WiFi. Il ne vise pas de fournir un accès à Internet, mais plutôt d'avoir un réseau local (surtout dans le sens agriculture locale, pas LAN) pour permettre au montréalais de communiquer entre eux, et éviter de passer par les gros points de concentration sur Internet. Ce qui est cool, c'est que rien ne semble très sérieux et ça fait un peu grand aire de jeux/bac à sable pour adminsys/admin réseau : chacun peut ajouter sa petit machine sur le réseau en fournissant les services qu'il veut (XMPP, serveur web d'une station météo, webcam d'un lieu public…), en testant des nouveaux protocoles avec ses voisins, etc… Je ne les ai pas encore rencontré, mais c'est clairement dans mes todo !

Au final, j'ai donc opté pour TekSavvy, pour leur support d'IPv6, la possibilité de passer au travers du DPI de Bell, la possibilité d'avoir une IPv4 fixe et si besoin des IPv4 additionnelles, et leur support technique assez compétant (genre ils comprennent de quoi je parle si je leur demande d'ajouter un reverse DNS sur mon IPv4) d'après les différents retour d'utilisateurs. Je ferai probablement un retour plus poussé plus tard, et avec la bonne conf du démon pppd de FreeBSD qui supporte SLPPP.

Quelques liens pour aider à choisir son FAI :

  • Canadian ISP, pour avoir une liste quasi exhaustive ;
  • DSL Report, surtout pour les retours d'utilisateur et le forum très actif, concerne tous les FAI nord-américains.

[1]: À titre d'info les modem français/européens fonctionnent bien, j'utilise un D-link DSL 320B, n'apportez pas votre câble gigogne <-> RJ11 par contre, ils ne connaissent pas, c'est du RJ11 des 2 côtés.

Où trouver des meubles

Parce que vivre dans un appart vide, ça devient vite peu agréable. Voici quelques endroits où trouver de quoi remplir un peu votre nouvel appart :

  • Kijiji, équivalent de leboncoin en France, c'est la référence numéro 1. Avec un peu/beaucoup de patiente on peut tomber sur des superbes affaires. J'ai pu par exemple avoir un grand canapé 3 places comme neuf pour $170 livraison comprise, et une table et 2 chaises en état pas top mais pour $20 livraison comprise aussi ! La grande difficulté est de tomber sur des personnes qui acceptent/peuvent faire la livraison pour les gros meubles, et c'est pas forcement évident. Avoir la possibilité de louer une voiture aide pas mal, encore faut-il arriver à la rentabiliser ;
  • les autres sites de petites annonces comme Craigslist ou Lespacs sont nettement moins fournit, mais ça peut être intéressant de jeter un œil de temps en temps ;
  • plus pour ce qui est décoration intérieure et vaisselle, Renaissance, Le Village des Valeurs (traduction à la québécoise de Value Village, donc dans le sens économique plutôt qu'éthique, j'ai mis du temps à comprendre), l'Armée du Salut et les bazars dans les Églises. On trouve pas mal de choses pour quelques dollars, c'est des dons à la base, donc il faut pas s'attendre à des trucs super mais ça peut dépanner, ou si vous êtes vraiment juste au niveau budget ;
  • les magasins de revente d'occasion : le gros plus c'est qu'ils font la livraison, parfois gratuitement, et il est facile de négocier le prix. J'y ai acheté matelas, frigo et cuisinière car ça permet d'avoir une petite garantie de quelques mois sur l'électroménager. Au niveau meubles, c'est quand même nettement plus cher que ce que vous pourrez trouver auprès de particuliers. Ils y en a un peu partout dans Montréal, notamment sur l'avenue Papineau, à partir de la rue Rachel et en remontant assez loin vers le nord ;
  • les magasins de destockage, là c'est du neuf, mais même avec des rabais important, c'est un autre budget ;
  • et enfin Ikea, du neuf de qualité moyenne pour un prix moyen. Le gros inconvénient et qu'il est loin de tout et qu'il faut une voiture pour y aller (surtout si vous compter revenir avec plein de trucs).

Un peu de tourisme

J'ai commencé à avoir un peu plus de temps libre, ce qui m'a permis de visiter enfinla ville. J'ai commencé tout près de chez moi, par le jardin botanique et son insectarium. Le jardin botanique de Montréal est le plus grand du Canada et vraiment super bien aménagé, avec des jardins à thème et un très grand arboretum, je n'ai pas encore tout vu. Au printemps, ça doit vraiment valoir le coup ! Pour les photos, c'est ici.

Et une petite balade autour de St-Jérôme, petite ville accessible en bus la plus loin au nord de Montréal, car j'avais envie de sortir enfin de l'île.

Les trucs marrants

En vrac, quelques trucs amusants :

  • aucun commerce ne ferment entre midi et 2, et ça c'est vraiment bien, car outre le fait que c'est… ouvert, pas besoin de se rappeler pour chaque commerce de quelle heure à quelle heure il ferme. Il est ouvert de 9h à 18h la journée, point. Dans le même genre, tous les commerces sont ouverts le dimanche, et la plupart ferme bien plus tard le jeudi/vendredi, vers 21h en général.
  • En automne, ce n'est pas la neige qui recouvre les routes, mais les feuilles mortes, car il y a des arbres vraiment partout. À tel point que les feuilles mortes se ramassent… au tractopèle ! Pas de photos pour illustrer, mais c'était assez marrant.
  • J'aurai l'occasion d'en reparler, mais en France j'avais l'habitude de voir dans les supermarchés des amandes provenant de Californie. Ici, au Québec, elles proviennent d'Italie. Magnifique.

November 07, 2015 05:42 PM

October 23, 2015

Luc Didry

Utili­ser Prosody avec une authen­ti­fi­ca­tion LDAP

Prosody est un serveur XMPP (Jabber) extrê­me­ment simple à mettre en place. En un tour de main, vous avez un serveur XMPP. Par contre, si on veut s’ap­puyer sur un annuaire LDAP pour l’au­then­ti­fi­ca­tion, c’est plus galère.

Voici ce que j’ai sur mon serveur :

Instal­la­tion des paquets

apt-get install lua-cyrussasl sasl2-bin

Confi­gu­ra­tion de saslau­thd

Dans /etc/default/saslauthd :

START=yes
MECHANISMS="ldap"

Dans /etc/saslauthd.conf :

ldap_servers: ldap://ldap.example.org
ldap_search_base: ou=users,dc=example,dc=org

Vous pouvez rajou­ter des éléments d’au­then­ti­fi­ca­tion dans ce fichier, comme ldap_bind_dn et ldap_bind_pw. Voir ce post de blog pour quelques détails en plus.

Dans /etc/sasl2/prosody.conf :

pwcheck_method: saslauthd
mech_list: PLAIN

À partir de là, on peut lancer le dæmon et tester :

service saslauthd start
testsaslauthd -u user -p secret

Confi­gu­ra­tion de prosody

Dans /etc/prosody/prosody.cfg.lua, ajou­ter :

authentication = "cyrus"
cyrus_service_name = "prosody"

Pour que l’uti­li­sa­teur prosody ait accès à la socket de saslauthd, on pren­dra soin de l’ajou­ter au groupe sasl :

gpasswd -a prosody sasl

Pour vous assu­rer que prosody a accès à saslauthd, faites :

su prosody -s /bin/bash
/usr/sbin/testsaslauthd -u user -p secret

Et un petit coup de restart derrière :

service prosody restart

Enjoy ;-)

Logo XMPP sous licence Expat

Parta­ger

Flattr this!

by Luc at October 23, 2015 06:00 AM

October 06, 2015

Luc Didry

Mise à jour d’OpenWRT sur Buffalo WBMR-HP-G300H [Bis]

Bon, je vais pas refaire l’article de la dernière fois, z’avez qu’à aller lire :p

Passons tout de suite à la mise à jour d’un Buffalo WBMR-HP-G300H sous OpenWRT Barrier Brea­ker (14.07) vers Chaos Calmer (15.05).

Tout d’abord, on va récu­pé­rer l’image kiva­bien et l’en­voyer sur le routeur (partons du prin­cipe que le routeur est acces­sible à l’IP 192.168.1.1) :

Mise à jour

wget https://downloads.openwrt.org/chaos_calmer/15.05/lantiq/xway/openwrt-15.05-lantiq-xway-WBMR-squashfs.image
scp root@192.168.1.1:/tmp

(voir ici pour libé­rer de la place s’il n’y en a pas assez dans /tmp)

On va aussi récu­pé­rer un fichier néces­saire pour la suite et on se le garde au chaud sur son ordi :

wget https://downloads.openwrt.org/chaos_calmer/15.05/lantiq/xway/packages/base/kmod-ltq-adsl-ar9-fw-a_0.1-1_lantiq.ipk

On met à jour :

ssh root@192.168.1.1
cd /tmp
sysupgrade openwrt-lantiq-xway-WBMR-squashfs.image

Un petit reboot s’il ne le fait pas tout seul.

Et là, c’est le drame !

Plus d’ADSL !

C’est simple : l’ADSL sur ligne télé­pho­nique clas­sique néces­site l’an­nexe a alors que l’image vient avec l’an­nexe b (ne me deman­dez pas la diffé­rence entre ces deux trucs ni ce que c’est).

On envoie alors le paquet télé­chargé tout à l’heure :

scp kmod-ltq-adsl-ar9-fw-a_0.1-1_lantiq.ipk root@192.168.1.1:/tmp

On supprime l’an­nexe b et on installe l’an­nexe a :

ssh root@192.168.1.1
cd /tmp
opkg remove kmod-ltq-adsl-ar9-fw-b
opkg install kmod-ltq-adsl-ar9-fw-a_0.1-1_lantiq.ipk

Ensuite on met à jour /etc/config/network, dans la section config adsl si besoin est :

config adsl 'dsl'
    option annex 'a'
    option firmware '/lib/firmware/adsl.bin'

Toujours dans le même fichier, j’avais précé­dém­ment conseillé de mettre option ip6hint '42'. Bah là je vous conseille de l’en­le­ver : mon IPv6 ne fonc­tion­nait pas correc­te­ment avec ça.

On reboot (oui, je suis une feignasse qui ne souvient plus quel service il a redé­marré pour faire fonc­tion­ner le brol). Et là, norma­le­ment, ça fonc­tionne.

J’es­père que cette mise à jour m’en­lè­vera le vilain bug IPv6 de la dernière fois.

EDIT : ha bah non, ça a pas l’air de corri­ger le bug :-(

NB : si vous trou­vez que cet article ressemble forte­ment à l’an­cien, vous avez raison, j’ai fait du copier/coller :p

Parta­ger

Flattr this!

by Luc at October 06, 2015 07:40 PM

October 05, 2015

Romain Dessort

Québec − septembre 2015 : paperasse et recherche de logement

Après un mois passé au Québec, voici un petit article dans lequel je tiens surtout à laisser de l'information utile/que j'aurai bien aimé savoir avant de partir pour d'autres immigrants.

Passage de l'immigration au Canada

Petit contexte avant tout, je travaille au Canada dans le cadre du V.I.E, pour une durée de 2 ans (durée maximum possible). Ce qui nécessite donc entre autre d'avoir déjà un contrat de travail conclu avec un employeur canadien.

Le statut de V.I.E étant purement français, au Canada je suis donc là dans le cadre d'EIC Jeunes professionnels. La procédure pour obtenir la lettre officielle (Lettre d'Introduction) de demande de permis de travail est un peu longue et fastidieuse, mais assez simple car très bien documentée sur le site de Citoyenneté et Immigration Canada.

Par contre, la liste des documents à avoir pour le passage de l'immigration à l'aéroport est restée assez floue. J'ai fini par trouver dans la FAQ de CIC, cette liste, mais ce n'étais pas très clair, notamment comment faire si on a pas de billet de retour (à priori il faut prouver qu'on a suffisamment d'argent pour l'acheter sur place, mais comment ?), et leur définition de la « preuve de fonds disponibles » n'est pas très claire, d'ailleurs ils ne précisent pas le montant.

Au service d'immigration, l'agent m'a finalement demandé uniquement la lettre d'introduction (forcement) et la lettre de mon employeur confirmant le contrat de travail, document absolument pas mentionné dans la liste mais que j'avais imprimé et avec moi, (ainsi que d'autres) au cas où. Et j'ai pu avoir mon beau permis de travail !

Pour la preuve de fond, je ne saurai donc pas ce qu'il fallait…

Démarches une fois arrivé

On retrouve assez facilement les démarches à faire une fois sur place un peu partout sur le net, beaucoup moins la notion de dépendance entre elles. Du coup pour éviter un casse-tête à expliquer son cas à chaque fois et de perdre trop de temps et de sous, voici les démarches à faire, dans l'ordre :

  • commencez par apprendre votre code postal par cœur (ou pensez à le noter quelque part), c'est une suite de 3 chiffres et 3 lettres immémorisable et qui dépend de la rue dans laquelle vous résidez (et non de la ville comme en France). Ce n'est utile que pour la poste, pas pour trouver une adresse sur une carte/un GPS ;
  • demande du NAS (Numéro d'Assurance Sociale, pas d'équivalent en France) dans un bureau de Service Canada : c'est une affaire d'une dizaine de minutes, sauf entre midi et 2 où vous n'avez généralement pas beaucoup de temps et où tout le monde à la bonne idée de venir au même moment. Sinon ça ouvre tard le matin et ferme tôt l'après-midi.
    Il ne vous faut que votre passeport et votre permis de travail, et il faudra donner votre adresse (même temporaire) à laquelle vous résidez ;
  • ouvrez un compte en banque, de préférence dans une banque ayant des offres pour les immigrants comme la TD ou Desjardins). Il vous faudra toujours votre passeport et votre permis de travail, toujours donner votre adresse de résidence (avec son horrible code postal), et votre NAS récemment reçu.
    Si vous avez pensez à amener des euros en espèces de France, faites-les changer et déposez-les sur votre compte canadien. Sinon, là commence les ennuis : si vous comptiez faire un virement international depuis votre compte français pour avoir de l'argent rapidement, grave erreur. Sauf à être dans une banque implantée à la fois en France et au Canada, leurs procédures pour les virements hors zone SEPA impliquent de faire une demande via un formulaire papier à leur renvoyer signé, puis le temps qu'il le prennent en compte, vous appelle pour vérifier les info et envoi l'ordre de virement, ça peut prendre une dizaine de jours. Si il y a une information incomplète, vous repartez à la case départ pour 10 jours supplémentaires.
    Bref, il vaut mieux prévoir d'arriver avec déjà de l'argent en espèces à mettre sur votre compte canadien ;
  • ensuite, dans le but de trouver un appartement, il vous faut un numéro de téléphone canadien, déjà pour éviter de trop payer en hors-forfais avec votre forfait français, et surtout si un proprio doit vous rappelez c'est mieux de lui donnez un numéro local qu'un numéro étranger.
    Ça va dépendre des opérateurs, mais juste une adresse et une carte de débit canadienne (avec des sous sur le compte) suffit ;
  • Montréal étant grand, pour être efficace et pouvoir enchainer les visites, il vaut mieux avoir un moyen de transport plus rapide et moi contraignant que ses pieds et les transports en commun. Le vélo est à mon avis la meilleure solution, et puis ça vous permet de visiter par la même occasion les quartiers. À Montréal il y a les BiXi (équivalent des Vélib), mais personnellement j'ai dessuite acheté un vélo d'occasion, vu mon utilisation pour la suite ;
  • après ça, vous êtes normalement parez pour rechercher efficacement un appart.

Dès que vous aurez votre adresse permanente, il restera des démarches moins urgentes et facultatives, notamment l'inscription au registre des français établis hors de France auprès du consulat, la demande de la carte Soleil auprès de la RamQ (équivalent de la carte Vitale) qui permet juste de ne pas avoir à avancer des frais de santé et la souscription d'une assurance habitation (qui n'est pas obligatoire ici). Et bien sûr, un service vital, une connexion Internet suffisamment fiable et neutre, mais j'y reviendrai probablement par la suite, car c'est moins évident qu'en France.

Comme vous vous en doutez, ce scénario idéal n'était pas mon cas. En fait, j'ai à peu près fait les démarches dans le bon ordre, mais sans attendre des sous sur mon compte canadien, donc je n'ai pas pu acheter dessuite de forfait mobile, et je n'ai pas attendu non plus d'avoir de forfait mobile pour chercher un appart, ce qui m'a fait une sacrée facture de hors forfait. Et quand j'ai signé mon bail, je n'avais toujours pas de sous sur mon compte canadien pour faire de chèque… Donc beaucoup de stress que j'aurai pu éviter.

La recherche de logement

Montréal a les logements les plus cher de tout le Québec. Mais le Québec a les logements les moins cher de tout le Canada. Et dans toute l'Amérique du Nord, j'en sais rien :).
Comparativement à la France, ça reste bien moins cher que Paris et le sud-est de la France, hormis certains quartiers comme le centre-ville, le Plateau, et les quartiers riches résidentiels d'Outreront et Westmount.

Rapidement, car l'info se trouve assez facilement ailleurs :

  • les annonces de location se trouvent sur les sites comme Kijiji, Craigslist et Les Pacs équivalent de leboncoin français. On peut aussi en trouver sur d'autres sites, dans les journaux etc… mais rien qu'avec ces 3 là il y a de quoi faire ;
  • le truc particulièrement sympa par rapport à la France, c'est que les propriétaires n'hésitent pas à mettre l'adresse exacte du logement dans l'annonce, ce qui permet d'avoir les résultats sur un carte (fond de carte OSM + LeafletJS en plus !). Il manque plus que de pouvoir filtrer la recherche en traçant des polygones sur la carte, avec un peu plus de Leaflet, PostgreSQL + PostGIS \o/ ;
  • beaucoup de propriétaire demandent soit des références d'anciens propriétaires soit un historique de crédit. En arrivant bien sûr on a rien de tout ça, donc il faut passer son chemin… ;
  • les québécois commence à compter à partir de 1, donc le rez-de-chaussé est le premier étage, le premier le deuxième etc… Sauf qu'il y a beaucoup de français immigrés qui continus à appeler le rez-de-chaussé le rez-de-chaussé, le premier le premier etc… donc en clair il n'est pas possible d'être sûr de l'étage de l'appartement tant que vous ne l'avez pas vu. Et les appart en demi sous-sol sont plutôt des 3/4 sous-sol ;
  • au niveau vocabulaire, le tapis est la moquette, le bois franc le parquet, la céramique le carrelage, le poêle la cuisinière, la laveuse le lave-linge…
  • le propriétaire connait rarement la superficie de ce qu'il loue et préfère parler en nombre de pièces.

Les trucs marrants

En vrac, quelques trucs amusants et particulièrements différents de la France :

  • l'état semble plus laïque que la France : à l'aéroport, une femme employée au service d'immigration portait un voile (assortie à son uniforme d'ailleurs) ;
  • parfois c'est difficile de se croire à l'étranger : beaucoup de produits alimentaires (notamment les huiles, du sel, des conserves préparées, confitures…) viennent de France, sans compter des marques classiques de France qu'on retrouve ici aussi, puis les nombreuses rue aux noms de villes française (rue de Marseille, de Bordeaux, avenue d'Orléans…, rue Mistral, Charlemagne…), les nombreux vélos Peugeot…
  • il y a globalement beaucoup de vélos dans Montréal, il y en a même tellement dans certains quartiers qu'il y a parfois des bouchons sur les pistes cyclables !

October 05, 2015 09:04 PM

Luc Didry

Un nouveau logi­ciel libre : Lufi

Genèse

Après Lutim, qui permet d’hé­ber­ger des images, je me suis dit « Pourquoi me limi­ter aux images ? ». Et puis, ça m’em­bê­tait de chif­frer les images côté serveur. Bien sûr, pour pouvoir utili­ser les images dans des balises <img>, il fallait que le chif­fre­ment et le déchif­fre­ment se fasse côté serveur. Mais pour des fichiers, ça ne sert à rien.

J’ai donc pris exemple sur Zero­bin, qui chiffre le texte côté client, en utili­sant la biblio­thèque Stan­ford Javas­cript Crypto et qui met la clé dans une ancre dans l’URL.

Avec ça, j’ai repris le mode de fonc­tion­ne­ment de Lutim (qui lui-même est forte­ment pompé sur mon logi­ciel Lstu), j’ai saupou­dré de Boots­trap et de WebSo­cket et ça a donné Lufi !

Le logo de Lufi

Let’s Upload that FIle

Du temps, de la sueur, des larmes, un bon éditeur de texte, le meilleur frame­work web du monde et voilà Lufi !

Le prin­cipe est simple :

  • on dépose des fichiers dans la zone dédiée à cet effet ;
  • le javas­cript génère une clé de chif­fre­ment (diffé­rente pour chaque fichier) ;
  • le fichier est découpé en morceaux ;
  • chaque morceau est chif­fré et envoyé via WebSo­cket au serveur ;
  • vous récu­pé­rez deux liens : un lien de télé­char­ge­ment et un lien de suppres­sion.

Les bonus :

  • les infor­ma­tions sur les fichiers envoyés sont stockées en localS­to­rage sur le navi­ga­teur et une inter­face permet de visua­li­ser ces infor­ma­tions ;
  • on peut deman­der à ce que le fichier soit supprimé dès le premier télé­char­ge­ment ;
  • on peut défi­nir un délai d’ex­pi­ra­tion après lequel le fichier est supprimé.

Pour les admins/déve­lop­peurs :

  • les instruc­tions d’ins­tal­la­tion sont sur le wiki ;
  • on peut défi­nir des paliers de tailles, forçant le délai de suppres­sion. Exemple : les fichiers de moins de 10Mio pour­ront rester 60 jours, ceux entre 10Mio et 50Mio, 30 jours et au-delà de 50Mio, 2 jours. Cela permet de limi­ter l’uti­li­sa­tion de l’es­pace disque ;
  • le code est sous licence AGPL v3 et le code est sur le Gitlab de Frama­soft avec un miroir sur Github ;
  • c’est codé en Perl avec le frame­work Mojo­li­cious, la biblio­thèque Stan­ford Javas­cript Crypto, du Twit­ter boots­trap pour le CSS, des icônes piochées sur Fontello et la biblio­thèque Moment.js. Tout le javas­cript est écrit en Vanilla Javas­cript.

Pour le logo :

  • phoné­tique­ment parlant, en français, Lufi sonne comme Luffy, le person­nage prin­ci­pal du manga One Piece. Luffy est surnommé « Chapeau de paille », et comme Lutim avait déjà un chapeau pour logo… Un coup d’inks­cape, et hop ! (Lstu a d’ailleurs récem­ment gagné un chapeau comme logo)

Frama­drop

Lufi sera le logi­ciel utilisé par Frama­soft pour propo­ser le service Frama­drop1 dans le cadre de l’opé­ra­tion Dégoo­gli­sons Inter­net.

Par ailleurs, la saison 2 de la campagne de Dégoo­gli­sa­tion a commencé aujourd’­hui : n’hé­si­tez pas à soute­nir Frama­soft pour qu’on puisse conti­nuer !

Bon alors, c’est où qu’on clique ?

Contrai­re­ment à Lutim, je ne propo­se­rais pas d’ins­tance offi­cielle, juste une instance de test : https://demo.lufi.io (héber­gée par Frama­soft, comme Erco, merci à eux :D).

En effet, il risque d’y avoir besoin de pas mal d’es­pace disque pour opérer un service comme celui-ci. Je ne peux pas me permettre finan­ciè­re­ment de prendre un serveur pour ça, ni deman­der à Frama­soft de me prêter une VM pour ça, alors qu’on propo­sera Frama­drop à la fin de la semaine.

Nota Bene

Alors, non, c’est pas parce que Frama­soft voulait sortir un tel service que j’ai codé Lufi, c’est plutôt parce que je voulais coder Lufi que Frama­soft propose Frama­drop. Frama­soft ne fait toujours pas de code (excepté Frama­date). J’ai codé Lufi en dehors de Frama­soft bien que j’en sois membre.

Lufi est encore jeune, donc si vous repé­rez des problèmes, n’hé­si­tez pas à ouvrir un ticket !

Parta­ger

Flattr this!

by Luc at October 05, 2015 01:03 PM

October 03, 2015

Alexandre Bailly

Édition de police d'écriture

Une petite question qui revient de temps en temps :
Comment faire pour faire apparaître des « ondes wifi » sur la lettre i, comme sur le site de La Brique Inter.net, sans que cela soit une image ?


Introduction

Texte La Brique Inter.net, en noir sur fond blanc, avec les ondes sur le i.
Logo hype

Si on affiche le site sans javascript, on voit que c'est le caractère Î qui est affiché.

Texte La Brique Inter.net, en noir sur fond blanc, avec un i accent circonflexe majuscule.
Logo pas hype

Note : J'ai utilisé des images [1] pour pouvoir « illustrer » l'article.

Outils nécessaires : uniquement des logiciels libres.

  • Inkscape, pour l'édition vectorielle ;
  • FontForge, pour éditer une fonte de la police d'écriture.

La police Jura (Jura Book) a été dessinée par Daniel Johnson et est sous licence "SIL Open Font Licence", qui autorise (entres autres) les modifications. Cette police est disponible dans toutes les bonnes crèmeries, n'hésitez pas à la demander à votre moteur de recherche favori.


Inkscape

Ouvrons Inkscape, et dessinons des ondes.

Capture d'écran du logiciel inkscape.
Logo dessiné

Ça, c'était la partie la plus amusante.

FontForge

Ouvrir FontForge, ouvrir la police Jura, et sélectionner la case du Î (i majuscule accent circonflexe).

Capture d'écran du logiciel FontForge, lettre Î sélectionnée.
La case avec la lettre Î

Double-cliquer sur la case pour passer en mode « dessin ».

Sélectionner puis supprimer l'accent circonflexe.

Capture d'écran du logiciel FontForge, mode dessin. Capture d'écran du logiciel FontForge, accent circonflexe sélectionné. Capture d'écran du logiciel FontForge, accent circonflexe supprimé.
Édition de la lettre Î

Revenir sur Inkscape, sélectionner (et copier) le dessin vectoriel (donc, les ondes), et coller directement dans FontForge.

Il faudra sans doute effectuer quelques petites retouches, et aligner les ondes.

Capture d'écran avec le logiciel FontForge, et la lettre Î terminée.
Résultat final

Export final

Enregistrer la police de caractère (pour pouvoir la modifier plus tard), puis générer les différentes fontes pour le web (ttf, woff…), soit via un site web dédié, soit via la ligne de commande ; se référer à l'article Conversion de polices pour le web pour ce dernier cas.

Conclusion

Avec un peu de temps et deux logiciels libres, on peut éditer aisément n'importe quelle police d'écriture pour y intégrer des images vectorielles. Les seules limitations sont : le nombre de couleurs, l'imagination, et la licence de la police. Toutes n'autorisent pas la modification et encore moins l'utilisation en dehors du cadre « personnel » (en gros, ça ne sort pas de votre ordinateur/téléphone).

L'étape d'Inkscape est totalement optionnelle, on peut dessiner directement dans FontForge, même si c'est moins évident/facile.

Tout commentaire qui n'a rien à voir avec cet article se verra supprimé sans sommation.



1 : Flemme d'installer la police d'écriture jurabook pour seulement un article.

by nah at October 03, 2015 03:06 PM