我有一个程序(由同事创建,从 Linux 移植,但在 Mac 上成功编译),需要部署到许多 Mac 工作站。目前,我们通过推出 pkg 文件(不是我们创建的文件)来实现这一点。
我的一般问题(其他人可能会发现有用的答案)是如何将命令行程序/脚本打包到安装该程序的 pkg 文件中?打包 .app 文件的常用方法似乎记录得足够好,但是关于获取任意程序并将其包装在 pkg 安装程序中的详细信息却很少。
pkgbuild(等)的手册页做出了很多假设 - 您已经使用 xcode 构建了一个应用程序,您打算使用 .app 并可以生成 plist 等。我们想做的就是让mac服务器安装了一个非app程序,它想使用pkgs。
如果解决方案是可编写脚本的,那就最好了,这样每次我们更新程序时,我们都可以轻松创建一个新的 pkg 文件。如果可以链接已经解释此过程的体面资源,那当然也会很好。这里的问题是:像 Pro - Xcode 开发者 ID 准备好的 pkg 那样制作 OS X 安装程序包不符合简单安装基本 cli 程序的需要。
我会推荐套餐。
它是可编写脚本的,因此它可以成为您构建过程的一部分,并为您生成一个不错的 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
从脚本创建包的一种方法是使用内置
pkgbuild
命令。
Scripts
目录,将脚本放入Scripts/postinstall
,并使文件可执行。pkgbuild --nopayload --scripts Scripts --identifier com.yourorg.yourproduct --version 1.0 PkgbuildDemo.pkg
另一种方法是使用 Packages 应用程序。