RPM4Dummies: Cómo Crear tu primer RPM (Fedora)


Ésta entrada está enfocada a ser un tutorial básico sobre cómo crear paquetes RPM sin conocimientos previos (Si sabes un poco de Bash e inglés ya la hiciste jaja) Y pues básicamente relataré mi experiencia  acerca de cómo construí los paquetes RPM indicados para Kmess 2.0.6 en Fedora 14:

1.- Preparando el Entorno

Como Root en consola, corremos los siguientes comandos:

1. yum groupinstall "Development Tools"
2. yum install rpmdevtools
3. yum install rpmlint

Una vez teniendo ésto listo, nos dirigimos a "Usuarios y Grupos" en nuestras aplicaciones y creamos un nuevo usuario, puesto que ahí debemos crear nuestros RPM's y no en la carpeta personal del nuestro por si algo sale mal.

2.- Creando Esqueleto

Iniciamos sesión como el usuario que utilizaremos para construir los RPM's y corremos en terminal:

rpmdev-setuptree

Ésto nos creará un entorno de trabajo para crear los RPM's, un "Árbol del Proyecto" vaya.

3.- Consiguiendo Materias Primas

Necesitaremos dos cosas: Un Archivo ".spec" y el código fuente del programa para instalar. El archivo ".spec" lo puedes conseguir de cualquier "src.rpm" creado para tu versión de Fedora (con una versión anterior del código fuente por ejemplo) o con un "src.rpm" para una versión antigua de fedora, una fuente para dicho tipo de paquetes está en: http://www.rpmfind.net/ Claro que los verdaderos packagers construyen sus propios archivos "spec" pero éste tutorial está enfocado a todos aquellos usuarios que quieran construir RPM's desde tarballs con código fuente más reciente del que ofrece el paquete oficial en sus repositorios.

4.- Revisando el Spec


Una vez obtenidas tus materias primas, debes abrir el paquete "src.rpm" que hayas descargado con un gestor de archivadores, ahí dentro encontrarás el ".spec" que necesitas. Debido a que lo que haremos será construir un Nuevo RPM desde código fuente más reciente, generalmente sólo deberás cambiar el campo "Version" y agregar un "Changelog"; También deberás fijarte en el campo "Release". En mi caso, utilicé el paquete de Kmess 2.0.5-2 de Fedora 14 para crear el 2.0.6.1-0 usable en el mismo Fedora, en ése caso, sólo modifiqué el apartado Version por el nuevo, quité el 2 de Release y puse un 0 ("Release" es el número que aparecerá después del guión) y agregué un changelog copiando uno de los ejemplos anteriores y modificándolo según aplicó con el changelog oficial que hallé en la página de Kmess para la versión 2.0.6.1-0, La cosa fue sencilla.

5.- Dependencias


Otra cosa que has de checar en tu archivo ".spec" es el apartado de #BuildRequires ya que todo lo que esté en éste apartado son dependencias sin las cuáles tu paquete no podrá ser creado. Instala todos los paquetes requeridos con un:

su -c 'yum -y install paquete1 paquete2 paquete3'

Y así no tendrás mayor problema al crear tu paquete.

6.- Todo en su Lugar


Estamos a punto de construir nuestro paquete, por lo que debemos poner todo en su lugar. Nos vamos al directorio Home del usuario creado para construir paquetes y encontraremos la carpeta "rpmbuild" ahí adentro, en la carpeta de SOURCES debemos colocar el código fuente de nuestra aplicación, el "tarball" para explicarme mejor. Por otro lado, debemos copiar nuestro ".spec" modificado/recientemente creado en SPECS y continuamos con el siguiente paso.

7.- Revisando nuestro Spec

Usaremos una pequeña herramienta llamada rpmlint para nuestro cometido. Ésta herramienta nos avisará de errores en la estructura del archivo que acabamos de modificar/escribir y su uso es bastante sencillo:

rpmlint program.spec

Ésto nos soltará un Output donde nos dará información acerca de nuestro archivo. Si hay errores o advertencias, simplemente tenemos que hacer caso y modificar según se necesite. A veces son cosas menores que puedes pasar por alto, pero más vale prevenir que lamentar.

8.- Construyendo el Paquete


Ya tenemos todo listo para la construcción! Ahora simplemente tenemos que correr el comando de construcción de paquete y listo:

rpmbuild -ba program.spec

(Recuerda hacer el "cd" a tu directorio SPECS del árbol de directorios "rpmbuild" de la carpeta personal del usuario que estés utilizando para crear paquetes) Tras un tiempo de compilado y trabajo, tendremos un paquete RPM listo para usar, su "src.rpm" y también los paquetes adicionales que se hayan creado.

9.- Revisando Paquetes


Terminada la creación del paquete, si todo salió bien, podremos irnos al directorio rpmbuild de la carpeta personal de nuestro usuario que utilizamos para la creación de los paquetes, y en el subdirectorio RPMS encontraremos los binarios de nuestra aplicación y los extras que la acompañen, mientras que en el directorio SRPMS encontraremos los paquetes "src.rpm" para la misma aplicación. Tener a la mano éstos dos tipos de paquetes es lo que debería importarte... Ahora simplemente checamos nuestro RPM final generado (el que usaremos para la instalación de la aplicación) con rpmlint:

rpmlint *.rpm

Ésto de igual manera nos soltará un output que debemos revisar (Entiéndase que el "*.rpm" corresponde a la ruta completa de nuestro archivo RPM recién generado)

10.- Tips Extra


Has terminado! Ahora sólo te falta probar tus RPM generados. Trata de instalarlos con un doble click o estando como Root en consola:

rpm -ivh ruta/al/paquete/rpm

Y si instalan y el programa funciona pues enhorabuena! Lo has hecho. Finalmente recuerda que para construir RPM's de diferentes arquitecturas lo mejor es usar sistemas por separado, es decir, si quiero hacer un RPM de 32 Bits pues uso un sistema i686, si quiero uno de 64 Bits uso un sistema x86_64, y así sucesivamente. Te quitas de problemas y te aseguras de que todo funcione tras la prueba de instalación y demás, lo mejor, es que puedes usar un mismo "spec" para construir paquetes en diferentes arquitecturas y el proceso es básicamente el mismo, inclusive es posible usar máquinas virtuales para la construcción de paquetes.

Este tutorial sirve para aquéllos que necesiten un RPM actualizado cuando no lo encuentren o bien, para aquéllas personas que quieran ayudar en la actualización de los RPM's para su distro, en este caso Fedora.

Información más detallada: http://goo.gl/KTrU3