À l'ombre du tigre à rayures

Aller au contenu | Aller au menu | Aller à la recherche

lundi 29 décembre 2014

Améliorer simplement une installation d'Ubuntu

Ce petit aide-mémoire recense les modifications permettant d'optimiser le fonctionnement d'une distribution Ubuntu.

Paramétrage disque

Le fichier /etc/fstab

Le fichier /etc/fstab indique au système quels disques utiliser. Il a le format suivant :

# <file system>                            <mount point>  <type>       <options>                   <dump>  <pass>
proc                                       /proc          proc         defaults                    0       0
UUID=be35a709-c787-4198-a903-d5fdc80ab2f8  /              ext4         errors=remount-ro           0       1
UUID=413eee0c-61ff-4cb7-a299-89d12b075093  /home          ext4         defaults                    0       2
UUID=cee15eca-5b2e-48ad-9735-eae5ac14bc90  none           swap         sw                          0       0
/dev/scd0                                  /media/cdrom0  udf,iso9660  user,noauto,exec,utf8       0       0
  • La première colonne indique la référence périphérique (de la partition).
  • La deuxième le point de montage, c'est-à-dire l'endroit où le contenu du disque sera accessible dans le système de fichier.
  • La troisième le format de la partition.
  • La quatrième les options de montage.

Attention ! Modifier le fichier /etc/fstab peut empêcher votre système de redémarrer.

L'option noatime

L'option noatime indique au système de ne pas comptabiliser les dates de dernier accès à chaque fichier et à chaque répertoire. Cela évite des écritures disques lors de l'accès en lecture aux fichiers. Cela améliore donc les performances de système et diminue l'usure des disques, sans aucun inconvénient pour l'utilisateur, la date de dernier accès étant peu fiable et peu utile.

Utilisation : pour tous les disques de type ext2, ext3, ext4, vfat et ntfs, ajoutez l'option noatime. Si la seule option indiquée est defaults, remplacez defaults par noatime.

Après modification, le fichier devrait ressembler à ça :

# <file system>                            <mount point>  <type>       <options>                   <dump>  <pass>
proc                                       /proc          proc         defaults                    0       0
UUID=be35a709-c787-4198-a903-d5fdc80ab2f8  /              ext4         noatime,errors=remount-ro   0       1
UUID=413eee0c-61ff-4cb7-a299-89d12b075093  /home          ext4         noatime                     0       2
UUID=cee15eca-5b2e-48ad-9735-eae5ac14bc90  none           swap         sw                          0       0
/dev/scd0                                  /media/cdrom0  udf,iso9660  user,noauto,exec,utf8       0       0

Pour en savoir plus :

Paramétrage mémoire

Les paramètres vm.dirty_bytes et vm.dirty_background_bytes

Ces 2 paramètres contrôlent l'écriture sur disque des fichiers. Lorsqu'un programme cumule vm.dirty_background_bytes octets en attente d'écriture, on commence à les écrire sur disque en tâche de fond. Lorsqu'un programme cumule vm.dirty_bytes octets en attente d'écriture, on passe à une écriture directe sur le disque.

Pour des PC fixe 64 bits, le paramétrage par défaut n'est pas adapté. Le paramétrage ci-dessous permet d'éviter les blocages du systèmes lors de l'écriture de grands fichiers.

Utilisation : créez un fichier /etc/sysctl.d/60-local-dirty-bytes.conf contenant les 2 lignes :

vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 33554432

Ces deux valeurs ont été obtenus selon la très scientifique méthode du doigt mouillé. N'hésitez pas à les ajuster si vous le jugez nécessaire.

Ce paramétrage permet d'éviter les blocages du systèmes lors de l'écriture de grands fichiers.

Ce paramètre n'est pas applicable à un portable, car il peut augmenter la fréquence des écritures disques et donc augmenter la consommation électrique du portable.

Cas particulier de Xubuntu

Sous Xubuntu, du fait d'un défaut du paquet pm-utils, il est nécessaire de désactiver le script /usr/lib/pm-utils/power.d/laptop-mode pour que ce paramètre soit pris en compte. Pour cela, éditez ce fichier et ajoutez en 2e ligne la commande exit 0 :

 #!/bin/sh
 
 exit 0
 
 . "${PM_FUNCTIONS}"
 
 VM="/proc/sys/vm"
 vmfiles="laptop_mode dirty_ratio dirty_background_ratio 
          dirty_writeback_centisecs"

Pour en savoir plus :

lundi 28 juillet 2014

EuroPython 2014 : 5 présentations à voir

Les 5 conférences ci-dessous ont été présentées en anglais lors de la conférence EuroPython 2014. Les sujets abordés peuvent vous intéresser, même si vous n'êtes pas des programmeurs Python.


Will I still be able to get a job in 2024 if I don't do TDD
Pourrais-je encore trouver du travail en 2024 si je ne pratique pas le développement piloté par les tests ?

La présentation la plus marquante de cette conférence. À voir absolument si la programmation vous intéresse.


The Sorry State of SSL
SSL en mauvais état

Vous gérez un site internet ? Vous développez une application en ligne ? Cette présentation vous dira tout ce que vous devez absolument savoir pour que votre site ne soit pas une horrible passoire. À voir !


DevOps Risk Mitigation: Test Driven Infrastructure
L'infrastructure pilotée par les tests : limiter les risques de l'approche DevOps

Comment mettre en place une chaîne de production logicielle qui permettent de réduire drastiquement les délais de mise en production. Une conférence fascinante.


What can python learn from Haskell?
Qu'est-ce que Python peut apprendre d'Haskell ?

Cette conférence offre un panorama remarquables des défis auxquels le langage Python doit faire face.


Python for Zombies
Python pour les zombies

Comment, avec très peu de moyens, former à Python des milliers d'élève. Impressionnant.


Conversion des fins de lignes entre Unix et Windows

C'est la méthode la plus simple que j'aie trouvée. Elle nécessite de disposer d'un awk autorisant l'emploi d'expressions rationnelles comme séparateur d'enregistrements (RS). De plus, elle marche sur des fichiers comportant à la fois des fins de lignes Unix et DOS, sans ajouter de lignes blanches parasites.

L'utilisation de la variable BINMODE[1] est optionnelle. Sur les awk compatibles, elle désactive les conversions implicites des fins de lignes.

Cette procédure a été testée avec gawk, mawk et busybox awk[2]. Elle ne marche pas avec le awk original.

Convertir des fins de lignes Unix (LF) en fins de lignes DOS (CR-LF)

Utiliser la commande awk suivante :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }'

Par exemple :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' fichier.unix.txt > fichier.dos.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n'êtes pas en UTF-8[3]) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' | gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' | recode u8..dump-with-names

Convertir des fins de lignes DOS (CR-LF) en fins de lignes Unix (LF)

Utiliser la commande awk suivante :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }'

Par exemple :

gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' fichier.dos.txt > fichier.unix.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n'êtes pas en UTF-8) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' | gawk -v BINMODE=3 -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' | recode u8..dump-with-names

Notes

[1] Cf. la documentation de gawk et la documentation de mawk.

[2] L'option -v BINMODE=3 est inutile avec busybox awk.

[3] Par exemple l1 pour Latin 1 (ISO-8859-1) et l9 pour Latin 9 (ISO-8859-15), lancez recode -l pour obtenir la liste complète des codages.

Modifier le navigateur par défaut sous Xubuntu (et tous les dérivés de Debian)

Sous Xubuntu, lorsque plusieurs choix existent pour la même commande, le logiciel utilisé par défaut sur la machine sera défini au travers du mécanisme des alternatives.

Il s'agit d'un mécanisme système de bas niveau. Les environnements de bureau comme XFCE ont leur propre mécanisme de sélection, mais qui ne couvre pas tous les cas.

Le mécanisme des alternatives fonctionne de la façon suivante : par défaut, une note est attribuée à chaque alternative pour une commande donnée. L'application ayant la meilleure note sera sélectionnée par défaut. Il est ensuite possible à un administrateur de sélectionner manuellement une autre commande moins bien noté (mais mieux adapté à ses besoins).

Il pourra s'agir de commandes réelles (quelle version de java doit-on utiliser lorsque l'utilisateur utilise la commande java) ou de commandes virtuelles (par exemple, une application appellera la commande x-www-browser pour invoquer le navigateur par défaut).

Pour définir manuellement le navigateur par défaut sous Xubuntu, suivez la procédure suivante :

  • Lancez le « Configurateur d'alternatives » (dans « Tous les paramètres » sous Xubuntu).
  • La fenêtre de paramétrage des alternatives apparaît :

galternatives.png

  • Dans la liste de gauche (« Alternatives »), sélectionnez « x-www-browser », qui définit la commande servant à appeler le navigateur par défaut.
  • À droite (dans « Options »), apparaît la liste des navigateurs disponibles. Sélectionnez la navigateur voulu dans cette liste.
  • Fermez le « Configurateur d'alternatives ».

lundi 10 mars 2014

Xubuntu peut-il parler français ?

Si vous avez essayé d'utiliser la synthèse vocale sous Xubuntu, vous aurez constaté que le résultat n'est pas terrible, voire pas terrible du tout :

spd-say "Essai de la synthèse vocale"

Ce n'est pas difficile à expliquer, la synthèse vocale sous Ubuntu est paramétrée pour l'anglais. Donc les textes français sont prononcés avec un affreux accent anglais...

Il est possible d'utiliser Pico-TTS (https://github.com/rhdunn/svox), qui offre une bien meilleure prononciation du français :

  • Installez pico TTS et Speech-dispatcher :
sudo apt-get install libttspico-utils speech-dispatcher
  • Ouvrez le fichier « /etc/speech-dispatcher/speechd.conf » :
sudo nano /etc/speech-dispatcher/speechd.conf
  • Dans ce fichier, modifiez les lignes définissant le type de voix et la langue :
DefaultVoiceType  "MALE1"
DefaultLanguage "fr"
  • Puis, décommentez la ligne activant le module « pico-generic », en supprimant le « # » en début de ligne :
AddModule "pico-generic" "sd_generic" "pico-generic.conf"
  • Enfin, modifiez le module par défaut, afin d'utiliser « pico-generic » :
DefaultModule pico-generic
  • Sauvegardez le fichier « /etc/speech-dispatcher/speechd.conf » modifié.
  • Pour terminer, arrêtez le service de gestion de la synthèse vocale (il se relancera automatiquement) :
killall speech-dispatcher
  • Puis testez le paramétrage que vous venez de réaliser :
spd-say "Essai de la synthèse vocale"

Attention, ne lancez pas la synthèse vocale avec une commande sudo, cela l'empêcherait de fonctionner par la suite :

https://bugs.launchpad.net/ubuntu/+...

jeudi 14 février 2013

Gérer un wiki MoinMoin 1.9 sous Linux

Vous venez d'installer un wiki MoinMoin. Vous croyez en avoir fini. Et bien non, détrompez-vous, il vous reste beaucoup de choses à faire... Petit inventaire :

Limiter la durée des sessions

Par défaut, MoinMoin permet aux utilisateurs de conserver une session ouverte sans limite de durée. Ce n'est pas forcément une bonne idée en termes de sécurité.

Vous pouvez limiter la durée des sessions des utilisateurs connectés, en ajoutant le paramètre cookie_lifetime dans le fichier de paramétrage de votre wiki :

cookie_lifetime = (0, -4)

Ici, les sessions utilisateur sont limitées à 4 heures, ce qui est généralement suffisant.

Nettoyer les sessions obsolètes

L'administrateur est responsable du nettoyage des fichiers correspondant aux sessions. Pour cela, il doit programmer régulièrement la commande de nettoyage (1 fois par jour est une bonne fréquence).

Créez un fichier /etc/cron.daily/local-moin-nettoyage-sessions contenant la commande de nettoyage des sessions obsolètes :

/bin/su - compte_moin -c "/usr/bin/moin --config-dir=/chemin/vers/le/wiki --wiki-url=http:/monwiki.org.example/ maint cleansessions > /dev/null 2>&1"

(Cf. http://sourceforge.net/p/moin/mailm...)

Relancer le wiki une fois par jour

C'est l'option recommandée par les développeurs de MoinMoin pour limiter les impacts d'une éventuelle fuite mémoire.

Effectuer une rotation des journaux

En plus des journaux de MoinMoin, pensez également à programmer une rotation du fichier data/event-log, qui sinon va continuer sa course vers l'infini :

/chemin_vers_les_journaux_moin/*.log {
        copytruncate
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
}

/chemin_vers_le_wiki/data/event-log {
	daily
	missingok
	rotate 7
        compress
        delaycompress
        notifempty
}

Pour aller plus loin

Jetez un œil sur la page Améliorer les performances de MoinMoin.

lundi 8 août 2011

De l'art de reconstruire les mirroirs...

Ça y est, c'est fait, l'un des disques qui composait votre belle partition en RAID 1 vient de tomber.

Bon, ça devait bien arriver un jour, mais maintenant, on fait quoi ?

Pour l'exemple, je supposerai que vous disposez de deux partitions RAID 1 (md0 et md1), construite à partir des partitions 1 et 2 des deux premiers disques (sda1 et sdb1 pour md0, sda2 et sdb2 pour md1).

Identifier le disque

Pour commencer, il faut identifier le disque à l'origine de tout ça :

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[0]
      31246272 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[0]
      31246272 blocks [2/2] [UU]
   
unused devices: <none>

Le mirroir sda1 de md0 est toujours là, mais il est tout seul.

Jetons maintenant un œil au journal système :

# grep md0 /var/log/syslog
kernel: [  954.420430] md/raid1:md0: Disk failure on sdb1, disabling device.
kernel: [  954.420432] md/raid1:md0: Operation continuing on 1 devices.
mdadm[1948]: Fail event detected on md device /dev/md0, component device /dev/sdb1
mdadm[1948]: SpareActive event detected on md device /dev/md0, component device /dev/sdb1

Là, pas de doute, suite à un problème sur la partition sdb1, le système l'a enlevé de l'ensemble RAID.

Avant de continuer, récupérons le numéro de série du disque sdb :

# smartctl -i /dev/sdb
smartctl 5.39b 2010-05-11 r3120 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint T166 series
Device Model:     SAMSUNG HD501LJ
Serial Number:    S0MUJ1MPC07654
Firmware Version: CR100-12
User Capacity:    500 107 862 016 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 3b
Local Time is:    Mon Aug 15 17:10:36 2011 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Connaître le numéro de série permettra d'être sûr de retirer le bon disque (au lieu de retirer le disque qui marche).

Retirer les partitions toujours actives

Le second ensemble RAID est toujours là. Il utilise une partition de notre disque défectueux.

Pour éviter les problèmes, nous allons la retirer :

# mdadm /dev/md1 --fail /dev/sdb2
# mdadm /dev/md1 --remove /dev/sdb2

Nous avons donc maintenant :

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[0]
      31246272 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
      31246272 blocks [2/1] [U_]
   
unused devices: <none>

Plus aucune partition n'utilise le disque sdb.

Démonter l'ancien disque et installer le nouveau

Là, à vous de jouer. Surtout, vérifiez avec le numéro de série que vous retirez bien le bon disque :-)

Partitionner le nouveau disque

Votre nouveau disque est en place.

Si vous aviez utilisé un partitionnement identique pour vos deux disques (ce que je vous recommande), il vous suffit maintenant de recopier la table de partition du disque sda sur le nouveau disque (sdb) :

# sfdisk -d /dev/sda | sfdisk /dev/sdb

Hum... Ne vous trompez pas de disque... Surtout pas...

Reconstruire le RAID

C'est presque fini. Pour terminer, il suffit d'insérer les nouvelles partitions dans l'ensemble RAID :

# mdadm /dev/md0 --add /dev/sdb1
# mdadm /dev/md1 --add /dev/sdb2

Jetons un œil au résultat :

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[2]
      31246272 blocks [2/1] [U_]
      [>....................]  recovery =  0.0% (1024/31246272) finish=857.8min speed=8618K/sec

md1 : active raid1 sda2[0] sdb2[2]
      31246272 blocks [2/1] [U_]
              resync=DELAYED

unused devices: <none>

Il ne reste plus qu'à surveiller la reconstruction avec un petit :

# watch cat /proc/mdstat

Et voilà. C'est fini !

Enfin, quand même, si vous avez besoin de redémarrer, attendez la fin de reconstruction du RAID :-)

vendredi 15 juillet 2011

Intégrer Squirrelmail à votre bureau Linux

Voici un petit script très simple qui permet d'utiliser Squirrelmail comme un logiciel de messagerie classique avec Firefox, XFCE, et cætera :

https://github.com/fevrier/squirrel...

mardi 5 juillet 2011

De l'art de surveiller les scripts...

Écrire un script, c'est bien, mais, si le script est lancé automatiquement, il est judicieux de disposer d'un journal permettant de s'assurer de son bon fonctionnement[1]...

J'ai mis en place il y a peu un script chargé d'apprendre à spamassassin à reconnaître des messages indésirables. Ce script lance la commande sa-learn, et pour savoir s'il fonctionne bien, je veux savoir ce qu'a affiché sa-learn.

La commande logger

Pour enregistrer un message dans le journal système (/var/log/syslog[2] sur une distribution Débian), on peut utiliser une commande très pratique : logger.

Par exemple :

logger -p user.info -t mon_script "Mon message"

fera apparaître le message suivant dans le journal système :

Jun 21 22:12:24 mon_serveur mon_script: Mon message
Un premier essai

Il suffit donc de prendre les messages affichés par sa-learn et de les envoyer à logger :

MA_SORTIE="$( sa-learn --spam "${FICHIER}" 2>&1 )"
logger -p user.info -t mon_script "Resultat : ${MA_SORTIE}"

Cependant, nous ne pouvons pas être sûr que sa-learn renverra une seule ligne[3].

La même chose... En mieux

Le plus simple serait de fusionner les lignes affichées par sa-learn avant de les enregistrer dans le journal[4].

Ce que l'on peut faire simplement une ligne de awk :

sa-learn --spam "${FICHIER}" 2>&1 | gawk -v ORS="" 'NR > 1 { print " -/- " } ; { print }'

Donc, au bout du compte, c'est tout simple :

RESULTAT_COMMANDE="$( sa-learn --spam "${FICHIER}" 2>&1 | gawk -v ORS="" 'NR > 1 { print " -/- " } ; { print }' )"
logger -p user.info -t mon_script "sa-learn => ${RESULTAT_COMMANDE}"

En deux lignes, on lance sa-learn et on renvoie son résultat dans le journal système.

Notes

[1] Les programmes informatiques sont comme ça, si personne ne les surveille, ils font n'importe quoi.

[2] Le fichier journal utilisé dépendra du paramétrage du démon syslogd, de la priorité choisie (ici, info) et de la catégorie du message (ici, user)

[3] En général, les messages des journaux systèmes sont sur une seule ligne, ce qui permet de les exploiter simplement avec des outils Unix comme grep et logcheck.

[4] Attention ! On parle ici de fusionner une ou deux lignes, pas plus.

dimanche 22 mai 2011

Un écureuil, un éléphant et un peu de sel

Le module change_sqlpass de Squirrelmail permet de modifier un mot de passe conservé dans une base PostgreSQL.

Lors du paramétrage de ce module, il faut avoir la réponse à une question très technique, qui risque de vous laisser pantois : comment déterminer de grain de sel (salt en anglais) utilisé dans vos mots de passe.

Un grain de sel ?

Un peu d'histoire. Sous les systèmes de type Unix, les mots de passe sont chiffrés avec un chiffrement non réversible (autrement dit, on ne peut pas retrouver votre mot de passe à partir de sa version chiffrée).

Lorsque vous vous connectez, on chiffre le mot de passe que vous entrez et on le compare au mot de passe officiel (déjà chiffré). Pas besoin donc de savoir le déchiffrer.

Cependant, cette méthode simple présente plusieurs inconvénients. Si deux utilisateurs ont le même mot de passe, cela sera immédiatement visible en regardant la table des mots de passe. De même, il est très simple d'effectuer une recherche systématique de mots de passe, en chiffrant un à un tous les mots d'un dictionnaire et en les comparant aux mots de passe de tous les utilisateurs.

Pour mitiger ces problèmes, on s'est résolu à ajouter un grain de sel aux mots de passe. Chaque utilisateur se voit attribuer un code différent (le grain de sel) qui modifie le mot de passe chiffré obtenu et est conservé avec le mot de passe.

Pour vérifier le mot de passe, on prend donc le mot de passe de l'utilisateur, le grain de sel lu sur le mot de passe enregistré, on les utilise pour recréer un mot de passe chiffré et on les compare au mot de passe chiffré enregistré.

Avantage, 2 utilisateurs avec les même mots de passe auront des mots de passe chiffrés différents. Et une recherche exhaustive de mots de passe devra maintenant se faire utilisateur par utilisateur, ce qui sera significativement plus long (enfin, en théorie. l’existence d'immenses tables de mots de passes pré-calculées relativisant un peu cet avantage).

Bon, concrètement, on fait quoi ?

Revenons à change_sqlpass. Dans le cas d'un mot de passe chiffré avec PHPCRYPT, le grain de sel se trouve dans les 2 premiers caractères du mot de passe. Il faut donc utiliser une requête comme celle-ci pour récupérer le grain de sel :

$csp_salt_static = '';
$csp_salt_query = "SELECT substr( mot_de_passe_chiffre, 1, 2 ) FROM table_utilisateur WHERE nom = '%2'";

Dans le cas d'un mot de passe condensé avec MD5, aucun grain de sel n'est utilisé :

$csp_salt_static = '';
$csp_salt_query = '';

Enfin, dans le cas d'un mot de passe chiffré avec MD5CRYPT, le format du mot de passe chiffré est : $1$gain_de_sel$mot_de_passe_chiffré. On peut dont récupérer le grain de sel avec une requête du type :

$csp_salt_static = '';
$csp_salt_query = "SELECT split_part( mot_de_passe_chiffre, '$', 3 ) FROM table_utilisateur WHERE nom = '%2'";

(Un petit correctif de documentation a été remonté à l'équipe Squirrelmail.)

vendredi 20 mai 2011

Des noisettes pour Squirrelmail

J'utilise pour gérer mon courrier un client de messagerie web, Squirrelmail. Celui-ci dispose d'un module d'extension, change_sqlpass qui permet de changer en ligne son mot de passe, si celui-ci est enregistré dans une base de données.

Le module annonce fièrement que ça dernière version est compatible avec PostgreSQL, qui est la base de données que j'utilise.

Génial, exactement ce que je cherchais !

Aussitôt dit, aussitôt fait, je vais chercher le module et je l'installe...

Installation... Relance... Essai...

Et là, déception, ça ne marche pas.

Petit tour du code, et là quelques surprises :

  • Les guillemets utilisé dans les requêtes SQL sont des guillemets doubles (ce qui marche avec MySQL, mais pas avec PostgreSQL).
  • Le mot de passe est passé à la moulinette escapeSimple[1] avant d'être chiffré. Avec MySQL, ça marchait bien, car le mot de passe était chiffré dans une requête SQL. Avec PostgreSQL, il faut utiliser une fonction externe de chiffrement avant de mettre le mot de passe en base. Là, c'est la cata., si le mot de passe contient, par exemple, un guillemet simple, celui-ci sera transformé, et le mot de passe enregistré ne sera pas celui que l'utilisateur a entré... Mauvaise surprise garantie à la reconnexion ^^
  • Petite cerise sur le gâteau (ce n'est pas forcément la faute du module), les caractères accentués ne passe pas. Par sécurité, il vaudrait mieux refuser ces mots de passe

Là, un léger doute m'étreint... Ce module a-t-il déjà été testé avec PostgreSQL... Peut-être pas ^^

Qu'à cela ne tienne, vous trouverez en annexe un petit correctif corrigeant ces problèmes (ce correctif, coupé en morceaux, a été dûment remonté au projet, avec un petit rapport d'anomalie en prime 1 2 3 4).

Ce correctif effectue les modifications suivantes :

  • Utilisation de guillemets simples dans le requêtes (attention, mettez à jour votre fichier config.php à partir de config.php.sample, faute de quoi ça ne marchera plus).
  • Utilisation de escapeSimple uniquement lorsque le mot de passe est envoyé tel quel dans une requête.
  • Ajout d'une option pour refuser les mots de passe contenant des caractères accentués (enfin, non ASCII).

Note

[1] Une fonction servant à modifier une chaîne de texte pour éviter qu'elle soit mal interprétée par une base de données

jeudi 5 mai 2011

Survivre à Unity... sur grand écran

Natty Narwhal, le nouvel Ubuntu, est arrivé avec son lot de nouveautés. La plus visible étant Unity, la nouvelle interface conçue (notamment) pour les écrans tactiles.

Globalement, j'aime bien cette nouvelle interface, mais sur un écran LCD de 61 cm, certains détails se révèlent particulièrement agaçants.

La nouvelle barre d'icônes

Elle se cache dès que l'on approche une souris. On finit par perdre beaucoup de temps à essayer de caler une fenêtre contre celle-ci.

Vous pouvez la rendre fixe de la façon suivante :

  • Installez le paquet « compizconfig-settings-manager », qui permet de paramétrer le comportement de la barre d'icône et des fenêtres.
  • Dans le centre de contrôle (Réglages du système), lancez le « Gestionnaire de configuration CompizConfig ».
  • Ouvrez les réglages « Ubuntu Unity Plugin » et allez dans l'onglet « Behavior ».
  • Paramétrez « Hide Launcher » à « Never ».

On peut maintenant un peu peaufiner, en réglant la façon dont les fenêtre collent au bord de l'écran :

  • Cliquez sur « Précédent ».
  • Ouvrez les réglages « Snapping Windows » et allez dans l'onglet « Behavior »,
  • Pour « Snap Type », cochez « Edge attraction » et « Edge resistance ».
  • Réglez « Edge Resistance Distance » à 20.
  • Réglez « Edge Attraction Distance » à 10.
Les ascenseurs ultra-fins

Les ascenseurs sont remplacés par une ligne très fine, sur laquelle apparaît un curseur. Cela doit être impeccable sur un écran tactile. Avec une souris, c'est un cauchemar. Il faut trouver le bon placement de la souris pour faire apparaître le curseur, puis cliquer dessus et le faire glisser. Là aussi, que de temps perdu par rapport à un ascenseur classique. Et le gain de place est sans intérêt sur un grand écran.

Pour désactiver les ascenseur fins, supprimez les paquets « overlay-scrollbar » et « liboverlay-scrollbar-0.1-0 ».

Les fenêtres qui se maximisent automatiquement

Lorsque l'on déplace une fenêtre en haut de l'écran, elle se maximise automatiquement, ce qui oblige à monter la souris, puis la redescendre un poil pour éviter l'effet d'agrandissement. Sur un petit écran, l'agrandissement est presque toujours adapté, mais sur un grand écran, cela ne convient pas à toutes les applications.

  • Ouvrez le « Gestionnaire de configuration CompizConfig ».
  • Ouvrez les réglages « Grid » et allez dans l'onglet « Edges »,
  • Dans « Resize Actions », paramétrez « Top Edge » à « Aucun ».

dimanche 17 avril 2011

Linux : convertir un document HTML en texte pour le Cybook Gen3

Le Cybook Gen3 est un lecteur de livres électroniques assez agréable à utiliser, mais qui, parfois, s'étouffe sur certains documents HTML (ou les affiche d'une manière peu satisfaisante).

Le mieux est alors de les convertir en texte pur.

Les fichiers textes du Cybook Gen3 doivent respecter le format suivant :

  • Le texte doit être codé en ASCII, latin 1 ou latin 9.
  • Les paragraphes ne doivent comporter aucun saut de ligne.

Conversion du HTML en texte (en évitant au maximum de couper les paragraphes) :

elinks --dump -dump-width 65535 -no-references -no-numbering document.html > document.txt

Éventuellement, conversion en latin 9 (pour une page Unicode codée en UTF-8) :

recode u8..l9 document.txt

mardi 12 avril 2011

Jamais content

postfix/smtpd: sql_select option missing
postfix/smtpd: auxpropfunc error no mechanism available
postfix/smtpd: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql
postfix/smtpd: sql_select option missing
postfix/smtpd: auxpropfunc error no mechanism available
postfix/smtpd: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql

Depuis peu, un message intriguant vient polluer les journaux systèmes de mon mini-serveur.

Après quelques recherches, son origine est simple : j'avais installé le paquet libsasl2-modules-sql pour postfix. Il s'agit d'un module permettant d'authentifier les utilisateurs via une base SQL.

Récemment, j'ai arrêté de m'en servir.

Et, naïvement, j'avais pensé que supprimer le paramétrage servant à l'activer aurait suffit à s'en débarrasser.

Que nenni ! Tant qu'il est là, il reste actif, et s'il n'est pas paramétré, il se plaint.