我有一个嵌入式 ARM 系统的 rootfs 快照,该系统使用 rpm 作为包管理器,既可以作为可以在我的主机上回送安装的二进制映像,也可以作为 tarball。
我想在该快照上发出一些 rpm 查询,例如rpm -qa
等等rpm -qf /some/file
。
有没有办法在我的 x86 主机上做到这一点?
现在我必须求助于在 qemu-arm 下实际运行图像并在模拟目标上执行查询,但这不是一种方便的方法。
我尝试使用--dbpath
和--root
的选项,rpm
但rpmdb
无济于事(它们只是默默终止而没有给出任何错误)。
答案1
在我的 Debian 系统上,qemu-user-static 包包含静态链接的用户模拟(与系统模拟相反)二进制文件,包括 /usr/bin/qemu-arm-static
它们都已在 binfmt 工具中注册(通过此包和 binfmt-support 辅助包)。例如:
# cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm-static
flags: OC
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff
现在只需将 arm 的根文件系统挂载到 /mnt 并将 /usr/bin/qemu-arm-static (x86 二进制文件)复制到 /mnt/usr/bin/qemu-arm-static
从你的 x86 主机,只需 chroot:
chroot /mnt
现在,您可以运行大多数命令,并认为您是在 arm 系统上(qemu 站点记录了哪些命令不起作用,包括 ptrace 调用)。如果需要,请不要忘记挂载其他文件系统(/proc、/var ...)。
我认为 LXC 可以在容器内使用这种模拟。执行 chroot 不会隔离,并且安装软件包可能会出现问题(arm 二进制守护程序正在运行...)
你没有告诉你主机的发行版是什么,所以我不能告诉你更多。手动添加二进制可执行文件的解释器的方法如下: https://www.kernel.org/doc/Documentation/binfmt_misc.txt