RHEL 10 包清单导出:rpm 与 dnf 的口径差
This content is not available in your language yet.
做资产审计/漏洞比对时,第一件事是“把已装包导出来”。RHEL 10 上 rpm 与 dnf 都能导,但口径不同:同一台机器,rpm -qa 534 行、dnf repoquery --installed 531 行。差在哪、该用哪个,本页说清。
在 PVE 390 rhel10-lab(RHEL 10.2 x86_64)上实际执行:
rpm -qa | wc -ldnf -q repoquery --installed | wc -lrpm -qa --qf '%{NAME}\n' | sort -u | wc -ldnf -q repoquery --installed --qf '%{name}\n' | sort -u | wc -lrpm -qa --qf '%{NAME}\n' | sort -u > /tmp/rpm-n.txtdnf -q repoquery --installed --qf '%{name}\n' | sort -u > /tmp/dnf-n.txtdiff /tmp/rpm-n.txt /tmp/dnf-n.txtE3 记录:plans/content-expansion/evidence/rhel/rhel-package-manifest/run.json(9 步,含每步输出 sha256)。
先给结论:534 / 531 / 532
Section titled “先给结论:534 / 531 / 532”| 口径 | 结果 | 说明 |
|---|---|---|
rpm -qa | 534 | 含 gpg-pubkey 伪包,按安装条目计数 |
dnf repoquery --installed | 531 | 只列 DNF 能识别的已装包 |
| 按包名去重 | 532 / 532 | rpm 与 dnf 去重后一致 |
diff 的差异只有两处:rpm 侧多出 gpg-pubkey,dnf 侧多一个空行。不要把 534 vs 531 当成“dnf 漏了 3 个包”——先按包名去重,再看差异。
导出 NEVRA 清单
Section titled “导出 NEVRA 清单”rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' \ | sort > /tmp/rpm-manifest.txtwc -l /tmp/rpm-manifest.txt # 534sha256sum /tmp/rpm-manifest.txt # 656d0bae…这份清单适合做离线基线:一行一个 NEVRA,排序稳定,可比对两次构建/两台机器。要 CSV:
rpm -qa --qf '%{NAME},%{VERSION},%{RELEASE},%{ARCH}\n' | sort > /tmp/rpm-manifest.csv映射 source RPM
Section titled “映射 source RPM”dnf -q repoquery --installed \ --qf '%{name},%{evr},%{arch},%{sourcerpm}' | head -3# NetworkManager,1:1.56.0-1.el10,x86_64,NetworkManager-1.56.0-1.el10.src.rpmsourcerpm 字段把二进制包映射到源包,做 CVE 比对时通常以 source RPM 为单位,避免同一源包多个子包重复计数。
SBOM 的现状
Section titled “SBOM 的现状”$ dnf -q list available '*sbom*'Error: No matching Packages to listRHEL 10 的基础仓库里没有名为 sbom 的包。这不等于“RHEL 没有 SBOM 能力”——可以用 rpm/dnf 导出清单、结合 sourcerpm 自己生成,或使用第三方/红帽其他产品;但不要把“装个 sbom 包”当成默认路径。
审计口径检查清单
Section titled “审计口径检查清单”- 先声明口径:按包名、NEVRA 还是 source RPM;
- 用
sort -u去重,避免 multilib 重复; - 把
gpg-pubkey这类伪包单独排除或标注; - 记录清单的 sha256 与生成时间;
- CVE 比对用
sourcerpm聚合; - 两台机器比对时,先统一 RHEL minor 与仓库集。
未实测与边界
Section titled “未实测与边界”- 未测试
dnf repoquery --installed对非仓库安装包(rpm -i本地包)的覆盖差异; - 未测试 multilib 同包多架构的完整差异;
- 未测试第三方 SBOM 工具(syft、tern 等)在 RHEL 10 上的输出;
- 未测试
dnf repoquery --latest-limit与历史版本比对。
- RHEL 10 采用评估 — 版本与默认项
- RHEL 的 DNF 行为变化 — dnf 4.20 行为
- RHEL 安全公告与 errata — CVE 与补丁
- 官方:Managing software with the DNF tool