我正在编写一个用于分析图像的工具,并可以完全访问图像的文件系统。
我想生成所有已安装软件包的列表,包括名称和版本信息。但是,我不想真正运行虚拟机,因为我不信任它。
我知道类似的命令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
从另一台机器复制了数据库,现在我可以查询它的包。