Aujourd’hui j’ai perdu un disque dur …. j’ai pu en profiter pour découvrir les outils de diagnostique pour disque dur sous linux.

Introduction
Il ne m’a pas lâché immédiatement (c’est souvent le cas), en fait un signe avant coureur simple, Freeze du système.

Là on cherche dans les logs du kernel des messages qui pourraient coïncider..

Nov 25 11:55:16 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 25 11:55:16 localhost kernel: ata2.00: cmd b0/da:00:00:4f:c2/00:00:00:00:00/00 tag 0 cdb 0×0 data 0
Nov 25 11:55:16 localhost kernel: res 40/00:00:00:4f:c2/00:00:00:00:00/00 Emask 0×4 (timeout)
Nov 25 11:55:22 localhost kernel: ata2: port is slow to respond, please be patient (Status 0xd0)
Nov 25 11:55:26 localhost kernel: ata2: device not ready (errno=-16), forcing hardreset
Nov 25 11:55:26 localhost kernel: ata2: hard resetting port
Nov 25 11:55:27 localhost kernel: ata2: SRST failed (errno=-19)
Nov 25 11:55:27 localhost kernel: ata2: reset failed (errno=-19), retrying in 10 secs
……

L’heure correspond, c’est bien cela … encore innocent j’ai décidé de chercher la première apparition :
>cat /var/log/messages*
Nov 21 17:17:25 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 21 17:47:25 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 22 20:50:22 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen
Nov 23 09:16:05 localhost kernel: ata2.00: exception Emask 0×0 SAct 0×0 SErr 0×0 action 0×2 frozen

Et là je me suis lancé dans une recherche sans fin …. Pourquoi ?…

Et bien pas de raison trouvée … ce n’est donc pas une modification du système qui serait à l’origine du problème ….

Test des secteurs défectueux

là j’utilise la commande badblocks /dev/sdb
Ajoutez y l’option -v et vous aurez une information sur le bon déroulement des opérations. un badblock sans l’option -v est utile pour mettre a jours la table de partition en cas de secteur défectueux (voir les sources).

On peut aussi tester une zone particulière avec la commande suivante :

badblocks /dev/sdb -v 488386583 92000000

Mais là dans mon cas …. rien ….

Diagnostique avec smartctl

Cet outil est chargé automatiquement au lancement du poste, on défini son usage dans le fichier /etc/smartd.conf

/dev/sda -d ata -H -m root

smartctl -i /dev/sda : Quelques informations sur le disque
smartctl -t short /dev/sda : Un test interne du disque … ça fait pas mal de bruit .. :p
smartctl -a /dev/sda : Avec cette commande on pourra obtenir le résultat de la précédente mais de façon plus générale on a un bilan complet sur le disque.

A ce stade, dans mon cas, aucun problème trouvé. Mon disque dur serait donc hors de cause ? pourtant ….. TAC TAC TAC…. il commençait à chanter…

Et la température ?

hddtemp /dev/sda : permet d’obtenir la température du disque

Dans mon cas sa température était inférieure à celle de ses voisins … que faire …

Conclusion

Et bien il faut sauvegarder, si l’accès aux données et encore possible lorsque le disque fait CLAC CLAC … c’est qu’il va mourir … épicétou !!!
Pour ma part smartctl ne me préviendra du problème que trop tard … on est bien loin de l’outil de prévention qu’on nous annonce.

Sources
Un post sur hddtemp et la mise en place d’un graphique de température avec gnuplot, très instructif. http://dschneller.blogspot.com/2007/06/visualize-hard-disk-temperature-with.html

Usage de badblocks et actualisation des partitions
http://users.ictp.it/~radionet/ghana1998/SYSGUIDE/NODE48.HTM

doc sur smartd
en anglais : http://www.linuxjournal.com/article/6983
en français : http://valaurea.free.fr/documents/sig11_smart.html

Il s’agit d’un “manuel” ayant pour thème l’insécurité des réseaux. Il est assez ludique, en effet la trame de l’ouvrage porte sur une attaque réseau éventuelle suivie de près par la présentation d’une étape dite forensique ( c’est un zoli mot non ? ). On y parlera ensuite de la remise à neuf du parc informatique compromis par le pirate et de sa sécurisation.

Même s’il s’agit d’une bonne introduction sur le sujet, les conseils donnés sont difficilement applicables (certaines explications restent incomplètes ou trop particulières). Tout les thèmes majeurs semblent y être abordés, pour débuter sur le sujet c’est pas trop mal.

Ah et j’y ai trouvé un usage de netcat plutôt pas mal :

nc -l -p 222 > fichier
cat fichier | nc 192.168.1.1 222 ou dd if=/dev/hda | nc 192.168.1.1 222

Bonne lecture aux curieux.

Le WAP54G, c’est un peu l’ami de tous. Par une série de circonstance, linksys a partagé les sources de ce routeur. Désormais il fait partie des passions de nombreux linuxiens et une distribution lui est même consacrée. une chance pour moi :)

Je dispose d’une distribution linux, l’installation d’une carte wifi sur un tel système n’est pas impossible mais reste parfois (selon les modèles) un vrai parcours du combattant. Pour m’éviter cette tâche et parce que je disposais d’un WAP54G dans le placard ( oui bon, ce n’est pas le cas de tous, c’est sûre ) j’ai décidé d’en faire un pont entre mon poste de trvail et le point d’accés Wifi de mon appart.

Pour ce faire, 2 étapes :

Installation de OpenWRT

Cette étape est à mon goût la plus sensible … Vous mettez en péril l’intégrité de votre appareil, vous prenez vos responsabilités s’il ne marche plus ensuite. Entre autre cette manipulation va dépendre de la version de votre WAP54G. Dans mon cas il s’agit d’un WAP54G Version 3.1 EUR.

Vous allez donc choisir une version du firmeware OpenWRT qui correspond à votre routeur … http://wiki.openwrt.org semble une bonne adresse.

Configuration de OpenWRT
La connexion au routeur se fait à partir d’un client telnet. Il n’y a alors aucun mot de passe (je recommande l’activation du ssh mais si ce n’est pas le sujet de ce post).

Il y a plusieurs moyens de configurer ce routeur, pour ma part j’utilise la commande nvram, celle-ci me permet de conserver mes modifications même apres modification du firmware.

>nvram usage: nvram [get name] [set name=value] [unset name] [show]

Pour voir toutes les valeurs sauvegardées on utilisera nvram show (c’est la commande que j’ai utilisé pour revenir sur mes modifications précédentes).

Passage en mode pont :

nvram set wl0_mode=wet nvram set lan_ifnames="vlan0 eth1"
nvram set wan_ifname=vlan1

Activation du reseau wifi:

nvram set wl0_ssid=<SSID>
nvram set wl0_channel=<CHANNEL_NUMBER>

En cas de cryptage WEP ajoutons les lignes suivantes :

nvram set wl0_wep=enabled
nvram set wl0_key=1
nvram set wl0_key1=<WEP key in hex format>

Pour sauvegarder cette configuration :

nvram commit
reboot

Toutes ces informations sont disponibles à cette adresse : http://wiki.openwrt.org/ClientModeHowto

Shell::Commande history

novembre 10, 2007

 Sous fedora cette commande retient les 1000 dernières lignes d’exécution du shell. Pour changer cette valeur il faut modifier la variable d’environement HISTSIZE dans le fichier /etc/profile :

HISTSIZE=100000

Une autre option très intéressante : $HISTTIMEFORMAT

Retrouvez plus d’info sur cette note : http://blog.uggy.org/post/2006/07/05/98-petits-trucs-pour-configurer-l-historique-du-bash

 Attention, un après usage de ces commandes, j’ai découvert que pour qu’elles soient effectives dans un terminal genre xterm il faut les placer dans le fichier ~/.bashrc, ça peut sembler normal … mais xterm ne récupère pas les infos dans profile. Peux être que ça ne me ferait pas de mal de relire le fonctionnement de tout cela ….

Je suis un ancien de delphi, un delphinaute comme on disait et comme on dit encore. Par curiosité j’ai souhaité recompiler certains de mes programmes sous linux et, pourquoi pas, en réaliser de nouveaux.

Installation (source : http://forums.fedora-fr.org/viewtopic.php?pid=187794)

Pour cela on utilisera lazarus une très belle interface proche de Delphi ( Kylix l’équivalent de delphi sous linux semble avoir été abandonné)

Pour ma part Fedora ne dispose pas encore du rpm de lazarus il va donc falloir utiliser le compilateur pascal de lazarus :

1 ) on s’assure que le compilateur de fedora n’est pas et ne sera pas installé :

En root :

yum remove fpc fpc-src fpc-doc  cat "exclude=fpc fpc-src fpc-doc" >> /etc/yum.conf

2) puis à l’installation on telecharge les paquets fpc et lazareus sur le site http://sourceforge.net/project/showfile … _id=496867

[root@bodman tmp]# rpm -Uvh fpc*
Préparation...              ########################################### [100%]
   1:fpc                    ########################################### [ 25%]
Running on linux
Write permission in /etc.
Found libgcc.a in .
Writing sample configuration file to /etc/fpc.cfg
   2:fpc_crosswin32         ########################################### [ 50%]
   3:fpc-docs               ########################################### [ 75%]
   4:fpc-src                ########################################### [100%]
 [root@bodman tmp]# rpm -Uvh lazarus-0.9.22-0.i386.rpm
Préparation...              ########################################### [100%]
   1:lazarus                ########################################### [100%]

A SAVOIR : j’ai eu besoin d’installer ce paquet avant : gdk-pixbuf.i386

yum install gdk-pixbuf

Réutilisation d’un projet Delphi (source : http://wiki.freepascal.org/Code_Conversion_Guide/fr)

Je me m’attarderais pas sur la manière de développer en pascal object, mais par contre je vais essayer de résumer comment convertir un projet dpr (DelphiPRojet) en lpr (LazarusPRojet) :

cd /dossier_projet
mv Project1.dpr Project1.lpr

puis on remplace la ligne {$R *.RES} du fichier lpr par {$mode delphi}{$H+}.

Ensuite il va suffire d’ouvrir le projet et d’utiliser la commande convertir une unit delphi en unit lazarus ( les fichiers dfm seront automatiquement convertis en lfm).

Une derniere remarque…. ça ne marche pas tout le temps…

Bonne chance à tous :)

Plus précisément, un générateur de ‘mot’ de n lettres. Je l’ai pondu pour obtenir une liste de mots aléatoires nécessaire à un projet.

Pour fonctionner il utilise principalement:
$RANDOM : renvoi un entier compris entre 0 et 32767
$(( EXPR )) : in interpréteur mathématique intégré au bash
${#VAR}: renvoi le nombre de caractères dans une chaîne bash (le length du bash)
${VAR:P:N} : renvoi une sous chaîne de la chaîne VAR qui commence au P ième caractère et de longueur N (substr du bash).

Il s’agit donc d’un petit concentré des essentiels du bash.

gen_word.sh [le nombre de lettres, 10 par défaut]

#!/bin/bash

N_LETTRES=10

if [ "$1" != "" ]
then
N_LETTRES=$1
fi

ALPHA=’abcdefghijklmnopqrstuvwxyz’;

MOT=”"
for ((i = 0; i < $N_LETTRES; i += 1))
do
CHIFFRE=$(( $RANDOM % ${#ALPHA}));
printf ${ALPHA:$CHIFFRE:1};
done
printf “\n”
exit 0

Mod : la commande exit permet de terminer le processus.

un exit 0 en fin de script c’est un fin de processus correct et des exit 1,2,3 etc… pour stopper le
script avec erreur.