Я сталкиваюсь с ошибкой при попытке прочитать базы данных RPM в средах Linux.На некоторых версиях RHEL это работает отлично, но время от времени это терпит неудачу.То же относится и к CentOS или RHL.
Из баз данных я пытаюсь прочитать названия пакетов, их версии, их поставщиков.При вызове функции я отображаю «VALUE FOR OPEN RPM DB».
Во-первых, у нас есть метод, который будет читать установленные пакеты
#
# Read installed package
mi = self._rpmdb.dbMatch()
for h in mi:
name = h[rpm.RPMTAG_NAME].decode()
version = h[rpm.RPMTAG_VERSION].decode()
vendor = h[rpm.RPMTAG_VENDOR].decode()
appmdl = Application.objects.create()
appmdl.name = name
appmdl.version = version
appmdl.vendor = vendor
appmdl.save()
os_model.apps.add(appmdl)
self.progress += self._one_percent
current = int(self.progress * 100 / self.total)
self.main_parser.progress = str(current) + r'%'
try:
self.main_parser.check_cancelled()
except Exception as exc:
self._close_rpmdb()
raise exc
# Close RPM DB
self._close_rpmdb()
#
Тогда у меня есть функция открытия базы данных:
def _open_rpmdb(self, dbpath):
'''
Open RPM database.
'''
rpmdb = ifind(dbpath)
if rpmdb:
rpm.addMacro('_dbpath', rpmdb)
solvets = rpm.TransactionSet()
logging.info("Value for open rpm DB: {}".format(solvets.openDB()))
if solvets.openDB() == 0:
self._rpmdb = solvets
#
И здесь я вызываю свою функцию:
# Open rpm database
self._open_rpmdb(os_root + os.sep + r'var/lib/rpm/')
#
Иногда значение, возвращаемое функцией 'formatmat (resolts.openDB ()'), возвращает отрицательное значение, которое напоминает -31580, что означает, что базы данных RPM не читаются. В противном случае при выполнении чтения возвращаетсязначение 0
Я пытался обновить все свои установленные пакеты, но ничего не получалось. На самом деле я нахожу способ, который бы работал на всех функциях RedHat