Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Ubuntu : Réparer Les Drivers Nvidia Pour Un Nouveau Noyau

J’utilise de plus en plus Ubuntu, en particulier sur mon media-center (avec Xbmc). Mais je recontre très souvent le même problème : quand je met à jour mon noyau (via apt), je suis sûr à 100% de voir mon serveur X crasher au reboot. L’explication est toute simple, cela vient de ma carte graphique (Nvidia) qui fonctionne graĉe à des modules… spécifiques à chaque noyau (comme tous les modules). J’ai donc mis en place un processus pour éviter de devoir réinstaller manuellement les drivers en cas de mise à jour.

Le principe du script est relativement simple : au boot, il vérifie si X est lancé correctement. Si ce n’est pas le cas il lance alors la réinstallation des drivers (moyen simple de forcer la compilation des modules)… et puis c’est tout ! Voici le code :

#!/bin/bash
sleep 30
PATH=$PATH":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

if ! ps aux | grep -v grep | grep /usr/bin/X > /dev/null;then
    echo "######### UPDATING Nvidia Module, do NOT reboot!!! ###########"
    apt-get -y update
    apt-get -y install linux-headers-`uname -r`
    apt-get -y remove --purge nvidia-current
    apt-get -y install nvidia-current
    echo "######### Done, rebooting in 5s ###########"
    sleep 5
    reboot
fi

Le script commence par dormir quelques secondes car en réalité, même en cas de plantage, X se lance quelques secondes avant de se couper. Il est bien entendu possible d’améliorer cette vérification avec une boucle… mais cela en vaut-il vraiment la peine ? :-) Nvidia ayant besoin des sources du noyau pour compiler, je les installe en fonction du kernel en cours d’utilisation.

La planification du script se fait bien entendu via [man]crontab[/man]. Afin d’avoir une information visuelle sur le déroulement, je redirige la sortie standard vers /dev/tty1. C’est tout simplement la première console, celle disponible en cas de plantage :

#m h dom mon dow command
@reboot /home/server/check_nvidia > /dev/tty1 [/code]

Bonne réparation ;-)

Comments