viernes, 23 de octubre de 2015

¿Por qué DNF es tan lento? Si Yum era tan bueno...

Primero un pequeño recuento de DNF: Originalmente nació como un fork de Yum (Exactamente 3.4) pero se modernizó... Es decir, Yum ya tenía sus años pesándole sobre la espalda y era necesario una herramienta actualizada, con API, documentación y bases tecnologícas (Python 2 y 3) más recientes y sólidas.


Así nació el proyecto DNF, incluyéndose por primera vez en Fedora 18 siendo opcional su instalación y prueba por parte de los usuarios de estas versiones... Y las subsiguientes. Sin embargo, ya en Fedora 22, unos dos años después, se dio por estable y lista para reemplazar a nuestro querido Yum.

La teoría nos dice que DNF debe ser más rápida que Yum en tareas como, por ejemplo, resolver las dependencias pero la sensación es que es poco perceptible este tipo de beneficios... Incluso por momentos he notado (Irónicamente) más lento que lo que podría hacer Yum, algo atribuible a lo jóven del proyecto (Que son ya varios años) pero que a futuro debería mejorar conforme se lanzan nuevas versiones.

¿Por qué DNF es tan lento?


No sucede a todos, no sucede siempre y no hay una causa específica por lo que no hay una solución concreta para solucionar los inconvenientes que ha venido presentando DNF, pero a continuación comparto con ustedes las posibles soluciones que más se han compartido en redes sociales y foros:

1. Limpia el caché de DNF

La solución más simple y sencilla, forzará a tu sistema a descargar nuevamente toda la metadata y posiblemente resolver sus problemas.

$ su -c 'dnf clean all'

2. Activa el plugin de fastest mirror.

Otra posible solución es escoger un espejo cercano que dismiuya los tiempos de latencia de red, DNF ya incluye fastest mirror en la paequetería estándar, solo basta editar el archivo:

$ su -c 'nano /etc/dnf/dnf.conf'

Y allí modificar la propiedad:

fastestmirror=1

3. Utiliza DNF en modo IPv4

DNF por omisión intenta utilizar el protocolo IPv6 ¿Qué le hacemos? ¡Es el futuro! Pero algunas configuraciones locales de red y/o ISP no admiten este protocolo y bloquean las peticiones.

Para esto solo basta añadir el parámetro -4 para forzar a DNF a usar solo IPv4. Por ejemplo:

$ su -c 'dnf -4 update'

4. Que DNF te dé explicaciones

Si el error no se resuelve, quizá por debajo está pasando algo que no estemos siendo notificados, por ello, es mejor habilitar el modo "Verboso" de DNF para que nos dé más información:

$ su -c 'dnf update -vvv'

El -vvv habilita la máxima información posible que arroja la herramienta, con suerte, identificaremos cuál es el problema y a través de nuevos foros o páginas de ayuda, logremos resolver el problema.