enchufado
   RSS
#
Linux tip #24 (GNU/Linux) 2011-11-04 19:45:25

Para orientar al lector, esta entrada trata acerca de la creación y priorización de paquetes falsos en Debian GNU/Linux.

Hay situaciones en las que (por motivos como la versión) uno instala algo a traves de otros medios que no son el sistema de gestión de paquetes estandar (de Debian GNU/Linux), y luego el sistema de gestión de paquetes lo quiere también instalar por su cuenta para satisfacer dependencias. Y claro, queremos evitar eso (a sabiendas que podemos tener problemas rompiendo dependencias).

Veamos un caso con el que me encontré a modo de ejemplo. Quería instalar los drivers oficiales de Nvidia a través del famoso binario .run disponible en su web. No es que no me guste el estupendo driver libre nouveau, pero el rendimiento en 3D deja mucho que desear (y el 2D se queda trabado un buen rato en muchas ocasiones) y quería la última versión de los drivers (Richard Stallman, mejor que no leas esto).

¿Cuál era el problema? A pesar de quedar bien instalado el driver oficial, bien configurado el /etc/X11/xorg.conf y blacklisted el driver libre (nouveau), las X's (forma coloquial de llamar a Xorg) tenian conflictos con la librería mesa y, al iniciar cualquier juego que requiriera de OpenGL, dejaba tieso el sistema de tal manera que lo dejaba a la suerte de los botones power/reset.

Por ello, debía desinstalar esos paquetes (los que resultaban de un dpkg -l | grep mesa), pero un par de ellos en particular parecian ser dependencia necesaria de muchos otros: libgl1-mesa-dri y libgl1-mesa-glx. Primero los desinstalé:

apt-get remove libgl1-mesa-dri ; dpkg -r --force-all libgl1-mesa-glx

Luego decidí crear paquetes falsos e instalarlos para engañar al sistema de paquetería, haciéndole creer que tenía todo lo que necesitaba:

apt-get install equivs ; equivs-control libgl1-mesa-dri ; equivs-control libgl1-mesa-glx

Esto creó unos ficheros de control de paquetes Debian. Los edité sustituyendo los campos que aparecian con <> con los datos que quise. Cojí todos los datos del paquete original (obtenidos a través de un apt-cache show ó aptitude show) y cambié aquellos que necesité, como p.ej. la versión. A continuación, construí los paquetes y los instalé:

equivs-build libgl1-mesa-dri ; equivs-build libgl1-mesa-glx ; dpkg -i libgl1-mesa-*_amd64.deb

Y posteriormente los fijé para que no intentara actualizarlos:

echo "Package: libgl1-mesa-dri\nPin: release a=testing\nPin-Priority: 2000\n" > /etc/apt/preferences.d/libgl1-mesa-dri ; echo "Package: libgl1-mesa-glx\nPin: release a=testing\nPin-Priority: 2000" > /etc/apt/preferences.d/libgl1-mesa-glx vi /etc/apt/preferences.d/libgl1-mesa-glx ; echo -e "libgl1-mesa-dri hold\nlibgl1-mesa-glx hold" | dpkg --set-selections

Y eso fue todo. Un apt-get o aptitude update/upgrade me informaron de que esos paquetes se habían retenido y pude dedicarme a la ociosa tarea de echar un par de tiros :)


Comentarios (0)


Volver al indice

login, admin, form, register