My nvidia module farm
By Jean-Christophe Dubacq on Tuesday 29 May 2007, 10:59 - Geeky things - Permalink
Depuis déjà plusieurs années, je dois régulièrement mettre à jour les noyaux d'un parc de 80 machines, et parmi ces machines, nombre d'entre elles (de marque Dell) ont des cartes Nvidia. J'installe donc les gestionnaires Nvidia, et comme je dois gérer beaucoup de machines, je l'installe via des paquets Debian.
J'ai dû automatiser la tâche de construire ces paquets. On va me dire « Il y a module-assistant ». C'est vrai. Mais module-assistant ne fait pas le paquet en plusieurs versions de façon automatique. De plus, il y a parfois besoin de bricoler un peu les sources, voire les binaires, comme depuis le noyau 2.6.18-4 (et le problème d'exportation de symbole GPL/non-GPL de paravirt_ops).
Donc, j'ai construit mon élevage à modules. Je donne en argument trois valeurs : la version du noyau pour lequel je veux construire, la version des sources nvidia et la version des sources nvidia-legacy. Je lance mon script, et je finis avec le module NVidia et NVidia-legacy compilé pour les sous-architectures 686, 686-bigmem et k7 (ce sont les différents types de noyau utilisés sur l'ensemble des 80 machines).
J'ai dû récemment modifier mon script pour qu'il tienne compte du bug 419943 (j'aurais pu mentionné plusieurs bugs spécifiquement sur le paquet nvidia-kernel-source, comme 420585). J'en ai profité pour corriger le bug 409204, qui ne nécessitait pas un gros effort.
Je vous livre mon script qui permet de générer le tout. Pour le faire fonctionner, il faut copier les deux scripts prepare et cmdline-nvidia dans un répertoire où il peut être exécuté, installer les paquets nvidia-kernel-source, nvidia-kernel-legacy-source et tous les nvidia-kernel-headers adéquats (par exemple linux-headers-2.6.21-1-686 si on ne veut que du 686) puis invoquer d'abord prepare puis (après avoir mis dans le script les numéros convenables) cmdline-nvidia, puis cmdline-nvidia -legacy. Au bout d'un moment, /var/cache/apt/archives contient les paquets tout chauds.
Si le noyau doit être patché, il suffit de mettre dans /usr/src/nvidia-patches le patch en question. Je vous livre le mien en même temps.
La technique pour faire fonctionner le module même avec paravirt_ops m'a été inspirée par cet article. Il implique de reconstruire linux-kbuild en enlevant les deux lignes suivantes (autour de la ligne 1200) :
if (!mod->gpl_compatible)
check_for_gpl_usage(exp->export, basename, exp->name);
Tous mes paquets recompilés sont disponibles sur le miroir partiel que je gère. N'hésitez pas à recompiler si vous n'avez pas confiance !
Comments
Merci pour ton billet (clair et concis), ca me facilite grandement la tâche depuis .