"Después del juego es antes del juego"
Sepp Herberger

miércoles, 5 de octubre de 2016

Modificar y reempaquetar un .deb

Recientemente he tenido algún problema con 2 paquetes que me daban quebraderos de cabeza a la hora de mantener la coherencia de mi sistema de paquetes Debian. Ya que tenemos un eX-presidente que piensa que se puede traspasar los límites del Estado de Derecho por el "bien común" (de unos pocos) he pensado que yo también puedo traspasar los límites de las reglas del sistema de paquetes para mantener la coherencia. Cada uno hace la puñeta hasta donde puede :-P.

Para uno de ellos había en repositorios una versión mayor y se actualizaba al hacerse pkgsync. Ni siquiera un hold funcionaba para hacer que se quedase quietecito. La solución pasaba por modificar el paquete original y cambiar internamente el número de versión, poniendo una mucho mas alta (de la 2.0.4 a la 2.9.9, por ejemplo) para asegurarnos que por mucho tiempo que pase no se va a machacar dicha versión en ninguna actualización.

Para el otro el problema era que tenía una dependencia que instalaba una aplicacioncilla de diseño de circuitos electrónicos que no era necesaria, pero esto provocaba una cascada de instalaciones que acababa chocando con las dependencias de otro paquete de terceros que si era imprescindible (el software de la pizarra Interwrite, concretamente). En este caso tenia que modificar las dependencias del paquete original y quitar lo que molestaba.

Si no tenemos el paquete que queremos modificar a mano podemos descargar el .deb de repositorios con:
# apt-get download mipaquete
Esto nos descarga mipaquete-xxx.deb. Ahora necesitamos desempaquetarlo para hurgar dentro. Para ello usamos dpkg-deb
# apt-get install dpkg
# mkdir trabajo
# dpkg-deb -R mipaquete-xxx.deb trabajo
Esto desmontará el paquete y lo quedará dentro de "trabajo" para que podamos retocarlo. Supongamos que hemos descargado el paquete arandr para modificarlo. Los datos a retocar para los casos que he expuesto antes están en:
# cat trabajo/DEBIAN/control
Package: arandr
Version: 0.1.9-1
Architecture: all
Maintainer: Ubuntu Developers 
Original-Maintainer: Christian M. Amsüss 
Installed-Size: 309
Depends: python (>= 2.7), python (<< 2.8), x11-xserver-utils | xrandr, python-gtk2
Section: x11
Priority: optional
Homepage: http://christian.amsuess.com/tools/arandr/
Description: Simple visual front end for XRandR
 ARandR is a visual front end for XRandR 1.2/1.3 (per display options), which
 provides full control over positioning, saving and loading to/from shell
 scripts and easy integration with other applications.
Modificando el apartado "Version" puedo poner la que yo quiera, modificando "Depends" puedo añadir o quitar dependencias. Una vez retocado a nuestro gusto tocra reempaquetar:
# dpkg-deb -b trabajo mipaquete-yyy.deb
Y se creará el fichero mipaquete-yyy.deb que podremos a instalar a mano con:
# dpkg -i mipaquete-yyy.deb; apt-get -f install
Y ya tenemos nuestro paquete tuneado para que no de problemas con lo que queramos hacer. Por supuesto no estamos circunscritos a trabajo/DEBIAN/control, también podemos retocar los scripts de pre y post-instalación, los mismos ficheros que componen el paquete y que se instalan por /usr/bin/ y demás ubicaciones. Incluso podemos crear un paquete desde cero así de una forma rápida, usando otro como plantilla.

Nos vemos cuando haya otras cosas interesantes que contar... o cuando tengamos Gobierno, lo que antes llegue.

3 comentarios:

  1. Interesante artículo. Es posible que esta información me sirva para que mi Debian no me actualice el viejo Iceweasel al nuevo kakaFirefox, aunque eso signifique perder actualizaciones de seguridad.
    O
    Tienes una idea mejor para que Debian no me machaque Iceweasel? Seguro que si...

    ResponderEliminar
    Respuestas
    1. Hola, no se si funcionará con iceweasel, pero en condiciones normales congelar un paquete para que no se actualice. Mirate esto:

      http://www.debianadmin.com/how-to-prevent-a-package-from-being-updated-in-debian.html

      Eliminar
  2. gracias por el link!
    rápida respuesta, pardiez!

    ResponderEliminar