
어쩌면 이 질문이 조금 이상할 수도 있지만 여기서는 어려움을 겪고 있습니다.
rpm은 어떤 기준에 따라 패킷이 업데이트인지 아닌지를 결정합니까?
버전과 릴리스는 문자열이므로 다른 버전과 비교할 수 없습니다. 버전을 정의하는 플래그에는 epoch, 버전, 릴리스의 세 가지가 있습니다. rpm(및 yum, dnf, ...)이 빌드 시간을 확인하여 패키지가 업데이트인지 확인합니까? 나는 이것을 거의 믿을 수 없지만 다른 것은 알 수 없습니다.
나는 혼자서 소스 코드에서 이 기능의 위치를 찾을 만큼 숙련되지 않았습니다. 어쩌면 누군가가 도울 수 있습니다.
매우 감사합니다.
답변1
RPM 패키지에는 특정 형식이 있습니다.[$epoch:]$name-$version-$release.$arch
은 $epoch
쉽게 비교할 수 있는 정수이며, 이를 사용하지 않는 패키지가 있어 그냥 생략됩니다. $name
단순히 버전 간에 변경되어서는 안 되는 문자열입니다. $version
구문 분석하고 비교할 수 있는 형식의 버전 문자열입니다(일반적으로 마침표로 구분된 정수). $release
일반적으로 정수로 시작하는 문자열이지만 어떤 배포용으로 만들어졌는지에 대한 정보를 포함할 수도 있습니다.
$epoch
, $name
및 모두 $verion
동일한 경우 $release
비교하여 업데이트인지 확인합니다. s $version
가 다르면 구문 분석되고 더 높은 것이 업데이트됩니다. 다른 경우에는 $epoch
높은 쪽이 업데이트됩니다.
내가 생각하는 RPM 업데이트 비교를 위한 소스 코드는 찾을 수 있습니다.여기기능 parseEVR
과 rpmdsCompareEVR
.