linux - 下载后创建自定义 .dmg 文件

标签 linux macos software-distribution dmg diskimage

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

必须执行这些字符串替换的网络服务器是一台 Linux 机器。对于 Windows,可执行文件未压缩在安装程序 .exe 中,因此字符串替换很容易。

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

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

最佳答案

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

基本上,您可以使用 libdmg 将 dmg 文件解压缩为包含 hfs+ 文件系统的未压缩文件,在 hfs+ 文件系统中试用这些文件,然后将其重新组合为具有正确校验和的 dmg 文件.

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

关于linux - 下载后创建自定义 .dmg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875291/

相关文章:

.net - 无需互联网的软件许可机制

linux - 设置变量时找不到 bash 命令

objective-c - Cocoa 中 AuthorizationExecuteWithPriveleges 的非常奇怪的问题

java - 以编程方式(在 Java 中)防止 OS X 进入休眠状态

java - 如何使用 Java 创建安装程序?

依赖二进制文件的 Python 脚本……如何分发?

linux - Windows(Linux 子系统)上 Ubuntu 上 Bash 中的 BrowserSync - 无法打开浏览器

linux - RPM包下载以使用特定提供商

linux - 提取值与特定模式匹配的列

python - pgAdmin4 错误 : ModuleNotFoundError: No module named 'email_validator'