Получение названия repository из которого установлен пакет rpm
Всем привет! Нужна помощь в получении названия репозитория для установленных в системе пакетов. Я могу получить вот так: repoquery --installed '*' --queryformat='%{installtime} %{name} %{evr} %{from_repo}'
Я так понимаю что repoquery обращается к базе данных /var/lib/rpm Моя задача получить такую же информацию в python:
#!/usr/bin/python3
import sys
import rpm
import json
from datetime import datetime
if (len(sys.argv) != 3):
print ('invalid amount of input arguments!')
sys.exit()
# user inputs
dbtype = sys.argv[1]
dbpath = sys.argv[2]
# add macro to be used by rpm
rpm.addMacro("_db_backend", dbtype)
rpm.addMacro("_dbpath", dbpath)
# Open database
ts = rpm.TransactionSet()
ts.openDB()
# remove macro for future cases
rpm.delMacro("_db_backend")
rpm.delMacro("_dbpath")
allPackages = []
# retrieve all packages from BDB
mi = ts.dbMatch()
# build JSON object from all packages for easier parsing
for hdr in mi:
pkgDict = {}
allPackages.append(pkgDict)
pkgDict['NAME'] = hdr[rpm.RPMTAG_NAME]
pkgDict['VERSION'] = hdr[rpm.RPMTAG_VERSION]
pkgDict['RELEASE'] = hdr[rpm.RPMTAG_RELEASE]
pkgDict['ARCH'] = hdr[rpm.RPMTAG_ARCH]
pkgDict['DISTRIBUTION'] = hdr[rpm.RPMTAG_VENDOR]
pkgDict['OS'] = hdr[rpm.RPMTAG_PLATFORM]
pkgDict['INSTALLTIME'] = datetime.utcfromtimestamp(hdr[rpm.RPMTAG_INSTALLTIME]).strftime('%Y-%m-%d %H:%M:%S')
print (json.dumps(allPackages, indent=4))
На выходе я получаю:
{
"NAME": "kernel-core",
"VERSION": "4.18.0",
"RELEASE": "348.el8",
"ARCH": "x86_64",
"DISTRIBUTION": "Oracle America",
"OS": "x86_64-redhat-linux-gnu",
"INSTALLTIME": "2022-05-26 10:56:39"
}