¿Cómo determina rpm si un paquete es una actualización?

¿Cómo determina rpm si un paquete es una actualización?

Quizás esta pregunta sea un poco extraña, pero estoy luchando aquí.

¿Con qué criterio determina rpm que un paquete es una actualización o no?

La versión y el lanzamiento son una cadena, por lo que no se pueden comparar con otras versiones. Hay tres indicadores para definir una versión: época, versión y lanzamiento. ¿RPM (y yum, dnf, ...) verifica el tiempo de compilación para determinar si un paquete es una actualización? Apenas puedo creer esto pero no puedo entender nada más.

No tengo la habilidad suficiente para encontrar la ubicación de esta característica en el código fuente por mi cuenta. Quizás alguien pueda ayudar.

Muchas gracias.

Respuesta1

Los paquetes RPM tienen un formato específico:[$epoch:]$name-$version-$release.$arch

Es $epochun número entero que se puede comparar fácilmente, hay paquetes que no lo usan y simplemente se omite. $namees simplemente una cadena que no debe cambiar entre versiones. $versiones una cadena de versión en un formato que se puede analizar y comparar (normalmente números enteros separados por puntos). $releasees una cadena que normalmente comienza con un número entero, pero también puede contener información sobre para qué distribución fue creada.

Si todos $epoch, $namey $verionson iguales, $releasese compara para determinar si se trata de una actualización. Si los $versions son diferentes, se analizan y el mayor es la actualización. Si $epoches diferente, mayor es la actualización.

Creo que se puede encontrar el código fuente para las comparaciones de actualizaciones de RPMaquíen las funciones parseEVRy rpmdsCompareEVR.

información relacionada