如何仅通过读取文件系统来获取已安装的 centos 软件包列表?

如何仅通过读取文件系统来获取已安装的 centos 软件包列表?

我正在编写一个用于分析图像的工具,并可以完全访问图像的文件系统。

我想生成所有已安装软件包的列表,包括名称和版本信息。但是,我不想真正运行虚拟机,因为我不信任它。

我知道类似的命令rpm -qa,但不确定是否有任何方法可以仅通过读取文件来获取数据(这一定是 rpm 命令正在执行的操作)。

欢迎任何帮助!

答案1

您可以从文件系统中提取 rpmdb:下的所有文件/var/lib/rpm/

然后你仍然可以用来rpm查询包,但无需运行虚拟机:如果你把它数据库在另一个虚假文件系统内。

我尝试了一下,似乎rpm默认搜索其下的数据库/usr/lib/sysimage/rpm,所以我做了以下操作:

mkdir -p /tmp/fakeroot/usr/lib/sysimage/rpm/
scp other-machine:/var/lib/rpm/* /tmp/fakeroot/usr/lib/sysimage/rpm/
rpm --root /tmp/fakeroot -qa

正如您所看到的,我rpm从另一台机器复制了数据库,现在我可以查询它的包。

相关内容