Wie bestimmt RPM, ob es sich bei einem Paket um ein Update handelt?

Wie bestimmt RPM, ob es sich bei einem Paket um ein Update handelt?

Vielleicht ist diese Frage ein bisschen seltsam, aber ich habe hier Schwierigkeiten.

Nach welchen Kriterien bestimmt RPM, ob es sich bei einem Paket um ein Update handelt oder nicht?

Die Version und das Release sind Zeichenfolgen und können nicht mit anderen Versionen verglichen werden. Es gibt drei Flags, um eine Version zu definieren: Epoche, Version und Release. Überprüft rpm (und yum, dnf, ...) die Build-Zeit, um festzustellen, ob es sich bei einem Paket um ein Update handelt? Ich kann das kaum glauben, aber mir fällt nichts anderes ein.

Meine Fähigkeiten reichen nicht aus, um die Position dieser Funktion im Quellcode selbst zu finden. Vielleicht kann jemand helfen.

Vielen Dank.

Antwort1

RPM-Pakete haben ein bestimmtes Format:[$epoch:]$name-$version-$release.$arch

Dies $epochist eine Ganzzahl, die leicht verglichen werden kann. Es gibt Pakete, die dies nicht verwenden, und es wird einfach weggelassen. $nameist einfach eine Zeichenfolge, die sich zwischen Versionen nicht ändern sollte. $versionist eine Versionszeichenfolge in einem Format, das analysiert und verglichen werden kann (normalerweise durch Punkte getrennte Ganzzahlen). $releaseist eine Zeichenfolge, die normalerweise mit einer Ganzzahl beginnt, aber auch Informationen darüber enthalten kann, für welche Distribution sie erstellt wurde.

Wenn alle $epoch, $name, und $veriongleich sind, $releasewird verglichen, um zu bestimmen, ob es sich um ein Update handelt. Wenn die $versions unterschiedlich sind, werden sie analysiert und das höhere ist das Update. Wenn die $epochunterschiedlich sind, ist das höhere das Update.

Den Quellcode für RPM-Update-Vergleiche kann man meines Wissens findenHierin den Funktionen parseEVRund rpmdsCompareEVR.

verwandte Informationen