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: grmpf, NAT, réseau, système
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: Apache, Linux, proxy, système
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: concert, fourmis acidulées, rock
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 ! ![]()
Tags: rock
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: EXIF, exiftool, objectifs
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: concert, fourmis acidulées, paris, rock
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: article, Linux, Plague, RPM
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 là.
Tags: python
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: KVM, Linux, LVM, stockage, virtualisation
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: KVM, Linux, virtualisation, Xen
Posted in geekeries | Comments (0)