To content | To menu | To search


Tuesday 25 June 2013

Mangiare ?

Ubuntu a fini par s'imposer sur toutes mes machines ces dernières années, un peu par flemme il faut le dire: c'est ce que j'installe quand je commence un nouveau boulot, et que j'ai besoin d'un PC utilisable rapidement (je n'ai guère envie, par exemple, de me palucher Samba pour accéder aux répertoires partagés). Or il s'avère que j'ai récupéré un ordi "du taf" chez moi, qui a remplacé la tour qui fonctionnait sous Gentoo.

Je regrette l'aspect "rolling release" de Gentoo, U(bo)buntu pète quelque chose à presque chaque mise à jour, c'est-a-dire tous les 6 mois, c'est un peu pénible à la longue. Mais bon, compiler tous les paquets pour gagner 3 pouillèmes de perf aussi... Donc plutôt que de réinstaller une Gentoo, j'ai commencé à lorgner vers une distrib' qui s'en rapprochait, mais en binaire, qui plus est à la mode chez les barbus: Arch Linux.

Installation dans une VM pour tester, c'est sympa, c'est léger, c'est faaaast. Par contre une installe à base de "pacstrap /mnt base base-devel" et autres "genfstab -U -p /mnt >> /mnt/etc/fstab", c'est juste pas possible, surtout quand on a un seul PC. La mort dans l'âme, j'avais reporté aux calendes grecques l'écriture d'un script d'install qui me ferait ça automatiquement, comme je le fais pour mes serveurs, pour l'installer "en vrai"...

Jusqu'à ce que je tombe sur ce billet, et surtout son premier commentaire qui conseille l'installation de Manjaro, qui serait à Arch ce qu'Ubuntu est à Debian. En fait Manjaro apporte surtout ce qui fait le plus défaut à Arch: un installeur digne de ce nom.

Quelques heures après l'installation tout fonctionne et je fais joujou avec pacman et yaourt, mes nouveaux amis !

Sunday 31 March 2013

oups

La Tourmentine et tous ses services ont été inaccessibles pendant un peu plus de 24 heures. La faute à l'un des anciens serveurs que j'ai redémarré en vue du grand nettoyage avant de le rendre à m'sieur OVH.

Or, au démarrage mes serveurs lancent Heartbeat qui s'occupe, entre autre, de basculer l'IP failover qui sert de porte d'entrée principale à toute mon infrastructure. Le serveur en question étant l'ancien "master", il a tout naturellement squatté la VIP, en privant le serveur actif...et tout le monde arrivait sur un serveur mort :-/

Et moi, étant connecté en ipv6, je n'ai rien vu pendant tout ce temps, car je ne passait pas par la VIP...ipv4.

Et je n'ai pas vu non plus le mail de chez OVH m'informant de la "connexion au manager" faite par le serveur. C'est un peu la lose.

Cela a eu au moins le mérite de mettre le doigt sur une méchante faille de mon système de supervision, que je vais m'empresser de corriger !

Sunday 24 March 2013

commencent vraiment à me faire chier ces deux-là !

merci youtube

Voila ce que j'obtiens quand je veux consulter les vidéos d'Arte+7 à partir de mon proxy préféré. Après une rapide recherche j'apprends que le célèbre ProxFree, qui offre un "proxy Youtube", propose un seul serveur en France, à...Roubaix.

Voila voila.

Le comble étant que même sans proxy, il semble impossible d'utiliser VLC pour lire les vidéos; du coup, j'ai une bande passante asthmatique ET une vidéo qui rame. SUPAIR.

Tout ça parce que deux boites, qui sont loin d'être à la rue, se font une petite guéguerre à propos du peering. Pathétique.

Je ne suis pas prêt à me passer de Youtube. Par contre pour ce qui est des FAI, j'ai l'embarras du choix, et je ne vais plus tarder à en changer.

Saturday 16 March 2013

du...du hast... (3)

L'aventure HASTienne c'est terminé hier soir avec un gros crash du pool primaire, avec un fort peu poli "I/O Error" en tentant de ré-importer le pool HAST sur le second serveur. Malaise.

Vu les problèmes de lock que j'avais depuis la mise en prod, j'ai tenté le tout pour le tout: abandonnant HAST, j'ai créé de nouveaux datasets ZFS pour stocker mes précieuses données (que j'ai récupéré des backups de la veille, du coup), et j'ai ensuite synchronisé les deux serveurs à grands coups de snapshots ZFS différentiels.

Voici le principe: on commence par faire un snapshot (full) du dataset à répliquer, et on l'envoi sur l'autre serveur. On renomme ensuite, sur chaque serveur, le snapshot afin qu'il serve de référence pour les prochaines synchros:

serveur1# zfs snapshot servers/pool1/home@newsync
serveur1# zfs send servers/pool1/home@newsync | ssh -q serveur2 "zfs receive -vFd servers"
serveur1# zfs rename servers/pool1/home@newsync servers/pool1/home@prevsync
serveur2# zfs rename servers/pool1/home@newsync servers/pool1/home@prevsync

Un script à mettre en crontab sur le serveur maitre va se charger ensuite d'envoyer les snapshots différentiels; l'ancien snapshot est supprimé après transfert, et le nouveau est renommé afin qu'il serve de base aux suivants.

#!/bin/sh

bro="serveur2"
pools="pool1 pool2"


echo "`date`: ZFSync starting."
for pool in $pools
do
        dataset="servers/${pool}/home"
        echo "making new snapshot for ${pool}"
        zfs snapshot ${dataset}@newsync
        echo "sending snapshot"
        zfs send -i prevsync ${dataset}@newsync | ssh -q ${bro} "zfs receive -vFd servers"
        if [ $? -eq 1 ]
        then
                echo "error, exiting"
                exit $?
        fi
        echo "cleaning"
        zfs destroy ${dataset}@prevsync
        zfs rename ${dataset}@newsync ${dataset}@prevsync
        ssh -q ${bro} "zfs destroy ${dataset}@prevsync && zfs rename ${dataset}@newsync ${dataset}@prevsync"
done

echo

La gestion d'erreur, embryonnaire, demande encore a être améliorée ;)

Avec cette méthode, la synchro de trois datasets prends moins de trois minutes, pour environ 10 Go de données.

À noter qu'en temps normal le second serveur n'utilise pas les datasets en question: ils ne sont pas montés, à la place on utilise un montage NFS hébergé sur le premier serveur (zfs set sharenfs=on $dataset) pour que les éventuelles données écrites par le second serveur ne soient pas écrasées. En cas de bascule, les montages NFS sont démontés et les montages ZFS sont remontés à leur place, via heartbeat.

Billets connexes

Saturday 9 March 2013

du...du hast... (2)

Suite de mes aventures HASTiennes: après la découverte du merveilleux mode async, je me suis rendu compte à la longue que ce n'était pas si async que ça, et que j'avais toujours - mais moins - ces méchants freeze impactant directement les services ftp, web et mail.

Résultat, la mort dans l'âme, je me suis résolu à ressortir le hack immonde que j'avait gribouillé lors de mes premiers essais:

#!/bin/sh

POOL="data"
HASTCTL="/sbin/hastctl"
TIMEOUT=300

starttime=`date +%s`

${HASTCTL} role secondary ${POOL}

while true
do
        timestamp=`date +%s`
        curenttime=`echo "$timestamp - $starttime" | bc`
        if [ $curenttime -gt $TIMEOUT ]
        then
                echo "sync takes too much time. exiting."
                exit 1
        fi

        ${HASTCTL} status ${POOL} | grep complete > /dev/null

        if [ $? == 0 ]
        then
                sleep 2
                ${HASTCTL} role init ${POOL}
                #echo "sync finished."
                exit 0
        fi
done

À mettre en crontab tous les quarts d'heure. c'est sale mais ça rame déjà beaucoup moins.

Billets connexes

Sunday 3 March 2013

ssssss (c'est pas du Python, c'est du Chameau)

Pour mes divers besoins (coucou Free) j'utilisais jusqu'à maintenant un proxy SOCKS, 3proxy, qui fonctionne bien avec Firefox (via l'outil ultime FoxyProxy, dont je ne dirais jamais suffisamment de bien) pour mater YouPornTube.

Malheureusement, chipset Intel + 64bit + Flash = pas d'accélération matérielle...ça rame. C'était bien la peine de mettre un proxy pour libérer la bande passante.

L'idée est donc d'utiliser VLC pour voir les vidéos, tout en profitant de l'effet de notre proxy magique. Problème, VLC segfault, pas grand chose dans les logs, la syntaxe à vomir (voir billet précédent...) de 3proxy ne motive pas vraiment à chercher une solution, mais plutôt à chercher une autre solution.

Heureusement, un autre mec a eu le même genre de besoin (et visiblement le même genre d’à-priori négatifs vis-a-vis de 3proxy) et à fini par...écrire son propre soft, sss.pl (je vous avais bien dit que c'était du Chameau)

Simple comme j'aime, il suffit de le télécharger, et de le lancer avec l'IP et le port en paramètres, avec un login/pass si vous voulez. Et ça marche...à moi les vidéos HD en streaming !

Friday 1 March 2013

Les bons outils de merde #1: les mails

L'autre jour au taf il y avait un problème avec un serveur de mail, et rapidement le besoin de filtrer les mails est soulevé. Quelqu’un demande: "Il y a procmail sur cette machine ?"

procmail.

Depuis que je fais de la messagerie (plus de 10 ans), cette daube est considérée comme la référence en matière de MDA, alors que depuis au moins le même nombre d'année, un soft performant aurait logiquement du le remplacer: maildrop.

Un exemple vite fait: trier un mail venant d'un certain expéditeur. voici les confs

  • procmail:
:0 H
* ^From.*toto@spam.com
$MAILDIR/.SPAM/
  • maildrop:
if (/^From:.*(toto@spam.com)/)
{
  log ">>> Mail successfully delivered to SPAM directory"
  exception {
    to "$MAILDIR/.SPAM/"
  }
}

Choisis ton camps camarade :) En plus de sa syntaxe limpide, on voit que maildrop inclus la possibilité d'envoyer des messages personnalisés au syslog, pratique pour les stats et/ou le debug.

Mais impossible de parler de procmail sans parler de son copain non moins (mais heureusement de moins en moins) célèbre, j'ai nommé fetchmail.

fetchmail, codé au whiskey pur malt par ESR, cumule les tares: en plus d'avoir une syntaxe à vomir, il se paye le luxe de ne pas gérer le format Maildir (modernité), et dans certains cas peut même perdre des mails. Il serait même sujet aux buffer overflows...

Préférez-lui donc une alternative qui corrige tout ça (et qui, jamais ne perdra un seul mail): getmail.

Pour finir, sur les serveurs où on trouve le couple infernal, on retrouve évidemment (puisque pas de Maildir), le format mbox. Pleins de mails, un seul fichier. Vas-y pour virer un mail dedans. Avec Maildir, on supprime le fichier correspondant, et c'est fini...

Et non, je ne parlerai pas d'Exchange™®© dans les outils de merde, même si il y a à en dire :)

du...du hast...

Depuis la mise en place de ma nouvelle infra du futur actuel, j'avais des méchants bloquages en essayant d'accéder à mes fameuses partitions cluster-style. Je ne savais pas trop d'où cela venait (cryptage des disques, réplication, lock NFS...) jusqu'à ce que je stoppe la réplication HAST sur le second nœud. Et là, miracle, plus de lags.

J'ai commencé par écrire un script qui activait périodiquement la réplication. Sale. J'ai continué de creuser, envisageant les trucs les plus fous (export de snapshots ZFS, retour au rsync...) et puis j'ai tenté le tout pour le tout: j'ai modifié le mode de réplication de "fullsync" en "async", mode le plus approprié pour deux serveurs distants (rappel: les serveurs sont dans deux DC différents), mais mode "non implémenté" d'après ce qu'on peut lire ici et . Et vous savez quoi ?

Ça marche.

Donc étant donné que le man est plus à jour que la doc officielle, il faut ajouter la ligne suivante au fichier /etc/hast.conf de chaque nœud:

replication async

Et bien sûr relancer hastd.

Billets connexes

Tuesday 26 February 2013

déménagement (ouais encore)

Nouveau changement de serveurs pour la tourmentine: depuis dimanche soir les services sont hébergés dans 2 nouveaux datacenters !

Au niveau des nouveautés:

  • FreeBSD 9.1
  • MariaDB en remplacement de MySQL (kikoo Oracle)
  • Disques cryptés
  • HAST pour la redondance (fini les rsync qui durent des plombes), montage NFS (via ZFS) sur le serveur secondaire car le volume HAST ne peut être monté sur les deux nœuds en même temps

Il y a bien évidemment des changement de DNS, ainsi que la disparition des IPv6 virtuelles, remplacées par du round-robin DNS (c'est pas très propre mais bon), mais tout ça devrait rester relativement transparent.

La carte du failover est jouée à fond, le serveur principal étant maintenant deux fois plus puissant que le secondaire, et le failover pensé dans une optique maitre/esclave.

Il ne reste donc plus qu'a nettoyer les anciens serveurs avant de les rendre :)

Sunday 16 December 2012

L'antispam pour les nuls

Utilisateur comblé de Dotclear, j'étais victime depuis quelques temps de spam dans les commentaires, ce qui n'est pas bien grave dans le sens ou lesdits commentaires sont modéré à priori.

Mais c'est fatiguant d'avoir à surveiller les posts pour avoir 99% du temps de la merde à lire.

Or, Dotclear utilise entre autre le service Akismet pour filtrer les commentaires. Frustré par l’inefficacité de ce dernier, j'ai finalement été voir dans les paramètres, pour me rendre compte...que celui-ci était désactivé par défaut, faute de clé d'accès à l'API.

Une inscription pour obtenir cette clé plus tard, tous les nouveaux spams ont été filtrés. C'est magique.

Reste qu'envoyer des données un peu perso comme des commentaires à un service externe, c'est un peu moyen; je suis déjà à la recherche de quelques alternatives, si vous en avez faites-moi signe...dans les commentaires !

Billets connexes

- page 17 of 30 -