En el lugar en donde estoy actualmente trabajando (Senior Software Developer, en Canonical, programando Python), hacemos en general algún software que es propietario, y algún software que será liberado a la comunidad.
Este post es sin embargo acerca de otra faceta del laburo, faceta en la que incursioné durante estos días a raiz de un problema que tenía al hacer unos tests. Esta faceta es la de trabajar en un paquete que nosotros usamos pero que no es nuestro, e invertir tiempo del laburo (horas, días) en solucionar algo... en definitiva, devolver algo a la comunidad del software libre del que tanto uno toma.
Durante dichos tests, necesité levantar los atributos extras de un archivo. Como obviamente las pruebas las hago desde Python, lo primero que probé usar es la biblioteca xattr, pero me tiraba un error extraño y feo.
Al principio dudé de la biblioteca en sí, y me puse a excavar desde la misma, hasta las llamadas del sistema directamente, con lo cual aprendí bastante de estos atributos extendidos. Pero vi que estaba todo bien.
Luego empecé a subir desde la llamada del kernel a la biblioteca FUSE (que es la que te permite codear vos mismo un sistema de archivos y usarlo sin tener que integrarlo al kernel). Acá es donde encontré un problema. Entendí cómo debería funcionar, vi que estaba mal, busqué el código fuente del proyecto, y verifiqué que incluso en lo más actualizado de ese código (en trunk) también estaba mal.
Así que me traje el código, lo compilé y empecé a probar nuestro sistema con la versión que iba corrigiendo, hasta que solucioné el problema. Una vez que verifiqué todo, generé el parche correspondiente y lo subí a Launchpad, en un bug que abrí por este problema, para que sea considerado su inclusión en futuras versiones y que esto esté resuelto para todos.
Por otro lado, en el laburo, para algunas cosas en desarrollo armamos Paquetes Privados de software, de manera que los desarrolladores nos suscribimos a ello y si hay actualizaciones estas son ofrecidas a nosotros a través del mismísimo Administrador de Actualizaciones del Ubuntu (este es una funcionalidad pública del Launchpad llamada Personal Package Archives (PPA)).
Entonces, como nosotros para desarrollo necesitamos esto corregido, me puse a agregar a nuestro PPA una nueva versión de este paquete. Paso a comentarles cómo es este proceso.
Bajé las fuentes limpias del paquete (apt-get source python-fuse
). Hice esto en un directorio vacío y ví que aparte del directorio con las fuentes, aparecieron unos archivos de control, los cuales borré prestamente porque no los iba a necesitar. Copié el parche que había creado al directorio correspondiente de las fuentes (debian/patches
), agregando el nombre de ese parche en el archivo debian/patches/00list
. Finalmente anoté una entrada en el changelog de las fuentes (esto se hace con un programita auxiliar, ya que deben tener un formato específico; en mi caso hice dch -D <distro> -v <versión_del_paquete> "mensaje para el changelog"
).
Ya con las fuentes modificadas, armé los archivos de control y paquete como para subir, lo que se hace con la orden debuild --no-tgz-check -S
. Para saber que está todo bien, y que todo lo que armé se va a instalar bien, fui al directorio superior (donde antes tenía las fuentes, y ahora dejados por la orden anterior, nuevos archivos de control), y usamos un programita que arma un root falso e instala todo lo que tiene que instalar para ver que nuestro paquete se acopla bien al resto del sistema: sudo pbuilder --build *.dsc
.
Finalmente, para subir el paquete al Launchpad: dput -f <host> *.changes
.
Luego, lo dejé reposar algunas horas a fuego lento, y al rato Ubuntu nos indica que hay una actualización disponible, y es efectivamente este paquete, :)