Archivo por años: 2015

Generando paquetes DEB para programas en Python

Estos últimos meses he estado aprovechando para reescribir Devede. El principal motivo de reescribirlo desde cero ha sido, aparte de aprovechar mejor las distintas características de Python 3 y GTK 3, para darle una arquitectura interna más moderna, flexible y modular. El resultado es que ahora es muchísimo más fácil añadir nuevas características, backends y utilidades, y además puede hacer cosas como convertir en paralelo varios vídeos, aprovechando al máximo las CPUs multinúcleo actuales.

Desde el principio decidí escribir el código en condiciones utilizando el módulo DistUtils para realizar la instalación, y resultó ser un gran acierto porque permite simplificar notablemente la generación de paquetes DEB, algo necesario porque varios usuarios que querían utilizarlo no se aclaraban con GITHUB ni la línea de comandos.

Una vez que ya tenemos listo nuestro script de instalación setup.py, siguiendo las directrices de distutils, basta con instalar en nuestro sistema las utilidades stdeb. En Debian y Ubuntu el paquete se llama python3-stdeb; sin embargo, la versión para Python 3 sólo está disponible en Ubuntu a partir de Vivid (15.04), que en el momento de escribir esta entrada todavía está en fase de desarrollo (en Debian está disponible desde Jessie en adelante, por lo que no hay problema). Los que tengan la ultima revisión estable de Ubuntu (14.10 en el momento de escribir esta entrada) sólo dispondrán de python-stdeb en sus repositorios, que sólo funciona para Python 2 (incluso reescribe el shebang para que apunte a Python 2 en caso de que nuestro código lo tuviese apuntando a Python 3), por lo que tendrán que bajarse a mano el paquete .deb. La opción más directa consiste en buscarlos en Ubuntu Packages.

Una vez instalado hay que añadir el módulo dep_util en el script setup.py, para que reconozca las nuevas opciones. Para ello basta con añadir al principio:

from distutils import dep_util

Una vez hecho esto hay que añadir en el raíz de nuestro proyecto un fichero llamado stdeb.cfg. Este fichero contendrá todos aquellos datos que el generador no puede extraer de los que se pasan en el script setup.py, como por ejemplo las dependencias de nuestro programa. El fichero de Devede-NG contiene lo siguiente:

[DEFAULT]
Depends = python3, python-support, python-urllib3, python-gi, libgtk-3-0, ffmpeg (>= 7:1.2.6) | libav-tools(>= 6:9.16), mplayer, mpv | vlc, dvdauthor, mkisofs | genisoimage, vcdimager, libvorbis0a, libvorbisfile3

El resto de las opciones posibles que se pueden poner se pueden encontrar en la documentación de stdeb. Un detalle importante es que no conseguí que funcionase con el comando XS-Python-Version. Cada vez que lo añadía para forzar que sólo generase paquetes de Python 3, el proceso devolvía un error.

Ahora ya está todo listo, por lo que para generar el paquete basta con ejecutar el siguiente comando:

python3 setup.py --command-packages=stdeb.command bdist_deb

Y ya está; se creará un directorio llamado deb_dist en cuyo interior encontraremos un paquete deb con nombre python3-nombreprograma​_numero​.de​.version​_all.deb.

Por último, comentar varios detalles extra:

  • es fundamental llamarlo con python3; de no hacerlo así, generará un paquete para Python 2 (incluso reescribirá el shebang de los ficheros python para que apunten a Python 2)
  • podemos hacer todos los cambios que queramos en nuestro código y regenerar el paquete directamente siempre que no cambiemos la cadena con la versión en nuestro script setup.py. Si la cambiamos debemos borrar el directorio deb_dist antes de volver a generar el paquete, o el proceso fallará, devolviendo un error.
  • debe tenerse muy en cuenta que, al generar paquetes .deb, el script setup.py se ejecuta dos veces: la primera para copiar al directorio deb_dist sólo los ficheros que realmente conforman nuestro programa y que se tienen que instalar en el sistema (de manera que otros ficheros, como el README o similares, no se incluirán en el paquete), y la segunda vez para configurar y generar el paquete .DEB en sí. En el caso de Devede-NG esto fue importante tenerlo en cuenta porque lo primero que hace el script de instalación es compilar los ficheros de traducciones .po y copiarlos en una carpeta diferente, que es la que luego se instala en el sistema. Pero al ejecutarse por segunda vez dentro de deb_dist, los ficheros .po ya no estaban disponibles porque éstos no se copian en el sistema. Tras hacer unas modificaciones menores fue posible hacer que funcionase perfectamente.

Un voladizo para la mesa del ordenador

Por mucho espacio que tenga siempre acabo necesitando más, y como la mesa del ordenador se me empezaba a quedar pequeña decidí construir un voladizo para ganar espacio, al tener así un estante superior donde poner la impresora y otros elementos.

Empecé por comprar las piezas. En tiendas como Bricoking o Bricocentro recortan tablero a medida y lo cantean en base a nuestras instrucciones. La lista completa es la que aparece en la siguiente imagen, indicando cuantas de cada una se necesitan y el tamaño en centímetros de cada lado. Aquellos lados que tienen un punto son los que deben ir canteados. Las medidas indicadas están pensadas para una mesa de 138 cm de largo, y para tablero de 2 cm de grosor.

piezas

Las piezas azules son los laterales del voladizo, que sostienen el peso; la pieza amarilla es la parte superior, y las verdes son los listones frontal y trasero, que, además de tapar la zona inferior de la pieza superior, le da más resistencia. Las dos piezas naranjas son los estantes laterales, y la pieza rosa y la gris forman el fondo, donde además se colgará el monitor.

Empezamos por fijar a la parte superior los dos listones, usando cuatro ángulos de 20x20mm. Nótese que los listones son cuatro centímetros más cortos que la parte superior para que encajen con los laterales, que tienen dos centímetros de grosor cada uno:

re_IMG_20140513_191355 re_IMG_20140513_191550

re_IMG_20140513_193423

A continuación añadimos las dos piezas laterales, fijándolas también con ángulos tanto a la parte superior como a los dos listones:

re_IMG_20140513_200141

Y con esto tenemos la primera parte:

re_IMG_20140513_200158

Ahora podemos colocarla encima de la mesa y fijarla con cuatro ángulos para que no se mueva ni se nos caiga nada. Otra opción sería utilizar tacos de madera para que no se vea, pero en mi caso prefiero utilizar algo lo más resistente posible:

re_IMG_20140513_213416

El siguiente paso consiste en fijar los estantes laterales (piezas naranjas). Para ello utilicé el soporte ekby töre de Ikea, ideal para estas cosas: fijé dos en cada tablero por la parte trasera, los fijé a la mesa, y finalmente atornillé cada tablero a su pieza lateral por la zona delantera para que el conjunto aguante más peso (mi intención es poner el ordenador encima de una de ellas).

re_IMG_20150114_171233

La última parte es la zona posterior, formada por las piezas rosa y gris. La rosa es la parte frontal, que mirará hacia nosotros, y la gris es la de refuerzo. El motivo es que estas dos piezas sostendrán nuestro monitor, además de reforzar el voladizo para que no tienda a doblarse, por lo que nunca está de más garantizar que tenga una buena resistencia. Empezamos por colocar una sobre otra y atornillarlas para que queden perfectamente solidarias:

re_IMG_20150113_131736 re_IMG_20150113_132939 re_IMG_20150113_134553

Si nos fijamos, la pieza gris es algo más corta que la rosa. Esto es para que no tropiece con el listón posterior que va en el voladizo.

El siguiente paso consiste en fijar el soporte para el monitor. Yo escogí uno fijo porque ocupa menos espacio (la ventaja de colgar el monitor es que ganamos el espacio que ocupaba el soporte, y nos deja mover el teclado hasta el fondo por si queremos leer o hacer alguna otra cosa). Para ello empezamos por medir a qué altura están los agujeros del soporte VESA de nuestro monitor y, en base a ello, fijar la base:

re_IMG_20150113_134730 re_IMG_20150113_135946 re_IMG_20150113_165440

Ahora hay que añadir dos ángulos en la parte superior para fijar el tablero al voladizo:

re_IMG_20150113_170933

A continuación hay que hacer los agujeros para pasar los cables de alimentación y vídeo. Primero hacemos una plantilla de la disposición concreta de los conectores en nuestro monitor (truco: usar los tornillos del soporte para fijar un folio a los agujeros del monitor, y así tener una guía):

re_IMG_20150113_180735

El siguiente paso consiste en pasar la plantilla al tablero, alineándola con el soporte instalado (¡no olvidar darle la vuelta!) y marcar los puntos en los que deben ir los agujeros:

re_IMG_20150113_181203

Hecho esto utilizamos una corona y un taladro para perforar el tablero en los puntos indicados, y procedemos a montar la pieza en la mesa, fijándola a la parte superior mediante los dos ángulos:

re_IMG_20150114_121636 re_IMG_20150114_122420

Ahora fijamos por detrás la parte inferior del tablero para evitar que se mueva, utilizando un ángulo más largo. En la foto vemos que el ángulo se atornilla también por debajo de la mesa:

re_IMG_20150114_123107

Hecho esto colocamos el monitor en el tablero y conectamos los cables:

re_IMG_20150114_123404

Yo añadí a mayores un tubo fluorescente debajo de la balda para tener luz extra si un día quiero hacer algo en la mesa que no sea trabajar con el ordenador. Este tubo está justo detrás del listón frontal:

re_IMG_20150114_155201

Y con esto ya está completo nuestro maravilloso voladizo:

re_IMG_20150114_124608