sabato 5 gennaio 2008

Ubuntu Hardy Heron: installazione, aggiornamenti, verifiche (part. 3)... aka [Guida]Driver nVidia & libGL
A diciassette giorni dall'ultimo post sulla mia Hardy eccomi a riaccendere il fisso, conscio del problema coi driver nVidia e decissimo a risolverli.


Insomma, fra una cosa e l'altra, 127 aggiornamenti, ricerche e bestemmie sono addirittura, consapevolmente, arrivato a disinstallare millemila pacchetti impedendo l'avvio del server X pur di riuscire la disinstallazione di una fottutissima libreria. Arrivando al dunque, questo post servirà solamente a far comprendere la soluzione di un problema molto frequente fra chi ama smanettare, ma ben poco conosciuto e quindi difficile da risolvere in quanto manca documentazione.


Il problema
Come ben sapete, visto e considerato che per mia sfortuna ho sempre avuto a che fare con Ati invece che nVidia, ora che tutto il necessario è totalmente disponibile mi piace constatare per bene come stan le cose, non leggendo qua e là, ma testando direttamente sulla alpha del prossimo Ubuntu. Una volta disinstallato tutto ciò che aveva a che fare con nVidia (apt-get remove --purge nvidia*) mi ero ritrovato con tale output al tentativo di installare il pacchetto nvidia-glx-legacy:
[sudo] password for spillo:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
nvidia-legacy-kernel-source nvidia-settings
The following NEW packages will be installed:
nvidia-glx-legacy
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/3068kB of archives.
After unpacking 9974kB of additional disk space will be used.
(Reading database ...
dpkg: serious warning: files list file for package `nvidia-kernel-common'
missing, assuming package has no files currently installed.
114814 files and directories currently installed.)
Unpacking nvidia-glx-legacy (from .../nvidia-glx-legacy_71.86.01+2.6.24.2-2.8_i386.deb) ...
dpkg-divert: `diversion of /usr/lib/libGL.so.1 to /usr/lib/nvidia/libGL.so.1.xlibmesa
by nvidia-glx-legacy' clashes with `diversion of /usr/lib/libGL.so.1 to
/usr/lib/nvidia/libGL.so.1.xlibmesa by nvidia-glx-new'
dpkg: error processing /var/cache/apt/archives/nvidia-glx-legacy_71.86.01+2.6.24.2-2.8_i386.deb
(--unpack):
subprocess pre-installation script returned error exit status 2
Errors were encountered while processing:
/var/cache/apt/archives/nvidia-glx-legacy_71.86.01+2.6.24.2-2.8_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
il problema lo si visualizza nella stringha:
dpkg-divert: `diversion of /usr/lib/libGL.so.1 to /usr/lib/nvidia/libGL.so.1.xlibmesa 
by nvidia-glx-legacy' clashes with `diversion of /usr/lib/libGL.so.1 to
/usr/lib/nvidia/libGL.so.1.xlibmesa by nvidia-glx-new'
in pratica c'è qualche conflitto a causa di libGL, il tutto in realtà è facilmente risolvibile editando il file diversions in /var/lib/dpkg/.

Cosa evitare assolutamente
La cosa migliore quando non si conosce il significato di un output è quello di cercare informazioni in rete, io ho ripiegato sin da subito sul forum e sulla mailing list di Ubuntu, senza però arrivare ad una soluzione. In questo caso si passa ai tentativi, inizialmente con azioni poco delicate, magari con la possibilità di creare backup in caso si debbano rimediare errori gravi per poi passare ad una serie di --purge a casaccio dati dalla disperazione. Controllando qua e là per il sistema, potrebbe venir da pensare che eliminare alla radice ciò che riguarda libGL e tentare l'eliminazione di tutto ciò: errore! Provare qualcosa del tipo
sudo apt-get remove libGL1-mesa-glx
perchè non risolveremmo niente ed elimineremo tutti i seguenti pacchetti:
alacarte 
ubufox
apturl
gnome-compiz-manager
compiz compiz-gnome
compiz-plugins
compiz-fusion-plugins-main
compiz-fusion-plugins-extra
compiz-core
f-spot
fast-user-switch-applet
libglut3
freeglut3
gdebi
gdm
update-notifier
update-manager
gnome-app-install
software-properties-gtk
network-manager-gnome
gnome-netstatus-applet
gksu
gnome-applets
nautilus-cd-burner
nautilus
gnome-terminal
gnome-session
gnome-panel
gnome-control-center
gnome-screensaver
hwdb-client-gnome
libgksu1.2-1
serpentine
python-gnome2-extras
libgksu2-0
libgksuui1.0-1
libglu1-mesa-dev
libgl1-mesa-dev
libgl1-mesa-dri
rss-glx
xscreensaver-gl
ttf-thai-tlwg
Di conseguenza non riusciremmo piu ad usare l'interfaccia grafica. In caso l'abbiate già fatto reinstallate tutti quei pacchetti e tentate uno startx, in caso abbiate problemi provate con
sudo dpkg-reconfigure xserver-xorg
oppure modificate le impostazioni di xorg manualmente (il link offre solo poche informazioni a tal proposito) e riavviate X.

Soluzione
Arriviamo dunque allo soluzione del problema: l'operazione qui riportata, ovvero l'edit di un file, necessita dei privilegi di root, quindi date il comando
sudo nano /var/lib/dpkg/diversions
ovviamente sostituendo eventualmente nano con un altro editor di testo. Il file che vi si aprirà sarà simile a quello qui riportato, ovviamente prenderemo in considerazione solamente le stringhe necessarie, ovvero quelle relative a nvidia-glx:
/bin/sh
/bin/sh.distrib
dash
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
/usr/lib/xorg/modules/libGLcore.so
/usr/lib/nvidia/libGLcore.so.xlibmesa
nvidia-glx-new
/usr/lib/xorg/modules/libglx.so
/usr/lib/nvidia/libglx.so.xlibmesa
nvidia-glx-new
/usr/lib/xorg/modules/libwfb.so
/usr/lib/nvidia/libwfb.so.xserver-xorg-core
nvidia-glx-new
/usr/lib/libGL.so.1
/usr/lib/nvidia/libGL.so.1.xlibmesa
nvidia-glx-legacy
/usr/lib/libGL.so.1.2
/usr/lib/nvidia/libGL.so.1.2.xlibmesa
nvidia-glx-legacy
potete ora prendere due strade, non che il risultato sia differente, io ho scelto la prima perchè non ero certo di avere la soluzione in mano, voi invece lo siete ;)
/bin/sh
/bin/sh.distrib
dash
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
#/usr/lib/xorg/modules/libGLcore.so
#/usr/lib/nvidia/libGLcore.so.xlibmesa
#nvidia-glx-new
#/usr/lib/xorg/modules/libglx.so
#/usr/lib/nvidia/libglx.so.xlibmesa
#nvidia-glx-new
#/usr/lib/xorg/modules/libwfb.so
#/usr/lib/nvidia/libwfb.so.xserver-xorg-core
#nvidia-glx-new
#/usr/lib/libGL.so.1
#/usr/lib/nvidia/libGL.so.1.xlibmesa
#nvidia-glx-legacy
#/usr/lib/libGL.so.1.2
#/usr/lib/nvidia/libGL.so.1.2.xlibmesa
#nvidia-glx-legacy
il sistema non leggerà le stringhe precedute dal cancelletto (#), potete anche eliminarle volendo (sarebbe la seconda strada):
/bin/sh
/bin/sh.distrib
dash
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
Fatto ciò tornate ad installare i driver legacy e non incontrerete errori. :D
Ora, finalmente, posso proporre tale screen! C'è voluto molto, ma è soddisfacente.


Per dubbi, critiche e chiarimenti (tanto so che non postate -.- ) vi lascio ai commenti...

Ciao fedeli lettori!

Nessun commento: