Crear .rpm en Debian y RedHat
Paquetería RPM
Los paquetes RPM, son básicamente, la forma que tiene RedHat y sus derivados de empaquetar un conjunto de ficheros (aplicaciones y scripts de configuración), junto a las instrucciones básicas para resolver dependencias a la hora de instalar un fichero .rpm
En este ejemplo vamos a crear un paquete sencillo en formato .rpm, y lo vamos a construir desde Debian y/o desde RedHat o cualquiera de sus derivados.
Herramientas necesarias
Para el proceso de creación y empaquetado de un .rpm necesitamos una serie de herramientas, que debemos instalar en el equipo en que vayamos a generar los RPM. Para ello salimos a la terminal y dependiendo si se trata de un equipo con Debian o RedHat escribiremos:
S.O. Debian | S.O. Redhat |
---|---|
sudo apt -y install rpm rpm2cpio | sudo yum install rpmdevtools |
Crear estructura de directorios necesaria
RedHat tiene aplicación propia para crear la estructura, en Debian usaremos un comando para realizar lo mismo:
S.O. Debian |
---|
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} |
S.O. RedHat |
---|
rpmdev-setuptree |
Fichero de Especificaciones
Para poder generar correctamente el RPM, el empaquetador necesita un fichero de especificaciones (.spec) en el que se le indique que acciones tiene que realizar y que dependencias tiene que satisfacer cuando vaya a instalar el programa.
S.O. RedHat |
---|
rpmdev-newspec rpmbuild/SPECS/nombre-paquete.spec |
En Debian, no hay paquete que genere el .spec directamente, así que podéis crear a mano un fichero 'plantilla.spec' que nos servirá de plantilla para crear posteriormente todos los ficheros .spec que necesitemos.
Lo creamos en la ruta ~/rpmbuild/SPECS/ con el siguiente contenido:
Name: plantilla
Version:
Release: 1%{?dist}
Summary:
License:
URL:
Source0:
BuildRequires:
Requires:
%description
%prep
%autosetup
%build
%configure
%make_build
%install
rm -rf $RPM_BUILD_ROOT
%make_install
%files
%license add-license-file-here
%doc add-docs-here
%changelog
* DIA_SEMANA MES DIA AÑO usuario <usuario@email.es>
-
Si no quieres escribirlo, puedes descargarlo del siguiente enlace:
Creación de un paquete RPM sencillo
Vamos a crear un .rpm muy sencillo, para explicar algunos de los puntos y apartados que nos encontraremos dentro.
Vamos a crear un RPM que nos instale unas fuentes que necesitamos en nuestro equipo/servidor RedHat o derivado y que luego lo podamos usar en otros equipos basados en paquetería rpm.
Para este ejemplo vamos a instalar la fuente open-source Vremena.
La descargaremos desde la web de Font Libray:
Descargamos el fichero .zip y lo descomprimimos, veremos que tenemos los siguientes ficheros:
Creamos nuestro fichero SPEC con el nombre vremena-font.spec
RedHat
rpmdev-newspec rpmbuild/SPECS/vremena-font.spec
Debian (a partir de la plantilla generada)
cp ~/rpmbuild/SPECS/plantilla.spec ~/rpmbuild/SPECS/vremena-font.spec
Ahora con nuestro editor de texto favorito editamos el fichero y deberá quedar con el siguiente contenido:
Name: vremena-font
Version: 0.1
Release: 1%{?dist}
Summary: Vremena Font
License: GPLv3
%description
vremena-font incluye las siguientes fuentes:
Regular Bold Bold Italic Book Book Italic Italic Medium Medium Italic
%install
mkdir -p %{buildroot}/usr/share/fonts/vremena-serif/
cp -a /home/luisgulo/vremena-serif/*otf %{buildroot}/usr/share/fonts/vremena-serif/
%post
fc-cache /usr/share/fonts/
%files
/usr/share/fonts/vremena-serif/VremenaBoldItalic.otf
/usr/share/fonts/vremena-serif/VremenaBold.otf
/usr/share/fonts/vremena-serif/VremenaBookItalic.otf
/usr/share/fonts/vremena-serif/VremenaBook.otf
/usr/share/fonts/vremena-serif/VremenaItalic.otf
/usr/share/fonts/vremena-serif/VremenaMediumItalic.otf
/usr/share/fonts/vremena-serif/VremenaMedium.otf
/usr/share/fonts/vremena-serif/VremenaRegular.otf
%changelog
* Sun Jan 21 2024 Luis GuLo <luisgulo@soloconlinux.org.es>
-
Notas sobre el fichero .spec
- Version: Si generamos nueva versión del rpm, es necesario aumentar el valor
- %{buildroot}: Es el directorio temporal que usa RedHat para crear el .rpm
- %install: Proceso que se ejecuta en la instalacion del paquete.
Siempre hay que usar rutas relativas a %{buildroot}, pues utiliza un chroot para generar la estructura previa antes de empaquetar el rpm - %post: Procesos (scripts, comandos) que se ejecutan tras la instalación.
En nuestro ejemplo tras la copia de las fuentes, necesitamos ejecutar el comando fc-cache (Font Config Caché) para que las fuentes estén disponible. - %files: Ficheros que queremos se proceda a su copia en la ruta destino
- BuildRequires: Si contiene código fuente que aplicaciones necesita para compilar. En nuestro ejemplo eliminamos esa línea.
- Requires: lista separada por comas de todos los paquetes que necesita nuestro paquete para instalarse y cumplir dependencias. En nuestro ejemplo eliminamos esta línea.
Si quieres una explicación completa de todos los apartados y opciones, puedes ver la guía oficial de RedHat en el siguiente enlace:
Creación del RPM
Una vez que tengamos nuestro fichero SPEC, con el contenido que deseamos, tan solo hay que generar el fichero RPM, para ello abrimos un terminal y ejecutamos:
Debian y RH:
rpmbuild -ba rpmbuild/SPECS/vremena-font.spec
Esperamos a que realice todos los pasos y nos fijamos en la última línea de salida de la ejecución:
+ exit 0
Si obtenemos un valor de cero, nuestra creación del rpm ha sido correcta, y podemos encontrar el RPM generado en rpmbuild/RPMS/<arquitectura>:
ls -1 ~/rpmbuild/RPMS/x86_64/
vremena-font-0.1-1.x86_64.rpm
Instalación del paquete RPM
En la maquina con S.O. RedHat o derivada, tan solo tienes que copiar el fichero RPM y ejecutar el siguiente comando para instalarlo:
rpm -i vremena-font-0.1-1.x86_64.rpm
NOTA: Se trata de un ejemplo sencillo.
No entramos en cómo firmar los RPMs generados o como distribuirlos a un repositorio propio de paquetería RPM.
Comprobaciones sobre el RPM
Una lista de algunos comandos útiles (desde Debian o RedHat) para gestionar el RPM que hemos generado:
Extraer contenido del RPM
mkdir contenidoRPM; cd contenidoRPM
rpm2cpio /ruta/fichero.rpm |cpio -iumd
Ver Scripts del RPM
rpm -qp --scripts /ruta/fichero.rpm
En resumen, una forma fácil de crear paquetes RPMs ya sea desde Debian GNU/Linux o desde RedHat (y derivados).