Séminaire sysadmin

June 18th, 2010 by nono

Votre serviteur (c’est moi) causera de choses vachement passionnantes au séminaire sysadmin du 2 août prochain. Plus de détails quand je saurai ce que je vais dire.

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


Retailler des photos

June 7th, 2010 by nono

Retailler des photos, c’est facile. Un p’tit coup de convert ou de mogrify et c’est tout bon.

Sauf qu’en vrai, c’est un peu moins évident que ça. Il leur manque une fonctionnalité élémentaire : un critère sur la taille du fichier obtenu (en gros, un mogrify -geometry 800×800 -max-filesize 200K). C’est dommage, j’en aurais bien l’utilité pour publier des photos sur certain site web. Du coup, j’ai bricolé en vitesse un petit bout de fonction zsh pour retailler des photos en 800×800, 200 Ko maximum.

Il y a plein de trucs codés en dur dedans et on sent bien mes restes de programmation de mon enfance, mais ça marche à peu près. ;-)

## Retaillage en 800x800, 200 Ko pour PentaxOne
resize4p1 () {
    if [[ $# -ne 1 ]]
    then
	echo "usage: resize4p1 source.jpeg"
	return 1
    fi
    source=$1
    dest=$(basename $source .jpeg).small.jpeg
    if [[ ! -f $source ]]
    then
	echo "E: Source file ${source} does not exist."
	return 1
    fi
    if [[ -f $dest ]]
    then
	echo "E: Destination file ${dest} already exists."
	return 1
    fi

    # Premiere passe en dur, pas beau mais initialise le "until" comme il faut.
    echo -n "Quality 100 ... "
    convert -antialias -geometry 800x800 -quality 100 $source $dest
    filesize=$(du -sk $dest | awk '{ print $1 }')
    echo "done -- file size is $filesize KB."

    q=99
    until [[ $filesize -lt 200 ]]
    do
	echo -n "Quality $q  ... "
	convert -antialias -geometry 800x800 -quality $q $source $dest
	filesize=$(du -sk $dest | awk '{ print $1 }')
	echo "done -- file size is $filesize KB."
	q=$(($q - 1))
	if [[ $q -lt 1 ]]
	then
	    echo "E: Quality 1 is not small enough -- unexpected error."
	    return 1
	fi
    done
}

Tags: ,
Posted in geekeries | Comments (0)


Alias mail et LDAP

March 26th, 2010 by nono

- Dis, Nono, comment on fait pour gérer des alias mail avec un annuaire LDAP ?
- Bouge pas mon gars, je te sers un café et je te montre.

Les fiches LDAP

Chez moi, une fiche LDAP peut comprendre jusqu’à 4 attributs différents liés au mail :

  • mail contient l’adresse « officielle » de l’utilisateur
  • mailLocalAddress contient ses alias locaux ; ils seront réécrits et remplacés par la valeur de l’attribut mail en sortie de site
  • mailAcceptingAddress contient des alias « en réception seule », typiquement pour les groupes de travail
  • mailRoutingAddress contient la destination des messages envoyés aux mailAcceptingAddress et mailLocalAddress de la fiche

En termes de schéma LDAP, nous avons ajouté ça au schéma de base d’OpenLDAP :

attributetype ( 1.3.6.1.4.1.7568.1.1.10
    NAME 'mailAcceptingAddress'
    DESC 'RFC822 alternate email address of this recipient'
    EQUALITY caseIgnoreIA5Match
    SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

objectclass ( 1.3.6.1.4.1.7568.1.2.2 NAME 'ircamLocalMailRecipient' AUXILIARY
    DESC ''
    MAY ( mailAcceptingAddress ) )

objectclass ( 1.3.6.1.4.1.7568.1.2.10 NAME 'ircamAlias' SUP top STRUCTURAL
    DESC ''
    MAY ( mailRoutingAddress ) )

La classe d’objet ircamAlias ne sert que pour la gestion des alias indépendants des utilisateurs (listes de diffusion et redirections « vers l’extérieur » notamment). Nous allons la laisser de côté pour le moment.
Concrètement, un utilisateur ressemble à ça :

dn: uid=empion, ou=People, dc=example, dc=com
objectClass: account
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: ircamLocalMailRecipient
objectClass: inetOrgPerson
objectClass: pilotPerson
objectClass: ircamAccount
objectClass: shadowAccount
objectClass: organizationalPerson
objectClass: person
objectClass: ircamPerson
uid: empion
mailRoutingAddress: empion@mailboxes.example.com
mailAcceptingAddress: tout-le-monde@example.com
mailAcceptingAddress: groupe-de-travail@example.com
mailLocalAddress: tartempion@example.com
mailLocalAddress: tarte.empion@example.com
mail: Tarte.Empion@example.com
sn: Empion
cn: Tarte Empion
uidNumber: 12345
gidNumber: 333

La configuration de Postfix

Postfix, c’est bien. Si, si. Je sais que vous en êtes déjà convaincus, mais c’est encore une occasion de le dire. Pour utiliser ce qui précède, il suffit de ces quelques lignes de config dans main.cf :

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = ldap:ldapcanon
ldapcanon_server_host = ldap.example.com
ldapcanon_server_port = 389
ldapcanon_search_base = dc=example,dc=com
ldapcanon_query_filter = (&(mailLocalAddress=%s)(mail=*))
ldapcanon_result_attribute = mail

virtual_maps = ldap:ldapvirt
ldapvirt_server_host = ldap.example.com
ldapvirt_server_port = 389
ldapvirt_search_base = dc=example,dc=com
ldapvirt_query_filter = (|(mailLocalAddress=%s)(mailAcceptingAddress=%s))
ldapvirt_result_attribute = mailRoutingAddress

C’est tout, rien de tordu à faire. Une fois ce bout de config en place, l’adresse source tartempion@example.com sera réécrite en Tarte.Empion@example.com (techniquement, tarte.empion@example.com sera réécrite aussi, mais ça ne fera ni chaud ni froid à la plupart des systèmes de courrier électronique actuels), et les messages envoyés à tarte.empion@example.com, tartempion@example.com, tout-le-monde@example.com et groupe-de-travail@example.com seront renvoyés à empion@mailboxes.example.com (et éventuellement à d’autres si ces mêmes alias sont aussi définis dans d’autres fiches). Elle est pas belle, la vie ?

Les scripts

OK, maintenant on sait à quoi les données peuvent ressembler, mais est-ce qu’il y a un outil plus simple que ldapvi pour les mettre dans l’annuaire ? Oui et non. J’ai bricolé récemment une petite série de scripts pour éditer l’attribut mailAcceptingAddress d’une fiche ; en pratique, c’est le seul qui varie plus ou moins souvent, les autres sont fixés à la création du compte. Les outils en question sont téléchargeables ici. L’archive contient :

  • le module ircamldap.py qui initialise quelques variables utiles (serveur LDAP, mot de passe admin…)
  • son fichier de configuration ircamldap.cfg
  • les scripts add-mail-alias, remove-mail-alias et get-mail-aliases qui font l’essentiel du vrai boulot.

Pour l’utilisation de ces derniers, j’ai essayé de faire assez simple pour mes deux neurones ; en pratique, ça donne ça :

% get-mail-aliases empion
tout-le-monde@example.com
groupe-de-travail@example.com
% add-mail-alias empion monnouvelaliasquilestbien@example.net
% get-mail-aliases empion
tout-le-monde@example.com
groupe-de-travail@example.com
monnouvelaliasquilestbien@example.net
% remove-mail-alias empion monnouvelaliasquilestbien@example.net tout-le-monde@example.com
% get-mail-aliases empion
groupe-de-travail@example.com
%

Pour le moment, ces outils marchent à peu près mais il ne faut pas leur en demander trop. Entre autres, leur gestion des erreurs est assez minimale, et ils ne positionnent pas forcément toujours leur code de retour comme il faudrait. Ce sera pour la prochaine version. :-)

Bien entendu, je suis preneur de toute suggestion, amélioration, patch ou autre « mais t’es con, ça fait 10 ans que ça existe en mieux ».

- Il est bizarre, ton café.
- Normal, c’est une bière. Tu es admin système ou pas ?

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


Ikea s’attaque au datacenter

February 28th, 2010 by nono

Ça valait bien le coup de claquer 7000 euros dans des baies, tiens.

http://lackrack.org/

Tags: ,
Posted in geekeries | Comments (0)


Photoblog : pixelpost

February 13th, 2010 by nono

Ça fait un moment que je projetais de publier une galerie photo à peu près montrable. On m’a signalé il y a quelques jours un moteur de photoblogs, Pixelpost. J’ai installé ça ce matin pour voir, mise en pratique ici.

Notes pour les admin système

À vue de nez, ça se présente comme une appli web classique. D’une part, c’est du PHP-MySQL et ça se pose sur place sans trop réfléchir. D’autre part c’est un gros foutoir qui mélange allègrement son propre code, les modules additionnels et les données. Pas encore regardé si on peut en faire une installation propre, faudra voir.

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


Quelques extensions Firefox

December 6th, 2009 by nono

Quelques extensions Firefox qui me rendent la vie un peu plus agréable :

  • CustomizeGoogle permet entre autres d’enlever les liens publicitaires de Google, d’anonymiser les requêtes (dans une certaine mesure) et de refuser de parler à Google Analytics
  • Facebook Video permet de télécharger les vidéos de Facebook, même sans avoir de greffon propriétaire installé
  • FxIF affiche les infos EXIF d’une image dans ses propriétés

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


Les Fourmis acidulées font de la pub

November 15th, 2009 by nono

C’est là : http://www.facebook.com/pages/Les-Fourmis-Acidulees/338807440301 et là : http://www.myspace.com/fourmisacidulees.

Tags:
Posted in musique | Comments (0)


Les Fourmis acidulées le 14 novembre 2009

November 9th, 2009 by nono

Ça se passe aux Trois Arts, 21 rue des rigoles, dans le 20ème arrondissement de Paris, à partir de 20h.

concert-14-novembre-3arts

Tags: ,
Posted in musique | Comments (0)


Quand on fait faire une traduction par un stagiaire…

October 22nd, 2009 by nono

Ça donne à peu près ça.

Avant :
back-orig

Après :
back

Tags:
Posted in geekeries | Comments (0)


S’il te plaît, dessine-moi un cluster !

October 16th, 2009 by nono

Juste un petit lien vers une doc Linux-HA que je trouve au premier abord claire et bien foutue : celle de Novell/SuSE. Claire et bien foutue, ça veut surtout dire que j’ai à peu près compris ce qu’il y a dedans, ce qui n’est pas forcément le cas de celles que j’avais pratiquées jusqu’alors.

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