Archives auteur

IA : intervention du 07/12/2009

Voilà c’est fini ! Tous les serveurs de mon entreprise ont été migrés au nouveau centre d’hébergement. Si la précédente intervention (27/11) a été éprouvante pour ma part avec 12 h non stop (en majorité à cause d’un serveur récalcitrant), aujourd’hui tout s’est déroulé dans les temps (6 h) et sans pépin. Les 9 serveurs concernés par cette intervention ont donc rejoint un rack tout neuf. Il reste encore un serveur à racker en haut, mais rien ne presse pour l’instant. Un grand merci à ma visseuse électrique qui a pu optimiser les temps de montage/démontage.

En prime, quelques photos de la nouvelle installation.

eZ Publish : traduction des fichiers PHP UTF-8

Ayant participé à la migration ezPublish 4 d’un site bancaire luxembourgeois au cours de l’année précédente, mon collègue m’avait reporté un problème concernant l’outil de traduction ezlupdate chargé d’extraire les chaînes à internationaliser. L’outil fourni par eZ à cette époque n’acceptait pas l’extraction de chaînes depuis des fichiers PHP au format UTF-8, alors qu’il le supportait  au niveau des templates.

J’ai donc dû modifier les sources de la version Qt 3 et générer un nouveau parseur. L’outil a rempli son rôle et je vous en fait part : ezlupdate-source-hb-20090217.tar.gz

Pour compiler les sources :

cd /<ezroot>/support
tar czf ezlupdate-source-hb-20090217.tar.gz
cd ezlupdate-HB
qmake ezlupdate.pro
make

N’oubliez pas d’installer Qt 3 et ses outils de développement pour la commande qmake. Pour l’utiliser, il faut ajouter l’option –utf8 pour pouvoir créer le fichier de traduction :

/bin/linux/ezlupdate -e extension/test/ -no eng-GB --utf8

Note : la nouvelle version d’ezlupdate basée sur Qt 4 semble à présent gérer les scripts PHP UTF-8 – quasiment un an après – mais il subsiste des problèmes avec les traductions commentées et les traductions dans les javascripts.

Roundcube : plugin vacation disponible sur github

Je viens d’ouvrir un dépôt git public sur github pour mon plugin vacation RoundCube. C’est par ici : http://github.com/bhuisgen/rc-vacation/.

Pour cloner le dépôt, lancez la commande suivante :

$ git clone git://github.com/bhuisgen/rc-vacation.git

IA : intervention du 21/11/2009

Mon intervention nocturne s’est bien passée. Elle avait pour but initial de vérifier l’état de l’installation avant la migration physique qui se déroulera en deux temps, le 28/11 et 5/12.  Le programme de ces 6 heures nocturnes était :

  • le redémarrage des 15 serveurs pour validation et anticipation des filecheck forcés.
  • la mise à jour et la validation des nouveaux noyaux 2.6 : optimisations, support IPv6 pour certains et correction des problèmes existants liés à grsecurity / udev / smartd. Magique, les claviers USB sont reconnus :)
  • la vérification des paramètres BIOS pour permettre le reboot électrique distant.
  • le dérackage d’un serveur candidat à une réinstallation OS 64 bits 32 bits de mes deux mains.

Il n’y a pas eu de problème particulier si ce n’est un script iptables généré par Firewall Builder dernier cri, qui ne fonctionne pas sur le nouveau noyau 2.6.28 IPv6 ready (erreur shell sur un test if, à croire que FWB s’est trompé dans l’ordre d’initialisation). Au passage, j’ai encore une fois perdu 30 minutes minimum + 10 km + toutes les contraintes de sécurité liées pour un KVM qui ne fonctionne pas, en précisant que cette fois-ci c’était écran + clavier KO. Le téléphone aussi était KO mais çà je peux le rebooter. Alors un merci chaleureux à ceux qui ont débranché cet accès primordial…

Je vous fait part de quelques photos de l’installation, avant de vous montrer celles du nouveau rack dans les prochaines semaines.

pop-before-smtp : regex pour Dovecot

Attention à la dernière mise à jour de Dovecot sur Gentoo … le format de log a changé. Si vous utilisez pop-before-smtp, voici les nouvelles expressions régulières à utiliser :

$logtime_pat = '(\w+ \d+ \d+:\d+:\d+)';
$pat = '^[LOGTIME] (?:imap|pop3)-login: Info: Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';

Mac OS X : masquer un utilisateur de la login box

Pour masquer un compte utilisateur de la login box de Mac OS (et également du menu de permutation / Fast Switch User), la commande à saisir est la suivante en spécifiant le compte à la fin :

$ sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add postgres

Le compte utilisateur masqué reste évidemment toujours actif. Pour masquer l’élément « Autre… » de la login box (en mode liste), c’est cette commande :

$ sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool false

Roundcube : plugin vacation 0.3.1

Cette version 0.3.1 fixe une erreur liée aux options de configuration LDAP.

plugin-vacation-0.3.1.tar.gz

Exim : nettoyage du spool

Exim gère son spool par des fichiers bases de données, stockés dans /var/spool/exim/db. Sont enregistrés le statut de chaque message envoyé / refusé / bloqué vers les serveurs SMTP externes et locaux, comme par exemple celui du filtre antivirus amavisd-new. En cas de plantage ou surcharge du serveur, l’antivirus peut refuser la soumission de mail. Exim en retour interrompt l’envoi des mails pour la période de retry et des messages de ce type peuvent apparaître dans les journaux  :

2009-11-03 10:19:27 1EjCDp-0045dF-BP == email@my.domain R=amavis  T=amavis defer (-53): retry time not reached for any host

Pour débloquer l’envoi, il faut nettoyer des bases de données grâce à la commande exim_tidydb, supprimant toutes les entrées obsolètes. Ainsi, pour relancer la soumission des mails :

# exim_tidydb -t 7d /var/spool/exim/ retry

Le délai de suppression est fixé à 7 jours, ce qui est suffisant. Pour afficher le contenu d’une base de données, exim_dumpdb vient en renfort :

# exim_dumpdb /var/spool/exim/ retry
03-Nov-2009 15:46:51  03-Nov-2009 16:07:20  03-Nov-2009 16:22:20
 T:cluster12.us.messagelabs.com:216.82.250.35 111 77 Connection refused
28-Oct-2009 11:06:07  29-Oct-2009 11:11:03  29-Oct-2009 17:11:03
 T:example.com:192.0.32.10 110 321 Connection timed out
03-Nov-2009 11:36:24  03-Nov-2009 22:33:54  04-Nov-2009 03:37:39
 R:v@luxe.diplo.de:<info@amcham.lu> -44 12877 SMTP error from remote mail server after RCPT TO:<v@luxe.diplo.de>: host mx1.bund.de [77.87.224.134]: 450 4.7.1 <info@amcham.lu>: Sender address rejected

Pour automatiser ce nettoyage, ces commandes peuvent être placées en exécution journalière :

# exim_tidydb -t 7d /var/spool/exim/ retry
# exim_tidydb -t 7d /var/spool/exim/ misc
# exim_tidydb -t 7d /var/spool/exim/ wait-amavis
# exim_tidydb -t 7d /var/spool/exim/ wait-remote_smtp

Les noms des fichiers doivent correspondre à votre installation, donc au contenu de /var/spool/exim/db.

Roundcube : plugin de gestion des vacations

Voici la nouvelle version de mon plugin de gestion des répondeurs pour RoundCube version 0.3. Elle s’appuie à présent sur l’API plugin de RoundCube, ce qui permet une installation en moins de cinq minutes. Au niveau des nouveautés, les drivers de stockage permettent une configuration sur mesure. Sont fournis le driver SQL et le driver LDAP qui couvrent entre autres l’utilisation de PostfixAdmin et Gnarwl. Si cela ne suffit pas, à vous de coder votre driver !

plugin_vacation

plugin-vacation-0.3-20091008.tar.gz

ChangeLog :
- support de l’API plugin RC.
- driver de stockage : SQL, LDAP.
- support des messages au format HTML.

NetBSD : configuration RAID1 avec RAIDframe

Je vais vous guider dans la configuration d’un RAID1 logiciel avec RAIDFrame sous NetBSD. Cette procédure fonctionne également sous OpenBSD (votre noyau devant intégrer le support RAIDframe) ou encore FreeBSD 4/5. Le RAID peut être créé à chaud sans LiveCD et à distance, mais il est recommandé d’avoir un accès au BIOS setup. Si vous ne faites pas d’erreur de calcul ou de frappe, tout se passera bien sinon pensez d’emblée à faire une backup !

La procédure consiste à créer le RAID1 initialement sur le second disque, à y recopier le système et les données « live » du premier disque. Suite à cela, un redémarrage activera le RAID du second disque, auquel le premier disque sera ajouté.

Etape 1 : installation du système

Je débute par l’installation d’un système NetBSD 5.0.1/amd64. Le système est installé sur le premier disque dur SCSI (/dev/sd0) d’une capacité de 8 Go (l’exemple est ici réalisé sous VMware), dont l’ensemble est affecté au slice de NetBSD (partition DOS 0). Au niveau des partitions BSD, je crée le strict minimum par souci de simplification du présent guide : /, swap et  /home.

netbsd# grep sd0 dmesg.boot
sd0 at scsibus0 target 0 lun 0: <VMware,, VMware Virtual S, 1.0>
 disk fixed
sd0: 8192 MB, 1044 cyl, 255 head, 63 sec, 512 bytes/sect x 16777216
 sectors
netbsd# grep sd1 dmesg.boot
sd1 at scsibus0 target 1 lun 0: <VMware,, VMware Virtual S, 1.0>
 disk fixed
sd1: 8192 MB, 1044 cyl, 255 head, 63 sec, 512 bytes/sect x 16777216
 sectors

netbsd# fdisk /dev/sd0
Partition table:
0: NetBSD (sysid 169)
 start 63, size 16777153 (8192 MB, Cyls 0-1044/85/1), Active

netbsd# disklabel -r sd0
# /dev/rsd0d:
total sectors: 16777216

16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   8401995        63     4.2BSD   2048 16384     0
 b:    273105   8402058       swap
 c:  16777153        63     unused      0     0
 d:  16777216         0     unused      0     0
 e:   8102053   8675163     4.2BSD   2048 16384     0

La partition d est reservée et correspond au disque dur (la taille de 16777153 correspond bien à la taille du slice NetBSD). La partition c est aussi réservée et correspond au slice NetBSD, englobant toutes les partitions définies par l’utilisateur : a (point de montage /), b (swap) et e (/home). Comme j’utilise tout l’espace disque, la taille de c correspond à celle du disque moins les 63 blocs réservés par l’ID de slice. Ceci se matérialise au niveau de l’offset de c par rapport à d et également de a, qui débute fatalement au  63ème bloc.

A retenir :

  • total sectors = size d
  • size c = size d – 63
  • offset c = offset a = 63

Etape 2 : partitionnement du 2ème disque dur (/dev/sd1)

Le slice NetBSD doit être reproduit à l’identique sur le second disque. Si  les disques ont des tailles différentes, il faut jouer avec fdisk pour créer un slice de la taille de celui du premier disque. Parfois, il est utile d’effacer la table des slices, si le disque a déjà été partitionné :

netbsd# dd if=/dev/zero of=/dev/rsd1d bs=8k count=1

netbsd# fdisk -0ua /dev/rsd1d
Partition table:
0: NetBSD (sysid 169)
 start 63, size 16777153 (8192 MB, Cyls 0-1044/85/1), Active
 PBR is not bootable: All bytes are identical (0x00)

Au niveau des partitions, c’est différent : une unique partition dédiée au RAID est créée. Cette partition va devenir le pseudo-périphérique disque RAID. C’est sur celui-ci que nos partitions /, swap et /home seront créées. RAIDframe impose cette limitation de ne fonctionner que sur une seule partition par disque.

Sur /dev/sd1, on édite la table des partitions et on créé la partition a avec comme type RAID, de taille égale à l’espace disque total moins les 63 blocs d’identification. Pour faire simple, il suffit de dupliquer la ligne de la partition c pour le slice a et y changer le type.

netbsd# disklabel -r -e -I sd1
total sectors: 16777216

4 partitions:
#    %
Haut de page