【问题标题】:How to read var/lib/rpm/Packages content如何读取 var/lib/rpm/Packages 内容
【发布时间】:2021-12-17 17:27:36
【问题描述】:

我在基于 Centos:8 的映像的路径 var/lib/rpm 中有“Packages”文件。 如何读取/获取“Packages”文件内容

我在一些文档中读到这个文件的类型是 berkeley DB.. 对此不确定。

【问题讨论】:

    标签: linux centos fedora rhel berkeley-db


    【解决方案1】:

    您可以使用下面的“rpm”python 库,它输出的结果与

    rpm -qa --dbpath /some/path/to/rpm/db
    

    JSON 格式

    您可能暂时忽略 _db_backend,因为它的唯一值是“bdb”

    import sys
    import rpm
    import json
    
    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]
    
    print (json.dumps(allPackages))
    

    【讨论】:

      【解决方案2】:

      Berkeley DB 是在应用程序内部运行的嵌入式数据库。存储在其中的所有数据都是二进制格式,特定于存储它的应用程序。访问数据的最佳选择始终是使用应用程序本身 - 在您的情况下是 RPM。

      如果您必须做一些非常特别的事情,您最好的选择可能是下载 RPM 的源代码并对其进行修改以做您想做的事情。

      如果您的系统上还没有安装它,那么有一个随 Berkeley DB 分发的 db_dump 程序。您可以在 RPM 数据库上运行它。但是由于数据都是二进制的,你需要参考 RPM 源代码来弄清楚如何解释它。

      【讨论】:

      • 您能否通过参考 RPM 源代码来添加更多关于您的意思的数据以弄清楚如何解释它。
      • RPM 源代码在 github 上:github.com/rpm-software-management/rpm。这可能比你想进入的要多得多。也许,首先查看rpm 程序本身是否使用其命令行选项执行您想要的操作。做man rpm,并在网上找到有关如何使用它的教程。
      【解决方案3】:

      正如 Mike Andrews 所写,使用 rpm。

      例如你可以使用这个:

      $> cd /wherever/you/put/your/Packages/file
      
      $> rpm -qa --last --dbpath $PWD
      

      $> rpm -qa --last --dbpath /wherever/you/put/your/Packages/file
      
      xorg-x11-drv-ati-firmware-7.1.0-3.el6.noarch  Fri Nov 29 17:53:35 2013
      ql2100-firmware-1.19.38-3.1.el6.noarch        Fri Nov 29 17:53:35 2013
      ...
      

      【讨论】:

        猜你喜欢
        • 2020-04-21
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 2020-06-21
        • 2018-01-25
        相关资源
        最近更新 更多