Búsqueda de sitios web

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


RPM (un acrónimo recursivo de RPM Package Manager) es un sistema de gestión de paquetes gratuito y de código abierto para Linux. Aunque originalmente fue creado 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 y mostraremos cómo crear fácilmente paquetes de software fuente y binario simples, por ejemplo, el paquete RPM GNU “Hello World” en Fedora Linux . distribución. Asumimos que tiene algunos conocimientos básicos de los paquetes RPM prediseñados y del proceso de creación de software gratuito de código abierto.

Instalar herramientas de desarrollo en Fedora

Comencemos configurando el entorno de desarrollo en Fedora Linux ejecutando el siguiente comando para instalar las herramientas necesarias para crear 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, archivos de configuración RPM y paquetes binarios.

rpmdev-setuptree
tree ~/rpmbuild/

Esto es para qué sirve cada directorio:

  1. BUILD: almacena varios directorios %buildroot cuando se crean los paquetes.
  2. RPMS: contendrá RPM binarios en subdirectorios de Arquitectura.
  3. FUENTES: almacena archivos fuente 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.

Construyendo un RPM de "Hola mundo"

En este paso, debe descargar el código fuente (también conocido como fuente “upstream”) del proyecto Hello World que estamos empaquetando, en el archivo ~/rpmbuild/SOURCE . directorio 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 archivo ~/rpmbuild/SPECS directorio, utilizando el programa rpmdev-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 reflejar el nivel 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úscula para evitar quejas sobre rpmlint.
  • Licencia: verifique el estado de la licencia del software inspeccionando los archivos fuente y/o sus archivos de LICENCIA, y/o hablando con los autores.
  • URL: especifica la página de inicio del paquete de software.
  • Fuente0: 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 construir 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.
  • %files: esta sección enumera los archivos proporcionados por el paquete, que se instalarán en el sistema.
  • %changelog: debería almacenar el trabajo de preparación del RPM, especialmente si hay parches de seguridad y de errores incluidos en la parte superior de la fuente ascendente base. 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 para paquetes. Por lo tanto, normalmente es preferible no codificar estas rutas en archivos de especificaciones, sino utilizar 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 utiliza en la sección %build del archivo de especificaciones y 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 consultar Pautas de empaquetado: Macros RPM.

Construyendo el paquete RPM

Para compilar los paquetes fuente, binario 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 garantizar que el archivo de especificaciones y los archivos RPM creados cumplan con 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 tendrá éxito 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 un paquete de software binario y fuente simple. También mostramos cómo crear un paquete RPM GUN Hello Word. Utilice el formulario de comentarios a continuación para comunicarse con nosotros si tiene alguna pregunta o comentario.