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 ;-)