Resolución de dependencia de módulo

Los flujo de módulos son paquetes RPM que proporcionan alternativas al contenido predeterminado que está presente en un repositorio RPM. Los flujos de módulo contienen paquetes RPM que pueden tener el mismo nombre que los paquetes RPM no modulares del contenido predeterminado de un repositorio RPM. Para ser capaz de entregar el contenido correcto a su sistema se necesitan introducir unos pocos cambios en el algoritmo de resolución de dependencia dentro de las librerías y herramientas DNF.

+

+

En el par de párrafos siguientes intentaremos explicar como DNF está procesando las solicitudes para habilitar, instalar y cambiar los flujos de módulo. El primer ejemplo siguiente representa el estado de un repositorio RPM en un sistema nuevo. Nada se ha instalado desde el repositorio RPM. El repositorio RPM es un repositorio RPM modular que contiene dos flujos de módulo perl:5.24 y perl:5.32. También contiene algunos paquetes no modulares perl, perl-VSP, foo y bar.

Los siguientes ejemplos son más bien una descripción de alto nivel de como la modularidad funciona por dentro. Para instrucción específica de como usar los flujos de módulo con DNF vea la sección Usar módulos.

Ejemplo 1. estado básico de un repositorio modular

no modular perl:5.24 perl:5.32
perl-1-f36.rpm perl-2-module_524.rpm perl-3-module_532.rpm
perl-Fedora-VSP-1-f36.rpm perl-Fedora-VSP-2-module_524.rpm perl-Fedora-VSP-1-module_532.rpm
foo-1-f36.rpm foo-1-module_524.rpm bar-2-module_532.rpm
bar-1-f36.rpm

No disponible, no puede ser instalado
Disponible, no habilitado
Disponible puede ser instalado
instalado

El código de color ilustra el estado del software contenido y como lo ve DNF. Todo el contenido no modular está disponible para su instalación desde que se haya obtenido como es usual. Todo el contenido que está disponible para instalación está codificado en color verde. También todo el contenido verde está incluido en una transacción de resolución de dependencia DNF y creación de conjunto de contenidos durante la instalación. Los flujos de módulo no están disponibles para instalar puesto que necesitan ser habilitados primero. El contenido que está disponible pero no habilitado está codificado en color amarillo. El contenido amarillo no se considera para las transacciones de resolución de dependencia DNF y creación de conjunto de contenido. Si el contenido está en un estado donde no puede ser instalado está codificado en color rojo. El contenido rojo tampoco se considera para las transacciones de resolución de dependencia DNF y creación de conjunto de contenido. Cualquier contenido instalado está codificado en colo azul.

Habilitar un flujo de módulo

Ejemplo 2. estado del repositorio RPM cuando el flujo 5.24 está habilitado

no modular perl:5.24 perl:5.32
perl-1-f36.rpm perl-2-module_524.rpm perl-3-module_532.rpm
perl-Fedora-VSP-1-f36.rpm perl-Fedora-VSP-2-module_524.rpm perl-Fedora-VSP-1-module_532.rpm
foo-1-f36.rpm foo-1-module_524.rpm bar-2-module_532.rpm
bar-1-f36.rpm

No disponible, no puede ser instalado
Disponible, no habilitado
Disponible puede ser instalado
instalado

Un flujo de módulo necesita estar habilitado antes de que pueda ser instalado. En el ejemplo dos hemos habilitado el flujo de módulo perl:5.24. Todos los paquetes proporcionados por el flujo 5.24 están ahora disponibles para instalar.

Si intentamos instalar el paquete perl la transacción DNF incluirá el paquete del flujo 5.24. Los paquetes no modulares serán filtrados por modular filtering durante la creación del conjunto de contenido. Los paquetes no modulares y el archivo RPM NEVRAs no son considerados para la instalación.

Si hay un paquete no modular con el mismo nombre que un paquete de un flujo de módulo habilitado, este paquete no modular es filtrado para los propósitos de la instalación por modular filtering. El filtrado modular garantiza que se eligen los paquetes correctos para la creación del conjunto de contenido DNF y para la siguiente instalación en su sistema.

El único paquete que no está incluido en el flujo 5.24, pero es también un paquete no modular en el repositorio, es el paquete bar. El paquete bar puede todavía ser instalado como normal ya que la habilitación de 5.24 no le afecta y no es parte del flujo 5.24.

Cada vez que usted elige añadir un flujo de módulo a su repositorio RPM puede ser usado para reemplazar los paquetes no modulares existentes cuando se habilite e instale. Verifique siempre si su flujo de módulo no romperá las dependencias de su otro software instalado, después de la habilitación y la instalación de sus flujos de módulo.

El flujo 5.32 está todavía disponible para su habilitación, pero solo un flujo del módulo llamado perl puede ser habilitado a la vez en un sistema. Para ser capaz de habilitar el flujo 5.32 debemos, primero, restablecer y eliminar la instalación del flujo 5.24` y todos sus paquetes.

Instalar un flujo de módulo

Ejemplo 3. estado del repositorio RPM cuando todos los paquetes disponibles están instalados

no modular perl:5.24 perl:5.32
perl-1-f36.rpm perl-2-module_524.rpm perl-3-module_532.rpm
perl-Fedora-VSP-1-f36.rpm perl-Fedora-VSP-2-module_524.rpm perl-Fedora-VSP-1-module_532.rpm
foo-1-f36.rpm foo-1-module_524.rpm bar-2-module_532.rpm
bar-1-f36.rpm

No disponible, no puede ser instalado
Disponible, no habilitado
Disponible puede ser instalado
instalado

When a module stream is enabled you can install all the packages which are included in the enabled module streams. Also you can install all non-modular packages which have a different package name as packages include in the enabled module stream. All other non-modular packages are filtered out by modular filtering. Module stream RPM files can have different NEVRAS (newer or older) than the non-modular RPM files. That is why we need modular filtering to ensure that only the correct RPM file NEVRAs are used for defining what is the latest content for the purpose of updating the installed software.

Switching a module stream

Example 4. state of the RPM repository when switching to 5.32 stream

non-modular perl:5.24 perl:5.32
perl-1-f36.rpm perl-2-module_524.rpm perl-3-module_532.rpm
perl-Fedora-VSP-1-f36.rpm perl-Fedora-VSP-2-module_524.rpm perl-Fedora-VSP-1-module_532.rpm
foo-1-f36.rpm foo-1-module_524.rpm bar-2-module_532.rpm
bar-1-f36.rpm

No disponible, no puede ser instalado
Disponible, no habilitado
Disponible puede ser instalado
instalado

Before we can enable another module stream from the same module we have to first reset the already enabled module stream and remove it. In our situation in Example 3 we have enabled the 5.24 stream of the perl module and installed it. To enable the 5.32 stream and install it we first need to uninstall all the packages from the 5.24 stream and reset it.

The reset of the stream ensures that the state of the module stream in the DNF database is updated. Only after resetting a module stream, a new stream can be enabled and installed.

Always remove all installed packages from a module stream before resetting. It is possible to reset a module stream without removing the old RPM packages. The problem is that when enabling a new module stream and installing it, the new module stream will try to upgrade/downgrade the existing installed RPM packages. This is not desired and can cause broken dependency issues. More about this in the section Using Modules.