David Madore's WebLog: Debian wheezy, gcc-4.3 et autres petites merdes

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entry #1987 [older|newer] / Entrée #1987 [précédente|suivante]:

(lundi)

Debian wheezy, gcc-4.3 et autres petites merdes

Acteur numéro 1 du drame : la distribution GNU/Linux Debian, qui sort une nouvelle version toutes les années bissextiles multiples de 27. Acteur numéro 2 : le compilateur gcc, qui sort des nouvelles versions assez souvent (enfin, quand on compare à Debian), et qui prend un plaisir malin à casser la compatibilité ascendante dès qu'ils le font. Résultat de l'interaction : chaque version de Debian inclut une demi-douzaine de versions de gcc. Comme leur main d'œuvre est limitée, leur support ne s'étend pas jusqu'aux versions de gcc du siècle précédent, i.e., de la version précédente de leur distribution.

En l'occurrence, la version de Debian en cours de préparation, wheezy (celle qui sortira en 2075 si on a de la chance), comprend les versions 4.4, 4.5 et 4.6 de gcc. La précédente, squeeze (celle qui est sortie autour de 1967), comprend les versions 4.1, 4.3 et 4.4 (je ne sais pas pourquoi la 4.2 n'a pas eu cet honneur, et je ne veux pas trop le savoir). Remarquez qu'on a de la chance : il y a une intersection non nulle (pas sûr que ça dure).

Maintenant, les choses se compliquent : quand on compile un noyau Linux, on doit tout compiler (tout, c'est-à-dire modules et noyau proprement dit) avec la même version de gcc (comme je disais, ils aiment bien casser la compatibilité ascendante, ce ne serait pas drôle de définir une fois pour toutes une ABI). Comme on se méfie de ce qui est à la pointe du progrès, les développeurs Debian ont décidé que pour le noyau qu'ils fournissent avec la distribution squeeze, ce serait le 4.3.

Le lecteur attentif aura remarqué que 4.3 n'apparaît pas dans la liste des gcc fournis par wheezy. Fournir le compilateur utilisé pour le noyau par la précédente version de notre distribution ? Vous n'y pensez pas, ma brave dame.

Normalement, on devrait pouvoir s'en sortir quand même : le système de packages est le même, après tout, et installer un package d'une version de la distribution sur la version immédiatement après ne devrait pas être rigoureusement impossible. Parfois ça marche, en effet. Mais là, manifestement, ce n'est pas possible (il y a vraisemblablement eu une incompatibilité dans une bibliothèque qui n'a pas été signalée par un changement de numéro de version, ce qui rend l'installation simultanée des versions 4.3.5 et 4.4.x de gcc impossible) ; problème qui devrait être résolu avec la version 4.3.6 de gcc, mais quelqu'un chez Debian a décidé que ça ne valait pas la peine de faire l'effort de packager ça (remarquez le tag wontfix dont la traduction en langage plus fleuri est : allez vous faire enculer à sec avec du gravier). Je viens de passer des heures — qui auraient aimé être employées à des activités plus utiles — à essayer de construire moi-même un package Debian pour gcc 4.3.6 sur Debian wheezy (à partir du package de gcc 4.3.5), sans succès, la montagne des patchs appliqués est beaucoup trop énorme pour qu'on puisse juste changer la version comme ça, et même si je fais toutes sortes d'horreurs pour la traverser quand même je tombe sur ce problème insoluble.

Bref, la seule façon de compiler des modules noyau pour une machine sous Debian squeeze, c'est d'avoir une autre machine sous Debian squeeze sous la main pour faire la compilation. Moi qui ai l'habitude d'installer la Debian stable (donc squeeze en ce moment, justement) précisément sur mes machines qui ne sont pas assez puissantes pour faire des compilations (parce que ce sont aussi celles sur lesquelles je n'ai pas envie de mettre à jour des packages tout le temps), me voilà bien puni d'avoir choisi cette distribution. Seule solution que je voie : tout réinstaller à zéro (par exemple dans une machine virtuelle).

↑Entry #1987 [older|newer] / ↑Entrée #1987 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées