在Mac OS X pkg中打包命令行脚本

时间:2014-04-11 21:59:26

标签: macos installer pkgbuild

我有一个程序(由同事创建,从Linux移植但在Mac上成功编译)我需要部署到许多Mac工作站。目前我们通过推出pkg文件(不是我们创建的文件)来实现。

我的一般问题(其他人可能会找到有用的答案)是如何将命令行程序/脚本打包到安装程序的pkg文件中?包装.app文件的常用方法似乎记录得很好,但是关于采用任意程序并将其包装在pkg安装程序中的细节很少。

pkgbuild(等)的手册页做了很多假设 - 你已经用xcode构建了一个应用程序,你打算使用.app并生成plist等等。我们想做的是让mac服务器安装一个非app程序,它想要使用pkgs。

最好是解决方案是可编写脚本的,这样每次我们更新程序时都可以轻松创建一个新的pkg文件。如果已经解释过这个过程的体面资源可以联系起来当然也会很有效。这里的问题是:Making OS X Installer Packages like a Pro - Xcode Developer ID ready pkg与简单安装基本cli程序的需求不匹配。

1 个答案:

答案 0 :(得分:1)

我会推荐Packages

它是可编写脚本的,因此它可以成为构建过程的一部分,并为您生成一个很好的mpkg。

我们正在使用它来自动下载第三方库,然后调用make进行编译,以及安装已编译的文件。

作为一个注释,尽管这会产生一个mpkg,但大多数发行都是用磁盘映像完成的,所以我们也使用hdiutil来创建稀疏图像,将mpkg复制到其中,将其转换为压缩的只读dmg然后分发那个。

此程序的一个例子是:

1)创建稀疏RW DMG文件。

hdiutil create -size 100M -type SPARSE -volname "MyInstaller" -fs HFS+ MyInstaller.dmg.sparseimage

2)附加到图像。从输出中注意磁盘和已装入的卷名(例如/ dev / disk2s1和/ Volumes / MyInstaller)

hdiutil attach MyInstaller.dmg.sparseimage

3)在mpkg安装程序中复制

cp -R Packages/build/My_Packages.mpkg /Volumes/MyInstaller/

4)从图像中检测。

hdiutil detach -force {mounted disk} (ex. hdiutil detach -force /dev/disk2s1)

5)从可写稀疏图像中创建压缩的只读图像。

hdiutil convert "MyInstaller.dmg.sparseimage" -format UDZO -o "MyInstaller.dmg" -ov -imagekey zlib-level=9