16.5 Сравнение зависимостей

Сет зависимости кроме всего прочего позволяет сравнить версии двух пакетов. Наиболее употребим этот подход в случае, если нужно сравнить версии установленного пакета и какого-либо имеющегося на диске пакета с целью определения возможности апдейта.

Для получения сета зависимости по умолчанию используют метод dsOfHeader в отношении объекта хэдера. Получив сет зависимости двух хэдеров, можно их сравнить:

file_h = ts.hdrFromFdno(fd)

file_ds = file_h.dsOfHeader()

inst_ds = inst_h.dsOfHeader()

if file_ds.EVR() >= inst_ds.EVR():

print "Package file is same or newer, OK to upgrade."

else:

print "Package file is older than installed version."

Пример скрипта (vercompare.py), который сравнивает файл rpm пакета с данными установленного пакета и выводит информацию о том, чья версия новее:

#!/usr/bin/python

# Reads in package header, compares to installed package.

# Usage:

# python vercompare.py rpm_file.rpm

#

import rpm, os, sys

def readRpmHeader(ts, filename):

""" Read an rpm header. """

fd = os.open(filename, os.O_RDONLY)

h = ts.hdrFromFdno(fd)

os.close(fd)

return h

ts = rpm.TransactionSet()

h = readRpmHeader( ts, sys.argv[1] )

pkg_ds = h.dsOfHeader()

for inst_h in ts.dbMatch('name', h['name']):

inst_ds = inst_h.dsOfHeader()

if pkg_ds.EVR() >= inst_ds.EVR():

print "Package file is same or newer, OK to upgrade."

else:

print "Package file is older than installed version."

Этот скрипт берет имя файла rpm пакета в качестве параметра из командной строки, получает хэдер пакета, ищет в базе данных RPM все пакеты с таким именем, получает объект хэдера для каждого, сравнивает все хэдеры в поисках новейшего и выводит сообщение.

Модифицируйте скрипт, например, добавив сообщение о том, что такой пакет не установлен.

Далее - Установка и обновление пакетов
Назад - Установка флагов верификации
Содержание