跳转到内容
搜索 RHEL 文档

    浏览当前文档目录

    RHEL 10 SBOM:没有 package-manifest 插件时怎么出清单

    RHEL 9 的 dnf package-manifest 能直接输出 JSON 清单;到 RHEL 10.2,这个插件不在仓库里。要做 SBOM/包清单,只能回到 rpm 与 dnf repoquery,并自己定义字段。

    在 PVE 390 rhel10-lab(RHEL 10.2)执行:

    Terminal window
    dnf package-manifest
    sudo dnf install 'dnf-command(package-manifest)'
    rpm -qa | wc -l
    rpm -qa | grep -c gpg-pubkey
    dnf -q repoquery --installed | wc -l
    rpm -qa --qf '%{NAME}\t%{VERSION}-%{RELEASE}\t%{ARCH}\n' | head
    rpm -Va | wc -l

    E3 记录:plans/content-expansion/evidence/rhel/rhel-sbom/run.json(5 步,含插件缺失与计数)。

    $ dnf package-manifest
    No such command: package-manifest.
    It could be a DNF plugin command, try: "dnf install 'dnf-command(package-manifest)'"
    $ sudo dnf install 'dnf-command(package-manifest)'
    Error: Unable to find a match: dnf-command(package-manifest)

    RHEL 10 仓库没有 package-manifest,这不是“没启用仓库”,而是包不存在。不要照搬 RHEL 9 的 dnf package-manifest > manifest.json。

    $ rpm -qa | wc -l
    727
    $ rpm -qa | grep -c gpg-pubkey
    3
    $ dnf -q repoquery --installed | wc -l
    724

    差值 3 就是 gpg-pubkey-* 伪包:它们出现在 RPM 数据库里,但不是可安装的软件包,repoquery 不列。

    审计时建议两个数都记:RPM 数据库 727(含 3 个公钥)、可查询包 724。

    Terminal window
    rpm -qa --qf '%{NAME}\t%{VERSION}-%{RELEASE}\t%{ARCH}\n' \
    | sort > /tmp/packages.tsv
    libgcc 14.3.1-4.4.el10 x86_64
    linux-firmware-whence 20260130-22.el10 noarch
    tzdata 2026a-1.el10 noarch

    需要更多字段就加 %{VENDOR}、%{SIGPGP:pgpsig}、%{INSTALLTIME:date};注意不同 RPM 版本的 queryformat 支持不同标签。

    $ rpm -Va | wc -l
    1585

    -Va 校验文件大小/权限/校验和,输出的是“与包内元数据不一致的文件”,包括正常的配置文件修改、日志、缓存。它不能回答“装了什么包”,也不能单独作为完整性结论。

    • 包清单:rpm -qa --qf(本文);
    • 仓库来源:dnf repoquery --installed --qf '%{name} %{repoid}';
    • 安装历史:dnf history;
    • 签名/证书:rpm -qi、rpm -q --qf '%{SIGPGP:pgpsig}';
    • 企业级 SBOM:Red Hat Lightspeed/Insights 的清单与 CVE 关联(需接入,另页)。
    • 确认目标版本有没有 package-manifest;
    • 同时记录 rpm 与 repoquery 计数;
    • 排除 gpg-pubkey 伪包;
    • 固定 queryformat 字段与排序;
    • 记录采集时间/主机/仓库;
    • 不把 rpm -Va 当包清单。
    • 未测试 Red Hat Insights SBOM 导出;
    • 未测试 syft/cdxgen 等第三方工具;
    • 未测试容器镜像 SBOM;
    • 未测试签名标签在所有包上的可用性。