KubuntuBlog

Backups are for wimps. Real men upload their data to an FTP site and have everyone else mirror it. Linus Torvald

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

mercredi 17 octobre 2012

Embarquer une image dans un script bash

Quand je programmais en perl, une fonctionnalité de ce langage me plaisait beaucoup. Il est en effet possible d'embarquer des données dans un script après le mot clef __END__. Ces données sont alors facilement accessible dans celui-ci à l'aide du descripteur <main::DATA> Cela donne quelque chose comme cela :

#!/usr/bin/perl

while (<main::DATA>)
{
  print $_;
}

__END__
1ère ligne
2ème ligne

Il m'est venu l'envie d'avoir la même chose en bash pour pouvoir embarquer une image à modifier dans un script[1]. Si bash ne propose pas une telle fonction par défaut, il est très facile de l'émuler avec les outils standard d'unix. Sans plus attendre, voila ce que ça donne :

#!/bin/bash

END_LINE=$( awk '/^__END__/{print NR + 1}' $0)
tail -n +$END_LINE $0 | base64 -di | display

exit 0
__END__
iVBORw0KGgoAAAANSUhEUgAAAQgAAADAAQMAAADC9G/RAAAABlBMVEX///8AAABVwtN+AAAAVUlE
QVRYhe3TwQ2AQAhFQfpvGhNNDCxSgfNu+5nrRtxlZvTOhSCIZfo4EwRRphlBEFO873priCCIjLpu
EQRRxfZrnp0giCmiRxDEFHWqvytmBPF3cQGgZ+PFvE0lDQAAAABJRU5ErkJggg==

Les explications : grâce à awk, on récupère le numéro de ligne suivant le patern __END__. Puis tail nous permet de récupérer les données à partir de cette ligne que l'on passe à base64 en mode décodage. L'image ainsi obtenue est envoyée simplement à display[2]. Libre à vous d'en faire ce que vous voulez.On n'oubliera pas le exit avant les données, sinon bash va essayer de les interpréter comme du code.

Pour intégrer l'image, on utilisera par exemple :

$> base64 si.png >> img.sh

On peut aussi pour gagner de la place garder l'image en binaire (et éviter ainsi l'encodage/décodage base64) mais comme certains éditeurs ont parfois du mal avec les fichiers contenants du binaire, je préfère le base64. Il est facile de remplacer l'image par n'importe quoi, comme par exemple un tgz pour faire un script auto-extractible.

Voila une astuce simple mais diablement utile !

Notes

[1] pour les curieux, afin d'avoir les données de ma station météo en fond d'écran

[2] d'imagemagick

mardi 9 février 2010

Éditer des fichiers XML en ligne de commande : xmlstarlet

Présentation

XML!!!!

De nos jours, nous sommes cernés de fichiers XML. Ils sont présents partout que ce soit pour les préférences des applications (gconf pour Gnome) les fichiers en rapport avec les GPS (GPX, KML), les descriptions d'interface graphiques (Qt UI, GTK Glade, Mozilla XUL), les documents (OpenOffice ODF Microsoft OOXML) etc... La liste serait sans fin.

Je ne rentrerai pas ici dans les considérations polémiques sur le bien fondé de ces choix, mais les faits sont la : nous devons faire avec. Il est relativement facile d'écrire une application capable de travailler avec ces fichiers, les langages de haut niveau proposent tous des API dédiées plus ou moins simples. Même en C la libxml2 rend cela relativement facile.

Mais la complication vient lorsque l'on veux travailler en shell. La ou des fichiers à plat étaient faciles à utiliser avec sed/grep/awk et quelques regex bien senties, le XML est une horreur sans nom. Sortir le Python ou le Perl n'est pas toujours possible (disponibilité sur la plateforme, versions datant de Mathusalem ...). Dans ces moments, on se rabat souvent sur bash[1]. Et c'est la que xmlstarlet va vous venir en aide. Il s'agit d'un programme en ligne de commande qui va se charger du parsing XML et vous permettre de lire et modifier facilement[2] vos fichiers.

Installation

xmlstarlet devrait être disponible dans toutes les bonnes crémeries[3].

Par exemple pour ArchLinux, il est dans AUR

yaourt -S xmlstarlet

Ou bien pour debian et dérivées

aptitude install xmlstarlet

Sinon, il est fourni dans une version portable compilée statiquement avec la libxml2 et la libxslt. Téléchargez le rpm xmlstarlet-1.0.1-1.i586.rpm sur SourceForge. Il suffit alors de le décompresser dans un répertoire temporaire avec la commande[4] :

rpm2cpio xmlstarlet-1.0.1-1.i586.rpm | cpio -idmv

et de récupérer le binaire présent dans ./usr/bin/xml

Utilisation

hello

Nous allons nous contenter de lire et de modifier des valeurs et des attributs. Pour une utilisation plus avancée, allez lire la documentation.

Comme exemple, nous allons utiliser un fichier UI de Qt très simple. Une boîte de dialogue avec un bouton sans layout ni rien.

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="text">
    <string>Hello</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

Lecture

Commençons par regarder la structure :

$ xml el hello.ui
ui
ui/class
ui/widget
ui/widget/property
ui/widget/property/string
ui/widget/widget
ui/widget/widget/property
ui/widget/widget/property/string
ui/resources
ui/connections

Nous retrouvons ici tous les champs de notre fichier XML. Ce sont ces chaines de caractères qui vont nous permettre d'accéder aux valeurs à lire et modifier.

On peut aussi regarder les paramètres '-a' et '-v' qui donnent plus d'infos sur la structure. (attributs et valeurs). Par exemple pour le bouton :

$ xml el -v hello.ui
...
ui/widget/widget[@class='QPushButton' and @name='pushButton']
ui/widget/widget/property[@name='text']
ui/widget/widget/property/string

Maintenant, si nous voulons voir le texte du bouton, on va utiliser la commande 'sel' :

$ xml sel -t -v "/ui/widget/widget/property/string" hello.ui
Hello
  • sel: pour selectionner un chemin (xpath)
  • -t: requête dans le document
  • -v: on veux la valeur
  • /ui/widget/widget/property/string : c'est le chemin que nous cherchons.

Alors bien sur ici, nous n'avons qu'un seul bouton. Mais il faut pouvoir caractériser plus finement a chaine recherchée. C'est à dire la property text du widget dont le nom est pushButton. Cela donne donc :

$ xml sel -t -v "/ui/widget/widget[@name='pushButton']/property[@name='text']/string" hello.ui
Hello
  • widget[@name='pushButton'] nous permet de dire que l'on cherche le widget dont l'attribut name est pushButton
  • idem pour property[@name='text']

On peut aussi chercher les valeurs des attributs. Quelle est la classe de ma fenêtre principale ?

$ xml sel -t -v "/ui/widget/@class" hello.ui
QDialog
  • @class: nous cherchons l'attribut class de widget

Modification

Maintenant, nous allons utiliser la commande 'ed' pour modifier notre fichier XML.

$ xml ed -u "/ui/widget/widget[@name='pushButton']/property[@name='text']/string" -v GoodBye hello.ui
...
      <property name="text">
        <string>GoodBye</string>
      </property>
...
  • -u: update
  • -v: nouvelle valeur

De même pour changer un attribut, par exemple, le nom de notre bouton :

$ xml ed -u "/ui/widget/widget[@name='pushButton']/@name" -v btn hello.ui
...
    <widget class="QPushButton" name="btn">

Voyez aussi les options :

  • -i: pour insérer un élément
  • -d: pour effacer un élément
  • ...

Voila, avec ces quelques commandes simple, on peut déjà sortir quelque chose de ces fichiers XML à partir d'un petit scrip shell. xmlstarlet permet d'en faire beaucoup plus, je vous renvoi donc une nouvelle fois vers la documentation

Notes

[1] ou pire csh :(

[2] enfin, relativement, on parle quand même d'XML la !

[3] votre gestionnaire de paquet favoris

[4] Sous ArchLinux, il existe un script rpmextract.sh qui fait le boulot

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 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

lundi 18 février 2008

Tux est partout !

Cette sortie dominicale semblait pourtant tout ce qu'il y a de plus raisonnable. Le défilé du carnaval à l'ile-grande est plus propice aux jets de confettis, aux cris d'enfants[1] qu'a rencontrer des geeks linuxofiles.

Et pourtant, même la il semble que l'on ne soit pas à l'abris. En effet au détour d'un char, mon œil exercé fut immanquablement attiré par lui. Même si sa couleur n'était pas totalement orthodoxe, il n'y a pas à se tromper. Il est la, sur le frontispice d'un tracteur habilement déguisé en engin polaire. Son œil malicieux me souris comme pour me dire : Même ici tu ne m'échappera pas :)

Tux

Et sur le même char, à moitié caché par un ours polaire, le voila de toutes ses resplendissantes couleurs habituelles.

Tux2

Aucun doute n'est permis. Tux domine le monde !

Edit : d'autres aussi l'ont vu :)

Notes

[1] voir aussi aux bitures, mais nous resterons discrets la dessus

vendredi 9 novembre 2007

WiKiss 0.3 (Bada Bing) is open & SliTaz

WiKiss Logo Avec un peu de retard, j'ai le plaisir d'annoncer la sortie de WiKiss 0.3 Bada Bing. Pour mémoire, WiKiss est un wiki simple à utiliser et à déployer. Il ne nécessite que PHP s'installe et se configure en 2 minutes chrono. Ses but principaux sont la légèreté et la simplicité, malgré cela il dispose de toutes les fonctions que l'on est en droit d'attendre d'un wiki.

Cette nouvelle version apporte un certain nombre de nouvelles fonctions visibles pour l'utilisateur :

Outre celles-ci, des modifications sous le capot sont aussi à l'ordre du jour, citons :

  • optimisation et réorganisation du code pour améliorer la maintenabilité ;
  • amélioration/blindage de la gestion UTF-8 ;
  • rationalisation du template pour faciliter l'écriture de thèmes ;
  • développement de tests automatiques pour limiter les régressions ;
  • Validation XHTML 1.0 Transitional et CSS ;
  • mise en place d'un gestionnaire de bugs pour optimiser les développements. Vous pouvez ainsi rapporter facilement les problèmes rencontrés mais aussi suivre la roadmap.

Vous pouvez bien sur consulter le Changelog pour tous les détails.

Toute la documentation nécessaire se trouve sur le site web :

La mise à jour est vivement conseillée, la procédure est décrite dans la documentation. Je tiens aussi à chaleureusement remercier tous ceux qui ont participé aux tests des RC sur la liste et via linuxfr (la et la) ainsi que tous les rapporteurs de bug.

Notons aussi l'intégration de WiKiss 0.3 dans une petite distribution live cd : SliTaz.

Slitaz est un système libre fonctionnant autonomement en mémoire vive, et démarrant depuis un média amovible tel qu'un cdrom. SliTaz est distribuée sous forme de LiveCD, c'est une images ISO gravable de moins de 30 Mb. Le système est rapide et réactif, épuré et robuste. SliTaz se veut simple et intuitive.

Capture SliTaz Je suis très heureux de cette nouvelle car outre la reconnaissance de wikiss, les buts poursuivis par ces deux projets sont très proches. Vous pouvez télécharger la version en développement de SliTaz ici. Je vous recommande d'essayer cette distribution qui même sans WiKiss m'a bien plu.

Enfin, le lien pour Télécharger ;)

mardi 9 octobre 2007

Arg ! DLFP is dying

Mauvaise nouvelle pour tous les trolleurs, depuis hier après-midi le site LinuxFr [1] s'est bronsorisé.

Ce matin, petit espoir, une page nous indiquait simplement :

It works!

signe que apache était reparti.

Mais voila, maintenant, un message nous fait perdre un peu plus l'espoir

LinuxFr est sous perfusion

Il semblerait que notre serveur vieux de quelques années soit en train de passer l'arme à gauche. Profitez donc de ce moment pour visiter d'autres sites web.
Nous donnerons des nouvelles dès que nous en aurons.

Malheur de malheur, le site de référence sur Linux et l'actualité du Troll en français semble mal en point. Comment allons nous survivre ? Mais ou va t-on parler du libre, s'informer sur les nouveaux (et anciens) projets, découvrir de nouveaux softs ? Comment retrouver pBpG ? Quid des discutions enflammées pour expliquer à quel point la slackware est mieux pour les débutants qu'ubuntu ? Comment survivre sans ma dose quotidienne de mauvaise fois, de parti pris, de moinsage et de traité constitutionnel ? C'était mieux à vent :(

En tout cas, pour moi, une chose est sure, c'est un coup des chinois du FBI qui veulent vous empêcher de tester WiKiss 0.3rc2 !

Ah oui, souhaitons quand même bon courage aux AdModéRolecteurs qui doivent vivre des instants stressants. J'ai toute confiance dans leur capacité à nous ramener notre cher site bien vite.

Notes

[1] aussi appelé Da Linux French Page

dimanche 16 septembre 2007

WiKiss : un wiki libre simple léger et rapide

Logo Il y a quelques temps, je vous avais parlé d'un Wiki qui me convenait parfaitement : TigerWiki. Pour mémoire il s'agit d'un Wiki tenant en une seule page php mais intégrant toutes les fonctions que l'on peut attendre d'un Wiki.

Malheur ! L'auteur principal a décidé de jeter l'éponge, celui-ci n'est plus maintenu :(
Bonheur ! C'est un logiciel libre, n'importe qui peut donc reprendre le code et continuer le développement.

N'importe qui, et ce fut moi[1].

J'ai donc le plaisir de vous annoncer la sortie de WiKiss 0.2, première version de mon successeur potentiel de TigerWiki. Voici un résumé de ses fonctions :

  • syntaxe wiki simple mais complète
  • gestion de l'historique des pages
  • affichage simple des différences entre chaque version
  • recherche intégrée
  • table des matières automatique
  • valide XHTML 1.0 Transitional

Pour le moment, j'ai surtout intégré des patchs que j'avais fait pour TigerWiki mais qui n'ont pas eu le temps d'être intégrés. Au menu des changements par rapport à la dernière version (instable) de TigerWiki :

  • stabilisation
  • correction[2] de l'utf-8
  • ajout de syntaxes (souligné, caractères spéciaux, images, liens Wikipédia ...)
  • gestion simplifiée des diffs entre versions d'une page
  • intégration de tables des matières automatiques
  • valide XHTML 1.0 Transitional
  • ...

Tous les détails sont dans le ChangeLog

Vous trouverez aussi la documentation pour l'installation, la configuration et l'utilisation ainsi bien sur que la possibilité de le télécharger

Enfin, une liste de diffusion existe pour le support utilisateur

Edit : une nouvelle version vient d'être publiée. Elle corrige quelques problèmes cosmétiques mais aussi une faille XSS (quand il n'y a pas de mot-de-passe) qui traîne depuis de nombreuses versions. La mise-à-jour est donc vivement conseillée vers WiKiss 0.2.1.

Notes

[1] air connu

[2] jusqu'aux prochains bugs

vendredi 3 août 2007

TigerWiki, un wikiss en 2 minutes chrono

Wikipedia Logo L'autre jour j'avais besoin de collaborer pour la rédaction d'un document avec d'autres personnes à l'autre bout du pays. Quand j'ai commencé à recevoir mes versions textes modifiées avec Microsoft Word, je me suis dit qu'il me fallait trouver une autre solution :)

Pour cela, il existe un concept éprouvé et très répandu, le Wiki

Un wiki est un système de gestion de contenu de site Web qui rend les pages Web librement et également modifiables par tous les visiteurs autorisés. On utilise les wikis pour faciliter l'écriture collaborative de documents avec un minimum de contraintes[1]

Par contre loin d'avoir des gros besoin, je voulais absolument éviter les mastodontes du secteurs tels MediaWiki, MoinMoinWiki ou encore DokuWiki. Ils sont très bien mais un peu lourds à mettre en place et à utiliser. Je voulais un système simple, sans base de données, sans syntaxe HTML. Bref du KISS[2]

Après un petit tour sur Wikipedia et aussi Framasoft. Je me suis arrêté sur TigerWiki

Je lui ai en effet trouvé tous les avantages :

  • pas de base de données et une seule page php
  • apparence facilement modifiable (un template HTML + une feuille de style CSS)
  • syntaxe simple et relativement complète (pas besoin de maîtriser le HTML)
  • gestion des historiques
  • protection par mot de passe
  • conforme au standard XHTML 1.0 Strict

Bref une interface simple et utilisable par n'importe qui pour un code léger et rapide.

L'installation est simplissime, on décompresse le zip téléchargé[3], on modifie deux, trois variables dans le fichier de configuration et on copie dans l'arborescence web. Et voila ! Un wiki fonctionnel et rapide en moins de deux minutes !

Vous pouvez voir une démo de TigerWiki sur le site officiel ou bien sur le wiki que j'ai créé pour documenter mes modifications à TigerWiki

Logo PHP J'en entend au fond qui râlent : "Oui, il est bien, mais il me manque cette fonction, cette syntaxe !" Rien de plus simple, le code fait moins de 300 lignes de php. Bon, il n'est pas très modulaire et il faut aimer les regex. Mais d'un abord relativement facile[4] il est donc possible de l'adapter à ses besoins sans trop de coût. De plus l'auteur est ouvert aux suggestions et est très réactif sur le forum[5] en Français et avec le sourire.

Par exemple, j'ai pu en quelques heures développer une fonction d'upload de fichiers et de gestion des diff entres pages de l'historique[6], plus quelques autres modifications mineures. On trouve aussi un certain nombre de forks qui prouvent la facilité d'accès du code. Par exemple fvaTigerWiki ou le TigerWiki modulaire

En conclusion, le wikiss ce n'est pas que pour les chats, mangez-en ;)

Notes

[1] Source: Wikipédia

[2] Oui, d'ou le jeu de mot du titre :), plus de détails la

[3] Si vous avez des problèmes d'encodage, essayez la 2.19

[4] surtout grâce à sa petite taille

[5] Si vous êtes en France pensez au décalage horaire avec le Canada :)

[6] Ces deux fonctions devraient d'ailleurs être intégrées sous peu dans la branche principale.

mercredi 30 mai 2007

Une Licence Creative Commons, oui mais laquelle !

Introduction

Creative Commons License Ce billet est motivé par une image vue récemment sur un blog. Elle était étiquetée sous licence Creative Commons. Quand j'ai fait remarquer que ça manquait singulièrement de précision, on m'a rétorqué que BY-SA, BY-NC-SA ne voulait rien dire pour le grand public. La se posent deux problèmes :

  • si on "éduque" pas le grand public, il n'apprendra jamais. S'il ne sait pas ce qu'implique BY-SA, un petit lien lui permet de se renseigner en un simple click[1]
  • Licence Creative Commons ne veux RIEN dire en soit, cela ne me renseigne aucunement sur les droits et les devoirs que j'ai vis-à-vis de cette image. Cela peut aller d'une licence très restrictive jusqu'à la plus permissive.

Les licences

Choisir une licence pour une oeuvre va vous permettre de définir quels seront les droits que vous concédez à l'utilisateur. Peut-il modifier celle-ci ? Peut-il la vendre ? Comment peut-elle être redistribuée ?

Voyons rapidement les 6 licences principales proposées[2]. Pour plus d'informations, reportez vous au site Creative Commons ou aux articles de framasoft.

  • BY : vous pouvez modifier et redistribuer l'oeuvre tant que vous citez l'auteur
  • BY-SA[3] : vous pouvez modifier et redistribuer l'oeuvre tant que vous citez l'auteur et que vous redistribuez sous la même licence

Les licences suivantes ne sont pas libres au sens de la FSF :

  • BY-NC : vous pouvez modifier et redistribuer l'oeuvre sans utilisation commerciale tant que vous citez l'auteur. Cela vous interdit par exemple de fournir l'oeuvre sur un CD distribué avec un magazine.
  • BY-NC-SA : vous pouvez modifier et redistribuer l'oeuvre sans utilisation commerciale tant que vous citez l'auteur et que vous redistribuez sous la même licence.
  • BY-ND : vous pouvez redistribuer l'oeuvre sans la modifier tant que vous citez l'auteur
  • BY-NC-ND : vous pouvez redistribuer l'oeuvre sans la modifier et sans utilisation commerciale tant que vous citez l'auteur

Nous voyons donc que selon la licence choisie, l'utilisateur ne pourra pas utiliser votre oeuvre n'importe comment. Si l'on reprend mon exemple d'image si la licence choisie comporte NC, je ne pourrais pas l'inclure dans un magazine, dans une affiche ou sur un t-shirt vendus[4]..., si elle est ND, je ne pourrais pas la modifier ...

Mon avis

Bref sans plus de précision sur la licence Creative Common, je ne connais pas mes droits !

L'avantage de ces licences simples est d'avoir amené cette idée à l'avant plan. Leurs licences sont simples, des pages web légères résument les conditions et une iconographie permet de les reconnaitre en un coup d'oeil. Bref tout est fait pour que tout le monde soit capable d'intégrer ces principes.

Par exemple flickr vous permet de choisir facilement une d'elle pour vos photos. Beaucoup de gens sont maintenant sensibilisés à ces licences et au fait que l'on puisse accorder des libertés aux utilisateurs. Mais à trop vouloir simplifier on perd tout avantage et on en arrive à cette image ou l'auteur n'a pas compris[5] le principe de ces licences.

Donc si vous choisissez une Licence Creative Commons, précisez laquelle, si vous voyez un document sous licence Creative Commons, demandez laquelle !

Notes

[1] mais quelle puissance, le web ! C'est incroyable !

[2] en fait on peux mixer les options comme on veux

[3] les textes de ce blog sont distribués ainsi

[4] en tout cas pas sans contacter l'auteur qui pourra lever cette restriction pour moi

[5] ou pas voulu comprendre

lundi 21 mai 2007

pyGetMeteo : Compilation de données météo locales sur une seule page

À la demande générale de Samuel, voici donc le script que j'ai (rapidement) écrit pour collecter différentes informations météo utiles sur plusieurs sites.

Les données sont récupérées sur les sites de Météo France et du SHOM puis sauvegardées en local afin de pouvoir les consulter facilement. À savoir :

  • les horaires de marée du jour ;
  • la météo marine (Bulletin côtier) ;
  • la photo satellite prévisionnelle ;
  • la météo départementale[1].

Vous pouvez voir un exemple de ce que produit le script sur ma page de collecte.

Il vous faut modifier quelques paramètres en début de script pour l'adapter à votre utilisation (port de référence, zone côtière, département, répertoire de sortie ...). Ils sont regroupés et commentés en début de code.

Pour le faire fonctionner, vous aurez besoin de :

  • python ;
  • wget pour le téléchargement des données ;
  • iconv pour la conversion en UTF-8.

Si vous souhaitez collecter les données automatiquement, une simple ligne dans votre crontab ou un script dans crond.d fera l'affaire :

$ cat /etc/cron.d/compil_meteo
 # MAJ donnees meteo
 5 7,12,19 * * * user /path/to/pyGetMeteo.py > /tmp/pygetmeteo.log 2>&1

Ainsi il sera exécuté à 7h05, 12h05 et 19h05, soit juste après les mises à jour du bulletin marin. Il n'est pas nécessaire de le faire plus souvent puisque les données n'auront pas changés sur le site d'origine[2].

Le script est fournit sous licence GPL. Par contre je ne me suis pas trop occupé de sa robustesse ni de la beauté du code[3]. N'hésitez donc pas à me faire part des bugs ou des améliorations que vous pourriez trouver.

Enfin, vous pouvez le télécharger la :

Notes

[1] qui est en fait affichée à partir du site original grâce à une iframe

[2] et puis on va essayer de ne pas écrouler le site de Météo France :)

[3] l'extraction est faite à grand coup de regex

vendredi 20 avril 2007

Surcadencer son antémémoire pour améliorer la réseautique !

La Commission générale de terminologie et de néologie viens de publier au journal officiel une nouvelle liste de termes à employer lorsque l'on veux parler d'informatique en Français. Je vous recopie ici certains qui me paraissent intéressants. Ils sont accompagnés de leur équivalent Anglais et de la définition retenue.

Dans les remarquables, félicitons nous de l'apparition officielle du logiciel libre avec une définition très correcte. De plus il est parfaitement distingué du logiciel gratuit !

logiciel gratuit : (freeware) Logiciel que l'auteur met à la disposition des utilisateurs sans exiger de rémunération, mais en conservant l'intégralité de ses droits.

logiciel libre : (free software, open-source software) Logiciel distribué avec l'intégralité de ses programmes-sources, afin que l'ensemble des utilisateurs qui l'emploient puissent l'enrichir et le redistribuer à leur tour. Note : Un logiciel libre n'est pas nécessairement gratuit et les droits de la chaine des auteurs sont préservés.

Je suis aussi assez content de l'apparition du terme implémenter qui est déjà énormément utilisé en entreprise.

implémenter : (to implement) Effectuer l'ensemble des opérations qui permettent de définir un projet et de le réaliser, de l'analyse du besoin à l'installation et la mise en service du système ou du produit.

Enfin, voici quelques autres termes amusants. j'aime bien le surcadencer et la réseautique :)

antémémoire, mémoire cache : (cache memory, cache storage) Mémoire très rapide, intercalée entre le processeur et la mémoire principale, que l'ordinateur consulte avant d'interroger la mémoire principale et qui, fournissant les parties de programme et les données les plus utilisées dans le traitement en cours, permet de réduire la durée de celui-ci.

cache-toile : (web cache) Cache qui contient temporairement une copie des documents consultés récemment et qui permet à l'utilisateur d'en disposer sans qu'il soit nécessaire de procéder à une nouvelle recherche sur la toile.

entrepôt de données : (data warehouse) Ensemble de données collectées dans une entreprise ou un organisme pour être exploitées par des outils d'aide à la décision.

gérance de l'informatique : (facilities management) Prise en charge contractuelle de tout ou partie de la gestion d'un système d'information d'un organisme par un prestataire extérieur. On trouve aussi, dans le langage professionnel, le terme « infogérance », qui n'est pas recommandé.

macrocommande, script : (macro, macrocommand, script) Programme constitué d'une suite de commandes dispensant l'utilisateur de les saisir, et permettant d'effectuer une fonction particulière ou de contribuer à l'exécution d'un autre programme.

réseautique (networking) : Ensemble des activités et des techniques destinées à créer, gérer, exploiter et utiliser des réseaux de télécommunication ou des réseaux d'ordinateurs.

surcadencer : (to overclock) Faire fonctionner un processeur à une cadence supérieure à celle pour laquelle il a été initialement conçu, afin d'en améliorer les performances.

Enfin, rendons à César ce qui appartient à Jules et remercions Bertrand Lemaire de lire le journal officiel pour nous :)

mardi 17 avril 2007

Sparc sarge2etch : The video !

Suite à mon billet décrivant l'upgrade de ma Sun UltraSparc en debian Etch, je me suis amusé à faire une petite vidéo de celle-ci.

Voici donc la phase de mise à jour accélérée 500 fois :)

inutile ? Oui :)

Pour info j'ai utilisé :

  • gimp pour faire l'image de titre
  • script (évoqué dans le billet précédent pour la capture de la session)
  • xvidcap pour capturer la vidéo
  • mencoder et avidemux pour l'encodage

dimanche 15 avril 2007

Mettre à jour une Sun Ultra Sparc de Debian Sarge vers Etch

Sun Ultra1Je dispose d'une Sun Ultra1 170E sous Debian Sarge[1]. C'est une machine ancienne puisqu'elle n'est plus vendue depuis 1997 mais de qualité. Je l'utilise principalement comme Terminal X pour augmenter la surface de mon bureau[2] ou quand le PC principal est squatté[3]. Elle a repris du service depuis peu, puisque j'ai récupéré un écran récement[4].

Jusqu'à aujourd'hui elle fonctionnait avec une Debian Sarge. Etch étant maintenant stable, j'ai fait la mise à jour que je vais vous narrer maintenant. Attention, ce n'est pas un Howto ou une procédure à suivre aveuglément ! Pour faire cette mise-à-jour, il faut aller lire les notes de publication de Etch qui sont très bien faites, détaillées et disponibles en Français, ce qui ne gâte rien :) Mon but est de donner un apercu d'un update de Debian sur du materiel un peu exotique.

Notez que cette mise-à-jour est lourde puisqu'elle implique de nombreux changements comme :

  • passage de XFree86 à Xorg
  • changement de version majeur du noyau (2.4.x vers 2.6.x)
  • utilisation d'un initramfs
  • abandon de devfs pour udev

Mettre à jour Sarge

Tout d'abord, il est mieux de commencer par amener Sarge aux dernières versions. Comme je n'avais pas fait cela depuis très longtemps[5] j'ai quand même eu 230Mo à télécharger. Le bon point est que j'ai pu résoudre mes problèmes étape par étape plutôt que de tout subir à la fin. :D

Premier problème : plus de réseau.

statefile /etc/network/run/ifstate: No such file or directory failed.

Résolu en déplaçant le lien /etc/network/run de /dev/shm/network/run vers un vrai répertoire. Hum cela aurait du être fait depuis février 2006. J'ai vraiment du retard dans les updates.

TuxSelon l'adage tant que ça marche on ne touche pas j'étais encore avec un noyau 2.4 Hors les notes de versions précisent qu'il vaut mieux avoir un 2.6 avant le passage à Etch vu toutes les différences qu'il amène. Ok, va pour l'upgrade du noyau.

Reboot. Oups, plus de clavier ni de souris fonctionnels. Du coup X11 ne démarre plus et je n'ai aucun contrôle. Et comble de malheur, le réseau non plus. Arrêt violent via le power switch Aie ! Pourtant j'ai bien pensé à configurer mon gestionnaire de boot pour initramfs.

Bon ce sont des problèmes connus sur cette architecture. Je reboote avec mon ancien noyau[6] et je reconfigure tout cela pour un clavier et une souris PC standard :

dpkg-reconfigure console-data
dpkg-reconfigure xserver-xfree86

Pour le réseau mon 2.4 devait être compilé avec le support de la carte[7], en 2.6 il faut ajouter le module sunhme à /etc/modules

Et voila, une Sarge bien à jour et les problèmes du 2.6 déjà résolus. Je suis confiant pour passer à ...

Upgrade vers Etch

Pour le faire, 3 solutions, en console virtuelle, en console série ou via ssh+screen. Je choisit cette dernière car je préfère quand même mon clavier azerty.

A l'occasion, j'ai découvert un outil bien pratique qui permet de capturer (pour la revoir après) une session terminal :

script -t -a  2>/mise-a-niveau-etch.typescript
# et pour rejouer deux fois plus vite :
scriptreplay mise-a-niveau-etch.time mise-a-niveau-etch.typescript 2

On commence par sauvegarder /etc, /home, la liste des paquets[8] ... Il est aussi recommandé de vérifier l'état du système (dépendances cassées, paquets marqués à conserver) et de liberer de l'espace disque histoire de ne pas avoir de problème de ce coté. Il est aussi

La mise-à-jour peut alors débuter. On modifie les dépots à utiliser, et on suit les étapes décrites dans le guide. La il faut bien faire attention car suivant les paquets installés la procédure est différente[9]

Vous êtes partis pour un long moment de téléchargement et d'installation avec ''aptitude''[10]. Pensez quand même à repasser régulièrement devant la machine pour répondre aux quelques questions qui peuvent vous être posées.

Le reboot sous Etch

XorgVoici le moment tant attendu, la nouvelle distribution. Et la, c'est le drame l'initramfs se charge mais pas le disque :

Begin: Waiting for root file system

C'est ma faute :( cette fois j'ai oublié le module esp qui permet d'acceder au controleur de disque. Heureusement je peux encore booter sur mon vieux 2.4 et corriger cela via le réseau en suivant la procédure. Soit ajouter le module manquant et regénérer l'initramfs :

update-initramfs -u -k all

Deuxième problème, Xorg n'arrive pas à charger les polices de caractère. Bon, c'est bien documenté et la re-installation de xfonts-base résoud le problème en moins de deux.

En conclusion

Debian logoMe voici avec ue belle Etch toute neuve qui va me durer longtemps[11]. La majorité des problèmes rencontrés étaient dus à des erreurs de ma part, des actions que j'aurais du faire avant de rebooter. En tout cas tout a été résolu en très peu de temps grâce à quelques recherches rapides sur le net.

La documentation de debian est très complète et il ne faut pas hesiter à la lire en entier avant de commencer, puis à la garder à porté de main pendant la procédure.

Enfin, félicitation aux développeurs de debian de nous fournir une distribution de qualité qui fonctionne aussi bien sur mon serveur x86 que sur ma Sparc antédilluvienne !

Notes

[1] jusqu'à aujourd'hui

[2] Les écrans fournis par Sun sont vraiment bons !

[3] Par GCompris ou Tuxpaint par exemple

[4] Encore merci au fournisseur qui se reconnaitra ;)

[5] honte à moi, mais bon elle était éteinte

[6] Pour Sparc, le gestionnaire de boot est SILO, voyez la documentation pour l'utiliser

[7] Une carte Sbus Happy Meal :)

[8] dpkg --get-selections "*" > ~/sarge_paquets.txt

[9] en particulier pour le meta-paquet desktop

[10] l'utilitaire d'install recommandé

[11] Non, il n'y a pas de Troll caché dans cette phrase

1 2 >