Pautas de Etiqueta Dist

Empleo de la etiqueta %{?dist} es mantenida en Fedora.

Este documento consideraría como un adenda para el Directrices sobre nombres.

Propósito de la etiqueta Dist

La etiqueta %{?dist} tiene varios usos. El propósito original era que un solo archivo de especificaciones pudiera usarse para varias versiones de distribución. Por ello, en algunos casos, BuildRequires: y Requires: deberán ser diferentes para distintas versiones de distribución. Por lo tanto, %{?dist} cumple una doble función:

  • diferencia varios paquetes que de otro modo tendrían el mismo %{name}-%{version}-%{release}, pero dependencias muy diferentes.

  • Concede una verificación condicional en la especificación para abordar las diferentes dependencias.

¿Tengo Que Utilizar la Etiqueta Dist?

Sí. Es muy útil para mantener el orden adecuado entre las versiones de Fedora y la coherencia en las etiquetas de versión es muy útil para las herramientas automatizadas que se utilizan para realizar reconstrucciones masivas.

Utilizar %{?dist}

Aquí está la información importante que conoce:

Valores posibles para %{dist}

Cuando ejecute comandos de fedpkg como fedpkg build, los valores para %{dist} y su variables ayudantes estén asignadas según la rama de git en la que estás trabajando. NO necesitas definir estas variables en su archivo de especificación. fedpkg establecerá mágicamente %{?dist} por ti.

Solo para propósitos de referencia,estos son algunos valores posibles para %{dist}. Nota que si %{dist} está indefinido, %{?dist} sencillamente se vuelve vacío. También note que los lanzamientos de Fedora utilizan "fc" y no "f" en la etiqueta para razones históricas.

SO %{?dist} tag

RHEL 7 (all variants)

.el7

RHEL 8 (all variants)

.el8

RHEL 9 (all variants)

.el9

Fedora 37

.fc37

Fedora 38

.fc38

Fedora 39

.fc39

Desarrollo:

La rama de desarrollo toma el ‘disttag’ de la siguiente versión mayor no liberada de Fedora.

Note que el periodo de dirección en la definición de %{?dist}. Esto está presente tal que pueda ser utilizado fácilmente en el campo de lanzamiento. Estas definiciones pueden encontrarse en common/branches.

Note que la dist de RHEL solo está definida por paquetes EPEL.

%{?dist} en el campo Release:

La etiqueta %{?dist} está incluida en el campo Release como a continuación:

Release: 1%{?dist}

Esto traduce en:

Si %{dist} está definido, inserte su valor aquí. si no, no haga nada

Por tanto, si tenemos lo siguiendo en un archivo spec:

Name: logjam
Version: 1.4
Release: 2%{?dist}

Cuando este paquete se crea un en FC20 de buildroot en i386, genera un rpm nombrado como: logjam-1.4-2.fc20.i386.rpm.

Mantiene en importar ese %{?dist} nunca sería empleado en los campos Name o Version, ni en apuntes de %changelog.

Condicionales

Junto con %{?dist}, hay varias variables "helper" definidas por el buildsystem. Estas variables son:

%{rhel}: Esta variable sólo está definida en creaciones en Red Hat Enterprise Linux. Si está definida, está puesto al número de la versión de Red Hat Enterprise Linux presente en tiempo de creación.

%{fedora}: Esta variable sólo está definida en creaciones de Fedora. Si fue definida, está puesta al número de lanzamiento del actual Fedora en tiempo de creación.

%{rhl}: Esta variable sólo está definida en las creaciones de Red Hat Linux Enterprise, si está definida para el número del lanzamiento de presente Red Hat Linux en tiempo de creación.

%{fc#}: Esta variable sólo está definida en creaciones de Fedora. Por ejemplo, en creaciones de Fedora 38, %{fc38} está definido a 1.

%{el#}: Esta variable sólo está definida en creaciones de Red Hat Enterprise Linux. Por ejemplo, en las creaciones de RHEL 7, %{el7} está definido a 1.

Todas de estas variables, si definidas, tendrán un valor puramente numérico. Con %{dist} y estas variables adicionales, se pueden crear condicionales dentro de un archivo de spec para manipular las diferencias entre distribuciones.

Aquí están algunos ejemplos de cómo utilizar estas variables en conditionales:

%if 0%{?rhel}
%endif

%if 0%{?fedora} >= 21
%endif

%{?fedora:%global _with_xfce --with-xfce}

%if 0%{?rhel}
%if 0%{?rhl}
%endif
%endif

%if 0%{?rhl}%{?fedora}
%endif

%{?fc20:Requires: algo}
%{?fc21:Requires: otro}
%{?fc22:Requires: otro más}

Mantiene en importar que si estás comprobando a una familia concreta de distribuciones, que necesitas para utilizar:

%if 0%{?rhel}

y NO

%if %{?rhel}

Sin el 0 adicional, si %{rhel} está indefinido, el %if condicional cesará para existir, y el rpm fallara en la creación.

Valores de distribución específicas

Fedora 37 en adelante, unos cuantas macros ayudantes están definidas para ayudar a empaquetadores escribir archivos spec de distribución agnóstica:

%{dist_vendor}: El proveedor de la distribución. Para Fedora, esto es +Fedora +.

%{dist_name}: El nombre de la distribución. Para Fedora, esto es +Fedora Linux +.

%{dist_home_url}: El URL de la página inicial de la distribución. Para Fedora, esto es https://fedoraproject.org/

%{dist_bug_report_url}: El URL para un parte de fallos. Para Fedora, esto es https://bugzilla.redhat.com/

%{dist_debuginfod_url}: El URL donde se ejecuta el servidor de debuginfod (si hay alguno). Esto es utilizado en elfutils.spec. Para Fedora, esto es https://debuginfod.fedoraproject.org/.

Estos valores están configurados por medio del paquete fedora-release. Las distribuciones anteriores de Fedora se esperan que proporcionen sus valores específicos de la distribución aquí.

Cosas que no puedes utilizar %{?dist} para

  • No debes sustituir las variables para %{dist} (o cualquiera de las variables relativas).

  • Debes no codificar un valor de forma difícil para %{dist} (o cualquiera de las variables relacionadas) en su spec.

  • Debe no codificar dificultosamente una etiqueta de dist en el spec: BAD: Lanzamiento: 1.fc38 GOOD: Lanzamiento: 1%{?dist}

  • No puedes poner ningún tipo de "etiquetado" en %{dist} (o cualquiera de las variables relacionadas). %{dist} (y sus variables relacionadas) existen ÚNICAMENTE para definir la distribución contra la que se creó un paquete.

  • %{?dist} nunca debe ser utilizado en los campos Name o Version, solo Release, y solo como documentado arriba.

  • %{fedora}, %{rhel}, %{rhl}, %{fc#}, %{el#} nunca debe ser utilizado en los campos Name, Version, o Release.

Cuestiones comunes

Q: Por qué tan solo tú no dejas el buildsystem (o empaquetador) apruebe el valor para dist a rpm, p. ej. rpm --with dist el7? + A: Actualmente, lo hacemos. El sistema de creación de Fedora define los valores para dist cuando ejecuta fedpkg.

Q: Por qué es uso de %{?dist} es obligatorio? + A: Hay muy pocos paquetes los cuales no lo utilizán, la razón primaria muy antigua para no utilizarlo (compartiendo paquetes de datos grande a través de los lanzamientos de Fedora) ya no es más relevante porque todas las versiones de Fedora están firmadas con una clave diferente, y teniendo Versión consistente: las etiquetas simplifican las herramientas automatizadas las cuáles pueden necesitar incrementarlas.