我正在开发一些代码,我可以使用
mpirun
命令在 OSX 上运行。每次我编译代码时,执行后都会打开一堆弹出对话框,要求接受或拒绝传入连接。我使用的 MPI 等级有多少个弹出窗口。例如,如果我跑步
mpirun -np 4 myprogram
然后我得到 4 个弹出窗口。
我知道我应该
codesign
一些东西来阻止防火墙打开这些弹出窗口,所以我尝试了以下命令:
sudo codesign --force --deep --sign - /opt/local/libexec/openmpi-gcc48/orterun
sudo codesign --force --deep --sign - /opt/local/bin/mpi*
请注意,我的 OpenMPI 安装在
/opt/local
中。不幸的是,这不起作用。
我应该共同设计什么才能防止防火墙显示这些弹出窗口?
我相信即使在使用
codesign
后仍然出现弹出窗口的原因之一是您正在进行 ad-hoc 签名。正如codesign中所述:
临时签名根本不使用身份,并且仅标识一个代码实例。特别签名代码的使用受到重大限制;使用前请参阅文档。
相反,我认为您应该按照 @alfC 评论中提供的链接创建一个证书。在这篇 SO 文章中:在 mac os x 环境中对可执行应用程序文件进行签名的方法或技术是什么?
此外我还认为你需要在运行时对相关流程进行签名
mpirun
也就是说你需要签名
(1)
sudo codesign --force --deep --sign "<your certificate>" /opt/local/libexec/openmpi-gcc48/orterun
sudo codesign --force --deep --sign "<your certificate>" /opt/local/libexec/openmpi-gcc48/orted
sudo codesign --force --deep --sign "<your certificate>" /opt/local/bin/mpirun
sudo codesign --force --deep --sign "<your certificate>" /path/to/your/executable
如果仍然无法正常工作,您可以通过查看日志或检查可执行文件来进一步调试问题(见下文)。
记录
log show --predicate 'eventMessage contains "codesign"' --info
检查
codesign -dv --verbose=4 /path/to/your/executable
spctl --assess --verbose /path/to/your/executable
如果您想更深入地了解临时签名和使用证书之间的区别,stackexchange 上有一篇讨论临时签名限制的帖子:https://apple.stackexchange.com/ questions/288291/what-are-the-restrictions-of-ad-hoc-code-signing指的是macOS代码签名深度