Mettre à jour drupal simplement
Le 18 octobre 2007, à 1:57 par Ulhume...

Une avalanche de faille, dont une exécution de code à distance, vient de tomber sur le flux de sécurité de drupal.org. L'installation de la 5.3 est donc pour ainsi dire obligatoire. C'est l'occasion de donner quelques petites astuces de terrain pour faire cela rapidement et simplement. Et d'en profiter pour rendre l'installation drupal un peu plus sure.

Se tenir informé

Déjà, pour être à jour, faut-il encore être informé. Le flux indispensable sur lequel il faut connecter votre client RSS est le suivant :

http://drupal.org/security/rss.xml
et de manière plus générale un flux annonçant toutes les failles est fort utile :
http://secunia.com/information_partner/anonymous/o.rss

Procédure de mise à jour

Le problème lorsque l'on veut installer une nouvelle version de drupal c'est que souvent on a bidouillé l'installation d'origine. Un changement par ci, un autre par là et on ne sait plus trop bien ce qui a bougé. Du coup, c'est le risque de tout perdre si l'on remplace "bêtement" la version existante avec la mise à jour.

La procédure suivante permet de faire le job sans risque et rapidement en utilisant les techniques connues de création de patch. Nous allons ainsi créer un fichier qui contient les différences entre la version d'origine officielle et la nouvelle.

Il est évidemment plus simple de disposer d'un accès ligne de commande à la machine qui héberge Drupal. Mais si ce n'est pas le cas, il suffit de faire cela chez vous en téléchargeant sur votre machine la version que vous avez chez votre hébergeur, d'effectuer la procédure, et de renvoyer l'ensemble.

Tout d'abord aller dans un répertoire "hors ligne" (par exemple /tmp) et télécharger/décompressez la version source et la version cible :

  1. cd /tmp
  2. mkdir drupal
  3. cd drupal
  4.  
  5. # récupération de la version actuelle non modifiée
  6. wget http://ftp.drupal.org/files/projects/drupal-5.2.tar.gz
  7. tar -zxvf drupal-5.2.tar.gz
  8.  
  9. # récupération de la nouvelle version
  10. wget http://ftp.drupal.org/files/projects/drupal-5.3.tar.gz
  11. tar -zxvf drupal-5.3.tar.gz

Etape suivante, fabriquer un patch permettant de passer de l'ancienne à la nouvelle version. Le dossier /var/www/mon_drupal est à changer en fonction de l'endroit où se trouve réellement votre installation drupal.

  1. # Création d'un patch entre les deux versions
  2. diff -Naur drupal-5.2 drupal-5.3 > /var/www/mon_drupal/mise-a-jour-5.2-5.3.patch

C'est toujours une bonne idée de garder les patchs dans le dossier final de Drupal pour avoir un historique de ce que vous avez fait.

Ceci fait aller dans le dossier drupal et simulez l'application du patch sur votre installation. Cette opération ne modifie rien (paramètre dry-run) et permet de voir les fichiers que vous avez trop modifiés et qui du coup ne sont pas patchés (erreur FAILED).

  1. cd /var/www/mon_drupal
  2. patch -p1 --dry-run < mise-a-jour-5.2-5.3.patch | more

Si tout s'applique correctement, passer à l'étape suivante. Sinon, cela veut sûrement dire que patch ne retrouve pas ses petits dans un fichier trop bidouillé. Le plus simple est de mettre le fichier incriminé dans un endroit sur et de le remplacer par son équivalent en version d'origine (qui se trouve en /tmp/drupal/drupal-5.2/...). Vous ré-appliquerez vos changements à la main après. Relancez après l'étape précédente jusqu'à ce qu'il n'y ait plus de FAILED.

Vous pouvez maintenant appliquer le patch "pour de vrai"

patch -p1 < mise-a-jour-5.2-5.3.patch

Voilà, c'est fait. L'opération prendre tout au plus 5 minutes. Ne vous reste plus maintenant qu'à ré-intégrer les éventuels fichiers qui ne serait pas passé à au moment du test du patch.

Mise à jour de la base

A ce stade, il faut vérifier que tout fonctionne (évidemment Wink mais aussi de lancer le www.monsite.com/update.php pour mettre éventuellement à jour la base de données.

Protection des fichiers sensibles

Ceci fait, je vous conseille de renommer les fichiers install.php et update.php en des fichiers .foo ou tout ce qui vous amuse et qui ne soit pas exécutable. Le mieux est même de simplement les mettre ailleurs dans un dossier "hors-ligne". En effet, pas mal de vulnérabilités passent par ces fichiers et là encore cela n'a pas loupé.

Dans le même ordre d'idée, si vous n'utilisez pas XmlRPC (ou ne savez pas ce que c'est Wink, renommer ou déplacez aussi le fichier xmlrpc.php. De manière générale, enlever tout ce qui ne sert à rien, car c'est source de problèmes.

C'est terminé

Voili voilà, en espérant que cela vous sera utile.

Commentaires

Bernhard , le 8 November, 2007 - 11:59

(Sorry, not speaking french.)

Did you mean "diff -Naur drupal-5.2 drupal-5.3 > /var/www/mon_drupal/mise-a-jour-5.2-5.3.patch" instead of "patch -Naur drupal-5.2 drupal-5.3 > /var/www/mon_drupal/mise-a-jour-5.2-5.3.patch" to create the patch file?

Ulhume, le 8 November, 2007 - 12:08

Ooops, Thank you for pointing this mistake out to me. Yes it's the "diff" command and not the "patch" one.

gagarine , le 13 November, 2007 - 13:29

Hello,
Merci pour ton blog il est très intéressant et n'est pas simplement un relais d'information Smiling.

Sinon pour ma part j'évite de modifier les corps et je n'ai donc pas à me soucier des fichiers qui pourrais être écrasé.
je garde juste au chaud les dossiers:
-files
-sites
-et mylib (ou je met principalement des librairies js maison)
Je ne patch pas car sa prend plus de temps qu'une simple copie (3s).

Ulhume, le 13 November, 2007 - 15:44

C'est sur, si tu ne modifies pas le core, y'a peu de problèmes, sinon, c'est vite l'enfer Smiling Moi j'ai jamais réussi à garder un core intacte plus de 2 jours Wink

Su86DR , le 10 December, 2007 - 07:13

Bonjour,

Tout d'abord, merci pour ce fabuleux nid d'informations que j'exploite de plus en plus Smiling

Je voulais simplement signaler une petite faute de frappe, lorsqu'on applique le patch "pour de vrai", il faut supprimer le paramètre --dry-run de la ligne de commande.

patch -p1 < mise-a-jour-5.2-5.3.patch

Je le dis même si je pense que tout le monde aura corrigé de soi-même Sticking out tongue

Ulhume, le 10 December, 2007 - 09:04

@Su86DR Tu as bien fait de le dire, merci ! C'est corrigé Smiling

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...