Un petit 'tuto' sur l’installation de DKMS sur SME8 . Attention : lisez vraiment les parties *avant* la mise en place proprement dite. DKMS est assez simple à installer, il peut poser par contre des problèmes de sécurité !
DKMS : qu'est ce donc ?
En très court : DKMS est un système qui permet de gérer automatiquement la (re)compilation de drivers 'exotiques' au moment d'un changement de kernel. Les ingé de DELL en sont les auteurs, ce système permettant de rendre plus fiable un update. Le site de LEA en parle bien mieux que moi (Merci Léa
Ce système n'étant pas magique, il implique la présence sur la machine d'outils de compilation (gcc et cpp), des kernel-devel et kernel-header et d'un certain nombre de version développement des librairies courantes. Il est donc peu compatible avec un SME en mode server & gateway, connecté à Internet.
Avant d'aller plus loin, voyez vraiment si vous en avez besoin ! Cependant, ce système peut être assez pratique sur une machine de dev, quitte à déplacer manuellement le driver sur une machine plus exposée.
Mon contexte (purement expérimental)
Sur un serveur SME ne disposant que d'un emplacement réseau, et sans slot d'extension PCI/PCI-Express disponible, j'envisage l’installation d'un adaptateur réseau USB. JE fais bien attention d'en choisir un supporté par Linux ... pour découvrir après coup qu'il n'est supporté qu'à partir du kernel 2.6.20 (SME 8 est en kernel 2.6.18).
J'arrive péniblement à compiler un driver, et pof, mise à jour de SME, et plus de driver !
Je pars donc à la recherche d'une solution plus pérenne et je trouve dkms.
dkms n'est pas disponible dans les repositories standard SME. Il s'agit de compilation 'dag', qui demandent d'ajouter le repo rpmforge sur votre SME. Dans la suite de mon post, je suis en SME8 (Donc CentOS 5 / RedHat 5). A priori, dkms devrait fonctionner aussi sous SME7 (CentOS 4 / RHES 4). Par contre, mon driver réseau ne semble pas compilable en kernel 2.6.9 ! Je n'ai donc pas testé.
D'autre part, j'ai trouvé directement un RPM pour mon driver réseau avec les option dkms (il s'agit du driver 'source' plus des paramètres spécifiques dkms). Si vous n'avez pas cette chance, lisez le post de LEA pour configurer votre driver ... et n'hésitez pas à faire un 'drms mkrpm' à la fin afin de mettre votre labeur à la disposition du monde
Installation de DKMS pour la carte réseau utilisant le driver ASIX
Installation des outils de développement kernel :
- Code : Tout sélectionner
yum install kernel-devel
Ajout du repository rpmforge (avec le certificat) :
- Code : Tout sélectionner
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
cp /etc/yum.repos.d/rpmforge.repo /etc/yum.smerepos.d/
Il faut modifier le fichier /etc/yum.repos.d/rpmforge.repo avec votre éditeur favori, et transformer la ligne 'Enabled = 1' en 'Enabled = 0', afin d'éviter d'utiliser le repo rpmforge à l'insu de votre plein gré
Installation de dkms :
- Code : Tout sélectionner
yum --enablerepo=rpmforge install dkms
Cette parie installe : kernel-header, kernel-devel si pas déjà présent, cpp, gcc, glibc-devel, glibc-headers
configuration de dkms au boot :
- Code : Tout sélectionner
cd /etc/rc.d/rc7.d/
ln -s ../init.d/dkms_autoinstaller S04dkms_autoinstaller
Il y a un petit bug dans ce script, qui nécessite également une édition à la main. Voici dans le fichier /etc/rc.d/init.d/dkms_autoinstaller, le lignes 20 à 32 après modifications :
- Code : Tout sélectionner
20 #We only have these functions on debian/ubuntu
21 # so on other distros just stub them out
22 if [ -f /lib/lsb/init-functions ]; then
23 . /lib/lsb/init-functions
24 fi
25 if [ ! -f /etc/debian_version ]; then
26 alias log_daemon_msg=echo
27 log_end_msg() { if [ "$1" = "0" ]; then echo " Done. "; else echo " Failed. "; fi }
28 alias log_action_begin_msg=log_daemon_msg
29 alias log_action_end_msg=log_end_msg
30 fi
31
32 invoke_command ()
En gros, j'ai ajouté un fi en ligne 24, et je l'ai retiré en ligne 31
Installation du driver asix :
- Code : Tout sélectionner
cd /tmp
wget http://www.schirrms.net/files/asix-2.6.20-1dkms.noarch.rpm
yum localinstall asix-2.6.20-1dkms.noarch.rpm
Après un peu de travail, votre driver devrait être installé, ce que vous pouvez valider avec la commande suivante :
- Code : Tout sélectionner
dkms status
asix, 2.6.20, 2.6.18-274.12.1.el5, i686: installed (original_module exists)
asix, 2.6.20, 2.6.18-274.7.1.el5, i686: installed (original_module exists)
asix, 2.6.20, 2.6.18-274.7.1.el5, i686: installed-weak from 2.6.18-274.12.1.el5
On voit que pour ma machine, le driver a été compilé avec deux versions de kernels. Une version au moment de installation de DKMS, et l'autre au moment d'un upgrade, tout seul, au boot.
Dans ce cas particulier, par contre, comme il existe un driver (pourri) dans le kernel, il faut encore soit décharger le module à la main, soit rebooter la machine pour que le nouveau driver soit pris en compte.