OSX -在哪里放置我的命令行二进制启动守护程序和依赖的dylib



我有一个命令行应用程序(不是.app bundle),一个可执行文件。它从例如usr/bin/myapp开始运行。这应该可以被mac上的所有用户访问。它是一个LaunchDaemon,以root用户的身份运行。如果我保持它在usr/bin它工作良好。

当用户安装应用程序时,pkgbuild将文件复制到/usr/bin, postinstall脚本启动LaunchDaemon。

应用程序依赖于nss库。所以现在我需要复制nss二进制和dylib文件到某个地方,例如usr/bin/lib/nss文件夹。是否可以使用pkgbuildpreinstall脚本?既然pkgbuild --install-location设置为/usr/bin将复制myapp那里,但如何复制nss文件夹到usr/lib ?

另一个选择是创建一个完整的文件夹结构/usr/bin/MyApp,并复制我的myapp二进制文件,并将nss文件保存在/usr/bin/MyApp/nss文件夹。但这是个好主意吗?

或者我应该将文件结构设置为/usr/local/MyApp ?哪个是运行myapp LaunchDaemon作为根用户的最佳位置?/usr/localusr/bin或其他地方?

你应该看看Mac的杀毒程序以及它们保存文件的位置。这就是我想我是如何学会回答你的问题的:

如果绝对必须,那么在旧系统上安装/usr/bin,在新系统上安装/usr/local/bin。(我认为当OSX 10.10发布时,他们切换到/usr/local/bin,但不知道确切的版本。)您想要在那里放置某些东西的唯一真正原因是,您的产品消费者可以打开终端窗口并运行命令。如果你不这样做,那么你不需要把它放在那里。

因此,如果某人不打算在终端窗口中键入您的命令,并且如果您不需要以特殊权限运行,并且如果您的。app是唯一调用它的东西,然后你应该把命令放在你的/Applications/my中。应用程序/内容/资源文件夹。

现在,如果这些都不适用于你,那么你应该在/Library/Application Support/[my product name]文件夹中创建命令,如果它适用于所有用户,如果它只适用于当前用户,那么你应该在~/Library/Application Support/[my product name]文件夹中创建命令。你可能会遇到的一个问题是文件夹名称冲突。所以,你可以用Java文件夹的方式来代替"我的产品名称",就像Opera浏览器为他们的产品做的那样:~/Library/Application Support/com. operassoftware .Opera.

至于你的LaunchDaemon或LaunchAgent的支持库,那么你可以将它们安装在/Library/Application Support/[我的产品名称]或~/Library/Application Support/[我的产品名称]。后一个带有波浪号(~)表示它只适用于某个用户,而另一个则适用于所有用户。

相关内容

  • 没有找到相关文章

最新更新