Voyage dans le temps avec un simple PC

root@p3x0:~# ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. Warning: time of day goes back (-737514113us), taking countermeasures. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.000 ms 

Soit, en Français dans le texte :

Attention, le temps recule (-737514113us), je prend des contre-mesures

Un message d’erreur comme celui là, on me l’avait encore jamais fait…

En avant Marty McFly, nous allons remonter le temps sous Linux !!!

Il fait chaud !

Connaître la température de ses disques durs :

Avec les outils diagnostiques SMART (installable avec le paquet smartmontools) :

 # for i in a b c d e ; do echo sd$i = `smartctl -d ata -A /dev/sd$i | grep ^194 | awk -F" " '{ print $10 }'`°C;  done sda = 48°C sdb = 56°C sdc = 62°C sdd = 61°C sde = 57°C 

Et la température de la carte mère et du CPU :

Avec lm-sensors :

 # sensors | grep Temp Core0 Temp: M/B Temp:    +32°C  (low  =    -1°C, high =  +127°C)   sensor = thermistor CPU Temp:    +43°C  (low  =    -1°C, high =  +127°C)   sensor = thermistor Temp3:       +25°C  (low  =    -1°C, high =  +127°C)   sensor = thermistor 

Ouh, ça chauffe dure !

Astuces Ubuntu

Deux petites astuces que je viens de trouver pour Ubuntu Feisty :

  • Pour pouvoir choisir la vitesse du CPU avec l’applet gnome cpufreq :
    sudo dpkg-reconfigure gnome-applets

    Puis autoriser l’applet cpufreq à être lancé en tant que root…

  • Pour pouvoir changer facilement les réglages multi-écrans (c’est à dire sans trifouiller le xorg.conf) :
    Télécharger et installer les deux paquets situés à cette adresse (en commençant par le guidance-backend).

    Et hop, un joli panneau de contrôle dans le menu système pour régler simplement le double écran… C’est pile ce qu’il manquait à Linux.

Liens et icônes

Comme vous l’avez peut être remarqué, dans le menu « liens », les urls des sites sont décorées d’une icône. Je vais vous expliquer comment ça marche…

Internet Explorer 6 à introduit la possibilitée d’associer une icône à un site. Le principe retenu est de simplement placer un fichier favicon.ico à la racine du site. Ce fichier est une icône au format Microsoft de taille 16×16. Les principaux navigateurs ont copiés cette fonctionnalité. Ce système à été adopté par de nombreux sites.

Donc, pourquoi ne pas faire un petit script javascript pour ajouter cette icônes à tous les liens d’une page.

Le principe est simple : on cherche tous les liens dans un calque (voir, dans la page), on extrait les URL (attribut href), puis on crée un image pointant vers le fichier favicon.ico du site.
Pour améliorer un peu le principe, je crée deux images. La première est une image générique (représentant un lien) située sur mon serveur. La seconde est le favicon du site. Elle apparaît cachée par défaut. Dès que l’image favicon.ico est chargée, je cache la première image générique et j’affiche l’image spécifique au site (grâce a une fonction sur son événement onload). Cette astuce me permet d’avoir toujours une icône sur les url, même quand il n’y en a pas pour ce site ou que le site est lent à répondre.

Mais trêve de bavardage, voici le code (il marche avec la librairie prototype) :

 $A($('links').getElementsByTagName('a')).each(function (el) { 		var img = $(document.createElement('img')); 		img.src = el.href + 'favicon.ico'; 		img.style.display = 'none'; 		img.width = '16' 		img.height = '16' 		img.onload = function() { this.style.display = 'inline'; $(this).previous('img').style.display = 'none'; }; 		el.insertBefore(img, el.childNodes[0]); 		var img2 = $(document.createElement('img')); 		img2.src = 'themes/sofresh/img/url.png'; 		img2.width = '16' 		img2.height = '16' 		el.insertBefore(img2, el.childNodes[0]); 	}); 

Et voilà, c’est tout…

Pour info, le fait d’utiliser un fichier favicon.ico, bien que supporté par tous les navigateurs, n’est pas standard. Maintenant, le standard spécifie que l’URL du fichier utiliser comme icône doit être spécifié via quelques balises link dans le head.

 <link rel="shortcut icon" href="http://example.com/favicon.png" type="image/png" /> <link rel="icon" href="http://example.com/favicon.png" type="image/png" /> 

Mais cette méthode n’est pas supportée par Internet Explorer 6 (heureusement, il est voué à disparaître). Mais en attendant, heureusement que le web est relativement lent pour adopter les standards, car si c’était le cas, mon script ne marcherait pas…

En attendant, je ne vois pas bien comment rendre mon script compatible avec le standard. Il faudrait pouvoir récupérer la page d’index du site, pour analyser le head à la recherche les balises link. Le problème, c’est que les navigateurs n’aprecient pas trop que l’on aille chercher des infos (avec une requête Ajax par exemple) sur un domaine différent (c’est pour éviter des attaques de type cross site scripting XSS). Une solution pourrait être d’utiliser un iframe invisible, mais dans ce cas, le problème serait que la totalité de la page du site distant serait chargée par vos visiteurs, ce qui imposerait à vos visiteurs de longs temps de chargement (il faut multiplier ça par le nombre de liens sur la page) et qui consommerai un peut trop de bande passante sur les sites distants (charger toute une page juste pour trouver une icône !)… L’autre solution ne serait plus purement javascript, en utilisant par exemple un script PHP sur le serveur qui se chargerait de récupérer l’icône (et qui au passage pourrait faire du cache)… Bref, on dépasse un peu le cadre du petit script simple à mettre en place 😉

Nouveau look

Je viens de mettre à jour le look de site…
Pas de révolution, mais plus une évolution.

Tous les changements concernent la barre de navigation à droite. J’ai mis en place des menus déroulants, ce qui permet de gagner beaucoup de place. La barre peut enfin être visible sur un petit écran (quelle idée de naviguer sur internet avec un écran inférieur a 1280×1024 😉 )… J’ai aussi ajouté quelques petites icônes pour égayer le tout… J’ai mis la barre de titre en position fixe (elle ne scroll plus avec le texte). Quand au champs de recherche, je l’ai déplacé dans la barre de titre et relooké à la Apple.

Bon, il reste encore un petit peu de boulot pour finir tout ça… Voici une liste non exhaustive de ce qui ne fonctionne pas (ce sont des problèmes de compatibilité multi-navigateurs) :

  • Bord arrondis des menus sous IE et Safari :
    Comme ces navigateurs ne supportent par l’attribut CSS3 border-radius (Firefox le supporte via son attribut propriétaire -moz-border-radius), il va sans doute falloir mettre un petit peut de javascript pour ajouter plein d’image de coin arrondi et de bordure…
  • Le fond coloré des liens dans les menus ne s’affiche pas bien sous Safari (il ne s’affiche pas si le curseur est au dessus du texte, mais s’affiche s’il est sur le bord d’un lien…).
  • Toujours dans les menus, mais sous IE7, cette fois, le texte disparaît au survol des liens de la catégorie « Liens ». Bizarre…

Voilà… Z’en pensez quoi ?

Merci iCat

Voici ce que ma chatte m’a offert ce matin pour le petit déjeuner…

Le plus inquiétant, c’est que je vis en appartement et qu’elle ne peut pas sortir dehors… Ce pigeon a du s’approcher un peu trop près de la fenêtre !!!

En tout cas, j’ai retrouvé des morceaux dans tout l’appartement … beurk.

Poussière

Il était temps de nettoyer ça 😉

Auto detection de vos postes Ubuntu

Sous Windows, quand on va dans les partages réseaux, tous les postes du réseau local apparaissent automatiquement (normalement…).

Sous Ubuntu, on peut avoir le même comportement. Les postes Windows sont auto-détécté… Tout comme les postes Linux équipés d’un serveur Samba… Mais comment avoir de l’auto-détection de services un peu plus libres comme le sftp ou le webdav…

La solution porte le doux nom de mDNS/zeroconf (on comprend pourquoi Apple a préféré appeler ça « Rendez-Vous » puis « Bonjour » 😉 ).

mDNS est un protocole d’auto-détection de machines et de services sur un réseau local. Cela permet de trouver une machine par son nom (sans serveur DNS) ou encore de détecter tous les serveurs de fichiers, toutes les imprimantes, ou même tous les clients IM ou VOIP…

Ubuntu est pré-équipé pour utiliser mDNS grâce d’un coté au démon avahi qui sert à faire les annonces et à Gnome (nautilus ?) qui affiche les services de partages de fichiers.

Il suffit donc de configurer correctement avahi pour qu’il annonce correctement les services présent sur vos machines.
Il faut placer des fichiers .service dans /etc/avahi/services/

/etc/avahi/services/sftp.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group>   <name replace-wildcards="yes">%h</name>   <service>     <type>_sftp-ssh._tcp</type>     <port>22</port>   </service> </service-group> 

/etc/avahi/services/ssh.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group>   <name replace-wildcards="yes">%h</name>   <service>     <type>_ssh._tcp</type>     <port>22</port>   </service> </service-group> 

/etc/avahi/services/webdav.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group>   <name replace-wildcards="yes">%h</name>   <service>     <type>_webdav._tcp</type>     <port>80</port>   </service> </service-group> 

Bien sûr, on peut annoncer plein d’autres choses… Il suffit de trouver le bon type de service et le port approprié. Le problème, c’est que relativement peu d’applications Linux utilisent l’auto-détection mDNS… Dommage.

Faire un switch avec un PC et deux cartes réseaux

Cet article est pour un copain, qui va économiser l’achat d’un switch en transformant son PC en switch.

Bien sûr, il est sous Ubuntu 😉

Sur un Ubuntu/Debian, tout ce qui concerne le réseau se trouve dans le /etc/network/interfaces.

Un man interfaces permet de savoir comment ce fichier fonctionne.

Donc nous avons un PC avec une interface eth0 en DHCP et une interface eth1 inutilisé. Le fichier doit ressembler à quelque chose comme ça :

# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp 

Pour tranformer les deux cartes en un switch, il faut créer un pont (bridge en anglais). Sous Linux ça se fait avec l’utilitaire brctl.
Il faut donc commencer par l’installer :

 sudo apt-get install bridge-utils 

De tête, il faudrait faire un :

brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1 

C’est compliqué, hein… Et en plus il faut le faire à chaque démarrage….

C’est pour ça qu’on peut le faire en modifiant le fichier interfaces :

 # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto br0 iface br0 inet dhcp         bridge_ports eth0 eth1         bridge_stp on         bridge_fd 2         bridge_maxwait 0 

Et ensuite, un petit :

sudo /etc/init.d/networking restart

Et il ne reste plus qu’a brancher la deuxième machine (avec un câble croisé si la carte n’est pas un carte Gigabit ou n’est pas Auto-MDIX)…

Wifi sur IBM T30

Je viens de récupérer un IBM T30. C’est une jolie petite machine (PM 1.8GHz, 40Go, 512Mo, 14″), qui va me servir de « petit » portable Linux (le gros portable, c’est un MacBook Pro 17″). Il n’est pas très léger, mais il a l’avantage d’entrer dans un petit sac à dos. Bon trêve de discussion, si je vous cause, c’est pour vous parler de mon expérience concernant la wifization (ça se dit ?) de cette machine.

J’ai d’abord commencé bêtement par mettre une carte PCMCIA (CardBus pour être plus précis) dedans… Mais bon, cette solution ne me convenait pas trop car ça dépasse (bon, OK, c’est un argument fallacieux, c’est surtout que j’aime me compliquer la vie 😉 ). Le portable est pré-équiper pour le Wifi. En effet, il est muni d’un emplacement MiniPCI et de deux antennes logées de chaque cotés de l’écran…

J’ai donc fait le tour de mes tiroirs, et j’y ai retrouvé une vieille carte PCI Prism2 802.11b. En fait, comme beaucoup de cartes PCI de l’époque, c’est une carte MiniPCI monté sur un adaptateur.

Donc, je commence par dessouder le câble d’antenne de la carte MiniPCI. Je l’installe dans le portable, je met sous tensions et c’est là que vient le premier « D’oh! » (© Homer J. Simpson)…

Le BIOS du PC affiche effrontément :

ERROR 1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card. 

Il semble qu’IBM ai décidé que ses clients doivent passer par lui pour ajouter une carte WIFI… Et dire que certains affirment que contrairement aux Mac, les PC, eux sont upgradables !!! 😉

Une petite recherche sur Google (Google est ton amis !), et je tombe sur un article sur le ThinkWiki qui explique comment passer outre cette « fonctionnalité ».
La solution consiste à changer un simple petit bit dans un recoin de la mémoire CMOS. Pour cela, un gars bien plus intelligent que moi a fait un joli petit programme en C. Il faut commencer par enlever la carte pour pouvoir booter. Voici la procédure complète (en root):

 cat <no-1802.c #include  #include  #include  #include  #include  int main(void) {   int fd;   unsigned char data;   fd = open("/dev/nvram", O_RDWR);   if (fd==-1) {     printf("Opening /dev/nvram failed ");     return 1;   }   printf("Disabling WiFi whitelist check. ");   /* BIG INFORMATIONAL WARNING */   /* The linux nvram driver doesn't give access to the first 14 bytes of      the CMOS. As a result, we seek to 0x5c rather than 0x6a. If you're      implementing this under another OS, then you'll have to go to whichever      address is appropriate for your access method */   lseek(fd, 0x5c, SEEK_SET);   read(fd, &data, 1);   printf("CMOS address 0x5c: %02x->", data);   data |= 0x80;   printf("%02x ", data);   lseek(fd, 0x5c, SEEK_SET);   if (write(fd, &data, 1)<0) {     printf("Unable to write to /dev/nvram - hack failed ");     close(fd);     return 2;   }   close(fd);   printf("Done. ");   return 0; } EOF gcc -o no-1802 no-1802.c ./no-1802 

Et voili... Maintenant, on remet la carte, et l'on peut booter correctement. Elle est correctement détectée par Linux.

Il ne me reste plus qu'à connecter les antennes. Comme la carte n'est pas pourvue de connecteurs d'antennes, je suis obligé de couper les câbles des antennes du portable pour les souder sur la carte MiniPCI. Bon, je sais, c'est pas top niveau évolutions futures, mais bon, les autres options était acheter une autre carte ou trouver des connecteurs à souder (mission impossible ?)... Je coupe, je dénude, je fait chauffer le fer, et je commet deux joli pâté d'étain... Après vérification visuel rapide, les dégâts ne semble pas trop grave...

Je décide donc de refermer et de remettre sous tension le portable...

Une fois sous Ubuntu, un petit clique sur l'icône "Réseau" (au passage, cette icône est pas mal foutu sur la dernière Ubuntu. Elle permet enfin facilement de choisir les réseaux (filaire et les différents réseaux wifi), d'entrer la clef pour les réseaux cryptés, et de voir le niveau de réception... Ça semble peut être banale pour un utilisateur de Mac, mais sous Linux, il n'y a pas si longtemps, ça ressemblait plus à Windows avec 15 endroits différents pour régler ça. Et il y a un peu plus longtemps, ça passait forcement par quelques iwconfig et iwlist dans un terminal... Ah.... nostalgie...

Bon tout ça pour dire que je clique sur cette icône et je vois plein de réseaux (j'habite en centre ville), mais pas le mien. D'oh! Je suis pourtant situé à moins d'un mètre de ma Freebox, et les autres réseaux captés sont à plusieurs dizaines de mètres...
Une petite investigation plus poussé à coup de iwlist wlan0 ap me permet de constater que tous les réseaux captés sont sur les canaux 10 à 13...
Ça ne parle peut être pas au jeunot, mais pour un vieux routard du Wifi comme moi (woula, rien que ça), ça rappel étrangement cette époque où en France, la loi n'autorisait pas l'utilisation des canaux 1 à 9 et 14... Les cartes de cette époque était bridée (coucou les Airport sur les iBook palourde). Courant 2003, la Loi a changé, et comme partout en Europe, l'usage des canaux 1 à 9 à été autorisé (mais toujours pas le 14).

Voilà pour l'histoire, mais ça ne vous dit pas comment on fait pour changer tout ça...Dans mes souvenirs, je savait qu'il était possible en flashant la carte avec un nouveau firmware. Comme j'ai eu pas mal de difficultés à retrouver la procédure (c'est dur de trouver des infos vieilles de plus 4 ans sur internet ;-) ), je vais la décrire. On sait jamais, ça peut servir...

Donc, j'ai trouvé cette page consacré à la mise a jour des firmwares (à lire attentivement avant de vous lancer, car le firmware dépend du modèle de votre carte). Et cette discussion consacrée aux changements des canaux autorisés...

Première étape, installer les hostap-utils pour avoir les outils de flashage :

sudo apt-get install hostap-utils

Ensuite, il faut en connaitre un peu plus sur la carte pour choisir ses firmwares :

# hostap_diag wlan0 Host AP driver diagnostics information for 'wlan0' NICID: id=0x8013 v1.0.0 (PRISM II (2.5) Mini-PCI (SST parallel flash)) PRIID: id=0x0015 v1.0.4 STAID: id=0x001f v1.3.9 (station firmware) 

Puis télécharger les firmwares :

wget http://linux.junsun.net/intersil-prism/firmware/1.7.4/pk010101.hex wget http://linux.junsun.net/intersil-prism/firmware/1.7.4/sf010704.hex

On test le flashage :

# prism2_srec -v wlan0 pk010101.hex sf010704.hex

Et si il n'y a pas d'erreurs, on flash pour de vrai 😉 :

# prism2_srec -v -f wlan0 pk010101.hex sf010704.hex

Et on vérifie si tout est correct :

# hostap_diag wlan0 Host AP driver diagnostics information for 'wlan0' NICID: id=0x8013 v1.0.0 (PRISM II (2.5) Mini-PCI (SST parallel flash)) PRIID: id=0x0015 v1.1.1 STAID: id=0x001f v1.7.4 (station firmware)

Youpi.... Mais ça ne règle toujours pas le problème des canaux 😉

Les infos sur les canaux sont dans une mémoire appelée PDA. On peut la récupérer avec :

# prism2_srec -D wlan0 > pda # cat pda ... ; PDR 0x0104 data len=2 Allowed Channel Set/Active Channel List 2 0104 1e00 ... 

Il faut changer le mot à l'adresse 0x0104. Il faut remplacer 1e00 par 3fff pour avoir accès à tous les canaux.
Ensuite, on reflash avec :

# prism2_srec -v -f wlan0 pk010101.hex sf010704.hex -P pda

Et voilà, on a maintenant accès à tous les canaux et surtout à celui utiliser par mon réseau (à vrai dire, j'ai strictement aucune idée de celui ci, la freebox choisi toute seule le moins occupé, mais maintenant, je sait au moins qu'il est inférieur à 10 😉 )...