En la anterior entrada se habló de como podemos gestionar notas desde el terminal. Una forma rápida y organizada de tomar notas mediante un sencillo script en bash.
Ese script se encuentra en el repositorio git siguiente: git.56k.es/fanta/n
Ese script es el que vamos a utilizar como ejemplo para crear un paquete RPM.
Instalar las dependencias sobre RHEL 7
# yum install gcc git tree rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools -y
Una vez instaladas vamos a crear un usuario llamado rpm. Ese usuario es el que vamos a utilizar para crear los paquetes RPM.
Creación de un usuario en el sistema
Creamos el usuario así:
# adduser -m rpm
Ponemos una password a ese usuario y accedemos como user rpm así:
# passwd rpm
# su - rpm
Creamos una estructura de directorios para construir los RPMs
Con el comando rpmdev-setuptree vamos a crear la estructura de directorios.
$ rpmdev-setuptree
Creará un directorio llamado rpmbuild dentro de /home/rpm/ . Y dentro del directorio rpmbuild los siguientes directorios:
BUILD – El directorio donde van a parar todos los archivos que se crean durante la compilación del paquete.
RPMS – El directorio en el que se creará el archivo RPM final si todo va bien.
SOURCES – El directorio en el que se coloca el archivo tar.gz de origen. El archivo que contiene lo que queremos desplegar en el paquete final.
SPECS – En este directorio metemos los archivos specs. Un archivo de «specs» es básicamente un conjunto de instrucciones sobre cómo construir el paquete.
SRPMS – Contiene el source de los diferentes RPMs que generemos.
Vamos a meter el contenido en SOURCES
En el directorio SOURCES vamos a crear un archivo tar.gz con el contenido de nuestro programa. En este caso ese programa se llama «n».
$ cd SOURCES/
$ git clone http://git.56k.es/fanta/n n-fanta-0.0.1
$ rm -rf n-fanta-0.0.1/.git/
$ tar cfvz n-fanta-0.0.1.tar.gz n-fanta-0.0.1/
$ rm -rf n-fanta-0.0.1
$ cd ..
El proceso es sencillo. Hemos entrado al directorio SOURCES y hemos clonado el código del repositorio «n» con el nombre n-fanta-0.0.1
Luego hemos borrado el directorio .git de dentro del directorio «n-fanta-0.0.1» para no generar un archivo tar.gz con ese contenido en su interior.
Finalmente hemos creado un archivo llamado n-fanta-0.0.1.tar.gz y hemos borrado el directorio n-fanta-0.0.1
Creación del archivo de especificaciones
Ahora vamos a entrar en el directorio SPECS para construir el archivo de especificación del paquete RPM.
Esto se hace con el comando rpmdev-newspec para tener una plantilla de ejemplo:
$ rpmdev-newspec
Eso creará un archivo llamado newpackage.spec por defecto. Si le indicamos el nombre del paquete que queremos crear mejor que mejor.
En mi caso voy a crearlo con un nombre que me permita identificar que se trata de un paquete mio.
$ rpmdev-newspec n-fanta
Y en el interior del archivo me cargo todo para dejar un archivo spec como este:
%define debug_package %{nil}
Name: n-fanta
Version: 0.0.1
Release: %{version}_%{?dist}
Summary: n note manager
Group: Miscellaneous
License: GPL Version 3
URL: http://git.56k.es/fanta/n
Source0: n-fanta-0.0.1.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
%description
n de notas es un script que permite rápidamente tomar notas y categorizarlas.
%prep
%setup -q
%build
%install
mkdir -p $RPM_BUILD_ROOT/usr/bin/
cp -r ./n $RPM_BUILD_ROOT/usr/bin/n
%clean
rm -rf $RPM_BUILD_ROOT
%files
/usr/bin/n
%defattr(-,root,root,-)
En la sección %install creamos un directorio /usr/bin/ y copiamos allí el archivo n del tar.gz
En la sección %files indicamos donde queremos que se copie el archivo.
Construir el paquete RPM
El paquete RPM se puede construir así:
$ rpmbuild -ba /home/rpm/rpmbuild/SPECS/n-fanta.spec
Eso generará un archivo RPM en la siguiente ruta:
/home/rpm/rpmbuild/RPMS/noarch/n-fanta-0.0.1-0.0.1_.el7_9.noarch.rpm
Instalar el paquete RPM
Como root podemos instalar el paquete rpm en nuestro sistema.
# rpm -iv /home/rpm/rpmbuild/RPMS/noarch/n-fanta-0.0.1-0.0.1_.el7_9.noarch.rpm
Desinstalar el paquete RPM
Y desinstalar para ver si se borra el archivo de /usr/bin/n
# rpm -ev n-fanta
Y eso es todo. Es un ejemplo sencillo de creación de un RPM
Saludos cordiales.