2

我正在使用 PackageMaker 3.0.4 制作包含需要安装到系统目录的 .kext 和 .plugin 文件的安装包。我的目标是创建一个 .pmdoc

我简直不敢相信有人真的在使用它,因为我遇到了很多错误,以至于我不知道任何人是如何设法让它为他们工作的。我不相信我在做任何特别不寻常的事情,但几乎每次我打开一个 .pmdoc 进行编辑(甚至从命令行构建它时)PackageMaker 都会任意更改我的设置。特别是权限,还有路径。

命令行特别令人恼火,因为我们在构建安装程序时使用 .pmdoc ......所以我们最终得到了一个损坏的安装程序,因为 PackageMaker 已经搞砸了各种(重要的!)权限 - 这意味着 .kext 文件不能负载之类的。

在这个阶段,最好的解决方法似乎是编写一个 postflight 脚本,该脚本将修改命令行上的权限,并让 PackageMaker 随意破坏权限。这并没有解决它所做的其他更改(有时甚至导致文件损坏到我什至无法再打开 .pmdoc 的程度。

那么……有没有人成功地将 PackageMaker 集成到他们的构建过程中?还是它真的像看起来的那样从根本上被破坏了,其他人都太聪明了,甚至都无法触及它?

4

2 回答 2

1

我遇到了类似的问题,并且偶然发现了一个有趣的观察结果。

具体来说,问题在于,当使用 packagemaker 创建包含 kext 的 pkg 时,有时会使用正确的权限(例如 rw-r--r--)创建 pkg 中的 kext 文件和文件夹的权限,并且有时不是(例如 rw-rw-r--)。我相信这与您的问题相似,但我不使用 pmdoc 并且总是从命令行运行 packagemaker。不过,我确实相信,我们遇到的根本问题是相同的。

我花了一段时间才发现其中的不同。如果 kext 的副本位于 /System/Library/Extensions 并已加载,则使用具有正确权限的 kext 文件创建 pkg。从 /System/Library/Extensions 卸载并删除 kext 并使用错误的权限创建 pkg。疯了吧!

我对安装程序所做的事情与您的建议类似 - 我有一个 postflight 脚本,可以正确设置 kext 文件的所有权限。我一直看到发生间歇性安装错误。对于某些用户,在运行安装程序时,主安装窗口会报告成功,但会出现一个单独的对话框,指出“无法使用系统扩展”和“安装不正确”。然后驱动程序无法加载,即使在重新启动后也是如此。我的 postflight 脚本工作正常,因为安装的 kext 的权限是正确的。也可以使用 kextload 手动成功加载驱动程序。

我追溯到这似乎有一个小窗口,其中安装的 kext 权限不正确。这是将 kext 文件(具有错误权限)复制到正确位置和执行我的 postflight 脚本之间的时间。

所以,我最终偶然发现了这个建议: http: //osdir.com/ml/darwin-kernel/2010-03/msg00017.html。不要将 kext 安装到 /System/Library/Extensions,而是将其安装到其他临时位置。然后,在 postflight 脚本中,将此临时副本的权限设置为正确的 kext 权限,然后将其移动到 /System/Library/Extensions 文件夹中。我还没有尝试过,但我相信它会奏效。

或者,您可以按照 Vishal 的建议执行某些 Apple 文档建议您执行的操作。但是,我真的不喜欢这种解决方案。这意味着我们的构建系统必须创建由 root 拥有的文件,因此,每当我进行更改并再次构建时,它都需要我输入密码。在构建时输入密码似乎并不正确。

于 2011-11-09T12:05:32.237 回答
1

您可以尝试命令行选项 [--no-recommend, -m]。但是,您必须在打包之前对所有文件设置正确的权限。参考:man packagemaker

于 2011-08-18T10:40:09.467 回答