Cómo crear un paquete GNU Hello World RPM en Fedora


sistema de gestión de paquetes para Linux. Aunque originalmente se creó para su uso en Red Hat Linux, ahora se usa en muchas distribuciones de Linux como CentOS, Fedora y OpenSuse. Es importante destacar que el nombre RPM se refiere al programa administrador de paquetes y .rpm es un formato de archivo.

En este artículo, explicaremos cómo escribir archivos RPM, mostrando cómo crear fácilmente una fuente simple y paquetes de software binarios, por ejemplo, el paquete RPM GNU “Hello World” en la distribución de Fedora Linux. Suponemos que tiene un conocimiento básico de los paquetes RPM prefabricados y del proceso de creación de software de código abierto gratuito.

Instalar herramientas de desarrollo en Fedora

Comencemos por configurar el entorno de desarrollo en Fedora Linux ejecutando el siguiente comando para instalar las herramientas necesarias para construir RPM.

$ sudo dnf install fedora-packager @development-tools

A continuación, agregue su cuenta sin privilegios al grupo "simulacro" de la siguiente manera (reemplace tecmint con su nombre de usuario real). Esto le permitirá probar el procedimiento de compilación en un chroot limpio.

$ sudo usermod -a -G mock tecmint

Ahora, cree una compilación RPM en su directorio ~/rpmbuild y verifique la compilación usando los siguientes comandos. Mostrará una lista de subdirectorios, que contiene el código fuente del proyecto, los archivos de configuración RPM y los paquetes binarios.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

Esto es para lo que está destinado cada directorio:

  1. BUILD: almacena varios directorios% buildroot cuando se compilan los paquetes.
  2. RPMS: contendrá RPM binarios en subdirectorios de Arquitectura.
  3. FUENTES: almacena archivos de origen comprimidos y cualquier parche, aquí es donde el comando rpmbuild los buscará.
  4. SPECS: almacena los archivos SPEC.
  5. SRPMS: almacena el RPM de origen en lugar de un RPM binario.

Creación de un RPM de "Hola mundo"

En este paso, necesita descargar el código fuente (también conocido como la fuente "ascendente") del proyecto Hello World que estamos empaquetando, en el directorio ~/rpmbuild/SOURCE con el siguiente comando wget.

$ cd ~/rpmbuild/SOURCES
$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

A continuación, configuremos el paquete RPM usando un archivo .spec (llamémoslo hello.spec en este caso) en el directorio ~/rpmbuild/SPECS, usando rpmdev- programa newspec.

$ cd ~/rpmbuild/SPECS
$ rpmdev-newspec hello
$ ls

Luego abra el archivo hello.spec usando su editor favorito.

$ vim hello.spec

La plantilla predeterminada debería verse así:

Name:           hello
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
* Tue May 28 2019 Aaron Kili

Expliquemos brevemente los parámetros predeterminados en un archivo .spec :

  • Nombre: se utiliza para establecer un nombre para el paquete.
  • Versión: debe reflejarse en sentido ascendente.
  • Versión: números con los que trabaja dentro de Fedora.
  • Resumen: es una breve descripción de una línea del paquete, la primera letra debe estar en mayúsculas para evitar quejas de rpmlint.
  • Licencia: verifique el estado de la licencia del software inspeccionando los archivos de origen y/o sus archivos de LICENCIA, y/o hablando con los autores.
  • URL: especifica la página de inicio del paquete de software.
  • Source0: especifica los archivos de origen. Puede ser una URL directa o una ruta del código fuente comprimido del software.
  • BuildRequires: especifica las dependencias necesarias para construir el software.
  • Requiere: especifica las dependencias necesarias para ejecutar el software.
  • % prep: se utiliza para crear el entorno para construir el paquete rpm.
  • % build: se utiliza para compilar y crear los códigos fuente.
  • % install: se utiliza para instalar los programas. Enumera los comandos necesarios para copiar el archivo resultante del proceso de compilación al directorio BUILDROOT.
  • % archivos: esta sección enumera los archivos proporcionados por el paquete, que se instalarán en el sistema.
  • % changelog: debe almacenar el trabajo de preparación del RPM, especialmente si hay parches de seguridad y errores incluidos en la parte superior de la fuente básica de subida. Se genera automáticamente al crear el archivo hello.spec. Los datos del registro de cambios generalmente se muestran mediante rpm --changelog -q .

Ahora edite su archivo .spec y realice los cambios como se muestra.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

Notará que hemos utilizado algunos parámetros nuevos en el archivo anterior que no se han explicado. Se denominan macros y se utilizan para crear invocaciones del sistema definidas por RPM para establecer rutas de instalación de paquetes. Por lo tanto, generalmente es preferible no codificar estas rutas en archivos de especificaciones, sino usar las mismas macros para mantener la coherencia.

Las siguientes son macros de directorio y compilación de RPM junto con sus definiciones y valores predeterminados:

  • % {make_build}: se usa en la sección% build del archivo de especificaciones, ejecuta el comando make.
  • % {name}: define el nombre del paquete o directorio.
  • % {buildroot} -% {_ buildrootdir} /% {name} -% {version} -% {release}.% {_ arch}, igual que $BUILDROOT
  • % {_ infodir} -% {_ datarootdir}/info, predeterminado:/usr/share/info
  • % {_ mandir} -% {_ datarootdir}/man, predeterminado:/usr/share/man
  • % {_ bindir} -% {_ exec_prefix}/bin, predeterminado:/usr/bin

Tenga en cuenta que puede encontrar los valores para estas macros en/usr/lib/rpm/platform/*/macros o consulte Pautas de empaquetado: Macros RPM.

Construyendo el paquete RPM

Para compilar los paquetes fuente, binarios y de depuración, ejecute el siguiente comando rpmbuild.

$ rpmbuild -ba hello.spec

Después del proceso de compilación, los RPM de origen y los RPM binarios se crearán en los directorios ../SRPMS/ y ../RPMS/ respectivamente. Puede utilizar el programa rpmlint para comprobar y asegurarse de que el archivo de especificaciones y los archivos RPM creados se ajustan a las reglas de diseño de RPM:

$ rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Si hay algún error como se muestra en la captura de pantalla anterior, corríjalo antes de continuar.

Por último, pero no menos importante, utilice un programa simulado para comprobar que la compilación del paquete se realizará correctamente en el entorno de compilación restringido de Fedora.

$ mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Para obtener más información, consulte la documentación de Fedora: Creación de paquetes RPM.

¡Eso es todo! En este artículo, hemos explicado cómo mejorar su sistema Fedora para crear una fuente simple y un paquete de software binario. También mostramos cómo crear un paquete GUN Hello Word RPM. Utilice el formulario de comentarios a continuación para comunicarse con nosotros si tiene preguntas o comentarios.