CentOS 8 ahora viene con DNF

Uno de los cambios más radicales en CentOS 8 ha sido la sustitución del gestor de paquetes YUM por DNF, en la mayoría de los sitios comentan que la transición es casi trivial, pero esto no es del todo cierto, en este post veremos algunas consideraciones sobre este cambio.

Primero veamos las 3 razones que se esgrimen para haber levado a cabo este cambio:
  1. La documentación de yum es casi inexistente para ampliar su funcionalidad
  2. YUM no soporta Python 3
  3. El gestor de dependencias utilizado por DNF es más estándar, ya vine siendo utilizado por SUSE hace mucho tiempo dentro de zypper.
Ahora bien, pese a que la sintaxis es básicamente la misma el manejo de repositorios no lo es tanto, se van a poder agregar como se hacía con YUM, incluso dejando en el mismo directorio los archivos .repo pero algunas cosas cambian, en mi caso pondré las diferencias para trabajar con algunas librerías de PHP. Por ejemplo, en vez de habilitar diferentes repos para una u otra versión ahora se habilita un módulo para la versión de PHP y las librerías se instalan utilizando ese modulo.

dnf module -y install php:remi-7.4

Para instalar repositorios podemos hacerlo de la siguiente manera si es un archivo .repo

dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://xxxxxx/xxxxxx.repo

O si viene dentro de un .rpm

dnf -y install https://xxxxxx/xxxxxx.rpm

Una de las diferencias que he notado es que con este sistema de módulos algunos repos no vienen activos por defecto, con lo cual no se resuelven correctamente las dependencias, por ejemplo, dan problemas las librerías de mongodb e imagick, para instalarlas es necesario especificar el repo de sus dependencias, un paso más que no teníamos con YUM.

dnf --enablerepo=PowerTools -y install tinyxml2
dnf -y install mediainfo php-pecl-imagick

dnf --enablerepo=remi -y install libbson mongo-c-driver
dnf -y install php-pecl-mongodb

Los errores de no hacerlo así serían los siguientes
Problem 1: cannot install the best candidate for the job
- nothing provides libbson(x86-64) >= 1.16.1 needed by php-pecl-mongodb-1.7.1-1.el8.remi.7.4.x86_64
- nothing provides mongo-c-driver-libs(x86-64) >= 1.16.1 needed by php-pecl-mongodb-1.7.1-1.el8.remi.7.4.x86_64
Problem 2: package mediainfo-19.09-1.el8.x86_64 requires libmediainfo.so.0()(64bit), but none of the providers can be installed
- conflicting requests
- nothing provides libtinyxml2.so.6()(64bit) needed by libmediainfo-19.09-1.el8.x86_64

Comentarios