Thoth Package Extract

GitHub tag (latest by date) Quay - Build

A tool to extract installed packages from container images.

Extracting dependencies directly from an image

Tool thoth-package-extract allows you to extract dependencies from an image directly by inspecting its content. As there is directly inspected the content of image, the output is accurate compared to the pure build log parsing.

To gather information about python packages installed, there is a need to execute python scripts of installed packages given the Python packaging design. In some cases this can be dangerous as there could be executed potentially malicious parts of code (see this typo squashing as an example).

Installation

Use prepared Dockerfile:

git clone https://github.com/thoth-station/package-extract
cd package-extract
docker build . -t package-extract

Example of parsing install logs

An example of parsing installed packages during:

$ pip3 install --user flask | docker run -i package-extract extract-buildlog -i -

{
  "metadata": {
    "analyzer": "thoth-package-extract",
    "analyzer_version": "1.0.0",
    "arguments": {
      "extract-buildlog": {
        "input_file": "<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>",
        "no_pretty": false,
        "output": null
      },
      "thoth-package-extract": {
        "no_color": false,
        "verbose": false
      }
    },
    "datetime": "2018-06-18T15:53:23.129270",
    "distribution": {
      "codename": "Twenty Seven",
      "id": "fedora",
      "like": "",
      "version": "27",
      "version_parts": {
        "build_number": "",
        "major": "27",
        "minor": ""
      }
    },
    "hostname": "268f19027ea4",
    "python": {
      "api_version": 1013,
      "implementation_name": "cpython",
      "major": 3,
      "micro": 5,
      "minor": 6,
      "releaselevel": "final",
      "serial": 0
    }
  },
  "result": [
    {
      "handler": "yum",
      "result": []
    },
    {
      "handler": "pip3",
      "result": [
        {
          "already_satisfied": "/usr/lib/python3.6/site-packages/click-6.6-py3.6.egg",
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "click",
          "version_installed": null,
          "version_specified": ">=5.1"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl",
            "size": "126kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "Jinja2",
          "version_installed": "2.10",
          "version_specified": ">=2.10"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl",
            "size": "322kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "Werkzeug",
          "version_installed": "0.14.1",
          "version_specified": ">=0.14"
        },
        {
          "already_satisfied": "/home/fpokorny/.local/lib/python3.6/site-packages",
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "itsdangerous",
          "version_installed": null,
          "version_specified": ">=0.24"
        },
        {
          "already_satisfied": "/home/fpokorny/.local/lib/python3.6/site-packages",
          "from": [
            {
              "package": "Jinja2",
              "version_specified": ">=2.10"
            },
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "MarkupSafe",
          "version_installed": null,
          "version_specified": ">=0.23"
        }
      ]
    }
  ]
}

Or you can also use this tool to extract information about packages that were installed during docker build:

$ docker build . -f Dockerfile.test --no-cache | docker run -i package-extract extract-buildlog -i -
{
  "metadata": {
    "analyzer": "thoth-package-extract",
    "analyzer_version": "1.0.0",
    "arguments": {
      "extract-buildlog": {
        "input_file": "<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>",
        "no_pretty": false,
        "output": null
      },
      "thoth-package-extract": {
        "no_color": false,
        "verbose": false
      }
    },
    "datetime": "2018-06-18T18:08:47.259811",
    "distribution": {
      "codename": "Twenty Seven",
      "id": "fedora",
      "like": "",
      "version": "27",
      "version_parts": {
        "build_number": "",
        "major": "27",
        "minor": ""
      }
    },
    "hostname": "b8c6f33cf757",
    "python": {
      "api_version": 1013,
      "implementation_name": "cpython",
      "major": 3,
      "micro": 5,
      "minor": 6,
      "releaselevel": "final",
      "serial": 0
    }
  },
  "result": [
    {
      "handler": "yum",
      "result": [
        {
          "arch": "noarch",
          "dependency": false,
          "epoch": null,
          "name": "ca-certificates",
          "repository": "updates",
          "size": "392k",
          "upgrading": true,
          "version": "2018.2.24-1.0.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": false,
          "epoch": null,
          "name": "coreutils-single",
          "repository": "updates",
          "size": "623k",
          "upgrading": true,
          "version": "8.29-7.fc28"
        },
        {
          "arch": "noarch",
          "dependency": false,
          "epoch": null,
          "name": "crypto-policies",
          "repository": "updates",
          "size": "40k",
          "upgrading": true,
          "version": "20180425-5.git6ad4018.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": false,
          "epoch": null,
          "name": "cryptsetup-libs",
          "repository": "updates",
          "size": "291k",
          "upgrading": true,
          "version": "2.0.3-4.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": false,
          "epoch": null,
          "name": "curl",
          "repository": "updates",
          "size": "343k",
          "upgrading": true,
          "version": "7.59.0-4.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": false,
          "epoch": null,
          "name": "cyrus-sasl-lib",
          "repository": "updates",
          "size": "114k",
          "upgrading": true,
          "version": "2.1.27-0.2rc7.fc28"
        },
...
        {
          "arch": "x86_64",
          "dependency": false,
          "epoch": 2,
          "name": "vim-enhanced",
          "repository": "updates",
          "size": "1.4M",
          "upgrading": false,
          "version": "8.1.042-1.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": true,
          "epoch": null,
          "name": "gpm-libs",
          "repository": "fedora",
          "size": "38k",
          "upgrading": false,
          "version": "1.20.7-15.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": true,
          "epoch": 2,
          "name": "vim-common",
          "repository": "updates",
          "size": "6.4M",
          "upgrading": false,
          "version": "8.1.042-1.fc28"
        },
        {
          "arch": "noarch",
          "dependency": true,
          "epoch": 2,
          "name": "vim-filesystem",
          "repository": "updates",
          "size": "47k",
          "upgrading": false,
          "version": "8.1.042-1.fc28"
        },
        {
          "arch": "x86_64",
          "dependency": true,
          "epoch": null,
          "name": "which",
          "repository": "fedora",
          "size": "47k",
          "upgrading": false,
          "version": "2.21-8.fc28"
        }
      ]
    },
    {
      "handler": "pip3",
      "result": [
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl",
            "size": "91kB"
          },
          "from": null,
          "package": "flask",
          "version_installed": "1.0.2",
          "version_specified": null
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl",
            "size": "126kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "Jinja2",
          "version_installed": "2.10",
          "version_specified": ">=2.10"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl",
            "size": "322kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "Werkzeug",
          "version_installed": "0.14.1",
          "version_specified": ">=0.14"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz",
            "size": "46kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "itsdangerous",
          "version_installed": "0.24",
          "version_specified": ">=0.24"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl",
            "size": "71kB"
          },
          "from": [
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "click",
          "version_installed": "6.7",
          "version_specified": ">=5.1"
        },
        {
          "already_satisfied": null,
          "artifact": {
            "name": "https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz",
            "size": null
          },
          "from": [
            {
              "package": "Jinja2",
              "version_specified": ">=2.10"
            },
            {
              "package": "flask",
              "version_specified": null
            }
          ],
          "package": "MarkupSafe",
          "version_installed": "1.0",
          "version_specified": ">=0.23"
        }
      ]
    }
  ]
}

$ cat Dockerfile.test
FROM fedora:28
RUN dnf install python3-pip && pip3 install flask && dnf update -y && dnf install -y vim

Example of extracting installed packages inside an image

To extract packages present on the resulting image run:

$ docker run -i package-extract -v extract-image -i fedora:27
2018-06-18 19:06:46,611 [1] DEBUG    thoth.package_extract.image: Downloading image 'fedora:27'
2018-06-18 19:06:46,611 [1] DEBUG    thoth.analyzer.command: Running command 'skopeo copy docker://fedora:27 dir://tmp/tmp9jmeuw__'
2018-06-18 19:06:51,669 [1] DEBUG    thoth.package_extract.image: skopeo stdout: Getting image source signatures
Copying blob sha256:2176639d844bbe1386912e1d9952cebdb8249923a16691025cf693963f8aec53

 0 B / 77.54 MB
 3.60 MB / 77.54 MB
 9.65 MB / 77.54 MB
 16.34 MB / 77.54 MB
 22.86 MB / 77.54 MB
 29.22 MB / 77.54 MB
 35.59 MB / 77.54 MB
 41.26 MB / 77.54 MB
 47.86 MB / 77.54 MB
 54.40 MB / 77.54 MB
 61.01 MB / 77.54 MB
 66.34 MB / 77.54 MB
 72.99 MB / 77.54 MB
 77.54 MB / 77.54 MB
 77.54 MB / 77.54 MB  2s
Copying config sha256:9110ae7f579f35ee0c3938696f23fe0f5fbe641738ea52eb83c2df7e9995fa17

 0 B / 2.29 KB
 2.29 KB / 2.29 KB  0s
Writing manifest to image destination
Storing signatures

2018-06-18 19:06:51,671 [1] DEBUG    thoth.package_extract.image: Layers found: [{'mediaType': 'application/vnd.docker.image.rootfs.diff.tar.gzip', 'size': 81308994, 'digest': 'sha256:2176639d844bbe1386912e1d9952cebdb8249923a16691025cf693963f8aec53'}]
2018-06-18 19:06:51,671 [1] DEBUG    thoth.package_extract.image: Extracting layer '2176639d844bbe1386912e1d9952cebdb8249923a16691025cf693963f8aec53'
2018-06-18 19:06:55,776 [1] DEBUG    thoth.analyzer.command: Running command "rpm -qa --root '/tmp/tmp9jmeuw__/rootfs'"
2018-06-18 19:06:55,874 [1] DEBUG    thoth.analyzer.command: Running command "repoquery --deplist --installed --installroot '/tmp/tmp9jmeuw__/rootfs'"
{
"metadata": {
  "analyzer": "thoth-package-extract",
  "analyzer_version": "1.0.0",
  "arguments": {
    "extract-image": {
      "image": "fedora:27",
      "no_pretty": false,
      "no_tls_verify": false,
      "output": null,
      "registry_credentials": null,
      "timeout": null
    },
    "thoth-package-extract": {
      "no_color": false,
      "verbose": false
    }
  },
  "datetime": "2018-06-18T19:05:33.205504",
  "distribution": {
    "codename": "Twenty Seven",
    "id": "fedora",
    "like": "",
    "version": "27",
    "version_parts": {
      "build_number": "",
      "major": "27",
      "minor": ""
    }
  },
  "hostname": "bfd10ad99fd4",
  "python": {
    "api_version": 1013,
    "implementation_name": "cpython",
    "major": 3,
    "micro": 5,
    "minor": 6,
    "releaselevel": "final",
    "serial": 0
  }
},
"result": {
  "layers": [
    "2176639d844bbe1386912e1d9952cebdb8249923a16691025cf693963f8aec53"
  ],
    {
      "digests": {
        "manifest": "638db309ccb9ca512fc1c7c9ac207028038b8d5c"
      },
      "ecosystem": "Python-Dist",
      "path": "/usr/lib/python3.6/site-packages/pip-9.0.1.dist-info/metadata.json",
      "result": {
        "classifiers": [
          "Development Status :: 5 - Production/Stable",
          "Intended Audience :: Developers",
          "License :: OSI Approved :: MIT License",
          "Topic :: Software Development :: Build Tools",
          "Programming Language :: Python :: 2",
          "Programming Language :: Python :: 2.6",
          "Programming Language :: Python :: 2.7",
          "Programming Language :: Python :: 3",
          "Programming Language :: Python :: 3.3",
          "Programming Language :: Python :: 3.4",
          "Programming Language :: Python :: 3.5",
          "Programming Language :: Python :: Implementation :: PyPy"
        ],
  "rpm": [
    "xkeyboard-config-2.22-1.fc27.noarch",
    "emacs-filesystem-25.3-3.fc27.noarch",
    "fedora-repos-27-2.noarch",
    "setup-2.10.10-1.fc27.noarch",
    "basesystem-11-4.fc27.noarch",
    "libreport-filesystem-2.9.3-2.fc27.x86_64",
    "tzdata-2018c-1.fc27.noarch",
    "glibc-langpack-en-2.26-26.fc27.x86_64",
    "ncurses-libs-6.0-13.20170722.fc27.x86_64",
    "libsepol-2.7-2.fc27.x86_64",
    "libselinux-2.7-3.fc27.x86_64",
    "info-6.4-6.fc27.x86_64",
    "bzip2-libs-1.0.6-24.fc27.x86_64",
    "expat-2.2.5-1.fc27.x86_64",
    "nspr-4.18.0-1.fc27.x86_64",
    "elfutils-libelf-0.170-1.fc27.x86_64",
    "libgcrypt-1.8.2-1.fc27.x86_64",
    "libxml2-2.9.7-1.fc27.x86_64",
    "gmp-6.1.2-6.fc27.x86_64",
    "libzstd-1.3.3-1.fc27.x86_64",
    "chkconfig-1.10-3.fc27.x86_64",
    "libcom_err-1.43.5-2.fc27.x86_64",
    "libattr-2.4.47-21.fc27.x86_64",
    "sed-4.4-4.fc27.x86_64",
    "libunistring-0.9.7-3.fc27.x86_64",
    "lz4-libs-1.8.0-1.fc27.x86_64",
    "libcap-ng-0.7.8-5.fc27.x86_64",
    "nss-softokn-freebl-3.35.0-1.0.fc27.x86_64",
    "nss-softokn-3.35.0-1.0.fc27.x86_64",
    "keyutils-libs-1.5.10-3.fc27.x86_64",
    "grep-3.1-3.fc27.x86_64",
    "dbus-libs-1.12.0-1.fc27.x86_64",
    "p11-kit-trust-0.23.9-2.fc27.x86_64",
    "libusbx-1.0.21-4.fc27.x86_64",
    "libpsl-0.18.0-1.fc27.x86_64",
    "mpfr-3.1.6-1.fc27.x86_64",
    "gdbm-1.13-6.fc27.x86_64",
    "libdb-utils-5.3.28-27.fc27.x86_64",
    "kmod-libs-25-1.fc27.x86_64",
    "coreutils-common-8.27-20.fc27.x86_64",
    "elfutils-default-yama-scope-0.170-1.fc27.noarch",
    "ncurses-6.0-13.20170722.fc27.x86_64",
    "coreutils-8.27-20.fc27.x86_64",
    "python3-pip-9.0.1-14.fc27.noarch",
    "python3-3.6.4-8.fc27.x86_64",
    "libblkid-2.30.2-1.fc27.x86_64",
    "libmount-2.30.2-1.fc27.x86_64",
    "dbus-glib-0.108-4.fc27.x86_64",
    "libutempter-1.1.6-11.fc27.x86_64",
    "python3-libcomps-0.1.8-6.fc27.x86_64",
    "python3-iniparse-0.4-26.fc27.noarch",
    "gzip-1.8-4.fc27.x86_64",
    "libpwquality-1.4.0-3.fc27.x86_64",
    "nss-pem-1.0.3-6.fc27.x86_64",
    "nss-sysinit-3.35.0-1.1.fc27.x86_64",
    "libarchive-3.3.1-3.fc27.x86_64",
    "trousers-lib-0.3.13-9.fc27.x86_64",
    "libsss_nss_idmap-1.16.0-6.fc27.x86_64",
    "libsigsegv-2.11-3.fc27.x86_64",
    "krb5-libs-1.15.2-7.fc27.x86_64",
    "openldap-2.4.45-4.fc27.x86_64",
    "qrencode-libs-3.4.4-3.fc27.x86_64",
    "gnupg2-2.2.5-1.fc27.x86_64",
    "python3-gpg-1.9.0-6.fc27.x86_64",
    "util-linux-2.30.2-1.fc27.x86_64",
    "iptables-libs-1.6.1-4.fc27.x86_64",
    "device-mapper-libs-1.02.144-1.fc27.x86_64",
    "systemd-pam-234-10.git5f8984e.fc27.x86_64",
    "dbus-1.12.0-1.fc27.x86_64",
    "libcurl-7.55.1-9.fc27.x86_64",
    "python3-librepo-1.8.0-1.fc27.x86_64",
    "rpm-plugin-selinux-4.14.1-1.fc27.x86_64",
    "rpm-4.14.1-1.fc27.x86_64",
    "libdnf-0.11.1-1.fc27.x86_64",
    "deltarpm-3.6-24.fc27.x86_64",
    "python3-rpm-4.14.1-1.fc27.x86_64",
    "dnf-2.7.5-2.fc27.noarch",
    "rpm-plugin-systemd-inhibit-4.14.1-1.fc27.x86_64",
    "gnupg2-smime-2.2.5-1.fc27.x86_64",
    "nss-tools-3.35.0-1.1.fc27.x86_64",
    "pinentry-0.9.7-4.fc27.x86_64",
    "shared-mime-info-1.9-1.fc27.x86_64",
    "tar-1.29-7.fc27.x86_64",
    "libxkbcommon-0.7.1-5.fc27.x86_64",
    "rootfiles-8.1-21.fc27.noarch",
    "libgcc-7.3.1-5.fc27.x86_64",
    "publicsuffix-list-dafsa-20180223-1.fc27.noarch",
    "fedora-gpg-keys-27-2.noarch",
    "fedora-release-27-1.noarch",
    "filesystem-3.3-3.fc27.x86_64",
    "ncurses-base-6.0-13.20170722.fc27.noarch",
    "dnf-conf-2.7.5-2.fc27.noarch",
    "glibc-common-2.26-26.fc27.x86_64",
    "glibc-2.26-26.fc27.x86_64",
    "bash-4.4.19-1.fc27.x86_64",
    "pcre2-10.31-1.fc27.x86_64",
    "zlib-1.2.11-4.fc27.x86_64",
    "xz-libs-5.2.3-4.fc27.x86_64",
    "libgpg-error-1.27-3.fc27.x86_64",
    "libdb-5.3.28-27.fc27.x86_64",
    "nss-util-3.35.0-1.0.fc27.x86_64",
    "libcap-2.25-7.fc27.x86_64",
    "popt-1.16-12.fc27.x86_64",
    "readline-7.0-7.fc27.x86_64",
    "libuuid-2.30.2-1.fc27.x86_64",
    "lua-libs-5.3.4-7.fc27.x86_64",
    "libassuan-2.5.1-1.fc27.x86_64",
    "libffi-3.1-14.fc27.x86_64",
    "libacl-2.2.52-18.fc27.x86_64",
    "p11-kit-0.23.9-2.fc27.x86_64",
    "libidn2-2.0.4-3.fc27.x86_64",
    "sqlite-libs-3.20.1-1.fc27.x86_64",
    "audit-libs-2.8.2-1.fc27.x86_64",
    "libcrypt-nss-2.26-26.fc27.x86_64",
    "libksba-1.3.5-5.fc27.x86_64",
    "pcre-8.41-5.fc27.x86_64",
    "systemd-libs-234-10.git5f8984e.fc27.x86_64",
    "libtasn1-4.13-1.fc27.x86_64",
    "ca-certificates-2018.2.22-1.0.fc27.noarch",
    "libsemanage-2.7-2.fc27.x86_64",
    "acl-2.2.52-18.fc27.x86_64",
    "nettle-3.4-1.fc27.x86_64",
    "libcomps-0.1.8-6.fc27.x86_64",
    "libmetalink-0.1.3-4.fc27.x86_64",
    "libidn-1.33-4.fc27.x86_64",
    "file-libs-5.31-10.fc27.x86_64",
    "elfutils-libs-0.170-1.fc27.x86_64",
    "openssl-libs-1.1.0g-1.fc27.x86_64",
    "crypto-policies-20170816-2.gite0a4066.fc27.noarch",
    "python3-setuptools-37.0.0-1.fc27.noarch",
    "python3-libs-3.6.4-8.fc27.x86_64",
    "shadow-utils-4.5-4.fc27.x86_64",
    "glib2-2.54.3-2.fc27.x86_64",
    "libsecret-0.18.5-5.fc27.x86_64",
    "libfdisk-2.30.2-1.fc27.x86_64",
    "python3-six-1.11.0-1.fc27.noarch",
    "gnutls-3.5.18-2.fc27.x86_64",
    "cracklib-2.9.6-7.fc27.x86_64",
    "pam-1.3.0-6.fc27.x86_64",
    "nss-3.35.0-1.1.fc27.x86_64",
    "ima-evm-utils-1.1-2.fc27.x86_64",
    "libssh2-1.8.0-5.fc27.x86_64",
    "libsss_idmap-1.16.0-6.fc27.x86_64",
    "libverto-0.2.6-11.fc27.x86_64",
    "gawk-4.1.4-8.fc27.x86_64",
    "cyrus-sasl-lib-2.1.26-34.fc27.x86_64",
    "libseccomp-2.3.3-1.fc27.x86_64",
    "npth-1.5-3.fc27.x86_64",
    "gpgme-1.9.0-6.fc27.x86_64",
    "libsmartcols-2.30.2-1.fc27.x86_64",
    "libpcap-1.8.1-6.fc27.x86_64",
    "device-mapper-1.02.144-1.fc27.x86_64",
    "cryptsetup-libs-1.7.5-3.fc27.x86_64",
    "systemd-234-10.git5f8984e.fc27.x86_64",
    "libnghttp2-1.25.0-1.fc27.x86_64",
    "librepo-1.8.0-1.fc27.x86_64",
    "curl-7.55.1-9.fc27.x86_64",
    "rpm-libs-4.14.1-1.fc27.x86_64",
    "libsolv-0.6.33-1.fc27.x86_64",
    "python3-hawkey-0.11.1-1.fc27.x86_64",
    "rpm-build-libs-4.14.1-1.fc27.x86_64",
    "python3-dnf-2.7.5-2.fc27.noarch",
    "dnf-yum-2.7.5-2.fc27.noarch",
    "trousers-0.3.13-9.fc27.x86_64",
    "sssd-client-1.16.0-6.fc27.x86_64",
    "cracklib-dicts-2.9.6-7.fc27.x86_64",
    "python3-dbus-1.2.4-8.fc27.x86_64",
    "vim-minimal-8.0.1553-1.fc27.x86_64",
    "diffutils-3.6-3.fc27.x86_64",
    "langpacks-en-1.0-10.fc27.noarch",
    "gpg-pubkey-f5282ee4-58ac92a3"
  ],
  "rpm-dependencies": [
    {
      "arch": "x86_64",
      "dependencies": [
        "libacl = 2.2.52-18.fc27",
        "libacl.so.1()(64bit)",
        "libacl.so.1(ACL_1.0)(64bit)",
        "libattr.so.1()(64bit)",
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.14)(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "acl",
      "package_identifier": "acl-2.2.52-18.fc27.x86_64",
      "release": "18.fc27",
      "src": false,
      "version": "2.2.52"
    },
    {
      "arch": "x86_64",
      "dependencies": [
        "/sbin/ldconfig",
        "/sbin/ldconfig",
        "config(audit-libs) = 2.8.2-1.fc27",
        "libaudit.so.1()(64bit)",
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.14)(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "libc.so.6(GLIBC_2.8)(64bit)",
        "libcap-ng.so.0()(64bit)",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "audit-libs",
      "package_identifier": "audit-libs-2.8.2-1.fc27.x86_64",
      "release": "1.fc27",
      "src": false,
      "version": "2.8.2"
    },
    {
      "arch": "noarch",
      "dependencies": [
        "filesystem",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "setup"
      ],
      "epoch": null,
      "name": "basesystem",
      "package_identifier": "basesystem-11-4.fc27.noarch",
      "release": "4.fc27",
      "src": false,
      "version": "11"
    },
    {
      "arch": "x86_64",
      "dependencies": [
        "/bin/sh",
        "config(bash) = 4.4.19-1.fc27",
        "filesystem >= 3",
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.11)(64bit)",
        "libc.so.6(GLIBC_2.14)(64bit)",
        "libc.so.6(GLIBC_2.15)(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "libc.so.6(GLIBC_2.8)(64bit)",
        "libdl.so.2()(64bit)",
        "libdl.so.2(GLIBC_2.2.5)(64bit)",
        "libtinfo.so.6()(64bit)",
        "rpmlib(BuiltinLuaScripts) <= 4.2.2-1",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "bash",
      "package_identifier": "bash-4.4.19-1.fc27.x86_64",
      "release": "1.fc27",
      "src": false,
      "version": "4.4.19"
    },
    {
      "arch": "x86_64",
      "dependencies": [
        "/sbin/ldconfig",
        "/sbin/ldconfig",
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "bzip2-libs",
      "package_identifier": "bzip2-libs-1.0.6-24.fc27.x86_64",
      "release": "24.fc27",
      "src": false,
      "version": "1.0.6"
    },
    {
      "arch": "noarch",
      "dependencies": [
        "/bin/sh",
        "/bin/sh",
        "/bin/sh",
        "config(ca-certificates) = 2018.2.22-1.0.fc27",
        "p11-kit >= 0.23.4",
        "p11-kit-trust >= 0.23.4",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1"
      ],
      "epoch": null,
      "name": "ca-certificates",
      "package_identifier": "ca-certificates-2018.2.22-1.0.fc27.noarch",
      "release": "1.0.fc27",
      "src": false,
      "version": "2018.2.22"
    },
    {
      "arch": "x86_64",
      "dependencies": [
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.14)(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "libc.so.6(GLIBC_2.8)(64bit)",
        "libpopt.so.0()(64bit)",
        "libpopt.so.0(LIBPOPT_0)(64bit)",
        "libselinux.so.1()(64bit)",
        "libsepol.so.1()(64bit)",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "chkconfig",
      "package_identifier": "chkconfig-1.10-3.fc27.x86_64",
      "release": "3.fc27",
      "src": false,
      "version": "1.10"
    },
    {
      "arch": "x86_64",
      "dependencies": [
        "coreutils-common = 8.27-20.fc27",
        "libacl.so.1()(64bit)",
        "libacl.so.1(ACL_1.0)(64bit)",
        "libattr.so.1()(64bit)",
        "libattr.so.1(ATTR_1.1)(64bit)",
        "libc.so.6()(64bit)",
        "libc.so.6(GLIBC_2.10)(64bit)",
        "libc.so.6(GLIBC_2.14)(64bit)",
        "libc.so.6(GLIBC_2.15)(64bit)",
        "libc.so.6(GLIBC_2.17)(64bit)",
        "libc.so.6(GLIBC_2.2.5)(64bit)",
        "libc.so.6(GLIBC_2.3)(64bit)",
        "libc.so.6(GLIBC_2.3.4)(64bit)",
        "libc.so.6(GLIBC_2.4)(64bit)",
        "libc.so.6(GLIBC_2.6)(64bit)",
        "libc.so.6(GLIBC_2.7)(64bit)",
        "libcap.so.2()(64bit)",
        "libcrypto.so.1.1()(64bit)",
        "libcrypto.so.1.1(OPENSSL_1_1_0)(64bit)",
        "libgmp.so.10()(64bit)",
        "libpthread.so.0()(64bit)",
        "libpthread.so.0(GLIBC_2.2.5)(64bit)",
        "libpthread.so.0(GLIBC_2.3.2)(64bit)",
        "librt.so.1()(64bit)",
        "librt.so.1(GLIBC_2.3.3)(64bit)",
        "libselinux.so.1()(64bit)",
        "ncurses",
        "rpmlib(CompressedFileNames) <= 3.0.4-1",
        "rpmlib(FileDigests) <= 4.6.0-1",
        "rpmlib(PayloadFilesHavePrefix) <= 4.0-1",
        "rpmlib(PayloadIsXz) <= 5.2-1",
        "rtld(GNU_HASH)"
      ],
      "epoch": null,
      "name": "coreutils",
      "package_identifier": "coreutils-8.27-20.fc27.x86_64",
      "release": "20.fc27",
      "src": false,
      "version": "8.27"
    },

    ...
}

Crossroad

This documentation corresponds to implementation in version 1.3.1, documentation was generated on Oct 17, 2022.