Autres exemples de migration Etch->Lenny [1]

January 24th, 2010

La fin du support officiel de Debian Etch approchant, il est grand temps de migrer vers Lenny pour les machines pas encore à jour. Après un premier exemple de migration Debian Etch->Lenny, je poursuis la série avec des informations tirées de plusieurs migrations récentes sur des serveurs en production.

Je ne rappellerais pas toutes les précautions nécessaires (tests préalables, sauvegardes, désactivations des services, etc.) ni la classique question  sur  “quand faut-il migrer ?”, vous trouverez tout cela dans mes exemples précédents. Je rappelle simplement l’idée de base : prendre les précieuses Release Notes, mettre à jour le fichier sources.list, puis exécuter les commandes aptitude update && aptitude upgradex, puis mettre-à-jour les services les plus critiques via aptitude install <PACKAGE>, et enfin aptitude dist-upgrade && aptitude dist-upgrade (répéter dist-upgrade est souvent nécessaire).

Passons désormais aux différentes remarques sur ces migrations :

– PostgreSQL : on passe de la version 8.1 à 8.3. Notez qu’il s’agit de paquets différents, il est donc possible de garder la version 8.1 en Etch, et d’installer en parallèle la version 8.3, afin de faciliter encore plus la migration. Pour migrer les données, on réalisera un dump avec pg_dumpall qui sera réinjecté dans la nouvelle base. On pourra ensuite adapter le port dans postgresql.conf pour passer la version 8.3 en production.

– phpPgAdmin : avec PostgreSQL 8.3, on ne peut plus se connecter à la table template1 : c’est le comportement par défaut de phpPgAdmin, qu’on devra donc modifier en mettant postgres à la place (pour la variable $conf[‘servers’][0][‘defaultdb’] dans le fichier config.inc.php)

– Apache : la configuration de l’alias /icons/ est déplacé dans le fichier mods-available/alias.conf, il peut donc faire doublon avec la déclaration dans apache2.conf, ce qui sera signalé via le warning suivant : [warn] The Alias directive in /etc/apache2/apache2.conf at line 240 will probably never match because it overlaps an earlier Alias. Commenter les directives dans le fichier apache2.conf résoudra ce petit soucis.

– OpenLDAP : on passe d’une version 2.3 à 2.4, mais le plus marquant pour la migration est que cela force le processus à tourner avec un utilisateur/groupe dédié. Pour diverses raisons (dist-upgrade interrompu par exemple), on pourra rencontrer des soucis plus ou moins alarmants. Ainsi, j’ai pu rencontrer cette erreur :
bdb(dc=example,dc=com): PANIC: fatal region error detected; run recovery
bdb_db_open: database “dc=example,dc=com” cannot be opened, err -30978. Restore from backup!
backend_startup_one: bi_db_open failed! (-30978)
slap_startup failed
On veillera donc sur l’utilisateur/groupe propriétaire des fichiers dans le répertoire /var/lib/ldap et, au besoin, on ajustera : chown -R openldap:openldap /var/lib/ldap/
Mon conseil : mettre-à-jour le paquet slapd de façon spécifique avant le dist-upgrade

– Postfix : on passe de 2.3 à 2.5. On notera simplement la valeur par défaut de $smtp_line_length_limit characters qui passe à 990, ce qui coupe les lignes trop longues pour se conformer au standard SMTP. Si cela posait problème, on pourrait revenir à l’ancien comportement en positionnant smtp_line_length_limit=0

– SpamAssassin : l’utilisant en stockant la configuration des utilisateurs dans un annuaire LDAP, le daemon spamd s’est mis à râler : cannot use –ldap-config without -u
Le problème sera résolu en ajoutant l’option -u nobody, ce qui fera tourner spamd en tant que nobody (ce qui n’est pas une mauvaise chose, au contraire).

– Amavis : apparemment, lors de la détection d’un virus, le code retourné n’est plus 2.7.1 mais 2.7.0 : 2.7.0 Ok, discarded, id=13735-07 – VIRUS: Eicar-Test-Signature
Rien de bien grave, mais cela a nécessité d’adapter un plugin Nagios pour qu’il attende le bon code de retour.

– Courier-imapd-ssl : après une mise-à-jour gardant mon fichier /etc/courier/imapd-ssl actuel, j’obtenai des erreurs avec certains clients IMAP :
couriertls: accept: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
En regardant de plus près, certaines directives changent dans ce fichier de configuration, et il est donc conseillé de repartir du fichier proposé par Lenny, et d’y apporter ses modifications (souvent, cela se limite à préciser le certificat).

– Horde : si vous utilisez une base de données pour stocker les paramètres ou autres, la paquet php-db (déjà en Recommends: en Etch) est d’autant plus nécessaire, sous peine d’obtenir l’erreur : PHP Fatal error:  _init() [<a href=’function.require’>function.require</a>]: Failed opening required ‘DB.php’ (include_path=’/usr/share/horde3/lib:.:/usr/share/php:/usr/share/pear’) in /usr/share/horde3/lib/Horde/DataTree/sql.php on line 1877

– Sympa : on attaque là le cauchemard de mes migrations. À chaque fois, tellement de soucis majeurs et mineurs, que j’ai l’impression d’être le seul à utiliser ce paquet. Voici en vrac tous les soucis rencontrés : les accents dans les descriptions ont sautés (une sorte de double encodage) et cela a nécessité des corrections manuelles, la table logs_table doit être créée à la main (j’utilise Sympa avec PostgreSQL), et enfin une typo surprenante un “GROUP BY” à la place d’un “ORDER BY” (j’ai ouvert le bug #566252 à ce sujet).

– Asterisk : on passe de la version 1.2 à la version 1.4. Lors de la migration, j’ai constaté un bug étrange, le fichier modules.conf qui charge les modules additionnels a disparu. Du coup, sans lui, Asterisk ne charge pas les modules nécessaires (SIP, etc.). Il a donc fallu le restaurer.

– udev : le meilleur ami des sysadmins (ou pas). Si les migrations douloureuses Sarge->Etch sont loin derrière nous, il reste néanmoins quelques blagues. La dernière en date a été un renommage des interfaces réseau : eth0->eth1 et eth1->eth2. Classique mais étonnant, ce genre d’humour est sensé être dépassé grâce aux “persistent rules” qui nomment les interfaces en fonction de l’adresse MAC. À rester vigilant sur ce point avant le redémarrage donc.

Voilà pour les remarques. Vous noterez que je n’ai pas abordé le noyau Linux. C’est parce que pour la majorité de nos serveurs, ils sont gérés de façons spécifiques (au lieu d’utiliser les noyaux officiels Debian). Ainsi, ils restent dans leur version actuelle (2.6.31 à cette heure) pendant la migration. Bien sûr, cela n’empêche pas d’effectuer un redémarrage de la machine suite à la mise-à-jour : cela permet de s’assurer que tout est bien en place et le sera toujours après un éventuel redémarrage d’urgence.

Rendez-vous pour de prochaines migrations !

“Quand je serai grand, je serai marseillais”

January 18th, 2010
Ca remonte au début des années 1990, et c’est (forcément) lié à l’OM. C’est l’époque où – dans ma classe de CM2 de banlieue parisienne – chacun choisissait un nom d’un joueur de l’OM pour jouer au ballon en mousse à la récré (pour la petite histoire, j’avais “écupéré “Dragan Stojkovic”). Je n’ai pas raté beaucoup de match télévisé de l’OM, que ça soit grâce à un précieux magnétoscope et des réveils à 6h du matin pour voir le match avant l’école, ou des matchs “en crypté” sur Canal Plus avec la radio à côté (je me souviens par exemple du OM-Milan AC de 1991 “entrevu” en plissant les yeux pendant 1 heure). Un peu plus tard, la folie de la Coupe d’Europe 1993 étant passée par là, c’est plus que l’OM, c’est Marseille qui me fascine : Notre-Dame-de-la-Garde, La Canebière, etc. En plus des posters de l’OM, j’ai mis dans ma chambre une belle photo du Vieux-Port. A 15 ans, j’ai enfin l’occasion d’aller à Marseille avec mon père, et de me rendre au Stade Vélodrome pour voir OM-Lille. Du virage Nord, j’assiste à un joli match gagné 5-1, mais surtout à une ambiance bleue et blanc : chants, écharpes, fumingènes, insultes, tout cela me plaît beaucoup. C’est décidé : “quand je serai grand, je serai marseillais”. Alors, quand en 2001 j’ai l’occasion d’aller poursuivre mes études à Marseille, je n’ai pas trop hésité. Et ne croyez pas que j’ai été déçu : entre le soleil, la mer, les degrés de température et la douceur de vivre, tout paraît beau quand on le voit avec un regard presque amoureux. On est loin du gris de Paris et des gens qui font la gueule dans les transports en commun. Certes, tout n’est pas parfait (embouteillages, trottoirs sales, etc.), mais je le prends comme des points à améliorer pour le futur : tout est dans la façon d’aborder les choses ! Presque 10 ans après mon arrivée, j’ai désormais pas mal d’attaches dans le port de Marseille : mes enfants y sont nés à Marseille, j’ai créé une boîte bien implantée sur la région, etc. Je suis toujours aussi fier d’écrire “Marseille” sur mes adresses postales, heureux de voir le ciel bleu à mon réveil, de me ballader sur le Vieux-Port, de rouler sur la Corniche, d’aller au Stade Vélodrome. Mon rêve de minot s’est réalisé. Mais j’en ai encore plein.

Ça remonte au début des années 1990, et c’est (forcément) lié à l’OM. C’est l’époque où – dans ma classe de CM2 de banlieue parisienne – chacun choisissait un nom d’un joueur de l’OM pour jouer au ballon en mousse à la récré (pour la petite histoire, j’avais récupéré “Dragan Stojkovic”). Je n’ai pas raté beaucoup de match télévisé de l’OM, que ça soit grâce à un précieux magnétoscope et des réveils à 6h du matin pour voir le match avant l’école, ou des matchs “en crypté” sur Canal Plus avec la radio à côté (je me souviens par exemple du OM-Milan AC de 1991 “entrevu” en plissant les yeux pendant 1 heure). Un peu plus tard, la folie de la Coupe d’Europe 1993 étant passée par là, c’est plus que l’OM, c’est Marseille qui me fascine : Notre-Dame-de-la-Garde, La Canebière, etc. En plus des posters de l’OM, j’ai mis dans ma chambre une belle photo du Vieux-Port. A 15 ans, j’ai enfin l’occasion d’aller à Marseille avec mon père, et de me rendre au Stade Vélodrome pour voir OM-Lille. Du virage Nord, j’assiste à un joli match gagné 5-1, mais surtout à une ambiance bleue et blanc : chants, écharpes, fumigènes, insultes, tout cela me plaît beaucoup. C’est décidé : “quand je serai grand, je serai marseillais”. Alors, quand en 2001 j’ai l’occasion d’aller poursuivre mes études à Marseille, je n’ai pas trop hésité. Et ne croyez pas que j’ai été déçu : entre le soleil, la mer, les degrés de température et la douceur de vivre, tout paraît beau quand on le voit avec un regard presque amoureux. On est loin du gris de Paris et des gens qui font la gueule dans les transports en commun. Certes, tout n’est pas parfait (embouteillages, trottoirs sales, etc.), mais je le prends comme des points à améliorer pour le futur : tout est dans la façon d’aborder les choses ! Presque 10 ans après mon arrivée, j’ai désormais pas mal d’attaches dans le port de Marseille : mes enfants sont nés à Marseille, j’ai créé une boîte bien implantée sur la région marseillaise, etc. Bref, je suis toujours aussi fier d’écrire “Marseille” sur mes adresses postales, heureux de voir le ciel bleu à mon réveil, de passer sur le Vieux-Port, de rouler sur la Corniche, d’aller au Stade Vélodrome. Marseillais d’adoption mais fier de l’être ! Mon rêve de minot s’est réalisé… mais ne vous inquiétez pas, j’en ai encore plein d’autres (qui a dit trop ?).

Organisation technique du développement web

November 27th, 2009

À l’occasion d’un petit déjeuner organisé par Evolix, en partenariat avec Libertis, la région PACA, le Prides SCS et le FEDER, dans les locaux de Marseille Innovation au Pôle Média Belle de Mai (oui, c’est un peu long mais je me dois de citer tous les partenaires), j’ai pu animer une présentation sur l’organisation technique du développement web. Vous pouvez télécharger les slides de la présentation (format PDF, 2.2 Mo).

Cette présentation a permis de faire un point sur les différentes organisations en place dans des sociétés clientes ou proches d’Evolix. Je remercie d’ailleurs les responsables techniques qui ont répondu à mes questions ces derniers jours. Globalement, il se dégage une forte tendance à l’utilisation d’Eclipse comme IDE, que ça soit pour les projets en Java ou PHP. Au niveau SCM, on retrouve CVS et majoritairement SVN, avec une gestion des branches plus ou moins avancée. En terme de bugracker, c’est assez divers : Trac, Mantis ou Bugzilla. Pour le développement, c’est souvent http://localhost qui est utilisé. Une mise en préproduction est ensuite effectuée, puis une bascule en production, à l’aide de scripts personnalisés s’appuyant sur le SCM. En terme de méthodes, plusieurs sociétés utilisent des méthodes agiles (tests unitaires, sprints, etc.) de façon plus ou moins avancées. En général, l’organisation en place est informelle et reprend les bonnes idées adaptées à son projet. Les benchmarks et tests de performance sont plutôt effectués dans une seconde phase (en préproduction voire en production), sauf dans certains cas où ils sont intégrés aux tests unitaires (ce qui est une très bonne pratique). Enfin, en terme de framework, on distingue deux tendances : l’exploitation d’un framework existant et reconnu, ou l’utilisation d’un framework développé en interne.

Bien évidemment, ce petit inventaire n’a pas la prétention d’être exhaustif ou de définir une organisation idéale. C’est plutôt un passage en revue de bonnes pratiques, permettant de les découvrir … ou de s’assurer qu’on ne passe pas à côté de certains outils.

Mise-à-jour WordPress et sécurisation basique

August 13th, 2009

Une faille de sécurité sur le logiciel WordPress permet de réinitialiser le mot de passe d’un utilisateur connu (admin par exemple…). Cela consiste à faire une requête du type http://SERVERNAME/wp-login.php?action=rp&key[]= (soumettre une key[] vide permet apparemment de rendre inutile la vérification par mail). Il est donc conseillé de mettre à jour WordPress en version 2.8.4 (voici le patch pour passer de la version 2.8.3 à 2.8.4).

J’en profite pour rappeler quelques notions basiques pour sécuriser une installation d’un logiciel PHP, surtout quand il est très répandu : si possible, limiter les accès aux parties backoffice via Apache (restriction par adresses IP et/ou authentification HTTP), utiliser des identifiants originaux (pas forcément admin…), des mots de passes complexes, éviter les modules/plugins non fiables, suivre les notifications de mises-à-jour et les appliquer rapidement (cela implique de limiter les modifications intrusives empêchant des futures mises-à-jour, ou du moins les préparer sous forme de patch pour les ré-appliquer très rapidement), etc. Pour le premier point, voici un exemple de sécurisation de WordPress via Apache :

<LocationMatch "^/wordpress/wp-(admin|login)">
Deny from all
Allow from YOUR_IP
</LocationMatch>

SFR Huawei 3G+ USB key with Debian

July 29th, 2009

After Orange GPRS with Nokia 6630 and SFR GPRS with Nokia E65, I use now mainly Huawei 3G+ USB key with SFR (french mobile phone provider).

lsusb info about this Huawei 3G+ USB key:

Bus 003 Device 003: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem

And dmesg info:

[208765.818448] option 3-1:1.0: GSM modem (1-port) converter detected
[208765.818448] usb 3-1: GSM modem (1-port) converter now attached to ttyUSB3
[208765.830451] usb-storage: probe of 3-1:1.1 failed with error -5
[208765.830451] option 3-1:1.1: GSM modem (1-port) converter detected
[208765.830451] usb 3-1: GSM modem (1-port) converter now attached to ttyUSB4
[208765.830502] scsi12 : SCSI emulation for USB Mass Storage devices
[208765.834458] usb 3-1: New USB device found, idVendor=12d1, idProduct=1003
[208765.834458] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[208765.834458] usb 3-1: Product: HUAWEI Mobile
[208765.834458] usb 3-1: Manufacturer: HUAWEI Technologies
[208765.834458] usb-storage: device found at 3
[208765.834458] usb-storage: waiting for device to settle before scanning
[208770.863868] usb-storage: device scan complete
[208770.866850] scsi 12:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
[208770.887881] sr0: scsi-1 drive
[208770.887881] sr 12:0:0:0: Attached scsi CD-ROM sr0
[208770.887881] sr 12:0:0:0: Attached scsi generic sg1 type 5

For connecting, I tried an infamous GUI distributed by Vodafone in Debian package. Too buggy, too complex. The best solution is using a PPP chatscript.

Then, plug USB key, sleep 20 and unlock it:

echo 'at+cpin="1234"' > /dev/ttyUSB3

Note: 1234 is PIN code (or not) and /dev/ttyUSB3 is modem device.

Create these 2 files:

/etc/ppp/peers/gprs:

noauth
debug
nodetach
connect "/usr/sbin/chat -v -f /etc/ppp/peers/huawei-e220.chat"
/dev/ttyUSB3
230400
crtscts
defaultroute
noipdefault
user ignored
remotename whatever
ipparam whatever
usepeerdns

/etc/ppp/peers/huawei-e220.chat:

# Chat file for Huawei E220 HSDPA USB modem
ABORT BUSY ABORT 'NO CARRIER' ABORT 'NO ANSWER' ABORT DELAYED
'' AT
OK ATZ
OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","websfr"'
OK ATDT*99***1#
CONNECT ""

Finally you can:

pppd call gprs

JCE non limitées sous Debian

July 2nd, 2009

Les packages Debian de Java n’intègrent pas de mécanisme pour faciliter l’utilisation des versions non limitées des JCE (Java Cryptography Extension), utiles pour avoir des fonctions de chiffrement dites « fortes » (#466675). L’idée est de créer des diversions locales pour conserver les versions non limitées, même en cas de mise-à-jour :

# dpkg-divert --divert /usr/share/doc/sun-java6-jre/US_export_policy.jar.ori \
 --rename /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/US_export_policy.jar
Adding `local diversion of /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/US_export_policy.jar
 to /usr/share/doc/sun-java6-jre/US_export_policy.jar.ori'
# dpkg-divert --divert /usr/share/doc/sun-java6-jre/local_policy.jar.ori \
--rename /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/local_policy.jar 
Adding `local diversion of /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/security/local_policy.jar
to /usr/share/doc/sun-java6-jre/local_policy.jar.ori'

Attention, bien garder à l’esprit que si une faille de sécurité survient, il faudra mettre à jour manuellement ces fichiers.

Sauvegarde de mes flux RSS préférés via Google Reader

June 13th, 2009

Utilisateur de Google Reader pour lire mes flux RSS préférés, il était impératif pour moi de sauvegarder cette fameuse liste de flux RSS. C’est chose faite grâce à ce petit script inspiré à 99.9% du blog de Martin Catty :

#!/bin/sh
GLOGIN=<login>
GPASS=<pass>
DATE=$(date +%Y-%m-%d)
GSTORE=<path>/backup/google-reader-$DATE.xml
umask 077
/usr/bin/wget -q "https://www.google.com/accounts/LoginAuth" \
 --post-data="PersistentCookie=1&Email=$GLOGIN&Passwd=$GPASS" \
 --no-check-certificate --save-cookies="/tmp/gcookie" --output-document=/dev/null
/usr/bin/wget -q "http://www.google.com/reader/subscriptions/export" \
 --no-check-certificate --load-cookies="/tmp/gcookie" --output-document="$GSTORE"
/bin/rm /tmp/gcookie

Il ne reste plus qu’à le placer en crontab, par exemple de façon hebdomadaire, et le tour est joué. Notez bien que ce script nécessite votre identifiant et votre mot de passe Google : à utiliser avec les précautions d’usage !

New GPG key

May 11th, 2009

With last attacks against SHA-1 digest algo, I create a new GPG key (following instructions from Daniel Kahn Gillmor):

pub   4096R/B8612B5D 2009-05-10
uid                  Gregory Colpart <reg@gcolpart.com>
uid                  Gregory Colpart (Evolix) <reg@evolix.fr>
uid                  Gregory Colpart <reg@debian.org>
sub   4096R/7D40310B 2009-05-11

A good excuse for beer^Wkey exchange next weeks :-)

Fichier special /dev/megaraid0 pour les noyaux Linux récents

May 10th, 2009

En février 2008, la gestion du fichier spécial pour le management des cartes SCSI Megaraid (en général, /dev/megaraid0) a changé dans le noyau Linux. Auparavant, on notait la présence de megadev dans /proc/devices, car un numéro majeur (et dynamique) de périphérique lui était attribué. Les différents scripts utilisaient donc des scripts ressemblant à :

MAJOR=`grep megadev /proc/devices|awk '{print $1}'`
mknod /dev/megadev0  c $MAJOR 0

Mais un numéro majeur ne semblait pas utile, car seul un fichier spécial est nécessaire (même avec plusieurs cartes Megaraid) et le numéro mineur n’était jamais utilisé. Cela a donc changé à partir du noyau Linux 2.6.25, et c’est désormais un numéro mineur (et dynamique) et un numéro majeur correspondant à misc qui définit le périphérique /dev/megaraid0. On retrouve ainsi des bugreports chez Debian (#399783) et Gentoo (#233295) à propos de ce changement.

Concrètement, ce matin lors d’une mise-à-jour d’un noyau Linux de 2.6.21 en 2.6.28, le fichier spécial /dev/megaraid0 avec les numéros majeur/mineur 253/0 n’était plus utilisable par les outils de management du RAID. La suppression de ce fichier et l’installation d’udev a permis de retrouver un /dev/megaraid0 fonctionnel.

Driver bnx2 du noyau Lenny et carte Broadcom NetXtreme II

May 8th, 2009

Le driver bnx2 du noyau Linux 2.6.26 de Debian Lenny (et du 2.6.24 d’half-and-etch) nécessite un firmware pour fonctionner avec les cartes réseau Broadcom NetXtreme II (présentes par exemple sur les serveurs DELL PowerEdge 1950/2950), au contraire du noyau Linux 2.6.18 de Debian Etch. Lors de la mise-à-jour vers l’un de ces noyaux, il faut donc installer le paquet firmware-bnx2 (section non-free) et s’assurer de mettre à jour les images initramfs (update-initramfs -u -k all).