Nouvel article : Plague

04/02/2012 by nono

Ça fait un bon moment que je devais le publier ici-même : mon article sur Plague initialement publié dans GNU/Linux Magazine France est en ligne.

Posted in geekeries

Le piège à con du jour : variables locales en python

27/01/2012 by nono

Note pour plus tard. Soit un bout de code python qui ressemble à ça:

mavariable = None

def fonction():
  if mavariable is None:
    mavariable = 'toto'
  blablabla()

Ne pas oublier que dans ce cas la variable mavariable est locale à la fonction à cause de l'assignation à l'intérieur du if. La preuve :

>>> fonction()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in fonction
UnboundLocalError: local variable 'mavariable' referenced before assignment

Grmpf.

Merci à Sam qui a fouillé dans la doc : c'est effectivement écrit .

Posted in geekeries

Déplacer une VM KVM «à la main»

18/01/2012 by nono

Le contexte

J'ai une petite ferme de serveurs physiques sous Scientific Linux 6 qui hébergent des machines virtuelles KVM gérées par libvirt. J'utilise des volumes logiques LVM comme disques virtuels.

La plupart des VM ne sont pas critiques et supportent d'être arrêtées quelques minutes; par contre il vaut mieux ne pas les arrêter trop longtemps. Tout le problème est donc de recopier au moins le gros des données sans arrêter la VM.

Pour l'exemple, je déplacerai une VM vm1, dont le disque virtuel est sur /dev/vg00/vm1, de la machine physique host1 à sa soeur host2. On supposera pour l'exemple que les deux machines sont identiques; en tout cas il vaut mieux qu'elles disposent de la même version du paquet qemu-kvm. Et quand je dis la même version c'est la même version au patch près, sinon la VM risque de ne pas démarrer sur le nouvel hôte.

L'outil

Je sais faire la même manip avec des isolateurs à la place des VM: un coup de rsync et c'est marre. Ah, si rsync savait se débrouiller à peu près efficacement avec un périphérique bloc... Et ben ça existe, ça s'appelle lvmsync, c'est un script ruby qu'il suffit de poser sur les deux machines hôtes. En dehors de ça, vous aurez besoin de dmsetup (normalement il est installé, il fait partie du paquet device-mapper qui est lui-même une dépendance de libvirt) et root devra pouvoir se connecter en ssh sur host2 depuis host1.

La méthode

On commence par créer le volume logique sur host2:

lvcreate -l640 -nvm1 vg00

À adapter évidemment, il doit être identique à l'original qui se trouve sur host1.

Ensuite, sur host1, on prend un instantané du disque de la VM et on le copie sur host2:

lvcreate -L10G -s -nvm1-snap /dev/vg00/vm1
dd if=/dev/vg00/vm1-snap bs=10M | ssh root@host2 dd of=/dev/vg00/vm1 bs=10M

On peut maintenant éteindre la VM, puis synchroniser le disque. Ensuite on exporte la configuration de la VM.

virsh shutdown vm1
lvmsync /dev/vg00/vm1-snap host2:/dev/vg00/vm1
virsh dumpxml vm1 | ssh root@host2 'cat > /var/tmp/vm1.xml'

Reste plus, sur host2, qu'à importer et démarrer la VM:

virsh define /var/tmp/vm1.xml
virsh start vm1

Une fois que c'est fait, on peut faire le ménage sur host1:

virsh undefine vm1
lvremove /dev/vg00/vm1-snap
lvremove /dev/vg00/vm1

C'est prêt!

Et ça va quand même vachement plus vite comme ça. Maintenant, il va falloir écrire un bout de script pour emballer tout ça, on verra ça un autre jour. :-)

Posted in geekeries

Migrer une VM de Xen vers KVM

17/01/2012 by nono

Un petit aide-mémoire sur la migration d'une machine virtuelle Linux de Xen (sur CentOS 5.x, mais ça ne doit pas jouer énormément) vers KVM (sur Scientific Linux 6.x, donc avec libvirt). L'essentiel de ce qui suit vient de cette page.

Préparation de la machine virtuelle

J'ai donc une VM Xen, appelons-la testxen1 (parce que c'est son nom), qui tourne sur l'ancien serveur. L'OS installé sur la VM est un CentOS 5. Sur cette machine virtuelle (qui tourne encore):

  • éditer /etc/inittab, enlever le getty(8) qui tourne sur la console Xen et décommenter ceux des terminaux virtuels habituels;
  • installer un noyau Linux «normal» (pas un noyau Xen);
  • éditer /etc/fstab et remplacer les disques virtuels Xen (xvda, xvdb et ainsi de suite) par des disques IDE (hda, hdb...). NB: pas évident que cette étape soit partout la même, ça dépend peut-être de la version du noyau; à tester.
  • enlever le paramètre console=xvc0 du nouveau noyau dans /boot/grub/menu.lst, et s'assurer que le nouveau noyau est bien sélectionné par défaut;
  • installer grub:
[root@testxen1 ~]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> device (hd0) /dev/xvda
device (hd0) /dev/xvda
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
quit

C'est fini pour la machine virtuelle, on peut maintenant l'arrêter.

Sur la nouvelle machine physique

On commence, bien sûr, par copier l'ancien (ou les anciens) disque(s) virtuel(s) sur la nouvelle machine. Dans mon cas, il s'agit de volumes logiques LVM, on fait bêtement ça à grands coups de dd(1). Reste juste à créer la nouvelle VM:

virt-install --connect qemu:///system -n testxen1 -r 1024 --vcpus=1 \
 --disk /dev/vg00/testxen1 --vnc --os-type linux --accelerate \
 --network=bridge=br102,model=virtio,mac=12:00:02:e3:00:01 \
 --noreboot --keymap us --import

Quelques notes en vrac:

  • bien évidemment, remplacer le nom de la machine (ici testxen1) par ce qu'on veut;
  • idem pour la mémoire (option -r) et le nombre de processeurs (option --vcpus);
  • dans le cas où on a plusieurs disques virtuels, on peut répéter plusieurs fois l'option --disk, avec le disque de démarrage en premier;
  • pour l'option --network, replacer br102 par le nom du pont réseau qui va bien (si vous avez une config réseau différente, va falloir chercher :-)) et bien entendu l'adresse MAC par la bonne valeur.

Voilà, vous allez voir démarrer votre nouvelle VM sous vos yeux zébahis. Elle est pas belle, la vie? :-)

Posted in geekeries

Retour (raté) au pays du wifi

03/01/2012 by nono

J'en ai parlé ici même il y a quelques temps, j'ai échoué un peu par hasard et beaucoup par malchance avec un point d'accès wifi D-Link. Je l'avais plus ou moins laissé moisir dans un coin (et avec son firmware d'origine) faute de possibilité de l'utiliser avec OpenWrt. J'ai voulu m'en resservir il y a quelques jours : une brique, 2 ou 3 mois après l'expiration de sa garantie. Ça s'allume, témoin de mise en marche ambre (il devrait pas être vert, normalement ?), pas de wifi, pas de lien ethernet sur aucun de ses ports, pas de cheat code magique pour remettre un firmware en face des trous.

Au programme : acheter un point d'accès qui marche. Pas un D-Link, cette fois-ci.

Posted in geekeries

Quelques extensions Firefox, 2 ans après

23/12/2011 by nono

Il y a un peu plus de deux ans (ça nous rajeunit pas), j'ai parlé de quelques extensions Firefox. J'utilise toujours l'excellentissime FxIF, j'ai par contre jeté les deux autres. En plus de FxIF, donc, et bien entendu de l'indispensable Adblock Plus, j'utilise depuis peu :

  • Status-4-Evar, la résurrection de la barre de statut de Firefox 3,
  • It's All Text! pour éditer les zones de texte des formulaires avec emacs,
  • Expiry Canary, pas que j'en aie vraiment eu besoin jusqu'à présent, j'ai une sonde Nagios qui fait la même chose sur mes sites, mais pourquoi pas ?

Posted in geekeries

Hardos cherchent zikos, le retour

21/12/2011 by nono

J'en ai parlé le mois dernier, le groupe commence à prendre forme. On cherche encore quelqu'un qui puisse tenir une guitare ou un clavier en fonction des morceaux. Le répertoire est loin d'être totalement arrêté, mais ça semble vouloir aller grosso-modo de Europe à Slayer en passant par Dream Theater et Ozzy Osbourne.

Comme la dernière fois, si ça vous branche, hardos@glou.org

Posted in musique

Les Fourmis acidulées en concert le 20 janvier

21/12/2011 by nono

Premier concert de 2012 pour les Fourmis : le vendredi 20 janvier 2012 au Cavern, 21 rue Daupine, Paris 6ème, à partir de 20h. On vous attend nombreux !

Posted in musique

Hardos cherchent zikos

15/11/2011 by nono

Une petite annonce, ça faisait longtemps. :-)

Nous sommes un guitariste et un bassiste, la trentaine, et nous cherchons à monter un groupe de reprises hard-métal. A priori nous avons tous les deux des influences métal «classique» mais nous sommes ouverts quant au choix des morceaux, rien n'est vraiment arrêté pour le moment. Nous visons une répétition par semaine, plutôt en soirée, sur Paris sud, et à terme un concert de temps en temps. Pas de compos, pas de tournée internationale, juste des petites scènes pour se faire plaisir.

Nous cherchons donc au moins un chanteur et un batteur, et éventuellement un clavier ou un deuxième guitariste, ou idéalement quelqu'un qui puisse faire les deux.

Pour me contacter : hardos@glou.org

Posted in musique

Sauvegardes à la maison, le retour

31/10/2011 by nono

J'ai déjà expliqué mon utilisation de BackupPC à la maison. À l'usage, c'est assez bien adapté à la sauvegarde en local de petites quantités de données externes, typiquement c'est très bien pour sauvegarder mes sites web sur mon PC. Par contre, dès qu'il s'agit de sauvegarder des données sur un disque externe (typiquement mes photos, qui ne tiennent pas sur les disques durs de mes serveurs), ce n'est pas l'outil adéquat.

Dans l'article mentionné plus haut, j'évoquais rapidement mon utilisation de rdiff-backup pour  la sauvegarde de mon PC principal. Depuis j'ai découvert et commencé à utiliser l'excellentissime rsnapshot, qui a l'avantage de rendre la restauration des données triviale (en gros, une sauvegarde est matérialisée par un répertoire sur le disque, et les fichiers s'y trouvent en clair, il suffit de les relire). Il restait juste à l'adapter à l'utilisation sur un disque dur externe, qui peut changer de point de montage (en pratique, si je le monte en tant que root, c'est /mnt/backups, si je le monte en tant que moi, c'est /media/quelquechose).

La config adaptée tient en deux fichiers. Pour commencer un rsnapshot.conf situé à la racine du disque externe (ou dans le sous-répertoire consacré aux sauvegardes, s'il ne s'agit pas du disque entier). Voici l'essentiel de son contenu :

config_version  1.2

include_conf    ./rsnapshot-root

no_create_root  1

cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du          /usr/bin/du

interval        backup  60

verbose         2
loglevel        3
logfile /var/log/rsnapshot
lockfile        /var/run/rsnapshot.pid

# LOCALHOST
backup  /root/          carrosse/
backup  /home/          carrosse/
backup  /etc/           carrosse/

La partie intéressante est bien sûr la ligne include_conf. Il contient quoi, donc, ce fichier rsnapshot-root ? Eh bien il est généré, bien entendu, par le deuxième fichier dont je parlais plut haut, à savoir un Makefile (situé dans le même répertoire que rsnapshot.conf). Le contenu du Makefile, donc :

backup: config
        rsnapshot -c ./rsnapshot.conf -V backup

config:
        echo '# Fichier genere, ne pas editer. -- Arnaud' > ./rsnapshot-root
        echo -e snapshot_root\\t$$(pwd)/RSNAPSHOT/ >> ./rsnapshot-root

Et voilà, c'est prêt. La sauvegarde se lance en tapant bêtement make dans le bon répertoire. C'est pas beau ça ?

Posted in geekeries