Modificando un paquete en debian/ubuntu

A todos nos ha pasado alguna vez, sobre todo a los que llevamos usando linux toda la vida, que el desarrollador de debian o ubuntu comete un pequeño error al empaquetarlo y ese paquete que necesitamos con gran urgencia no se puede instalar. También nos puede ocurrir que haya un paquete para red hat o derivados y que al alienarlo nos ponga una dependencia mal y tampoco se pueda instalar. ¡¡CAGONTÓ!!

La solución que se aplica normalmente consiste en bajarse el código fuente de la aplicación y compilarlo con los dedos cruzados para que funcione a la primera.
Haciendo esta operación conseguimos dos cosas: perder tiempo y que debian/ubuntu pierdan el control sobre ese software, lo que a la larga nos dará problemas. Se que me estarán preparando la hoguera para meterme dentro por decir esto, pero es lo que veo en mi día a día.

La solución alternativa consiste en arreglar el paquete.

Pongamos un ejemplo: resulta que nos queremos echar unos vicios al nexuiz así que nos vamos a "Sistema | Administración | Gestor de paquetes Synaptic", buscamos la aplicación nexuiz, le damos a instalar ... y nos dice algo como esto:
(aquí viene el ¡¡cagontó!! ;-) )

Miramos las dependencias del paquete y nos encontramos con que depende de una versión mayor que la 2.2.3-1 y la bajable es la 2.2.3-1~edgy1 :

Así que lo que ocurre es que el paquete nexuiz tiene mal una dependencia. Habría que cambiar donde pone 2.2.3-1 y poner 2.2.3-1~edgy1.
Hala, pues al tajo.

Primero vamos a bajarnos los paquetes así que abrimos un terminal y hacemos lo siguiente:
jmferrerm@yinyan:~$ apt-cache show nexuiz | grep Filename
Filename: pool/universe/n/nexuiz/nexuiz_2.2.3-1~edgy1_i386.deb
Filename: pool/universe/n/nexuiz/nexuiz_2.0-1_i386.deb
jmferrerm@yinyan:~$ apt-cache show nexuiz-server | grep Filename
Filename: pool/universe/n/nexuiz/nexuiz-server_2.2.3-1~edgy1_i386.deb
Filename: pool/universe/n/nexuiz/nexuiz-server_2.0-1_i386.deb

Y ahora que sabemos la ruta, que un posible mirror es ftp://archive.ubuntu.com y que los paquetes están en el directorio ubuntu ... sabemos que el paquete está en ftp://archive.ubuntu.com/ubuntu/pool/universe/n/nexuiz/nexuiz_2.2.3-1~edgy1_i386.deb.
Nos lo bajamos a donde queramos, por ejemplo al escritorio.

Y ahora modificamos el paquete para arreglar la dependencia. Dicen que una imagen vale más que mil palabras así que un video ... pues mejor todavía.
Primero preparamos el paquete.
Luego modificamos el paquete.
Reempaquetamos el paquete.
Si no puedes ver los vídeos puedes utilizar el vlc que se encuentra dentro de cualquier distribución de linux o en videolan.org.

Más fácil imposible. :-)

Comentarios

El método sólo es válido en casos excepcionales muy concretos

El método sólo es válido en casos excepcionales muy concretos, y sabiendo muy bien lo que se está heciendo.

Normalmente modificar un paquete binario ya creado es algo que solo se debe hacer en circunstancias excepcionales, y sabiendo muy bien lo que se está haciendo. Cuando hay una dependencia en el archivo de control, no suele ser por capricho, y cambiarla alegremente lo único que va a provocar es tener un sistema inestable en el que, de forma más habitual o menos, la aplicación deje de funcionar correctamente o, lo más habitual, haya un acceso a una parte de la memoria no permitida ("Segmentation Fault") debido a que las ABI del programa y la librería no coinciden. Normalmente, y salvo que sea un caso en el que no dispongamos del paquete fuente, es mejor coger dicho paquete fuente, modificar lo que sea en él, y recompilarlo para tu plataforma con lo que se obtienen los ficheros .deb debiadamente corregidos. Es la base de todas las libertades que da el Software Libre, no veo por qué renegar de ella, no es nada difícil de hacer, da menos problemas, y en todo caso cuando sabes las consecuencias de la modificación directa en el paquete binario o precompilado, normalmente no deberías tener problemas para modificar el fuente. Lo contrario es un poco jugar a la "ruleta rusa" con el paquete.

En el caso del ejemplo que se menciona, parece muy posible que los desarrolladores de Ubuntu hayan cogido el paquete de Debian antes de su incorporación al repositorio oficial (los desarrolladores y desarrolladoras de juegos de Debian y Ubuntu trabajamos habitualmente en el mismo equipo de forma conjunta), y al haber usado el operador ~ en el número de versión hayan forzado a que sea ligeramente inferior a la que entre en Debian, de tal forma que ésta automáticamente supere a la anterior cuando se incorpore desde SID, y haber cometido algún error en este proceso con los números de versión. Ésto también ocurre, o solía ocurrir, a veces con las BinNMU (Binary Non Maintainer Upload).

¿Tienes puestos los efectos gráficos?

Eso me pasó a mi unas cuantas veces hasta que encontré la causa.

Te puede estar pasando por tener habilitados los efectos de escritorio que se pueden quitar en "Sistema | Preferencias | Apariencia ", pestaña de "Efectos visuales" y radiobutton "Ninguno".

Si aún así te sigue saliendo la pantalla negra probablemente no tengas instalados los drivers de la tarjeta de video. ¿No te sale en la barra de arriba algo que dice que hay drivers privativos para instalar?
Si es así, instálalos y verás como empieza a verse bien el nexuiz.

Es muy adictivo. Yo me he tenido que bajar una expansión porque me he acabado todos los niveles.