Durante un aggiornamento di sistema con dnf -y update su Rocky Linux, può comparire un errore che interrompe la transazione e impedisce l’aggiornamento di nginx
No available modular metadata for modular package 'nginx-2:1.26.3-9.module+el9.8.0+40222+e48d13b6.1.x86_64', it cannot be installed on the system
No available modular metadata for modular package 'nginx-core-2:1.26.3-9.module+el9.8.0+40222+e48d13b6.1.x86_64', it cannot be installed on the system
No available modular metadata for modular package 'nginx-filesystem-2:1.26.3-9.module+el9.8.0+40222+e48d13b6.1.noarch', it cannot be installed on the system
Error: No available modular metadata for modular packageI pacchetti vengono salvati in cache ma non installati. La causa e la soluzione sono legate al sistema di moduli dnf.
La causa
Rocky Linux, come RHEL e le altre derivate, gestisce alcune applicazioni tramite il sistema dnf modules: invece di un singolo pacchetto statico, il software viene distribuito attraverso stream versionati (es. nginx:1.22, nginx:1.24, nginx:1.26), ognuno con i propri metadati che descrivono quali pacchetti appartengono a quello stream.
Quando dnf trova un pacchetto con la firma module+el9.x.y+… nel nome, cerca nei metadati modulari disponibili per determinare a quale stream appartiene. Se non riesce ad associarlo univocamente, blocca la transazione.
Il problema si manifesta tipicamente quando uno o più repository di terze parti con supporto modulare sono abilitati sul sistema. Il caso più comune è il repository Remi (remi-modular), molto diffuso su server con PHP gestito via Remi. In presenza di remi-modular, dnf non riesce a risolvere l’appartenenza del pacchetto nginx allo stream AppStream corretto perché lo stream non è stato abilitato esplicitamente sul sistema.
La diagnosi
Prima di intervenire conviene verificare lo stato degli stream nginx disponibili e i repository attivi
dnf module list nginxmostra gli stream disponibili per nginx
Rocky Linux 9 - AppStream
Name Stream Profiles Summary
nginx 1.22 common [d] nginx webserver
nginx 1.24 common [d] nginx webserver
nginx 1.26 common [d] nginx webserverIl simbolo [d] indica lo stream default, ma default non significa abilitato. Senza un’abilitazione esplicita, dnf non dispone del contesto modulare necessario per associare il pacchetto al suo stream.
dnf repolistmostra i repository attivi
repo id repo name
appstream Rocky Linux 9 - AppStream
baseos Rocky Linux 9 - BaseOS
epel Extra Packages for Enterprise Linux 9 - x86_64
remi-modular Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - x86_64Se nell’output compare remi-modular, è questa la fonte del conflitto.
La soluzione
La soluzione è abilitare esplicitamente lo stream nginx su AppStream. Questo fornisce a dnf il contesto modulare necessario per associare correttamente i pacchetti nginx durante la risoluzione delle dipendenze
dnf module enable nginx:1.26 -yUna volta abilitato lo stream, l’aggiornamento può essere ripetuto e si completerà senza errori
dnf -y updateLo stato [e]nabled assegnato allo stream è persistente, quindi il problema non si ripresenta ai successivi aggiornamenti.
Se non si vuole gestire gli stream modulari o si ha necessità di sbloccare rapidamente l’aggiornamento, è possibile escludere nginx dalla transazione e aggiornare tutto il resto
dnf -y update --exclude=nginx\*Successivamente si abilita lo stream e si aggiorna solo nginx
dnf module enable nginx:1.26 -y
dnf install nginx -y