Mettre à jour drupal simplement
Le 18 October 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 :

cd /tmp
mkdir drupal
cd drupal

# récupération de la version actuelle non modifiée
wget http://ftp.drupal.org/files/projects/drupal-5.2.tar.gz
tar -zxvf drupal-5.2.tar.gz

# récupération de la nouvelle version
wget http://ftp.drupal.org/files/projects/drupal-5.3.tar.gz
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.

# Création d'un patch entre les deux versions
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).

cd /var/www/mon_drupal
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.

Comments

Bernhard (not verified), 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 (not verified), 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 (not verified), 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

~RV~ (not verified), le 18 November, 2008 - 18:05

Super !!!
Je ne connaissais pas cette procédure pour mettre à jour les sources, ça a marché impec du 1er coup, c'est magique Smiling
Merci pour le tuyau, je pense que je vais adapter ça pour beaucoup d'autres projets.

Ulhume, le 18 November, 2008 - 19:27

@RV ravis que cela puisse aider Smiling J'ai industrialisé la méthode sous la forme d'un script pour la MAJ de modules drupal.

~RV~ (not verified), le 21 November, 2008 - 11:59

@Ulhume
Ah oui, ça m'intéresse aussi.
D'ailleurs je suis sûr que ça pourrait intéresser plein d'autres gens !
Si tu pouvais poster ça (ou au moins un exemple) à la suite de cet article, ça serait top !
Merci pour tout

Ulhume, le 22 November, 2008 - 00:33

@RV, ok je vais essayer de mettre le script au propre Smiling

Post new comment

The content of this field is kept private and will not be shown publicly.
  • 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.
  • Lines and paragraphs break automatically.
  • Textual smileys will be replaced with graphical ones.
  • Web page addresses and e-mail addresses turn into links automatically.

More information about formatting options

User login
Recent comments