Limiter les connexions par adresse IP : mauvaise idée

May 16th, 2012 by nono

Je gère depuis un petit moment un serveur de miroirs relativement important accessible, entre autres, via FTP et HTTP. Vu l’amour immodéré que je porte à cette relique du siècle dernier qu’est FTP, j’ai limité les ressources qu’il peut consommer pour favoriser HTTP. Entre autres, j’ai choisi de limiter le nombre de connexions simultanées à deux par adresse IP, et tant pis pour les amoureux de NAT qui devraient rejoindre ceux de FTP dans leurs 20 ans de retard.

Sauf que ça casse l’accès FTP non seulement pour les boîtes NAT, mais aussi pour l’outil de monitoring du miroir Apache, qui pour une raison ou une autre ouvre plusieurs connexions simultanément. Mauvaise idée, donc.

Grmpf.

Tags: , , ,
Posted in geekeries | Comments (0)


Utiliser Apache comme mandataire inverse

March 22nd, 2012 by nono

Il y a quelques jours, j’ai dû (provisoirement) utiliser Apache comme mandataire inverse pour un de mes sites web. Vu que j’ai dû régler 2 ou 3 détails qui m’ont fait replonger dans la config d’Apache, un petit aide-mémoire.

Le cahier des charges : le site http://gallery.glou.org/ doit apparaître comme http://photos.glou.org/pwg/, sachant que http://photos.glou.org/ est déjà peuplé et se trouve sur une machine physique différente. Pourquoi ne pas utiliser simplement une redirection ? Simple : jusqu’à ce matin, la machine gallery.glou.org ne disposait pas d’une adresse IPv4 publique. Elle était par contre joignable normalement en IPv6. Ce problème étant résolu, la config décrite ici devrait disparaître dès que j’aurai un moment pour m’en occuper ; en attendant je la décris, elle pourrait resservir.

Travaillons d’abord sur photos.glou.org qui va jouer le rôle de mandataire. Il faut bien entendu y utiliser les modules Apache mod_proxy et mod_proxy_http pour la fonctionnalité de base ; ne pas oublier d’y ajouter mod_substitute pour réécrire les URL. Au final, la config (partielle) ressemble à ça :

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule substitute_module /usr/lib/apache2/modules/mod_substitute.so

<VirtualHost *>
  ServerName photos.glou.org

  .../...

  Redirect /pwg /pwg/
  ProxyPass /pwg/ http://gallery.glou.org/
  ProxyPassReverse /pwg/ http://gallery.glou.org/

  <Location /pwg/>
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|http://gallery.glou.org|http://photos.glou.org/pwg|"
  </Location> 

</VirtualHost>

En l’état, ça marche mais les logs sur gallery.glou.org montreront toutes les requêtes comme provenant du mandataire. On va donc indiquer à Apache (sur gallery, donc, cette fois-ci) d’utiliser le format combined classique pour les requêtes directes et d’indiquer l’adresse d’origine véritable en plus de celle du mandataire pour les requêtes qu’il relaie. Ça se dit comme ça :

# Une copie du format combined standard, au cas ou.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-std
LogFormat "%{X-Forwarded-For}i (via %h) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-proxy

SetEnvIf X-Forwarded-For ".+" proxiedrequest
CustomLog logs/proxy_log combined-std env=!proxiedrequest
CustomLog logs/proxy_log combined-proxy env=proxiedrequest

Voilà, maintenant ça juste marche.

Tags: , , ,
Posted in geekeries | Comments (4)


Les prochains concerts des Fourmis acidulées

February 25th, 2012 by nono

Pas moins de trois concerts prévus pour les deux mois qui viennent :

  • Le 17 mars à l’Époque, 81 rue du Cardinal Lemoine, Paris 5ème, à l’occasion de la St Patrick.
  • Le 24 mars au Mood’s, 13 passage du Moulinet, Paris 13ème, en compagnie de Coverbusters ; entrée 10 euros avec une boisson, ou 8 euros en prévente auprès du groupe (par mail à preventes [chez] fourmis-acidulees [point] fr ou en cliquant ici).
  • Le 14 avril au Cavern, 21 rue Dauphine, Paris 6ème.

On vous y attend nombreux !

Tags: , ,
Posted in musique | Comments (0)


Les vieux sont de retour

February 25th, 2012 by nono

Dans la série «les vieux sont de retour», je suis en train d’écouter le nouveau Van Halen, a Different Kind Of Truth, avec nul autre que David Lee Roth au chant. Une fois passé le premier morceau (Tattoo, je crois que c’est aussi le premier single, et il est, disons, dispensable), on les retrouve comme on les avait quittés il y a 25 ans. Encore ! Very Happy

Tags:
Posted in musique | Comments (0)


Remettre les objectifs en face des trous avec exiftool

February 12th, 2012 by nono

Un peu de contexte : j’ai un appareil photo Pentax K200D et un petit tas de vieux objectifs des années 60-70 entièrement manuels. Bien entendu, ces vieux objectifs (montés sur le boîtier via un adaptateur m42-Pentax K) n’embarquent aucune électronique, et le boîtier est donc incapable de les reconnaître. Tout au plus connaît-il à peu près leur focale : l’utilisateur (c’est moi :-) ) l’indique à la main pour régler le stabilisateur. À peu près, parce que l’interface de réglage ne connaît que certaines valeurs courantes (par exemple, pas moyen de régler le boîtier sur 105mm, je me rabats sur 100mm qui est la valeur possible la plus proche).

Du coup j’ai un peu joué avec exiftool pour remettre les données EXIF en face des trous. Par exemple, pour le concert de vendredi dernier, j’ai utilisé mes trois Takumar (systématiquement à pleine ouverture, ça me simplifie la tâche) ; j’utilise le bout de script suivant pour enregistrer les infos pertinentes dans les photos :

cd /le/repertoire/ou/j/ai/mis/mes/photos
exiftool -FocalLength="105.0 mm" -FNumber=2.8 \
    -FocalLengthIn35mmFormat="157.5 mm" \
    -LensModel="SMC Takumar 105mm f/2.8" \
    -if '$focallength eq "100.0 mm"' -ext jpg .
exiftool -FNumber=1.8 \
    -LensModel="Super Takumar 55mm f/1.8" \
    -if '$focallength eq "55.0 mm"' -ext jpg .
exiftool -FNumber=3.5 \
    -LensModel="Super Takumar 35mm f/3.5" \
    -if '$focallength eq "35.0 mm"' -ext jpg .
rm *_original

Et voilà, c’est cuit ! :-)

Tags: , ,
Posted in geekeries, photos | Comments (0)


Les Fourmis au Mood’s le 24 mars

February 8th, 2012 by nono

Nous partagerons à nouveau la scène avec les Coverbusters le 24 mars prochain. Ça se passe au Mood’s, près de Tolbiac, à Paris 13ème. Plus de détails sur le site des Fourmis.

Les pré-ventes sont à 8 euros avec une conso (au lieu de 10 sur place) en écrivant au groupe (preventes [chez] fourmis-acidulees [point] fr) ou en cliquant ci-dessous.

Tags: , , ,
Posted in musique | Comments (0)


Nouvel article : Plague

February 4th, 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.

Tags: , , ,
Posted in geekeries | Comments (0)


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

January 27th, 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 .

Tags:
Posted in geekeries | Comments (0)


Déplacer une VM KVM «à la main»

January 18th, 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. :-)

Tags: , , , ,
Posted in geekeries | Comments (0)


Migrer une VM de Xen vers KVM

January 17th, 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? :-)

Tags: , , ,
Posted in geekeries | Comments (0)