
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 $epoch
un número entero que se puede comparar fácilmente, hay paquetes que no lo usan y simplemente se omite. $name
es simplemente una cadena que no debe cambiar entre versiones. $version
es una cadena de versión en un formato que se puede analizar y comparar (normalmente números enteros separados por puntos). $release
es 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
, $name
y $verion
son iguales, $release
se compara para determinar si se trata de una actualización. Si los $version
s son diferentes, se analizan y el mayor es la actualización. Si $epoch
es 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 parseEVR
y rpmdsCompareEVR
.