Skip to main content
Como construir tu propio paquete rpm

Como construir tu propio paquete rpm

En muchas ocasiones puede darse la ocasión de que no exista un fichero RPM mediante el cual realizar la instalación del mismo en el sistema.

Bienvenidos a un nuevo post en ByteMind. En el caso de hoy les vamos a explicar como pueden crear su propio paquete RPM personalizado. En muchas ocasiones, y sobre todo si tenemos todavía una distribución con una versión anterior, para la que no existen todas las versiones, puede darse la ocasión de que no exista un fichero RPM mediante el cual realizar la instalación del mismo en el sistema.

Ante esta situación, se puede compilar el código e instalar dicha aplicación desde el código fuente, o se puede crear un fichero RPM a partir e dicho código fuente y utilizarlo para realizar futuras instalaciones del mismo de una forma más sencilla.

También puede darse la ocasión de que desee disponer de un paquete personalizado, ya sea por una configuración específica, un cambio en los directorios, etc.

También puede darse la ocasión de que haya creado su propia aplicación y quiera crear un fichero RPM a partir de la misma. En este tutorial, vamos a explicar como construir nuestro propio paquete a partir del código fuente de la aplicación.

Para construir dicho RPM, necesitará el código fuente de la aplicación, generalmente comprimido en un fichero .tar, y el fichero SPEC, en el cual se incluye la configuración de la aplicación para la construcción del paquete.

Durante el proceso de compilación se realizarán las siguientes tareas:

  1. Ejecuta los comandos y macros mencionados en la sección de preparación del archivo SPEC.
  2. Comprueba el contenido de la lista de archivos
  3. Ejecuta los comandos y las macros en la sección de compilación del archivo SPEC. Las macros de la lista de archivos también se ejecutan en este paso.
  4. Crea el archivo del paquete binario.
  5. Crea el archivo del paquete fuente (si se especifica a la hora de la creación)

Este proceso, nos generará dos ficheros rpm, uno binario y uno de fuente.

El archivo de paquete binario constará de todos los arhivos de origen junto con cualquier información adicional para la instalación o desinstalación del paquete, mientras que el paquete de fuente incluirá el fichero tar con el código fuente y el fichero SPEC utilizado para la creación del mismo.

Si es nuevo en el paquete rpm, es posible que primero desee comprender cómo usar el comando rpm para instalar, actualizar y eliminar paquetes en CentOS, RedHat o Fedora.

 

Instalación de rpmbuild

Para construir un archivo rpm basado en el archivo SPEC que acabamos de crear, necesitamos usar el comando rpmbuild.

El comando rpmbuild es parte del paquete rpm-build. Para instalarlo puede utilizar el siguiente comando:

O mediante dnf dependiendo de la versión de su OS:

rpm-build depende de los siguientes paquetes. Si aún no los tiene instalados, el comando anterior instalará automáticamente estas dependencias adicionalmente:

 

Directorios de compilación de RPM

Por defecto, con la instalación de rpm-build se crearán automáticamente las siguientes estructuras de directorios que se utilizarán durante la compilación de RPM.

En caso de que no se hayan creado automáticamente puede hacerlo con el siguiente comando:

Nota: La estructura de directorios anterior es para CentOS, Fedora y RedHat cuando se usa el paquete rpmbuild. También puede usar el directorio /usr/src/redhat, pero debe cambiar el parámetro topdir en consecuencia durante la compilación rpm. Si está haciendo esto en SuSE Enterprise Linux, use el directorio /usr/src/packages.

Si desea usar su propia estructura de directorio en lugar de /root/rpmbuild, puede usar una de las siguientes opciones:

  • Use la opción –buildroot y especifique el directorio personalizado durante el rpmbuild
  • Especifique el parámetro topdir en el archivo rpmrc o en el archivo rpmmacros.

 

Descargar el archivo Tar de origen

A continuación, descarga el archivo tar de origen para el paquete que desea compilar y guárdelo en el directorio SOURCES.

Para este ejemplo, he usado el código fuente de la aplicación openssl. Pero, los pasos son exactamente los mismos para construir RPM para cualquier otra aplicación. Solo tiene que descargar el código fuente correspondiente para el RPM que está intentando construir.

 

Crear el archivo SPEC

En este paso, dirigimos RPM en el proceso de compilación creando un archivo de especificaciones. El archivo de especificaciones generalmente consta de las siguientes ocho secciones diferentes:

  1. Preamble: la sección del preámbulo contiene información sobre el paquete que se está creando y define las dependencias del paquete. En general, el preámbulo consta de entradas, una por línea, que comienzan con una etiqueta seguida de dos puntos, y luego información.
  2. %prep: en esta sección, preparamos el software para el proceso de creación. Cualquier compilación anterior se elimina durante este proceso y el archivo fuente (.tar) se expande, etc.
  3. Una cosa clave más es comprender que hay macros predefinidas disponibles para realizar varias opciones de acceso directo para construir rpm. Es posible que esté utilizando estas macros cuando intente crear paquetes complejos.
  4. %description: la sección de descripción generalmente contiene una descripción sobre el paquete.
  5. %build: esta es la sección responsable de realizar la compilación. Por lo general, la sección %build es un script sh.
  6. %install: la sección %install también se ejecuta como script sh al igual que %prep y %build. Este es el paso que se utiliza para la instalación.
  7. %files: esta sección contiene la lista de archivos que forman parte del paquete. Si los archivos no forman parte de la sección %files, no estará disponible en el paquete. Se requieren rutas completas y puede establecer los atributos y la propiedad de los archivos en esta sección.
  8. %clean: esta sección indica al RPM que limpie los archivos que no forman parte del área de compilación normal de la aplicación. Digamos, por ejemplo, si la aplicación crea una estructura de directorio temporal en /tmp/ como parte de su compilación, no se eliminará. Al agregar un script sh en la sección %clean, el directorio se puede eliminar una vez que se completa el proceso de compilación.

Aquí está el archivo SPEC que creé para la aplicación openssl para construir un archivo RPM.

 

En la sección %build, en nuestro caso indicamos los flags de configuración a utilizar y crearemos el paquete en función de la arquitectura de la máquina sobre la cual se construye el paquete RPM.

En la sección %install realizamos la instalación del paquete con el uso del comando “make” y, posteriormente, eliminamos los ficheros previos a la compilación desde la sección %clean.

Guardaremos el fichero generado en la ruta /root/rpmbuild/SPECS/ y procederemos a la creación del paquete RPM.

 

Creación del paquete RPM usando rpmbuild

Una vez completada la creación del fichero SPEC, podemos comenzar a construir el paquete rpm. Si existe algún error durante esta fase, la creación se detendrá y deberemos de resolver el error indicado antes de poder continuar con la creación de nuestro paquete.

Para ello podemos utilizar comandos en función de lo que queramos realizar. Podemos ver la ayuda de rpmbuild con la opción –help.

Revisando la ayuda, en nuestro caso, queremos crear el fichero de binarios y el fichero de origen, por lo que utilizaremos la opción -ba para crear nuestros paquetes.

Dicho esto, el comando para la creación del rpm sería el siguiente:

La creación del paquete tardará unos minutos y, una vez completada, debería de haber creado 2 ficheros rpm.

 

Verificamos los ficheros RPM creados

Una vez completada la ejecución de rpmbuild, verificaremos que los paquetes se han generado correctamente.

 

Instalación del archivo RPM

Como paso final, se debería de instalar el fichero rpm para verificar que funciona correctamente y que se resuelven todas las dependencias

Después de la instalación puede verificar que el paquete existe en el sistema y se ha instalado correctamente:

Y podemos comprobar la versión del paquete para asegurarnos de que funciona y no muestra ningún error:

 

Esto es todo por el momento, espero les sea de utilidad y como siempre tienen la sección de comentarios disponible para exponer cualquier opinión, duda o lo que necesiten.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.