Bulix.org » Life snippets

mercredi 01 juillet 2009

Cross-compilation kernel build tool

pub/2009/07/01/tool.pngMy work as a Linux kernel and software developer involves a lot of kernel builds. Up to a few dozens a day, when repeatedly testing a feature or bisecting the Git history to look for the origin of a problem. Building a kernel for a "normal" computer is usually easy and bogs down to the common one-liner:

# make clean bzImage modules modules_install

But when cross-compiling, you need a CROSS_COMPILE= environment variable set, and if you don't want the modules to go to /lib/modules/`uname -r`/ you need to have INSTALL_MOD_PATH= set. And you probably want that because you most likely use an NFS root for your target system. And you also need your cross-compilation toolchain to be in your PATH variable. With all this, you quickly end up with:

$ export PATH=/a/long/path/to/where/my/toolchain/is/bin:$PATH
$ make ARCH=arm CROSS_COMPILE=my_toolchain- \
   INSTALL_MOD_PATH=/another/long/path/to/where/my/target/rootfs/is \
   clean uImage modules modules_install

It's error prone, and still not easily configurable. So I wrote this little script, ekbuild.sh that takes all the annoyance and complexity away from you and let's you cross-compile kernels more easily.

# · Lire toute l'histoire · Aucun commentaire
lundi 29 juin 2009

Connecting to a Cisco VPN with Linux

Working as a remote, telecommuting engineer for MontaVista Software, I need a way to access the company network from my computer, wherever I am. Until now, this need was fulfilled by a key-protected SSH gateway that we used for tunneling connections to the web proxy, the mail servers and the git shared server.

To provide an easier to use and more multi-platform solution, they recently switched to a Cisco VPN based solution, so I had to investigate how to get this to work properly on my GNU/Linux Debian workstation in a manner that doesn't get into the way of my current network setup at home. The main problem being that OpenVPN setups and Cisco VPNs are not inter-operable, meaning that I could not use the openvpn open-source VPN client to connect to the company network.

# · Lire toute l'histoire · Aucun commentaire
jeudi 25 juin 2009

Howto run Moblin 2 beta in VirtualBox

Today, I gave a quick peek at the Moblin project, which is backed by the Linux Foundation, Intel, MontaVista and others. The Moblin software platforms allows for the creation of Linux-based operating systems targeted at mobile and embedded devices. It provides a middle-ware between the Linux kernel and its drivers for the very specific hardware one can find in an embedded device, and a userland system designed for the target device.

Moblin logo

Since I don't have a supported device on hand (the ideal would be a netbook, but these are too expensive to my taste), I decided to try Moblin in VirtualBox. It turned out to be not as easy as expected, so here's a small summary of what I had to do to get a usable system.

# · Lire toute l'histoire · Aucun commentaire

Mon premier bugreport Debian

http://www.debian.org/logos/openlogo-nd-75.jpgAujourd'hui, après plus de dix ans d'utilisation de Debian, j'ai fait mon tout premier bug report Debian. En effet, une récente mise à jour du paquet mutt (1.5.20) a introduit un bug qui empêche l'utilisation d'un serveur IMAP sur un port autre que celui par défaut.

La variable de configuration folder permet de définir le chemin de base des boites aux lettres lues par Mutt. Lorsqu'on utilise un serveur IMAP, c'est ici que l'on définit le chemin IMAP vers le serveur, sous la forme :

set folder="imaps://username@hostname:port/"

Malheureusement, cette version 1.5.20 de Mutt dans Debian comprends un bug qui empêche Mutt de comprendre la partie :port, le faisant ainsi penser qu'il s'agit d'un chemin IMAP invalide. On ne peut donc plus utiliser de serveur IMAP sur un port spécial, ce que je fais par exemple pour accéder à mes emails du travail à travers un tunnel SSH local avec folder="imap://mpetazzoni@localhost:50143/".

Ce problème a entre-temps été corrigé upstream dans le dépot de Mutt, mais il faut mettre à jour le paquet Debian, et pour cela porter le problème à l'attention du mainteneur du paquet via un bug.

J'ai donc utilisé l'outil reportbug pour me générer un template de rapport de bug contenant toutes les informations nécessaire au bon traitement du problème :

$ reportbug -b -q --template --tag upstream --tag fixed-upstream --severity important mutt > /tmp/report

Il suffit ensuite d'envoyer un email à submit@bugs.debian.org avec un sujet adéquat décrivant le problème, inclure dans le corps du message le contenu généré dans /tmp/report et rajouter avant les Package-specific info une description détaillée du problème.

Quelques minutes plus tard, un message confirme que le bug a été accepté, précisant son numéro.

En ce qui concerne mon bug, il est ici: mutt: Please update from upstream to fix IMAP port parsing in folder configuration variable.

(Le logo Debian est Copyright (c) 1999 Software in the Public Interest)

# · 2 commentaires
mercredi 10 juin 2009

L'Hadopi censurée !

La saga de la loi Contrôle d'Internet Création et Internet continue. Après l'adoption de la loi en seconde lecture fin avril, les sages du Conseil Constitutionnel viennent de censurer la partie sanction de la loi, imposant une décision judiciaire pour couper l'accès à Internet d'un abonné, faisant ainsi (enfin) valoir une véritable présomption d'innocence. Plus de détail sur la dépêche du Monde.fr.

# · Lire toute l'histoire · 4 commentaires
lundi 08 juin 2009

3 mois plus tard

Il y a à peine plus de trois mois, je revenais de mon stage de fin d'études en Californie avec mon premier CDI en poche. Ma période d'essai est désormais terminée, et il me semble que c'est le moment idéal pour faire un rapide point sur ces premières semaines. Malgré la crise économique qui frappait alors de plein fouet les États-Unis, MontaVista a décidé de m'embaucher pour travailler depuis la France, en télétravail.

Je fais donc partie du tout petit contingent de MontaVistiens en France, tous travaillant à domicile. L'équipe dans laquelle je travaille est quant à elle beaucoup plus répartie, depuis la côte Ouest des États-Unis jusqu'à l'Inde. Quoi qu'il en soit, ces trois premiers mois de télétravail pour MontaVista ont apporté leur lot de changements après mon stage : dans mon travail, dans mon organisation et dans ma vie en général.

# · Lire toute l'histoire · 8 commentaires
vendredi 05 juin 2009

Multiposte derrière DD-WRT

Petit billet technique de fin de semaine. Depuis que mon WRT est passé en tête de réseau, je n'avais pas remis le multiposte Free en place. L'interface web ne permettant pas de rediriger brutalement tout ce qui vient de la Freebox vers l'ordinateur où je souhaite regarder la TV, il fallait que je trouve comment fixer le port de réception des flux vidéo du multiposte.

Tout d'abord, côté VLC, il faut se rendre dans les préférences. En mode Avancé, pour voir toutes les options, il faut mettre une valeur au Port client (1234 par exemple) dans Input/Codecs > Demuxers > RTP/RTSP.

Puis, dans l'interface d'administration du routeur, il faut rajouter une règle de redirection du port 8080 (UDP et TCP, quoi que UDP seul suffit peut être) vers l'IP de l'ordinateur. Dans dd-wrt, ça se passe dans NAT / QoS > Port Forwarding.

Et voilà, on peut maintenant aussi perdre des neurones sur son ordinateur, et en HD s'il vous plait ! En prime, un petit script, tv, pour lancer directement une chaine par son nom.

# · 6 commentaires
lundi 25 mai 2009

Towel Day

I know where my towel is. And you?

# · 2 commentaires
dimanche 24 mai 2009

En mai, le hardware fait ce qui lui plait

Ce mois de mai a été plus qu'éprouvant pour mes pauvres petits nerfs de geek. Différents problèmes hardware se sont accumulés, en même temps bien sûr, pour venir me pourrir l'existence. À commencer par ma nouvelle machine, commandée il y a quelques semaines et qui a très bien marché jusqu'au début du mois où elle a commencé à freezer aléatoirement, avec des kernel oops par-ci, par-là. Il m'a fallu plusieurs reboots pour réussir à installer memtest86+, et finir par découvrir que ma RAM ne se portait pas bien du tout.

Plusieurs essais de configuration de timings plus tard, la machine retrouve un semblant de stabilité qui me permet de backuper une dernière fois mon système vers mon serveur. Je lance alors la procédure de retour pour la RAM, en espérant que le problème vienne bien de là (je n'ai pas 25 cartes mères sous la main pour tester). Heureusement, mon gentil voisin du 2è me prête sa machine, ce qui me permet de continuer à travailler.

Malheureusement, les multiples plantages dûs à ma RAM défectueuse auront eu raison de mon système de fichiers /, et du log XFS de mon /home. J'ai donc gagné une réinstall de ma machine de travail, et quelques pertes de données (heureusement des dépôts Git re-clonables) au passage.

Pendant que ma RAM passe à travers le SAV de Materiel.net, je commande un autre kit d'une autre marque (G.Skill), avec l'intention de revendre l'autre (Corsair) quand il reviendra.

Et voilà qu'au même temps, le disque dur de mon serveur, fraichement migré chez Kimsufi, me lâche entre les doigts : secteurs défectueux, reboots de la machine, ... Je réussi, bien heureusement, à faire un backup complet du système vers un autre serveur dédié que je partage avec Dave, BenC et Lopar. Le changement de disque est effectué par l'équipe technique d'OVH, qui m'envoie alors le mot de passe du nouveau système sur mon adresse Bulix.org ... bien évidemment hors service puisque le serveur n'est plus. On se demande bien à qui sert l'email de secours qu'ils demandent dans le profil utilisateur ! Bref, merci BenC d'être mon MX secondaire et d'avoir pu fouiller ta mail queue à la recherche du mail perdu. Le temps de rapatrier le backup et de le restaurer, et revoilà mon serveur sur pied. Ouf.

Un peu plus tard, je reçois ma nouvelle RAM. Tout content de pouvoir retrouver ma machine, je déballe le colis pour constater qu'il s'agit de la commande d'une autre personne ... un kit G.Skill, mais pas celui que j'ai commandé. L'erreur d'expédition est compréhensible, mais passablement énervante. Toujours pas de nouvelle RAM donc, et heureusement Materiel.net me rembourse les frais de renvoi. Avec tous ces problèmes, ma RAM revient du SAV bientôt, j'ai donc demandé le remboursement de mon autre commande.

Avec un peu de chance, je devrais recevoir ma RAM dans la semaine, ce qui marquera la fin de ce malheureux enchainement de problèmes ! Je pourrais ensuite définitivement rayer Corsair de ma liste de matériel fiable, et Materiel.net de celle des gens compétents. Et même si je leur concède la bonne efficacité de leur SAV, le fait est que j'en ai jamais eu besoin chez LDLC.

# · 2 commentaires
dimanche 17 mai 2009

Activité musicale

Depuis mon retour des États-Unis, je me suis remis à la musique, principalement pour reprendre des cours et récupérer mon niveau, mais aussi pour intégrer la Synfonietta de Belfort dans laquelle je suis au second pupitre d'alto. Notre saison de concerts à commencé, et nous avons déjà joué la semaine dernière à Danjoutin et cette après-midi à la Maison du Peuple de Belfort (à l'occasion cette fois d'une rencontre entre les orchestres de Belfort et ceux de Leonberg, ville avec laquelle Belfort est jumelée).

Notre programme, en collaboration avec le choeur Orphée de Belfort, consiste en la Grande Messe en Do mineur de Mozart, et si vous en avez l'occasion, je vous invite à venir nous écouter à l'un de nos trois prochains concerts : le 23 mai à l'Église de Gyromagny (17h), le 30 mai à la Cathédrale St-Christophe de Belfort (14h) pendant le Festival International de Musique Universitaire ou le 6 juin à la Collégiale de Thann (20h30). Pour un petit aperçu (enregistrement du MontVerdi Choir & Orchestra) ...

# · 5 commentaires
samedi 09 mai 2009

Week-end in Berlin

Since I came back from the US at the beginning of March, Easter week-end in April was my first occasion to get out from work a bit and relax. With Easter Monday being a public holiday here in France, the three-day weekend was the perfect occasion to travel. Edward and Chelsea originally wanted to go see Barcelona, but we didn't find acceptable airfares, so we change plans and finally set off to Berlin. Although Hélène was supposed to come with us for the weekend, her upcoming exams unfortunately kept her home working, so Jaco took her place for the trip.

With almost just a toothbrush, a credit card, the LonelyPlanet guide to Berlin and my hotel reservation, I met Edward in Strasbourg on Friday night. After a spicy yet delicious diner, followed by a gorgeous chocolate mousse, Edward and I went out in the city center to meet with Jaco for a decent TGIF. And also to tell him that departure time had been set to 5am the next morning :) After a good beer with friends I haven't seen for a while because of my internship abroad, we head back home with the last tramway and went to bed for a very short night, but ready for an adventurous weekend in Germany.

# · Lire toute l'histoire · Aucun commentaire
mardi 28 avril 2009

Enable the card reader on Dell 2408WFP displays under Linux

I recently bought two Dell 2408WFP displays in replacement of my two BenQ FP91GX+. Switching from a dual 19" to a dual portrait 24" setup really makes a difference. Although the portrait mode has some disadvantages when watching movies (which I rarely do on my computer anyways) or when playing games, it comes really handy when I work, which given that I work at home is the vast majority of my time in front of my computer.

Anyways, these two new kick-ass screens bundle each a 4-port USB hub and a 9-in-2 memory card reader. After plugging each screen to the computer with the client USB cable (standard-B connector), the two USB ports in the back and the two ports on the side -- well, on the top when using the screen in portrait mode -- become immediately usable. But strangely, although being detected, the memory card slots didn't work out of the box.

After spending some time looking on the web for a solution out there, I didn't found anything. Which was very frustrating, since I know for a fact that these slots work on Linux as I already used them on my workstation back at Google on a similar display. I came back today looking for a solution, and finally found one!

The card reader appears like a SCSI device over USB, very much like all external card readers out there. But ironically, the one in the Dell display is more cleverly designed than the other and does not use one SCSI standalone device per card slot. Instead, it uses two distinct LUN (Logical Unit Number) on the same device ID. And my kernel didn't have the Probe all LUNs on each SCSI device option enabled. So the kernel ended up only seeing the first LUN of the card reader, which was the Compact Flash slot and not the SD slot that I needed.

After selecting the proper configuration option in my kernel (CONFIG_SCSI_MULTI_LUN=y), each card reader is now detected perfectly and work as expected:

scsi 6:0:0:0: Direct-Access     Generic  Flash HS-CF      5.39 PQ: 0 ANSI: 0
sd 6:0:0:0: [sdc] Attached SCSI removable disk
sd 6:0:0:0: Attached scsi generic sg2 type 0
scsi 6:0:0:1: Direct-Access     Generic  Flash HS-COMBO   5.39 PQ: 0 ANSI: 0
sd 6:0:0:1: [sdd] Attached SCSI removable disk
sd 6:0:0:1: Attached scsi generic sg3 type 0
usb-storage: device scan complete
scsi 7:0:0:0: Direct-Access     Generic  Flash HS-CF      5.39 PQ: 0 ANSI: 0
sd 7:0:0:0: [sde] Attached SCSI removable disk
sd 7:0:0:0: Attached scsi generic sg4 type 0
scsi 7:0:0:1: Direct-Access     Generic  Flash HS-COMBO   5.39 PQ: 0 ANSI: 0
sd 7:0:0:1: [sdf] Attached SCSI removable disk
sd 7:0:0:1: Attached scsi generic sg5 type 0
usb-storage: device scan complete

And after plugging in an SD card:

sd 6:0:0:1: [sdd] 3921920 512-byte hardware sectors: (2.00 GB/1.87 GiB)
sd 6:0:0:1: [sdd] Write Protect is off
sd 6:0:0:1: [sdd] Mode Sense: 23 00 00 00
sd 6:0:0:1: [sdd] Assuming drive cache: write through
 sdd: sdd1 sdd2

Yay :) I can now definitely junk that stupid (and slow) external card reader that never managed to register with the same device name.

# · Un commentaire
samedi 25 avril 2009

A migré !

Je me sépare de frog, mon serveur. Après 6 ans de bons et loyaux services, dont plus de deux hébérgé par eNiX dans leur datacenter, j'ai décidé de couper le cordon et de passer sur un Kimsufi pour ne plus avoir à m'occuper du matériel. L'économie réalisée est aussi non-négligeable, avec un hébergement deux fois moins cher et quelques services en plus (reboot sur un système rescue, monitoring, trafic illimité, etc).

J'ai donc commandé mon dédié cette semaine et j'ai progressivement migré mes services sur cette nouvelle machine, nommée glau. La migration est désormais terminée, et les enregistrements DNS devraient être déjà bien propagés pour pointer sur ma nouvelle IP.

Un grand merci à Jérôme et eNiX en général pour avoir hébergé frog pendant ces nombreux mois et tous cas. Je vais pouvoir déracker mon ancien serveur au plus vite, et j'ai même déjà trouvé un repreneur !

Au passage, j'en ai profité pour refaire les certificats SSL utilisés sur Bulix.org pour le web et l'IMAPS. Il s'agit maintenant de certificats signés par StartSSL, et donc reconnus comme valides directement par les navigateurs. Vous trouverez comme toujours leurs fingerprints SHA1 sur bulix.org/about.html.

Si vous remarquez une quelconque anomalie sur les services Bulix.org, n'hésitez pas à me le faire savoir !

# · Aucun commentaire

Amélioration de la syndication dans Zwe

Encore quelques développements dans Zwe. J'ai abandonné le format RSS 2.0 pour les flux et je suis passé à Atom. Depuis une dizaine de jours, j'ai donc apporté quelques touches ici et là pour peaufiner le support des flux Atom pour Zwe, qui est maintenant terminé.

Les adresses des flux ont changé, les adresses en .../rss n'étant plus vraiment cohérentes. Elles sont donc maintenant en .../feed comme vous pouvez le voir sur la page Syndication. Rassurez-vous, les adresses en .../rss marchent encore jusqu'à la prochaine version et émettent un 301 Moved Permanently adéquat.

Les modules impactés sont ceux qui offraient des flux RSS, à savoir le module Blog et le module Fortunes. Ils ont tous les deux été mis à jour et la révision 2007 dans le dépôt Subversion (trunk/) contient tous ces changements.

Tous ces récents changements dans Zwe vont peut-être me faire sortir en avance (ou très très en retard, question de point de vue) la version 2.6 de Zwe, et enchaîner sur une 2.7 un peu plus tard dans l'année.

# · Aucun commentaire

TwinView, RANDR et mode portrait

Il y a peu, je me suis offert mon auto-cadeau de diplôme. Éventuellement à l'occasion il faudrait que j'en mette ici une photo. Bref, je me suis payé deux écrans Dell 24", modèles 2408WFP. Deux très bons écrans, avec plein d'entrées (2xDVI, VGA, HDMI et DisplayPort), la capacité de passer en mode portrait et surtout le Picture-in-Picture, très pratique pour mon travail car il me permet d'avoir l'output video de mon target dans un coin de l'écran.

Vous l'aurez compris, j'utilise ces écrans en mode portrait, ce que je trouve bien plus commode pour travailler, lire du code, de la documentation ou surfer sur le Web en général. En effet, ces deux écrans en mode paysage cote à cote seraient beaucoup trop larges (a moins de les utiliser l'un sur l'autre comme je le faisais à Google avec deux support-bras).

La configuration de Xorg pour cela est un peu complexe. En effet, le driver nVidia qui nous fait le TwinView supporte très bien la rotation de l'écran, mais selon le mode utilisé vous pouvez perdre le support de l'extension RANDR. Vous avez le choix entre l'option RandRRotation, qui active le support de la rotation dans l'extension RANDR, mais ne tourne pas l'écran -- votre serveur X démarre donc à 90 degrés vu que vos écrans sont physiquement en mode portrait ! L'autre solution est d'utiliser l'option Rotate, qui effectue la rotation dès le lancement du serveur X, mais désactive l'extension RANDR (ce qui peut malheureusement rendre quelques applications tatilleuses).

Bref, la solution est en fait simple. Configurez Xorg avec l'option RandRRotation, comme ceci:

Section "Device"
        Identifier   "nVidia GeForce 9600GT"
        Driver       "nvidia"
        Option       "CursorShadow"             "true"
        Option       "RenderAccel"              "true"
        Option       "AllowGLXWithComposite"    "true"

        Option       "TwinView"                 "true"
        Option       "TwinViewOrientation"      "Above"

        Option       "SecondMonitorHorizSync"   "30-120"
        Option       "SecondMonitorVertRefresh" "50-90"
        Option       "MetaModes"                "1920x1200,1920x1200"

        Option       "RandRRotation" "on"
EndSection

Puis, si vous n'utilisez pas de display manager (type GDM), rajoutez xrandr -o left à votre ~/.xinitrc. Par contre, si vous utilisez GDM, rajoutez le bout de code suivant vers la fin de /etc/gdm/Init/Default :

XRANDR=`gdmwhich xrandr`
if [ "x$XRANDR" != "x" ] ; then
  # Rotate screen left
  $XRANDR -o left
fi

La rotation sera donc effectuée directement par GDM au lancement du serveur X, et vous pourrez ainsi profiter du login manager dans le bon sens et de l'extension RANDR :)

# · Aucun commentaire

1 · 2 · ... · 60 · 61