主要观点:看似相同的配置却有不同结果,在 ARM 上设置 x86 模拟的两种方法在 Docker 中表现不同,引发对系统管理知识和 sanity 的质疑,最终找到原因并更新设置。
关键信息:
- 遵循 Archiveteam 关于 ARM 架构的指导,使用 QEMU 在 Docker 中设置模拟,但
docker
和systemd-binfmt
设置在 Docker 中运行linux/amd64
容器效果不同,两者在/proc/sys/fs/binfmt_misc
中的配置相同但flags
不同。 tonistiigi/binfmt
容器可检查模拟状态,aptman/qus
容器能实现类似设置且运行效果好,但interpreter
路径不同。F
标志的作用是在模拟安装时打开二进制文件并使用打开的图像启动模拟器,使模拟器在安装后始终可用,与实际运行时的interpreter
路径无关。systemd-binfmt
失败是因为其为动态链接二进制文件,依赖项在 Docker 中运行时缺失。
重要细节:binfmt_misc
是 Linux 内核的一个功能,允许非原生二进制格式被识别和传递给用户空间应用。- 调试过程包括阅读
tonistiigi/binfmt
源代码、将设置 QEMU 的过程转换为 Python 运行、重新编译二进制文件等,均未找到差异。 - 最终通过使用
aptman/qus
容器找到解决方案,更新systemd-binfmt
的设置,使alpine
检查再次工作。 - 学到的教训包括经验不足导致难以整合细节,使用 LLM 调试时易出现幻觉,应更谨慎,可借鉴 Hofstadter's Law 和 Feynman Algorithm。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。