KubuntuBlog

T'as pas besoin d'un flash quand tu photographies un lapin qui a
déjà les yeux rouges. Pierre Légaré

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 4 décembre 2009

gcal : Éphémérides solaires

sunrise De nombreux sites existent permettant de trouver les heures de lever et de coucher du soleil. De même en cherchant 30s on trouve très facilement les calculs nous permettant de ré-implémenter l'algorithme. Mais plutôt que de réinventer la roue, nous allons utiliser le méconnu gcal pour trouver les heures cherchées. En fait, gcal n'est pas si méconnu que cela, mais on s'arrête souvent à sa 1ère fonction : afficher un calendrier.

$ gcal

Décembre 2009

Lundi          7 14 21 28
Mardi       1  8 15 22 29
Mercredi    2  9 16 23 30
Jeudi       3 10 17 24 31
Vendredi    4 11 18 25
Samedi      5 12 19 26
Dimanche    6 13 20 27

Voir pour les plus courageux, calculer les jours de fête de l'an prochain :

$ gcal -qfr --holiday-list 2010
...
Liste permanente des jours de fête:       L'année 2010 N'EST PAS une année bissextile.

Jour de l'An (FR)                        + Ve,   1 Jan 2010
Quinquagesima Sunday (FR)                - Di,  14 Fé 2010
Vendredi Saint (FR)                      * Ve,   2 Avr 2010
Dimanche de Pâques (FR)                 + Di,   4 Avr 2010
Lundi de Pâques (FR)                    + Lu,   5 Avr 2010
Fête du Travail (FR)                    + Sa,   1 May 2010
Jour de la Victoire (FR)                 + Sa,   8 May 2010
Ascension du Christ (FR)                 + Je,  13 May 2010
Dimanche de la Pentecôte (FR)           + Di,  23 May 2010
Lundi de la Pentecôte (FR)              + Lu,  24 May 2010
Fête Nationale (FR)                     + Me,  14 Jui 2010
Ascension de la Vierge (FR)              + Di,  15 Août 2010
Toussaint (FR)                           + Lu,   1 Nov 2010
Jour de l'Armistice (FR)                 + Je,  11 Nov 2010
Veille de Noël (FR)                     - Ve,  24 Dé 2010
Fête de Noël (FR)                      + Sa,  25 Dé 2010
Boxing Day (FR)                          * Di,  26 Dé 2010
Sylvester/New Year's Eve (FR)            - Ve,  31 Dé 2010

Or il est bien encore plus puissant que cela ! La preuve ? a quelle heure se couche le soleil à Paris aujourd'hui ?

$ gcal -c -#'0*d1#999_%s4+485124+0022107,+01:'

Fixed date list:

Je,   3 Dé 2009: 16:53

ne fuyez pas :) nous allons détailler. konsole

  • -c : passer en mode date fixe. C'est un mode qui permet d'associer du texte à une date indépendamment de l'année, du mois ... Ces dates/textes sont définies dans des fichiers de ressources avec une syntaxe particulière. Typiquement, le 14 juillet ou un anniversaire seront définit ainsi.
  • -# : va nous permettre de définir une date fixe sans passer par un fichier de ressource, mais directement sur la ligne de commande.
  • 0*d1#999 : la, c'est la partie peu claire. normalement, ici on définit la date fixe suivant ce format. mais nous sommes dans un cas particulier, nous voulons que cette ligne de texte soit valable pour tous les jours de l'année (le soleil se couche tous les jours ![1]). Pour cela il faut utiliser cette chaine de caractères.
  • _ : cet underscore représente un espace séparateur entre la date et le texte associé
  • %s4+485124+0022107,+01: : voici la magie, cette chaine dit à gcal de calculer des données en rapport avec le soleil :
    • s : coucher de soleil (o pour le lever)
    • 4 : calcul à réaliser. Ici quand le centre du soleil passe à 34'[2] sous l'horizon et disparait. la réfraction est prise en compte.
    • +485124+0022107 : les coordonnées géographiques de Paris au format ISO 6709:1983 (voir aussi) soit :
      • +485124 : 48°51'24' N
      • +0022107 : 2°21'07'' E[3]
    • ,+01: : le décalage horaire par rapport à l'UTC pour l'avoir en heure locale[4]

Et voila ! Vous voyez ce n'est pas si compliqué[5] !

Maintenant, on peut varier un peu les plaisirs :

$ C='+4844-0032715' # Lannion
$ TZ=$(date +%:z)
$ gcal %20091204 -cQUx -#"0*d1#999_%o4${C},${TZ}__-_%s4${C},${TZ}"
08:51 - 17:17

Demain, à Lannion, le soleil sera visible de 8h51 à 17h17.

Ah oui, les nouvelles options :

  • C='+4844-0032715' : une variable qui contient nos coordonnées, j'aime pas écrire deux fois la même chose
  • TZ=$(date +%:z) : une variable qui contient le décalage heure locale/UTC soit +01:00. man date pour plus d'infos[6]$
  • %20091204 : permet de fixer la date du calcul
  • Q : on supprime l'affichage des lignes blanches
  • U : on supprime l'affichage de la date

Si l'on continue, on peut avoir les heures de la lune : moon

$ gcal %20091204 -cQUx -#"0*d1#999_%(4${C},${TZ}__-_%)4${C},${TZ}"
19:38 - 11:07

Les phases de lune

$ gcal %20091225 -cQUx -#"0*d1#999_%Z" --moonimage-lines=10
(je laisse la surprise)

Et plein d'autre choses encore comme --limit, --atmosphere les calculs de distances, de biorythme ...

Pour finir quelques liens :

Notes

[1] on verra les pôles plus tard

[2] des minutes d'arc bien sur !!

[3] Les coordonnées viennent de Wikipedia

[4] heure d'hiver: UTC+1

[5] et puis c'est moi qui ai passé les heures dans la doc pour trouver tous ces détails :)

[6] A noter, --time-offset devrait faire la même chose, mais je n'ai pas réussit, si quelqu'un a une explication ...

lundi 7 septembre 2009

#songsincode

Le nouveau jeu qui fait fureur sur twitter. Comme j'ai pas de twitter, je met mes 1ères créations ici.

we &= ~(education | thought_control)
kids -= teachers
wall += brick

ref

fringues = ['blue jean', 'blouson', 'bottes']
a_poil = lambda: len(fringues) == 0
while not a_poil():
  if baston.laisse_beton():
    fringues.pop()

ref

if personne.type == gorille:
  personne.viole(juge)
else:
  personne.viole(vieille)

ref

while True:
  au_suivant()

ref

assert type(bourgeois) is type(cochon), "never append"
while not bourgeois.mort():
  bourgeois.con += 1

ref

via BBB

mercredi 5 août 2009

Jaunty, digikam et KDE 4.3 sont dans un bateau ...

/!|GATTENTION, les manipulations indiquées dans cet articles sont risquées. Il est possible qu'elles rendent votre système instable et que certaines applications ne fonctionnent plus correctement. De plus il implique l'installation de paquets non supportés par ubuntu. Vous êtes prévenus !

Si vous utilisez les backports de kubuntu jaunty pour KDE 4.3, vous avez surement remarqué que digiKam est cassé[1]. Plus aucune photo ne s'affiche et les albums sont vides. pourtant en regardant dans la base sqlite, tout le monde est bien présent.

Comme il s'agissait de versions beta puis RC, je ne m'était pas trop intéressé au problème jusqu'à présent. Mais la, nous avons maintenant la version finale de KDE 4.3, le problème persiste et surtout mes photos non classées s'accumulent ! :(

En cherchant un peu, nous trouvons les messages d'erreurs fautifs dans le ~/.xsession-errors

Could not open library '/usr/lib/kde4/kio_digikamalbums.so'.
Cannot load library /usr/lib/kde4/kio_digikamalbums.so: (/usr/lib/libdigikamcore.so.1: undefined symbol: _ZN6Marble12MarbleWidget16addPlaceMarkDataERK7QStringS3_)

Visiblement il s'agit d'un problème de dépendances entre digiKam et les bibliothèques de KDE 4.3

A partir de la on trouve effectivement un bug connu pour Karmic et Jaunty Et le bug est propre à Kubuntu (ie: ce n'est pas un bug KDE)

Via le bugreport nous voyons qu'il est résolu pour Karmic, mais pas pour les backports Jaunty.

De la nous avons deux solutions :

  • installer une version de digikam 1.0.0beta1 qui fonctionne
  • recompiler digiKam avec les bibliothèques 4.3

digiKam 1.0.0beta1

Le paquet est disponible dans le dépot backport experimental

Je conseille de ne pas l'ajouter à votre sources.list mais de télécharger les deux paquets nécessaires et de les installer à la main, cela évitera d'installer tout un tas de trucs non voulus. Il s'agit de :

  • digikam - 2:1.0.0jaunty1~ppa1
  • liblqr - 0.4.1-1ubuntu1ppa1

Par contre il s'agit d'une version beta1. Or digiKam 1.0.0 est déjà à la beta3. Donc notre problème est corrigé[2] mais pleins d'autres bugs risquent d'être présents.

Recompiler

Une méthode est proposée la Chez moi cela n'a pas fonctionné tel quel, beaucoup de dépendances ont besoin d'être mises à jour (en particulier QT passe de la version 4.5.0 à la 4.5.2[3]). J'ai donc installé les dépendances de compilation tout seul (pour remplacer le build-dep)

sudo aptitude install cdbs pkg-kde-tools cmake libqt4-dev kdelibs5-dev libgphoto2-2-dev libkipi6-dev libkexiv2-7-dev libkdcraw7-dev liblcms1-dev libtiff4-dev libjasper-dev kdepimlibs5-dev liblensfun-dev libmarble-dev libsqlite3-dev libltdl3-dev

Puis on suit la procédure normale :

apt-get source digikam
cd digikam-0.10.0
dpkg-buildpackage

Armez vous de patience puis installez les paquets ainsi produits.

Et voila ! y'a plus qu'à trier/tagger/géolocaliser quelques centaines de photos :)

Notes

[1] depuis la beta1, quand même

[2] j'ai testé pour vous

[3] voir par exemple les dépots officiels vs backports

mardi 9 décembre 2008

Petite satisfaction

Je suis en train de dépasser mon maitre !

VirtualRegatta

Oui, bon ok, c'est qu'un jeu ou très peu de paramètres sont pris en comptes. Soit juste le vent, le cap et les voiles, pas de courants, pas de réglages de voiles, pas de houle ... Mais je suis quand même en train de passer Bastien[1] :)

Pour une simulation plus correcte je recommande plutôt Virtual Skipper[2] qui tourne bien avec wine et dont la version online est gratuite.

Notes

[1] moi c'est le orange sous spi en bas

[2] délirant, le site est complètement inaccessible chez moi sous firefox 2 ou konqueror !

mercredi 3 décembre 2008

Alimentation de laboratoire pas chère

Quand on fait des petits montages électroniques, une alimentation de laboratoire deviens vite indispensable. Jouer avec des piles et des ponts diviseurs, ça va bien un temps mais cela deviens vite très lourd !

Par contre une vrai alim de labo coute vite des sous. Alors quitte à mettre pas cher, autant mettre rien du tout[1] ! Avec un peu d'astuce, d'espièglerie c'est la vie... heu non. Un peu d'astuce et surtout un bon moteur de recherche peut transformer une vieille alim ATX qui prend la poussière en alim non réglable mais qui nous fournira les tensions les plus courantes[2].

Attention Même débranchée, de fortes tensions mortelles sont présentes dans une alim. Laissez les condensateurs se décharger plusieurs jours avant de l'ouvrir ! Et bien sur faites aussi une croix sur votre garantie :)

Je ne vais re-détailler ici tout le processus, de nombreuses pages existent déjà. Je me contente donc de vous renvoyer vers la page que j'ai principalement utilisée, très claire et détaillée ainsi que sur mon wiki ou j'ai regroupé plusieurs autres liens

Coté matériel, je n'ai eu à acheter que la résistance de puissance à 4.30€, j'ai trouvé tout le reste dans les poubelles[3] ou dessoudé à partir de vieux matos patiemment collecté et stocké. En temps de réalisation, vu mon taux d'occupation actuel, j'ai étalé sur plusieurs semaines, mais ça peut être torché en 2h.

Voici quelques photos commentées. Tout d'abord un petit plan[4] pour le placement Plan

L'essentiel positionné et soudé click La résistance doit être fixée en contact avec la carcasse métallique et dans le chemin du ventilateur pour assurer un bon refroidissement.

Le ventilateur étant particulièrement bruyant, j'ai ajouté un petit interrupteur pour choisir de l'alimenter en 5V (utilisation normale) ou de le repasser en 12V en cas d'utilisation prolongée ou particulièrement consommatrice. Il est soudé sur une plaque à trous ce qui me permet de conserver le connecteur d'origine du ventilateur. Les alims sont repiqués sur les fiches bananes. Comme les LED, il est simplement fixé à la super glue. click

Enfin, le produit fini :) click J'ai conservé les prises Molex pour pouvoir y brancher un disque ou un lecteur CD.

D'autres photos sont disponibles sur le wiki. N'oubliez pas d'isoler vos connections à la gaine thermo ou au scotch d'électricien.

Notes

[1] ou presque

[2] et même du -/+ pour des amplis op.

[3] oui ça aide de travailler dans une boite qui fait du hard, et merci à Jean-Pierre pour la LED jaune

[4] inkscape powered

dimanche 16 novembre 2008

Closest book meme

Comme personne ne m'envoie jamais de chaines, je la fait tous seul :)[1] Pour ma part, elle vient de devloop

Attrapez le livre le plus proche de vous.

  • Ouvrez-le à la page 56.
  • Trouvez la 5ème phrase.
  • Mettez en ligne sur votre blog le texte de cette phrase ainsi que les instructions de la chaine.
  • Ne cherchez pas à prendre votre livre favori ou le plus cool, prenez bien LE PLUS PROCHE.

Allons-y :

Le monde de l'informatique est dominé par l'architecture dite PC héritée des systèmes personnels initialement développés par IBM au début des années 1980.

C'est pas faux :) Citation tirée de Linux embarqué (2ème édition) de Pierre Ficheux. Excellent livre que je vous recommande vivement ! En fait c'est la page 57 car la 56 est vide (tête de chapitre). Cela explique aussi la banalité de la phrase qui ne reflète pas le contenu technique de l'ouvrage.

Bon évidement, à coté du[2] PC ce sont surtout des livres techniques qui trainent. Les deux suivant en ordre de prochitude sont :

  • Rapid GUI programming with Python and Qt de Mark Summerfield
  • almanach du marin breton 2007 :) qui me sert à retrouver les noms de balises pour tagger mes photos. Sa page 56 contient les marées de Cherbourg.

Notes

[1] en fait je m'en fout, mais celle-la me plait bien

[2] des

lundi 10 novembre 2008

WiP

Pas beaucoup de temps en ce moment ... stop ...
week-end et soirées occupés sur le chantier ... stop ...
électricité ... stop ...

elec

décapage mur ... stop ...
main enflée ... stop ...

mur

cadeau anniversaire ... stop ...

wii

nuits occupées aussi ... end of transmission ...

vendredi 24 octobre 2008

Microsoft sort un nouvel OS !

Petite note d'humour en ce vendredi propice aux trolls de tous poils.

Il semble que Dell ai un peu de mal avec la personnalisation de son site web. Cliquez ici pour voir la page qui cloche.

Vous avez trouvé ? Voici une capture d'écran : Dell Ms ubuntu

Visiblement, chez Dell, on n'est pas encore habitué à fournir un OS d'un autre fournisseur :)

Merci à Lolo pour le forward

samedi 18 octobre 2008

Génération spontanée

Hier en nous promenant dans le jardin, nous avons eu une surprise de taille.

jardin

Dans ce jardin si bien entretenu, plusieurs tâches oranges attirent notre attention.

tâches

Mais oui, en s'approchant ce n'est pas un, ni deux, mais 3 potimarrons qui squattent notre allée de boule[1] !

potimarrons

Incroyable, simplement en jetant les graines dans le compost avec les déchets de légumes, ça a poussé ! Notre jardin est une véritable réserve de biodiversité ! Et en regardant de plus prés, j'ai même trouvé des tomates ! Bon je doute qu'elles rougissent maintenant, mais je les ai quand même tutorées.

tomates

En tout cas cela fait une bonne occasion d'expliquer aux enfants comment fonctionne la nature :)

Notes

[1] oui, ça n'a pas l'air mais c'est une allée de boule

lundi 13 octobre 2008

Imprimer un plan à l'échelle

Un petit article en forme de pense-bête. Comment imprimer un plan[1] en conservant l'échelle de celui-ci.

Nous considérons que le plan est sous forme d'image. Ouvrir celle-ci avec The Gimp. À l'aide de l'outil de mesure prendre une distance connue et noter le nombre de pixels correspondants.

Mesurer

Une fois ceci fait, un simple petit calcul nous permet de déterminer le nombre de pixels par millimètre. Ici j'ai 77 pixels pour une distance de 100cm. Au 100ème 100cm sont représentés par 10mm. Donc 77/10=7.7 pixels/mm

Pour imprimer au 50ème, le calcul devient 77/20=3.85 px/mm etc...

Toujours dans Gimp, choisir Image → Taille de l'impression. Cette boite de dialogue permet de calculer la taille que devra faire l'image une fois imprimée.

Calculer

Et voila, il ne vous reste plus qu'à imprimer l'image à la taille voulue. On peut même en faire un pdf histoire de ne pas refaire le calcul à chaque impression.

Imprimer

Vous pouvez bien sur aussi utiliser l'impression via Gimp. Dans ce cas, pensez bien à donner la valeur en pixels/pouce.

Notes

[1] de maison par exemple

lundi 6 octobre 2008

Fonera 2 : Personnaliser, compiler, regénérer OpenWRT

OpenWRTNous allons voir dans cet article l'environnement de développement de OpenWRT (kamikaze). Étant un système embarqué, OpenWRT est souvent destiné à fonctionner sur des architectures différentes de votre machine de bureau. Pour cela il faut mettre en place un environnement de cross-compilation permettant de compiler des binaires pour une architecture différente. Pour la Fonera, par exemple, il me faut générer des binaires MIPS à partir d'une machine x86.

L'équipe d'OpenWRT propose plusieurs outils qui permettent de réaliser cette tâche, réputée compliquée, avec une facilité indécente. Nous allons passer en revue ces différents outils de manière à trouver celui en adéquation avec chaque besoin. Tout au long nous prendrons en exemple la Fonera.

Selon ce que vous voulez faire, vous n'aurez pas besoin d'installer l'environnement complet de développement. Nous pouvons distinguer trois niveaux en fonction de la tâche :

  • ImageBuilder pour générer un firmware personnalisé ;
  • le SDK pour compiler de nouveaux paquets ;
  • BuildRoot qui est l'environnement complet.

Les deux premiers sont en fait des version allégées et adaptées du 3ème.

ImageBuilder

Avec ImageBuilder, nous allons pouvoir adapter la distribution OpenWRT à nos besoins (le filesystem pour être précis). Typiquement pour ajouter des paquets non présents dans la version de base, en retirer, préparer une configuration spécifique ... Cet outil vient donc avec des versions binaires de tous les paquets standards.

Pour la Fonera et kamikaze 7.09, vous le téléchargez ici. Prenez le fichier ImageBuilder correspondant à votre architecture de développement (i686 ou x86_64).

Pour ajouter un paquet :

$ cp /tmp/hello_1-1_mips.ipk packages/
$ make image PACKAGES="hello"

Pour ajouter des fichiers, construisez votre arborescence dans un répertoire (par exemple /tmp/files/etc/monfichier.conf)

$ make image FILES="/tmp/files"

et monfichier.conf sera ajouté au répertoire etc de votre image.

$ make help

vous explique tout cela.

Note: Il semble que les Profiles ne fonctionnent pas avec ImageBuilder.

SDK

GCC Le SDK va nous permettre de compiler de nouveaux paquets pour OpenWRT. Il inclu donc les binaires de compilation croisées (mips-linux-uclibc-gcc par exemple) qui vont vous permettre de générer des exécutables MIPS à partir d'une machine PC. Nous pouvons donc l'utiliser pour générer des paquets existants avec une configuration différente voir créer carément de nouveaux paquets.

Vous le téléchargez au même endroit mais cette fois il s'agit du fichier SDK. De même décompressez le dans un répertoire de travail.

Deux erreurs ?

Avant d'aller plus loin, chez moi j'ai rencontré deux erreurs lors du make avec le SDK Kamikaze 7.09 pour Atheros.

$ make
/bin/sh: Syntax error: "&" unexpected
make: *** [world] Erreur 2

Bizarement celle-la se résoud en augmentant le niveau de verbosité :

$ make V=99

à chaque fois que vous utilisez make

Deuxième erreur :

make: option requires an argument -- C
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
  -C DIRECTORY, --directory=DIRECTORY
                             Change to DIRECTORY before doing anything.
...

Il suffit de remplacer le ; par un . à la ligne 79 du Makefile :

                      xargs -n1 $(MAKE) compile -C. \

Ce qui est étrange, c'est que je n'ai pas ces problèmes avec le BuildRoot.

Ajouter un paquet existant

Pour générer un paquet que vous n'avez pas, il vous suffit de copier le répertoire source dans package et de taper make à la racine du SDK.

Avant de vous lancer dans la création d'un nouveau paquet, je vous invite à aller voir si quelqu'un ne s'en ai pas déjà chargé. Dans le cas contraire, suivez le guide ...

Hello world!

Pour commencer essayons de générer le fameux Hello world!. Positionnez vous dans le répertoire du SDK puis :

$ cd tmp
$ cat > hello.c
#include <stdio.h>
int main (int argc, char * argv)
{
   printf ("Hello world!\n");
   return 0;
}
^D

Compilons le et exécutons le sur la Fonera[1] :

$ ../staging_dir_mips/bin/mips-linux-uclibc-gcc hello.c -o hello -I../staging_dir_mips/include
$ scp hello root@fonera:/tmp
$ ssh root@fonera /tmp/hello
Hello world!

Construire un paquet

Paquet Bon, c'est bien joli, mais ça manque d'automatisation. Nous allons en faire un paquet. Créez les répertoires hello/src dans le dossier package du SDK et copiez y hello.c.

Voici donc les sources de notre paquet. Maintenant il faut créer un fichier de contrôle pour que le SDK sache comment générer et installer nos fichiers. Créons donc un fichier Makefile situé dans package/hello. Il doit contenir :

include $(TOPDIR)/rules.mk

PKG_NAME:=hello
PKG_RELEASE:=1
PKG_VERSION:=1

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)

include $(INCLUDE_DIR)/package.mk

define Package/hello
	SECTION:=utils
	CATEGORY:=Utilities
	TITLE:=hello
	DESCRIPTION:=The Hello World
endef

define Build/Compile
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
	$(TARGET_CC) $(PKG_BUILD_DIR)/hello.c -o $(PKG_BUILD_DIR)/hello
	## $(MAKE) CC=$(TARGET_CC) -C $(PKG_BUILD_DIR)
endef

define Package/hello/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/bin
endef

$(eval $(call BuildPackage,hello))

Voyons rapidement la syntaxe : au début et dans la section Package/hello on renseigne des variables décrivant le paquet (nom, versions, description ...).

Dans la section Build/Compile, la manière de compiler les sources. Copie des fichiers dans le répertoire de compilation et appel du compilateur croisé (TARGET_CC). Notez aussi la ligne en commentaire qui servirait dans le cas ou on aurait un Makefile pour les sources.

Enfin viens la section Package/hello/install qui indique quels fichiers installer ou. Création de /usr/bin et copie de hello dedans.

Vous pouvez trouver une description plus détaillée du format de fichier dans la doc BuildRoot. Enfin, il faut signaler que le SDK est capable de télécharger automatiquement des sources[2] simplifiant encore le fichier de contrôle.

Je vous invite aussi à aller voir les sources pour pleins d'exemples.

Une fois ceci fait, positionnez vous à la racine du SDK et tapez simplement :

$ make

le SDK va détecter les nouveaux packages et lancer le processus de génération de ceux-ci. Une fois terminé, vous trouverez les fichiers .ipk dans bin/packages. Il ne vous reste plus qu'a le copier sur la Fonera pour l'installer.

$ scp bin/packages/hello_1-1_mips.ipk root@fonera:/tmp
$ ssh root@fonera
...
root@OpenWrt:~# ipkg install hello_1-1_mips.ipk
root@OpenWrt:~# hello
Hello world!

\o/ Youhou !

Vous trouverez ici les sources et binaires

Buildroot

TuXAlors la, c'est du lourd. L'environnement complet de développement, vous allez pouvoir tout recompiler et hacker le noyau comme des petits fous. :) Comme il s'agit d'un sur-ensemble des deux outils précédents, vous pouvez bien sur utiliser BuildRoot pour simplement compiler un package ou générer un filesystem perso. A noter qu'une très bonne documentation est disponible.

Génération

Pour récupérer le BuildRoot Kamikaze 7.09, faites simplement :

$ svn co https://svn.openwrt.org/openwrt/tags/kamikaze_7.09/

ou alors :

$ wget http://downloads.openwrt.org/kamikaze/7.09/kamikaze_7.09.tar.bz2 && tar xvjf kamikaze_7.09.tar.bz2

Les gentils dev d'OpenWRT nous ont concocté un joli menu pour configurer tout ceci :

$ make menuconfig

Vous pouvez alors choisir la cible, quelques options de configuration, les images à générer et les paquets à inclure dans votre image. Vous pouvez aussi reconstruire ImageBuilder et le SDK. Si vous voulez changer des options du noyau[3], utilisez :

$ make kernel_menuconfig

Pour la Fonera, choisissez Atheros [2.6] comme cible.

Enfin, il est temps de compiler/générer tout cela. tapez simplement :

$ make

et allez raconter 12 histoires à vos enfants. Chez moi (Athlon XP 1600+) ça a mis 1h30. Toutes les sources nécessaires sont téléchargées, patchées, le compilateur croisé est construit ainsi que le noyau et le filesystem. A la fin, vous trouvez ce qui vous intéresse dans le répertoire bin.

$ ls bin/
openwrt-atheros-2.6-root.jffs2-128k  openwrt-atheros-2.6-vmlinux.elf
openwrt-atheros-2.6-root.jffs2-256k  openwrt-atheros-2.6-vmlinux.gz
openwrt-atheros-2.6-root.jffs2-64k   openwrt-atheros-2.6-vmlinux.lzma

Lors des prochains make seules les parties nécessaires seront reconstruites. En particulier le compilateur ne sera pas recompilé à chaque fois. :)

A noter quelques autres répertoires intéressants :

  • build_mips : contient tout ce qui a été compilé et généré. En particulier build_mips/root le système de fichiers ;
  • staging_dir_mips : le cross-compiler ;
  • package : les sources des paquets (fichiers de contrôle, patchs ...) ;
  • dl : les sources téléchargées lors de la construction.

Packages

Pour ajouter votre propre package, procédez comme avec le SDK. Puis lors du menuconfig, sélectionnez le simplement.

menuconfig

Fichiers

Si vous voulez ajouter des fichiers à cette image, créez un répertoire files. Par exemple pour changer la configuration réseau par défaut :

mkdir -p files/etc/config
cat > files/etc/config
## Attention, il manque lo !!
config interface lan
       option ifname   eth0
       option proto    dhcp
       option hostname fonera

Lors du prochain make, BuildRoot remplacera la configuration réseau de package/base_files par la votre.

Émulation MIPS

Qemu logo Autant vous prévenir tout de suite, il ne semble pas possible d'émuler votre Fonera, même si quelques travaux existent.

Par contre, il est possible de lancer un programme MIPS sur votre PC :

$ cd /data/OpenWrt/kamikaze_7.09/build_mips/
$ qemu-mips -L /data/OpenWrt/kamikaze_7.09/build_mips/root root/bin/busybox

avec le SDK et notre programme hello ci-dessus :

$ qemu-mips -L /data/OpenWrt/OpenWrt-SDK-atheros-2.6-for-Linux-i686/staging_dir_mips/ hello

Cela peut vous permettre de tester quelques commandes. Mais à priori pour le kernel, il vous faudra flasher.

Visiblement il existe pleins d'émulateurs MIPS mais je n'ai pas eu le courage d'en tester d'autres.

Voila, nous sommes maintenant capables de

  • ajouter des fichiers et des paquets dans une image sans rien recompiler ;
  • compiler des programmes, des paquets et en faire de nouveaux ;
  • regénerer un OpenWrt complet noyau y compris.

Nous voila prêts pour de nouvelles aventures au prochain épisode, porter open2300 sur la Fonera et lui donner accès au port série.

Liens

La doc de WhiteRussian, plutôt obsolète.

La doc de Kamikaze :

  • Moteur de recherche de paquets ipkg

Notes

[1] on pourra aussi émuler, mais on verra ça plus tard

[2] par exemple sur sourceforge

[3] et voir de jolis oops :)

mardi 30 septembre 2008

Fonera et Station météo 1 - Port serie et OpenWRT

Je me suis acheté récemment pour une somme modique une Fonera. Mais je n'ai pas l'intention de faire parti du réseau FON. L'utilité que je vois à celle-ci est de disposer d'un système embarqué supportant linux et disposant d'un port série, réseau et wifi.

Le projet

Fonera

En effet ce genre de petite carte à faible consommation revient généralement assez cher ! Vous trouverez quelques exemples dans mes bookmarks mais il est difficile de trouver quelque chose à moins de 60EUR port exclu. La Fonera se présente alors comme une alternative crédible même si ses possibilités sont assez limitées.

Mon but est, à terme, de l'utiliser comme mini-serveur web pour accéder aux données de ma station météo. Elle devrait pouvoir remplacer avantageusement un PC complet pour ce simple service. Ses capacités semblent tout-à-fait suffisantes :

  • support de Linux et en particulier de l'excellent OpenWRT ;
  • port série pour dialoguer avec la station ;
  • interface réseau filaire et Wifi ;
  • 4 GPIO disponibles sur lesquels on peut connecter une SD card pour la capacité de stockage.

Bref tout ce qui est nécessaire pour seulement 15EUR dans mon cas et pour une consommation électrique sans commune mesure : 3.2W en pic au boot et 2.6W en idle[1].

WS2300Les étapes nécessaires à ce projet sont donc :

  1. réalisation d'un connecteur pour le port série ;
  2. flashage de la Fonera avec OpenWRT ;
  3. configuration/modification pour rendre le port série disponible pour la station météo ;
  4. compilation de open2300 sur la fonera ;
  5. réalisation du support de stockage de masse (SDcard) ;
  6. configuration du serveur web.

Rien de révolutionnaire dans ce projet, toutes les étapes sont déjà parfaitement documentées un peu partout sur le web.

Connecteur série

Première étape, la réalisation d'un connecteur pour le port série.

Je ne vais pas détailler le montage, tout est déjà très bien expliqué sur l'excellent blog de Denis Bodor[2] (y'a même un typon). Autant vous prévenir tout de suite, c'est une référence en ce qui concerne le hack de Fonera. D'ailleurs regardez le dernier article du GLMF de ce mois :)

D'abord, un petit test sur plaque d'essai. J'ai utilisé des transistors 2N2218 plutôt que les 2N2222 car c'est ce que mon fournisseur[3] avait en stock :)

essai essai

Attention, sur le Wiki OpenWRT, RXD et TXD du port fonera correspondent au coté PC ! Chez Denis par contre c'est OK.

Ensuite, la mise en place sur plaque pastillée. Les composants sont assez serrés car je veux loger tout ça dans une petite boite. Comme l'ensemble du montage sera à coté de la station météo dans le salon, il faut que ça reste relativement propre.

placement recto verso

La nappe coté fonera est découpée dans une nappe IDE, celle coté PC vient d'une poubelle. J'ai du acheter la boite chez Selectronic pour un projet oublié depuis :)

Et voila, la Fonera est branchée et dialogue avec le PC !

fini

Quelques trucs avant de flasher

On peut commencer par se connecter en ssh[4] via le réseau filaire.

# autorise les connections tcp
iptables        -A input_rule      -i eth0 -p tcp  -j ACCEPT
iptables -t nat -A prerouting_rule -i eth0 -p tcp  -j ACCEPT
# lance dropbear
/etc/init.d/dropbear

On attend un peu que les clefs soient générées, puis :

ssh root@192.168.0.149  ## bien sur remplacez par l'adresse de votre fonera !
root@192.168.0.149's password: admin

Voila, c'est plus convivial que le lien série.

Ensuite, on sauvegarde les partitions actuelles. La méthode proposée sur le wiki OpenWRT ne fonctionne pas chez moi, j'en ai trouvé une autre ici

cd /dev/mtd
for f in *ro; do echo -n "processing $f."; cat $f | gzip >/tmp/$f.gz; echo " Done."; done
scp /tmp/*.gz jjl@penfret:/home/jjl/

Conservez aussi le contenu du fichier /proc/mtd

Flasher avec OpenWRT

logo Je me propose d'utiliser ici la méthode RedBoot via port série. Une autre très courrue est via telnet.

On installe un serveur tftpd, par exemple sur une ubuntu :

sudo aptitude install tftpd

Chez moi, il est lancé à la demande par inetd. Les fichiers à servir sont situés dans /srv/tftp[5], répertoire à créer. On récupère alors le noyau et le filesystem pour atheros (le processeur de la fonera)

cd /srv/tftp
wget http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-vmlinux.lzma
wget http://downloads.openwrt.org/kamikaze/7.09/atheros-2.6/openwrt-atheros-2.6-root.squashfs

La, je vous conseille de suivre cette méthode. Ne recopiez pas directement les lignes suivantes, allez lire l'article pour avoir toutes les explications !

RedBoot> ip_address -h 192.168.0.105 -l 192.168.0.149/24
RedBoot> fis init
RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
RedBoot> fi cr -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
RedBoot> fis free

La vous faites la différence entre les deux valeurs hexa données.

RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-root.squashfs
RedBoot> fi cr -l 0x6F0000 rootfs ## Remplacez la valeur par la différence précédement calculée
RedBoot> fis load -l vmlinux.bin.l7
RedBoot> exec

Ne reste plus qu'a adapter la configuration comme le dhcp, le password root à définir ...

Voila pour aujourd'hui. Prochaine étape, construire un environnement de cross-compilation pour régénérer un openwrt et open2300

Liens utiles

Je ne vais pas vous lister ici tous les liens sur la fonera ou OpenWrt, mais juste ceux qui me paraissent le plus pertinents dans mon cas.

Tout d'abord ceux qui ont eu la même idée que moi :

  • EquinoxeFR mais j'ai l'impression qu'il a changé de politique après l'étape 1
  • Puis ici openwrt/open2300 mais sur un routeur Asus
  • open2300 pour WhiteRussian

Puis sur la Fonera

Notes

[1] sans le wifi

[2] Quoi ? Il n'est pas encore dans vos flux RSS ! Mais ajoutez-le immédiatement !

[3] qu'il soit béni jusqu'à la 7ème génération

[4] en one-shot, au prochain démarrage, il faudra recommencer

[5] voir /etc/inetd.conf

samedi 27 septembre 2008

Laser

J'ai fait un peu de tri dans mes photos. Je vous en ai sorti 4 jolies photo de Laser.
p1020230 p1000034
p1000037 p1030308

vendredi 22 août 2008

La semaine prochaine ...

Je ne résiste pas au plaisir de vous livrer cette citation extraite des Instruction Nautiques pour la plaisance ouvrage on ne peut plus sérieux édité par le SHOM

Le plateau des Minquiers est une sorte d'Everest de la navigation ... Toutes les difficultés y sont rassemblées : champs de rochers et de haut-fonds à perte de vue, marées à fort marnage, courants violents, abris précaires... Ajoutez à cela la difficulté à se situer dans un paysage où tous les rochers et îlots se ressemblent et où les alignements sont rares et souvent difficiles à repérer de loin. Certains pêcheurs qui fréquentent ces parages [...] affirment que «la meilleure façon de traverser les Minquiers, c'est d'avaler d'abord une bouteille de rhum et de fermer les yeux », c'est tout dire !

Normalement c'est la que je vais la semaine prochaine ! Belle entrée en matière :)

Je crois que je vais aller m'acheter une bouteille de Rhum :)

lundi 18 août 2008

Trouvé sur youtube

Vous vous souvenez du bruit horripilant des disquettes ?

via avec d'autres vidéos

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >