Main menu:

Site search

Categories

mars 2025
L M M J V S D
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archive

Débugger un script python

Si comme moi, vous utilisez un simple éditeur de texte du genre geany pour écrire vos scripts et programmes en python, il y a des chances que vous fassiez comme moi et que vous utilisiez l’instruction print pour débugger vos programmes. Ca fonctionne très bien pour autant que le programme ne soit pas trop long et surtout que le bug ne soit pas trop vicieux. Il existe toujours la possibilité d’utiliser un IDE du genre Eric, pyCharm ou encore WingIDE mais les meilleurs ne sont pas gratuits et je ne ressens pas l’utilité d’utiliser de tels programmes.

Pourtant il y a moyen de débugger simplement son programme en utilisant pdb, le Python Debugger. Ceux qui ont déjà programmé en C ou en C++ verront une ressemblance avec gdb.
De façon basique, le débugger peut s’appeler de deux manières.
La première consiste à lancer le débugger puis à tester le programme dans celui-ci:

$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb
>>> import mon_programme
>>> mon_programme.main()

On importe le débugger ainsi que le programme que vous voulez tester sous forme de module. Ensuite on appelle la fonction que l’on veut tester. Dans l’exemple ici, je veux tester la fonction main() de mon programme.

La seconde méthode qui est celle que j’utilise parce que je la trouve plus simple à mettre en oeuvre, est d’insérer la ligne suivante dans mon code là où je veux qu’il s’arrête (insertion d’un breakpoint). à ce moment, le prompt pdb s’affiche et je n’ai plus qu’à entrer les commandes du débugger que je veux utiliser.

import pdb; pdb.set_trace();

Les commandes du débugger permettent d’exécuter les lignes de code une à une, d’exécuter un ensemble de lignes, de mettre des breakpoints conditionnels ou non, d’afficher le contenu d’une variable et plein d’autres choses. Je vous renvoie à la documentation sur pdb pour les détails sur les commandes disponibles dans le débugger et plus généralement sur le débugger lui-même.

Bitcoin: c’est louche !

Bitcoin par-ci, Bitcoin par-là, on entend plus que parler de Bitcoin. Pour ceux qui vivent en autarcie et qui n’auraient pas entendu parler de Bitcoin, il s’agit d’une monnaie virtuelle. D’après le site bitcoin.org:

Bitcoin is a peer-to-peer currency. Peer-to-peer means that no central authority issues new money or tracks transactions. These tasks are managed collectively by the network.

Autrement dit, il n’y a pas de banque centrale. Chaque noeud du réseau p2p Bitcoin contient les informations ou partie de celles-ci concernant les transactions effectuées.

Je ne suis pas économiste et je n’y connais absolument rien mais certains trucs me semblent bizarres:

  • Vous pouvez générer des Bitcoins en utilisant la puissance de votre PC. Mais…c’est de plus en plus difficile. Le nombre de Bitcoins qui peuvent être générés est limité et plus le temps passe, plus c’est difficile. Actuellement, d’après le site Bitcoin Mining Calculator, en laissant tourner votre PC pendant une semaine non-stop, vous pouvez espèrer gagner 0.02 bitcoins par semaine. Waouw! A un taux de change de $13 par Bitcoin, ça fait quelque chose comme 25 cents en dollars par semaine!
  • D’après le site bitcoin.org, il est possible d’obtenir gratuitement quelques centimes de Bitcoin sur certains sites comme freebitcoins.org, weusecoins.com ou freebitcoins.appspot.com etc… Malhereusement, aucun de ces sites n’a encore de Bitcoins à distribuer. Ou alors, ces sites n’existent carrément plus. Vous avez dit arnaque ?
  • La plupart des sites qui parlent de Bitcoins nécessitent un login/password même avant toute opération. Pourquoi ? Tout ce qui les intéresse ce sont nos coordonnées ? Ne sont-ils que des sites de spams camouflés ?
  • Je vous défie de trouver un site intéressant ou un commerçant acceptant des Bitcoins même s’il en existe, ils sont rares ou limités à des services Internet. Essayez de payer votre facture chez votre garagiste en Bitcoins… Autrement dit, le Bitcoin est purement spéculatif avec avantage à ceux qui en ont générés au tout début (voir plus haut).
  • Je n’ai pas testé les versions du soft à installer sous Windows mais celle sous Linux ne comporte pas, au moment où j’écris ceci, de fichier de configuration permettant de générer automatiquement des Bitcoins. Les créateurs du soft ne s’y seraient pas pris autrement s’ils avaient voulu, l’air de rien, limiter le nombre de personnes générant des Bitcoins avec leurs PC. Vous avez dit arnaque ?

Faites une recherche sur Internet avant de vous lancer dans l’aventure. Lisez l’histoire de ce type qui a investi tout ce qu’il a dans Bitcoin. Lisez les articles de ceux qui sont pour et de ceux qui sont contre.

Owni a sorti plusieurs articles sur le sujet, lisez-les:
http://owni.fr/2011/06/15/bitcoin-revolution-monetaire-ponzi/
http://owni.fr/2011/06/04/monnaies-virtuelles-une-revolution-fiscale/
http://owni.fr/navigation-temporelle/?jour=16&mois=06&annee=2011
http://owni.fr/2011/06/16/pas-besoin-detre-un-banquier-pour-creer-de-largent/

Lisez les articles de Ploum, farouche partisan:
http://ploum.net/post/un-bitcoin-dans-la-tete

Et lisez aussi ceux qui sont contre:
http://www.quora.com/Is-the-cryptocurrency-Bitcoin-a-good-idea

Faites-vous votre propre idée mais ne venez pas vous plaindre après si d’aventure vous y avez perdu des plumes…

Mtr: un outil de diagnostic réseau

Il y a deux jours, en lisant le blog de Stephane Bortzmeyer, j’y ai découvert un petit outil qui m’a paru bien pratique et que je ne connaissais pas. Il s’appelle mtr et est une sorte de traceroute combiné avec ping. Comme traceroute, mtr vous indique chaque bond effectué par les paquets pour arriver à destination et comme ping, il vous donne pour chaque bond le nombre de paquets perdus, la latence et des données statistiques.

Etant donné que mtr fait pour chaque bond un certain nombre d’essais, mtr met un certain temps à s’exécuter. Voici un exemple de rapport que vous obtenez en sortie:


$ mtr -r -c 100 -s 1450 google.be
HOST: pp697                       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.173.192.1               0.0%   100   25.5  15.2  10.2 105.5  13.0
  2.|-- 109.88.204.49              0.0%   100   20.8  18.8  11.6 105.7  12.2
  3.|-- 212.68.211.33              4.0%   100   21.1  21.8  12.3 111.8  17.0
  4.|-- 212.68.211.13              7.0%   100   23.6  22.8  12.3 126.5  20.2
  5.|-- 212.68.211.133             0.0%   100   20.8  21.4  14.2 100.6  11.7
  6.|-- 195.219.227.5              0.0%   100   23.7  20.2  15.0 102.5  11.9
  7.|-- if-10-3-0-0.tcore1.AV2-Am  0.0%   100   36.8  34.9  26.5 167.7  17.6
  8.|-- if-2-2.tcore2.AV2-Amsterd  0.0%   100   57.2  32.8  27.0 123.0  12.7
  9.|-- 72.14.222.126              0.0%   100   29.8  26.6  18.2 109.5  16.8
 10.|-- 209.85.248.88              0.0%   100  126.6  27.7  19.0 126.6  17.7
 11.|-- 209.85.255.60              0.0%   100   31.0  27.3  18.9 108.0  12.1
    |  `|-- 209.85.255.72
 12.|-- 216.239.49.28              0.0%   100   31.6  39.7  22.5 234.9  36.1
    |  `|-- 216.239.49.38
    |   |-- 216.239.49.30
    |   |-- 216.239.49.36
 13.|-- 209.85.255.110             0.0%   100   36.9  32.0  23.3  79.3   8.1
    |  `|-- 209.85.255.98
    |   |-- 209.85.255.106
    |   |-- 209.85.255.102
 14.|-- ew-in-f99.1e100.net        0.0%   100   34.1  28.6  22.6 121.3  13.6

Chaque bond (network hop) est numéroté comme dans traceroute et pour chaque bond, vous est donnée le pourcentage de paquets perdus (Loss%), le nombre de paquets envoyés (Snt), la latence du dernier paquet envoyé (Last) ainsi que la valeur moyenne, la meilleure et la pire (Avg, Best, Wrst). La dernière colonne donne la déviation standard (StDev).

mtr permet de diagnostiquer des problèmes de routeurs mal configurés, de firewalls qui bloquent les paquets ICMP. On peut voir dans quel tronçon du réseau, la latence est la plus importante et où on perd le plus de paquets.

Il est possible de définir le nombre de paquets ICMP à envoyer ainsi que la taille de ces paquets.
Je ne détaille pas tous les paramètres et switchs qu’il est possible d’utiliser dans la commande de mtr. Je vous renvoie à la page de manuel pour cela.
mtr était installé par défaut dans ma Ubuntu contrairement à traceroute qui lui ne l’est pas.

Convertir une partition ext3 en ext4

Cet article est en quelque sorte une suite du précédent. Après avoir tenté de rendre la vérification du système de fichier au boot moins invasive, je me tourne vers une autre possibilité, signalée par plusieurs. Il se pourrait que la vérification d’une partition ext4 prenne infiniment moins de temps que la vérification d’une partition ext3. Mais, mon problème est que ma partition /home qui est la plus grande est en ext3, pas en ext4. Il faut dire que cela fait longtemps que je la traîne derrière moi, la gardant inchangée d’une version à l’autre d’Ubuntu.
J’ai donc cherché un moyen de convertir ma partition en ext4 sans devoir la reformater. Comme le format ext3 est très proche du format ext4, la conversion est possible assez facilement et est très bien décrite sur le wiki du site kernel.org.

Avant de faire la conversion, il est bon de faire une sauvegarde de vos données. Le risque est faible mais on ne sait jamais. De même, la conversion ne peut se faire sur une partition montée. Il faut donc la démonter préalablement ou, comme je l’ai fait moi, utiliser un LiveCD.
Lancez votre LiveCD et ouvrez un terminal. Tapez cette première commande qui à l’aide de l’utilitaire tune2fs va ajouter un certain nombre de paramètres à votre système de fichiers. Je vous renvoie à la page de manuel de tune2fs pour les détails. C’est cette commande qui va convertir votre partition ext3 en ext4. La partition que je veux convertir est ma partition /home et est située sur /dev/sda6:

$ sudo tune2fs -O extents,uninit_bg,dir_index /dev/sda6

A la fin de la conversion, tune2fs va vous conseiller de faire une vérification du système de fichiers et vous verrez qu’effectivement, il y a des choses à corriger. Pour lancer la correction, tapez la commande suivante:

$ sudo e2fsck -fDC0 /dev/sda6

A ce moment, votre partition a été correctement convertie en ext4. Pour que cette partition soit correctement montée au boot, il faut aussi modifier le fichier /etc/fstab. Mais pour modifier ce fichier, il faut au préalable monter la partition quelque part pour y avoir accès. Je rappelle que nous sommes dans une session LiveCD. Ma partition racine (/) se trouve sur /dev/sda2:

$ sudo mount /dev/sda2 /mnt
$ gksudo gedit /mnt/etc/fstab

Touvez la ligne correspondant à la partition que vous avez convertie, dans mon cas, il s’agit de /home sur /dev/sda6 et changez le type de format ext3 par ext4. Juste un caractère à modifier! Sauvegardez le fichier.

Votre partition est convertie mais tous les fichiers contenus dans cette partition n’ont pas encore les paramètres supplémentaires offerts par ext4. Ils ne les auront que lorsque vous chargerez ces fichiers et que vous les sauvegarderez sous le nouveau format. Cela risque de laisser dans la partition beaucoup de dossiers et fichiers encore au format ext3.
Il est néanmoins possible de les convertir tous en leurs donnant les bons attributs.
Toujours au moyen du LiveCD et dans un terminal, on va commencer par démonter la partition racine pour monter à sa place la partition /home:

$ sudo umount /dev/sda2
$ sudo mount /dev/sda6 /mnt

Maintenant, au moyen de la commande find, on va parcourir tous les fichiers et répertoires et donner à chaque fichier et répertoire l’attribut extents ( voir la commande tune2fs ci-dessus) au moyen de la commande chattr:

$ sudo find /mnt -xdev -type d -exec chattr +e \{\} \;
$ sudo find /mnt -xdev -type f -exec chattr +e \{\} \;

Ces commandes prennent un peu de temps dépendant du nombre de fichiers et répertoires présent sur la partition.
Lorsque la deuxième commande s’achève, votre PC est près à être rebooté normalement. Une fois rebooté, ouvrez un terminal et lancez la commande:

$ df -T

Si tout c’est bien passé, la commande devrait afficher ext4 pour la partition que vous avez convertie.

Remarque: Si vous utilisez les commandes données dans cet article, n’oubliez pas de les adapter à vos besoins c’est à dire de veiller à utiliser les bons périphériques. Les partitions /home ou / ne correspondent pas nécessairement à /dev/sda6 et /dev/sda2 comme chez moi. Au besoin, avant de taper les commandes vérifiez avec la commande df pour connaître le pérphérique correspondant à la partition que vous voulez convertir.

Update: La vérification des disques qui se fait automatiquement tous les 30 redémarrages d’Ubuntu, ne prend plus que 2 minutes alors qu’en ext3, elle prenait +/- 6 minutes. C’est tout de même 3 fois moins long.

Check Disk au boot: une nuisance ?

Vous avez déjà dû vous en rendre compte parce que toute personne bootant Linux est amenée à devoir attendre, un jour ou l’autre, avant de pouvoir travailler sur son PC que Linux fasse un check du file system présent sur le disque.
Ma question est: est-ce encore nécessaire ? Et surtout, cela en vaut-il la peine ? Lorsque Ubuntu lance le check disk au boot, je dois régulièrement attendre plus de 6 minutes avant d’avoir un PC fonctionnel. Il est vrai qu’on peut annuler la vérification mais celle-ci est simplement postposée au reboot suivant dans ce cas. Je plains ceux qui ont un disque de plus de 500 GB, ils doivent sûrement attendre encore plus longtemps que moi.
A mon sens, sur un laptop que je redémarre plusieurs fois par jour, c’est devenu une réelle nuisance.
Si je fais le compte de mes problèmes de disque de ces dernières années, il est rare que le check disk du boot ait pu résoudre ou même prévenir un problème disque. Le seul cas où il me semble utile, c’est quand, pour une raison ou une autre, mon Linux s’est interrompu de manière abrupte sans que certains fichiers soient fermés proprement et qu’il y a un risque de corruption de données. Mais dans ce cas-là, le check disk se fait automatiquement. Dans tous les autres cas, le check disk me semble inutile. Qu’en pensez-vous ?

Voici comment ce check disk est organisé sous Linux.

Quelle partition doit être testée ?

La vérification du file system sur le disque est configurée dans le fichier /etc/fstab.
Par exemple, dans mon /etc/fstab, on trouve la ligne suivante qui correspond à la partition root:

UUID=184c4844-9a86-4284-b5b1-88c31829b32a /               ext3    errors=remount-ro 0       1

Dans cette ligne, le tout dernier paramètre (1) signale que cette partition doit être testée au boot. La valeur de ce paramètre peut prendre plusieurs valeurs:

0 = pas de check du file system
1 = ordre de préférence réservé pour /
2 ordre de préférence pour les autres partitions.

Il s’agit donc d’un ordre de préférence. La partition root doit être testée en priorité, suivie des autres partitions. Une valeur de 0 indique qu’on ne veut pas de vérification pour cette partition-là.
Autrement dit, si je ne veux plus que Linux teste ma partition, il suffit que je mette ce paramètre à 0 dans le fichier /etc/fstab.

Forcer le check disk

Si vous voulez forcer le check disk au prochain redémarrage de linux, il y a deux méthodes possibles.
La première est de créer un fichier vide, appelé forcefsck, à la racine du disque root:

$ sudo touch /forcefsck

Au rédémarrage, le check du file system sera lancé.

La deuxième méthode consiste à forcer le check disk directement dans la commande de reboot:

$ sudo shutdown -r -F now

Cette commande lance le reboot de la machine immédiatement en forçant la vérification du disque.

Quand faire le check disk ?

Par défaut, la vérification du disque se fait automatiquement tous les 30 redémarrages. Ce paramètre fait partie des caractéristiques de la partition et peut donc être modifié avec l’utilitaire tune2fs. Nous pouvons soit spécifier un nombre de redémarrage soit un nombre de jours (semaine ou mois) soit les deux. Par exemple:

$ sudo tune2fs -c 60 /dev/sda1

La commande modifie la vérification du disque pour que celle-ci se fasse tous les 60 redémarrages pour la partition /dev/sda1.

$ sudo tune2fs -i 15d /dev/sda2

Cette commande-ci demande que la vérification du disque se fasse tous les 15 jours.

Dans mon cas, j’ai modifié les partitions pour que le test ne se fasse plus tous les 30 redémarrages mais tous les 120. Cela fait un check disk tous les mois à peu près. Ca me semble suffisant. Mais je ne sis pas sûr de ne pas voulir supprimer carrément toute vérification.

Autofsck

Autofsck est une application qui tente de rendre le check disk plus user-friendly de façon à ne pas gêner l’utilisateur. La vérification du disque est transposée du boot au shutdown tout en laissant le choix à l’utilisateur de lancer la vérification ou non.
Malheureusement, cette application ne semble plus être très active sur le plan du développement. Elle a d’ailleurs disparu des dépôts, mais c’est peut-être une piste à expérimenter.

Installer Debian Wheezy

Toujours frustré par Unity, j’ai décidé de faire une infidélité à Ubuntu et à installer sur un de mes deux PC, Debian Wheezy à la place.
Pourquoi Debian ? Parce que pour un utilisateur d’Ubuntu, Debian n’est pas très différent et surtout parce que Ubuntu et Debian partage le même système de paquets. Pourquoi Wheezy ? Parce que la version stable de Debian est un peu trop ancienne à mon gout et que la version Sid est un peu trop instable pour un PC qui doit quand même fonctionner correctement. La version testing me semblait donc appropriée. Seul regret, que n’existe pas encore de version Rolling-Release de Debian.

Installation

La première chose à faire pour l’installer est de télécharger l’image iso et de la graver sur un CD.
Première frayeur, vous vous rendez sur le site de Debian et plus précisément dans les weekly-builds c’est à dire, les images construites chaque semaine et contenant les dernières mises à jour et vous constatez que Debian Wheezy comporte 54 images iso de CD. Rassurez-vous, vous n’êtes pas obligé de télécharger toutes ces images. Le premier CD suffit. Vous ne téléchargerez d’autres images que si vous n’avez pas de connexion Internet au moment de l’installation. Sinon, le premier CD suffit largement.

Lors du lancement de l’installation, veillez à avoir une connexion Internet filaire (avec un câble) parce que Debian n’installe pas les modules propriétaires non-libres nécessaires pour gérer certains composants hardware de votre PC et le wifi a justement besoin d’un de ces drivers non-libres. Lorsque Debian affiche le menu de démarrage, choisissez Graphical Install. Vous verrez que ce n’est pas fort différent d’une Ubuntu.
Lorsque Debian vous signalera que certains modules non-libres ne peuvent être installés, notez-les de façon à les installer plus tard.

Après l’installation

L’installation s’est faite sans problème; normal c’est une Debian. Que faire maintenant ?
La toute première chose que je fais, c’est ajouter l’utilisateur créé à l’installation dans le groupe sudo de façon à pouvoir utiliser sudo comme dans une Ubuntu sans devoir passer par root. Si vous regradez dans le fichier /etc/sudoers, vous verrez que tout est prévu. Il suffit que votre login fasse partie du groupe sudo pour pouvoir justement utiliser sudo:

$ su -
# adduser votre_login sudo
# exit

Déconnectez-vous puis reconnectez-vous de façon à ce que cela soit pris en compte.

La seconde chose à faire est de modifier le fichier /etc/apt/sources.list de façon à sélectionner les dépôts que vous allez utiliser. Pour cela, il existe un site générant automatiquement un fichier sources.list pour Debian: Debian Source List Generator.
Editez le fichier /etc/apt/sources.list et remplacez son contenu par celui proposé par le site ci-dessus:

$ sudo gedit /etc/apt/sources.list
$ sudo aptitude update

Si vous avez autorisé le dépôt non-free, vous devriez être capable d’installer maintenant les modules non-free nécessaires pour faire fonctionner tous les composants hardware de votre PC. Dans mon cas, il fallait que j’installe le module ipw2200-bss.fw pour faire fonctionner le wifi. Une recherche rapide m’a donné le nom du paquet contenant ce driver. Network Manager n’était pas installé non plus. Or, pour gérer les réseaux wifi et filaire, c’est tout de même pratique. Je l’ai installé dans la foulée de l’installation du driver:

$ sudo aptitude install firmware-ipw2x00
$ sudo aptitude install gnome-network-manager

Qu’installer d’autre ? Debian n’est pas très fourni en thèmes pour Gnome. Je vous invite donc à installer ce que vous trouverez dans les dépôts et à visiter le site Gnome-look.
Ensuite, installez vos applications préférées et profitez de votre Debian.