lunes, 8 de septiembre de 2008

Crea tus propios paquetes: Checkinstall

Checkinstall es una aplicación desarrollada por Felipe Eduardo Sánchez Díaz Durán en 2002. La idea de este programita es facilitar la administración de nuestros sistemas. ¿Y como es que pretende lograr esto? La respuesta es sencilla, supongamos que alguna vez queremos o tenemos que instalar en nuestro sistema una aplicación que no esta empaquetada para nuestra distro o bien que necesitamos que este compilada a nuestra medida entonces la única alternativa es compilarla desde su tarball presentándonos dos posibilidades:

  • Compilar con el clásico configure && make && make install.
  • Empaquetarlo e instalarlo con su correspondiente instalador

La primera opción nos presenta problemas en el caso de querer desinstalar la aplicación y ni hablar si necesitamos upgradear. Por otro lado, empaquetar las aplicaciones no siempre es tarea sencilla, ya vimos que en Slackware es algo trivial, pero en otras distros ya significa liarnos más... Entonces es en este momento que aparece Checkinstall.

Esta herramienta nos permite crear paquetes TGZ, RPM y DEB a partir del tarball, con la consecuencia de que vamos a poder instalar el paquete con su correspondiente comando mágico y lo que es aun mejor, llegado el momento de querer eliminar la aplicación desinstalarla con su otra desinstaladora palabra mágica :)


Un Ejemplo Práctico

Siempre he creido que la mejor forma de hablar de algo es a través de un ejemplo práctico, así que eso vamos a hacer ahora, vamos a crear un rpm para OpenSuSE 11.0.

Los que conozcan y usen el visualizador de imagenes GpicView sabrán que se vuelve muy entrañable, ya que consume muy pocos recursos y es muy rápido, además de hacer simplemente lo que uno espera o sea ver una imagen :) . El caso es que estaba en mi Xfce de OpenSuSE 11.0 y no encontré ese programa en los repositorios que tengo agregado a Yast, cosa que me entristecio en un principio pero como dicen a rey muerto rey puesto... así que qué mejor oportunidad para crear nuestro propio paquete de GpicView. :)

Para comenzar instalamos checkinstall. En la actualidad esta en los repos de todas las grandes distros, asi que es cosa de buscarlo no mas. Como estoi trabajando con SuSE, me bastó con agregar los repositorios de la comunidad y dar un

# yast -i checkinstall

Ya instalado checkinstall, nos hacemos del tarball de la aplicacion a empaquetar. Yo bajé GpicView desde SourceForge ---> GpicView

Desempaquetamos y ejecutamos el configure y el make como siempre:

# tar xvf gpicview-0.1.9.tar.gz
# cd xvf gpicview-0.1.9/
# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --mandir=/usr/man

No olvidar nunca ver la ayuda que nos da ./configure --help. Ya pasado esta etapa sin errores ejecutamos:

# make

Y acá es donde usamos Checkinstall (obviamente despues de haber pasado sin errores el make).

# checkinstall -h

Para ver la ayuda.
checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.

Usage: checkinstall [options] [command [command arguments]]
Options:
*Package type selection*
-t,--type= Choose packaging system
-S Build a Slackware package
-R Build a RPM package
-D Build a Debian package
*Install options*

La ayuda ya nos dice que es muy sencillo de usar.

# checkinstall
checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.


The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]:
## ENTER ##

Preparando la documentación del paquete...OK

Por favor escribe una descripción para el paquete.
End your description with an empty line or EOF.
>>
Y ahora nos toca escribir una pequeña descripción de la aplicacion que vamos a empaquetar, no andaba muy inspirado así que escribi esto :p

>> GpicViewer es un visualizador de imagenes desarrollado en GTK+ :)
## ENTER ##
## ENTER ##

Y ya esta... ahora nos va a mostar un resumen con la opción de cambiar lo que no nos guste:

**************************************
**** RPM package creation selected ***
**************************************

This package will be built according to these values:

1 - Summary: [ GpicViewer es un visualizador de imagenes desarrollado en GTK+ :) ]
2 - Name: [ gpicview ]
3 - Version: [ 0.1.9 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ i386 ]
8 - Source location: [ gpicview-0.1.9 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ gpicview ]

Introduce un número para cambiar algún dato u oprime ENTER para continuar:
Esto no merece explicación o si? O_o

Installing with make install...

========================= Installation results ===========================
Making install in src
make[1]: se ingresa al directorio `/home/cristian/gpicview-0.1.9/src'
make[2]: se ingresa al directorio `/home/cristian/gpicview-0.1.9/src'
test -z "/usr/bin" || /bin/mkdir -p "/usr/bin"
/bin/sh ../libtool --mode=install /usr/bin/install -c 'gpicview' '/usr/bin/gpicview'
/usr/bin/install -c gpicview /usr/bin/gpicview
make[2]: No se hace nada para `install-data-am'.
make[2]: se sale del directorio `/home/cristian/gpicview-0.1.9/src'
make[1]: se sale del directorio `/home/cristian/gpicview-0.1.9/src'
Making install in po
make[1]: se ingresa al directorio `/home/cristian/gpicview-0.1.9/po'
if test -r ".././mkinstalldirs"; then \
.././mkinstalldirs /usr/share; \
else \
/bin/sh ../mkinstalldirs /usr/share; \
.....
....
...
..
.
.
Y si todo salió bien nos va a mostrar el siempre lindo mensaje de exito!! :-D

======================== Installation successful ==========================

Copying documentation directory...
./
./COPYING
./NEWS
./ChangeLog
./TODO
./README
./INSTALL
./AUTHORS

Copiando los archivos al directorio temporal...OK

Comprimiendo las páginas de manual...OK

Creando la lista de archivos...OK

Creando paquete RPM...OK

NOTE: The package will not be installed

Borrando directorios temporales...OK

Borrando el directorio doc-pak...OK

Borrando el directorio temporal...OK


**********************************************************************

Done. The new package has been saved to

/usr/src/packages/RPMS/i386/gpicview-0.1.9-1.i386.rpm
You can install it in your system anytime using:

rpm -i gpicview-0.1.9-1.i386.rpm

**********************************************************************

Y ya esta... nos avisa donde esta guardado el paquete que acabamos de crear y como instalarlo:

# rpm -i /usr/src/packages/RPMS/i386/gpicview-0.1.9-1.i386.rpm


Como se puede ver checkinstall reemplaza a make install, makepkg y el make clean, ya que nos libra de los archivos innecesarios de la compilación. También es posible configurarlo para que al terminar de crear el paquete lo instale automagicamente, pero no lo recomiendo, es mejor que nosotros nos hagamos cargo de esas cosas.

Otras consideraciones:

  • Para los que usamos Slackware el comando es # checkinstall --fstrans=no
  • Por un tema de permisos siempre trabajo todo desde root, pero no es estrictamente necesario, por lo menos no hasta que queramos crear e instalar el paquete.
  • Lei en un foro ubuntero que checkinstall cuando le creaba paquetes DEB a veces tenia dificultades con los permisos, no me consta, pero da una posible solución (que no me gusta para nada!!) # chmod 755 / [Este es un ejemplo de porque es mejor trabajar todo como root :) ]
Y por último la fotito, para que vean que sí funciona xD


No hay comentarios: