下载时创建自定义.dmg文件

时间:2009-12-09 16:59:40

标签: linux macos software-distribution dmg diskimage

我想分发一个跨平台应用程序,可执行文件略有不同,具体取决于下载它的用户。这可以通过在可执行文件中的某个位置使用占位符字符串来完成,该占位符字符串在下载时会被用户特定的内容替换。

必须执行这些字符串替换的Web服务器是Linux计算机。对于Windows,可执行文件不会在安装程序.exe中压缩,因此更换字符串很容易。

对于未压缩的Mac OS X .dmg文件,这也很容易。但是,使用gzip或bzip2压缩的.dmg文件并不容易。例如,在后一种情况下,压缩的.dmg不是一个大的bzip2压缩磁盘映像,而是由几个不同的bzip2压缩部分(具有不同的块大小)和一个plist后缀组成。另外,使用bzip2解压缩和重新压缩不同的部分不会产生原始数据,所以我猜测Apple使用bzip2的某些参数不同于命令行工具。

有没有办法在Linux上生成一个未压缩的压缩的.dmg(没有hdiutil)?或者可能是另一个创建自定义应用程序而不预先生成它们的建议?它应该在没有用户输入的情况下工作。

3 个答案:

答案 0 :(得分:5)

我意识到我在这里有点太晚了,但是我们想做同样的事情并使用libdmg让它工作。 https://github.com/planetbeing/libdmg-hfsplus

基本上,您可以使用libdmg将dmg文件解压缩到包含hfs +文件系统的未压缩文件中,使用hfs +文件系统中的文件,并将它们重新组合在一起作为具有正确校验和的dmg文件

如果您使用任何花哨的dmg功能,例如在安装映像之前显示EULA,那么这些功能将无法在此过程中继续存在。不过背景图片等等。

答案 1 :(得分:0)

如果您的Web服务器和客户端支持gzip编码,那么您可以处理服务器上的未压缩文件,但分别由Web服务器/ Web客户端对它们进行压缩/解压缩。

e.g。 apache的mod_gzip。

否则,您可以将dmg拆分为3个部分:

  • 你想要替换之前的东西
  • 您要替换的字符串
  • 你想要替换之后的东西

    如果gzip流可以在这些点处拆分,则可以将正面和背面连接到要替换的gzip压缩字符串上。这样你就可以动态生成它。

答案 2 :(得分:0)

发布正常的只读压缩dmg。然后将您的应用程序捆绑在一个程序包安装程序中,其中包含一个设置所需变量的飞行前脚本。