dkms sur SME 8

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server. Une description est donnée sur le portail phénIXUS : http://www.ixus.net/sme-server/.

dkms sur SME 8

Message par sibsib » 08 Jan 2012 19:29

Bonjour,

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.
sibsib
 
Message(s) : 188
Inscription : 20 Oct 2011 21:08

Re: dkms sur SME 8

Message par unnilennium » 19 Jan 2012 04:44

dkms fonctionne sous sme 7, j'avais eu recours à lui il y a 3 ans pour une carte réseau r8169 pas encore supportée à l'époque... avant de choisir de compiler mon propre kernel en avance sur rhel de quelques 9 sous versions ;)

outre le coté sécurité d'avoir les outils de compilation installé en permanence c'est une solution très pereine je confirme


Une solution serait aussi de voir si contribs voudrait ajouter ton driver en kmod si tu leur fourni le rpm src genre dans le repo update?
unnilennium
 
Message(s) : 218
Inscription : 28 Nov 2011 19:32
Localisation : Québec, QC, Canada


Retour vers SME

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron