BCM4313 802.11bgn Wireless Network Adapter et Freebox

Je cherchais depuis des années comment faire fonctionner le driver b43 de mon linux avec mon réseau WIFI local.

La connexion était systématiquement interrompue lors de l'échange du mot de passe:

   kernel: wlp3s0b1: deauthenticated from xx:xx:xx:xx:xx:xx (Reason: 2=PREV_AUTH_NOT_VALID)

La solution serait aussi simple que ajouter le bon paramètre pour le module cfg80211 (sur ma Fedora dans /etc/modprobe.d/openfwwf.conf):

   options cfg80211 ieee80211_regdom=EU

Ajouter un flux de sous-titre dans une vidéo MP4

Facile avec gstreamer, au passage on convertit le conteneur au format Matroska sans réencoder la vidéo ou le son:

#!/bin/sh
SRC="$1"
SUB="$2"
DEST="$3"

if [ -f "$DEST" ] ; then
        echo "$DEST exists, abort!" 1>&2
        exit 1
fi

gst-launch-1.0 filesrc location="$SRC" ! qtdemux name=demux ! multiqueue \
                                       ! audio/mpeg,mpegversion=4 \
                                       ! mux. \
                                         demux. ! multiqueue \
                                       ! video/x-h264 \
                                       ! mux. \
               filesrc location="$SUB" ! subparse \
                                       ! kateenc language=fr category=SUB \
                                       ! mux. \
               matroskamux name=mux ! queue ! filesink location="$DEST"

Et si maintenant on se faisait une machine virtuelle...

Maintenant qu'on a un environnement de build complet, on se dit qu'il serait sympa de pouvoir s'y connecter facilement à distance.

Pourquoi ne pas y faire tourner un démon SSH ?

Mais un chroot ne fournit pas assez d'isolation et le processus sshd de cet environnement entrerait en conflit avec le processus sshd de la machine hôte.

Ce qu'il nous faut c'est un super-chroot : les conteneurs linux.

Procédons par étape:

1. il faut préparer la pile réseau à l'utilisation d'un conteneur en utilisant une interface bridge:

on remplace l'interface eth0 par br0 dans /etc/network/interfaces

vi /etc/network/interfaces
auto br0
iface br0 inet dhcp
    bridge_ports eth0

puis

service networking restart

2. monter le système de fichiers virtuel "cgroup"

echo "none /cgroup cgroup rw 0 0" >> /etc/fstab
mount /cgroup

3. installer le package lxc

apt-get install lxc

4. pour pouvoir exécuter le /sbin/init de la machine cible, il faut désactiver udev

chroot /ppc
update-rc.d udev disable

on en profite pour donner un mot de passe à l'utilisateur qu'on avait créé :

passwd laurent

et un shell plus sympa :

chsh -s /bin/bash laurent

et pour ajouter un écran de login sur la console

vi /etc/inittab
c:2345:respawn:/sbin/getty 38400 console

et chose essentielle, configurer le réseau :

vi /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.100.124
    netmask 255.255.255.0
    gateway 192.168.100.254

NOTE: mon réseau local pour br0 est de type 192.168.100/24

5. On peut enfin passer aux choses sérieuses, configurer le conteneur :

on crée un fichier de configuration "lxc-ppc.conf":

lxc.utsname = virtppc
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.rootfs = /ppc
lxc.pts=1023

On crée la "machine virtuelle" :

lxc-create -n virtppc -f lxc-ppc.conf

si on ne l'a pas déjà fait on monte /home sur /ppc/home :

mount -B /home /home/ppc

et on démarre la machine virtuelle :

lxc-start -n virtppc

6. On peut enfin faire le ssh tant désiré :

$ ssh 192.168.100.124
Linux Quad 2.6.38-13-generic #57-Ubuntu SMP Mon Mar 5 18:29:54 UTC 2012 ppc
.
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Sep  8 20:25:42 2012 from 192.168.100.1
laurent@Quad:~$ uname -m
ppc

et voilà...

Comment construire un environnement de build croisé

J'aime beaucoup compiler des noyaux ou des firmwares pour des architectures exotiques : il y a un mois, c'était pour compiler un noyau linux pour un macintosh quadra (m68k), la semaine dernière un noyau linux pour mon APC (arm), aujourd'hui j'aimerais recompiler OpenBIOS (ppc).

Mais installer un compilateur croisé et tout son environnement est souvent un parcours semé d'embûches.

J'ai donc choisi une autre approche : recréer une arborescence de fichiers de l'architecture cible et exécuter le compilateur natif en utilisant qemu-linux-user.

1. recréer une arborescence de fichiers

sudo mkdir /ppc
sudo debootstrap --arch=powerpc --foreign squeeze /ppc \
                           http://ftp.debian.org/debian

2. compiler qemu

On clone à partir de mon dépot qui contient un ou deux patches pour nous simplifier la vie.

git clone git://gitorious.org/qemu-m68k/qemu-m68k.git qemu
cd qemu
git checkout default-cpu
mkdir build-ppc
cd build-ppc
../configure  --target-list=ppc-linux-user \
                   --ppc-default-cpu=750 --static
make

3. ensuite on copie le binaire de qemu dans l'arborescence cible :

sudo cp ppc-linux-user/qemu-ppc /ppc/usr/bin/

4. on configure le kernel pour qu'il utilse /usr/bin/qemu-ppc comme loader des ELF powerpc:

sudo ../scripts/set_binfmt ppc

5. on rentre dans l'arborescence cible et on finit le bootstrapping :

sudo chroot /ppc
I have no name!@Quad:/#  ./debootstrap/debootstrap \
                                             --second-stage

6. On sort puis on rentre à nouveau pour avoir un environnement à jour

7. On édite /etc/apt/sources.list pour pouvoir faire des apt-get

cat > /etc/apt/sources.list <<!EOF
deb http://ftp.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.debian.org/debian/ squeeze main contrib non-free
!EOF
apt-get update

on en profite pour installer les packages nécessaires pour compiler OpenBIOS:

apt-get install subversion make xsltproc gcc

9. on se crée un utilisateur

useradd laurent

et on vérifie dans /etc/passwd que l'id est bien le même dans l'environnement de build que sur la machine hôte.

10. on monte "/home" dans l'environnement de build

sudo mount -B /home /ppc/home

11. on utilise ce nouvel utilisateur dans l'environnement de build

sudo chroot /ppc su -s /bin/bash -l laurent

12. on peut enfin compiler openbios:

svn co svn://openbios.org/openbios/trunk/openbios-devel
cd openbios-devel
./config/scripts/switch-arch  qemu-ppc
make

et voilà...

Orange m'a tuer

J'étais un client fidèle... 12 ans quand même.

Il y a 12 ans, donc, les opérateurs de téléphonie se livraient une guerre sans merci. Mon forfait "1 heure" voyaient son prix fondre régulièrement pour s'aligner sur celui de la concurrence sans que j'ai à demander quoi que ce soit. Ma fidélité avait même été reconnue au bout de 2 ans (!) : on m'offrait pour me remercier 15 % de communication en plus pour le même prix.

Puis un jour tout cela s'est arrêté. Si j'étais mauvaise langue (la mémoire à mon âge n'est plus ce qu'elle était), je dirais que c'était aux environ de l'année 2005. Et depuis, mon opérateur, Orange, traînait mon forfait bloqué "1 heure" à 15 euros comme un fardeau. Pour preuve, lorsque je demande "Pourrais-je avoir une puce jumelle pour mettre dans le téléphone de ma voiture ?", on me répond "c'est 11 euros mais vous devez tout d'abord changer de forfait.". Au final, j'ai préféré prendre un deuxième abonnement à 7 euros (puis ensuite à 1,5 euro chez prixtel).

Puis Orange m'a trahi, une première fois.

Orange lance les points de fidélité (ça tombe bien, je le suis). C'est marqué "cliquez-là et vous aurez des points de fidélité vous permettant d'avoir des cadeaux". Bêtement, je clique (j'aime bien cliquer). Ce qui devait être marqué en bas, en petit, et que je n'avais pas lu, devait expliquer que je perdais pas la même occasion mes 15% de communication en plus sans possibilité de revenir en arrière. Des points qui ne m'ont jamais servi (j'ai bien essayé mais ça n'avait pas l'air de fonctionner : un forfait trop ancien ?). Mais tout ceci est un détail, puisque l'an dernier ces points de fidélité ont été supprimés, sans remplaçant...

Puis Orange m'a trahi, une deuxième fois.

"Bonjour M. Vivier. Orange, pour vous remercier de votre fidélité, 5 ans quand même, vous offre 40 SMS par mois pendant 3 mois, les voulez-vous ?". Moi :"Oui, bien sûr, si c'est gratuit". J'ai donc eu mes 40 SMS par mois. Vivre dans l'opulence m'a toujours plu : j'envoie 5 SMS par mois, alors 40 SMS gratuits, c'est vraiment le paradis sur terre. C'est lorsque j'ai reçu ma facture du 4ème mois que j'ai réalisé que Orange ne faisait pas réellement de cadeau sans idée derrière la tête: l'option "40 SMS/mois" ne s'arrête pas avec la fin de la gratuité... option résiliée aussitôt. Ils ont réessayé l'année d'après, toujours pour me remercier de ma fidélité, mais j'ai expliqué à la gentille opératrice que je n'aimais pas les cadeaux...

Ca fait 6 ans : ils ne m'appellent plus...

Puis Orange m'a trahi, une troisième fois.

Chouette, une option "internet illimité" à 9 euros/mois. Je prends. Ca va être parfait avec mon iPhone 3G (que j'ai quand même payé 400 euros en me réengageant 1 an...). Pourquoi Orange m'a t'il trahi ici ? Parce que la 3G est donnée pour 2 Mb/s et qu'avec cette option je n'ai jamais pu dépasser les 380 kb/s.

Et comme dans un vieux couple, j'ai essayé de semer quelques indices pour faire deviner mon mal-être. L'été dernier j'ai demandé le désimlockage de mon iPhone (pour être plus précis, j'ai expliqué à l'opérateur comment il devait faire pour désimlocker mon iPhone). Pas de réaction. En fin d'année, j'ai demandé mon numéro RIO. Toujours rien. Pas de réaction. Pas un opérateur pour me rappeler combien ma fidélité (12 ans quand même) était importante à leurs yeux.

Au cours d'une conversation amicale devant une ou deux (ou trois) bières, un salarié d'un concurrent m'a expliqué que je n'étais pas la cible, que comme la mamie du Cantal, je n'étais pas intéressant : je ne dépasse jamais mon forfait qui est pourtant ridiculement petit, que je ne change pas assez souvent de téléphone. Ca tombe bien, je ne veux pas être une cible. Mais qui veut de moi ?

Et puis Free est arrivé. J'ai maintenant un forfait à 16 euros, tout illimité (si on compare à l'illimité au sens "Orange" du terme). Et plus, ma fidélité ne les intéresse pas...

Connecter un arduino à une horloge atomique...

Pour 25 euros, il est possible de synchroniser son PC sur une horloge atomique.

Le signal émis depuis Mainflingen couvre une grande partie de l'Europe.

C'est ce signal qui maintient à l'heure mon horloge Horloge radio-piloté et ma montre montre radio-piloté.

Je me suis donc procuré :

Arduino nano 3.0

Récepteur DCF77 Conrad

  • et quelques fils.

Les branchement sont très simples :

  • DCF77 broche 1 sur la masse de l'arduino
  • DCF77 broche 2 sur le 5V de l'arduino
  • DCF77 broche 3 sur la pinoche digital D2 de l'arduino

(pas besoin de pull-up externe, on active celui de l'ATMega 328).

arduino + DCF77

Ensuite, il faut bien sûr un peu de code, qu'on trouve à cet endroit:

arduino-dcf77

Si on modifie le mode dans le fichier (MODE 0), on peut avoir quelque chose de lisible :

ttyUSB0

Il faut attendre environ deux minutes pour que l'arduino se synchronise sur l'horloge.

On peut maintenant synchroniser notre serveur NTP en recompilant en mettant en mode MEINBERG (MODE 1).

La config NTP est la suivante :

1. créer un lien soft (à chaque redémarrage):

ln -s /dev/ttyUSB0 /dev/refclock-0

2. si apparmor tourne, permettre l'accès à /dev/ttyUSB0 pour ntpd

vi /etc/apparmor.d/usr.sbin.ntpd

on rajoute la ligne :

/dev/ttyUSB* rw,

3. configurer NTP pour utiliser le protocole MEINBERG DFC77

server 127.127.8.0 mode 2
fudge 127.127.8.0 stratum 1

4. on redémarre NTP:

service ntp restart

Ce qui nous donnera : NTP DCF77

Quelques liens utiles: http://www.ardiehl.de/dcf77usb

Pic de pollution à Grenoble

Pour ceux qui veulent plus de détails sur la pollution:

Observatoire de l'air en Rhone-Alpes

Les causes de l'alerte actuelle est la présence excessive de particules PM10:

Communiqué du 29 novembre 2011

Ces particules sont cancérigènes:

Risques de cancers et particules fines

"Les moteurs diesels rejettent 87% des particules issues du trafic routier." (et 12 % pour les essences non catalysées, et donc 1% pour les essences catalysées).

mais:

Plan de protection de l’atmosphère de Grenoble

"52% des émissions sont dues aux activités de l'industrie manufacturière. 26% de du transports routier et 14% du résidentiel/tertiaire"

Il nous faut une nouvelle révolution

De plus en plus, je trouve sur le web des références à des textes datant de la révolution française pour commenter des faits d'actualité:

Nous voulons substituer, dans notre pays, la morale à l’égoïsme, la probité à l’honneur, les principes aux usages, les devoirs aux bienséances, l’empire de la raison à la tyrannie de la mode, le mépris du vice au mépris du malheur, la fierté à l’insolence, la grandeur d’âme à la vanité, l’amour de la gloire à l’amour de l’argent, les bonnes gens à la bonne compagnie, le mérite à l’intrigue, le génie au bel esprit, la vérité à l’éclat, le charme du bonheur aux ennuis de la volupté, la grandeur de l’homme à la petitesse des grands, un peuple magnanime, puissant, heureux, à un peuple aimable, frivole et misérable, c’est-à-dire, toutes les vertus et tous les miracles de la République, à tous les vices et à tous les ridicules de la monarchie.

Discours à la Convention nationale sur les principes de morale politique qui doivent guider la Convention nationale dans l'administration intérieure de la République le 5 février 1794, Maximilien De Robespierre

Pour qu’un écrivain remplisse dignement sa mission, il faut qu’il s’élève au-dessus des préjugés des hommes, qu'il ait le courage de leur déplaire pour leur être utile ; il faut, en un mot, qu’il les gouverne moralement (...) Or, que devient ce droit de commandement si l’homme de lettres descend à l’exercice d’un métier, s’il ne fait plus des livres que pour amasser des capitaux ? S’asservir aux goûts du public, flatter ses préjugés, alimenter son ignorance, transiger avec ses erreurs, entretenir ses mauvaises passions, écrire enfin tout ce qui lui est funeste, mais agréable... telle est la condition nécessaire de quiconque a du génie pour de l’argent.

"De la propriété littéraire", Louis Blanc, 1839

Allons nous devoir couper des têtes pour retrouver dans notre nation un semblant d'honnêteté, d'honneur et d'égalité ?

Compilation croisée powerpc sur Ubuntu Karmic (1ère partie)

Pour générer un paquetage binutils (qui contient l'assembleur) permettant la génération de code powerpc à partir d'une Ubuntu Koala Karmic, les étapes suivantes sont nécessaires.

Il faut tout d'abord installer les paquetages nécessaires à la compilation :

sudo apt-get build-dep binutils

On télécharge le dernier paquetage supporté par debian powerpc:

wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.20.1.orig.tar.gz
wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.20.1-3.dsc
wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.20.1-3.diff.gz

Ensuite on extrait tous les fichiers nécessaires à la recompilation:

dpkg-source -x binutils_2.20.1-3.dsc

Puis on lance la compilation et la génération des paquetages:

cd binutils-2.20.1/
TARGET=powerpc fakeroot debian/rules binary-cross
TARGET=ppc64 fakeroot debian/rules binary-cross
cd ..
sudo dpkg -i binutils-powerpc-linux-gnu_2.20.1-3_amd64.deb
sudo dpkg -i binutils-powerpc64-linux-gnu_2.20.1-3_amd64.deb

Nous pouvons maintenant passer à la suite: générer le compilateur C...

Compilation croisée m68k sur Ubuntu Karmic (2ème partie)

Une fois le paquetage binutils-m68k-cross installé, nous allons nous atteler à la création d'un compilateur croisé m68k.

Avant de générer et d'installer le compilateur, nous allons installer les bibliothèques nécessaires au développement. Pour cela, l'outil "apt-cross" permet d'aller chercher les paquetages choisis dans l'architecture voulu (m68k dans notre cas) ainsi que toutes les dépendances, et de l'installer sur notre système (i386).

sudo apt-get install apt-cross

Ubuntu ne fournissant pas de paquetage m68k, nous allons devoir aller les chercher dans la distribution debian, pour cela, nous modifions temporairement notre fichier /etc/apt/sources.list:

deb http://ftp.fr.debian.org/debian/ etch-m68k main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ etch-m68k main contrib non-free

et nous téléchargeons la clé signant les paquetages Debian:

gpg --recv-key --keyserver wwwkeys.eu.pgp.net 9AA38DCD55BE302B
gpg --export --armor 9AA38DCD55BE302B|sudo apt-key add -

Ensuite nous pouvons "cross-installer" les paquetages m68k:

apt-cross -a m68k --suite etch-m68k -u
apt-cross -a m68k --suite etch-m68k -i libc6 libc6-dev linux-kernel-headers
apt-cross -a m68k --suite etch-m68k -i libmudflap0-dev libmudflap0
apt-cross -a m68k --suite etch-m68k -i gcc-4.1-base

ATTENTION: Il faut ensuite enlever de notre /apt/sources.list les lignes que nous avons rajouter car elles perturbent le fonctionnement normal du apt-get natif.

Nous pouvons maintenant compiler un gcc croisé.

Nous tirons tout d'abord les dépendances nécessaires à la recompilation:

sudo apt-get build-dep gcc-4.1

Comme pour binutils, nous prenons la version de gcc livré par etch-m68k et non celle livrée par ubuntu karmic:

sudo apt-get install expect-tcl8.3
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2-21.dsc
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2-21.diff.gz
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2.orig.tar.gz
dpkg-source -x gcc-4.1_4.1.1ds2-21.dsc 
cd gcc-4.1-4.1.1ds2/

Il faut ensuite faire quelques modifications dans les scripts Debian, les quelques commandes suivantes le font de manière automatique :

sed -i "s/PV-base/PV-base-m68k-cross/" debian/control.m4

for name in svn-doc-updates \
            rename-info-files \
            libjava-doc-backport \
            libjava-backport3 \
            libjava-subdir \
            libjava-lib32-properties \
            pr25524-doc \
            pr26885-doc \
            classpath-tooldoc
do
    sed -i "s/$name//" debian/rules.patch
done

sed -i "/dh_shlibdeps/s/^.*(\([^)]*\)).*$/\techo \"shlibs:Depends=libc6 \(>= 2.3.6\)\" > debian\/\$(\1).substvars/p" debian/rules.d/binary-libstdcxx-cross.mk

sed -i "/dh_shlibdeps/s/^.*(\([^)]*\)).*$/\techo \"shlibs:Depends=libc6 \(>= 2.3.6\)\" > debian\/\$(\1).substvars/p" debian/rules.d/binary-libgcc-cross.mk

On peut démarrer la compilation en ayant pris soin d'indiquer l'architecture cible:

echo "m68k" > debian/target
dpkg-buildpackage -rfakeroot

Ensuite, il suffit de remonter dans le répertoire père et d'installer les paquetages générés:

cd ..
sudo dpkg -i cpp-4.1-m68k-linux-gnu_4.1.1-21_i386.deb \
             g++-4.1-m68k-linux-gnu_4.1.1-21_i386.deb \
             libgcc2-m68k-cross_4.1.1-21_all.deb \
             libstdc++6-4.1-dev-m68k-cross_4.1.1-21_all.deb \
             libstdc++6-m68k-cross_4.1.1-21_all.deb \
             gcc-4.1-m68k-linux-gnu_4.1.1-21_i386.deb

Compilation croisée m68k sur Ubuntu Karmic (1ère partie)

Pour générer un paquetage binutils (qui contient l'assembleur) permettant la génération de code m68k à partir d'une Ubuntu Koala Karmic, les étapes suivantes sont nécessaires.

Il faut tout d'abord installer les paquetages nécessaires à la compilation :

sudo apt-get build-dep binutils

Le but étant de générer des binaires pour une debian etch, on télécharge les paquetages source correspondants à la suite etch-m68k, soit les sources du paquetage binutils_2.17-3_m68k.deb.

wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.17.orig.tar.gz
wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.17-3+etch1.dsc
wget ftp://ftp.fr.debian.org/debian/pool/main/b/binutils/binutils_2.17-3+etch1.diff.gz

Ensuite on extrait tous les fichiers nécessaires à la recompilation:

dpkg-source -x binutils_2.17-3+etch1.dsc

On se place ensuite dans le répertoire puis on applique le patch suivant: binutils-2.17-3_etch1-cross.patch

Puis on lance la compilation et la génération des paquetages:

wget http://blog.vivier.eu/public/binutils-2.17-3_etch1-cross.patch
cd binutils-2.17/
patch -p1 < ../binutils-2.17-3_etch1-cross.patch
TARGET=m68k fakeroot debian/rules binary-cross
cd ..
sudo dpkg -i binutils-m68k-linux-gnu_2.17-3_etch1_i386.deb

Nous pouvons maintenant passer à la suite: générer le compilateur C...

La femme sera vraiment l'égal de l'homme...

Christine Albanel sera nommée Directrice exécutive, en charge de la Communication, du Mécénat et de la Stratégie dans les Contenus. Christine Albanel se verra également confier à terme la Communication interne du Groupe (France Télécom).

Communiqué de presse

J'espère que sa compréhension du monde des télécoms a évolué depuis l'an dernier...

- page 1 de 4