2

在 Windows 上,应用程序通常打包为 MSI,在 Redhat Linux 上为 RPM,可用于将应用程序部署到所有平台(包括不同风格的 unix 和 windows)的最佳开源打包方法是什么?

内容将包括 exe、unix 二进制文件、java jar 文件、用户数据,甚至要运行的数据库脚本。

(我认识到每个目标操作系统的内容会有所不同,即二进制文件会有所不同,win exe 与 unix 二进制文件等,但例如配置文件可能相同,或者在 java 的情况下甚至字节码 jars)

我希望打包支持的关键特性是不同目录的不同用户和权限,但是我认识到支持这个特性多平台可能非常困难。

4

6 回答 6

4

您应该让构建系统为每个目标平台构建不同的包,而不是构建一个应该可以在所有平台上工作的包,这可能是不可能的。

于 2009-03-04T23:41:46.170 回答
2

使用CPack(它带有CMake),您可以使用“make package”为 Windows(带有 NSIS)、Linux(rpm 和 deb)和 OS X 创建包。CMake 还简化了跨平台构建。

对于示例,您可以查看 avogadro 的CMakeLists.txtAvoCPack.cmake

于 2009-03-05T17:42:23.017 回答
1

NSIS是一个开源解决方案,据我所知,它能够构建在 Windows 和类似 UNIX 的系统上运行的安装程序。但是,对于 Windows 上的软件部署(尤其是在企业环境中),MSI 是可行的方法,而 NSIS 则更令人头疼。

所以我不建议你尝试为不同的平台构建一个包/安装程序。但是,正如 RibaldEddie 所指出的,多个包:每个平台一个包。这也允许将包的内容限制为与每个平台相关的文件。

于 2009-03-04T23:47:47.480 回答
1

我有一个客户端,它使用 IzPack 创建一个安装程序(它基于 Java),在 Windows、OS X 和 Linux 上安装他们的应用程序。

http://izpack.org/

于 2009-03-05T00:15:29.507 回答
0

如果您想支持多个发行版的打包,我建议帮助这些发行版的打包者;为您的软件使用某种众所周知的构建系统(GNUautotools或类似sconsor的东西waf),并很好地记录构建、可选依赖项等。

这样,当 Debian、Ubuntu、Red Hat、SuSE 等打包程序出现时,他们将能够为您创建包。如果愿意,您可以选择在可用的单独 VCS 树中包含一个或多个发行版的打包模板。

如果您正在考虑为多个系统打包一个闭源/专有应用程序,您可能最好打包一个 .tar.gz 文件并记录它的安装过程。您还需要确保所使用的构建过程不会将任何路径信息嵌入到应用程序中,以便它可以在 、 或 中运行/opt/usr/usr/local是第三方附加软件的一些流行选择。

于 2009-03-05T17:26:35.067 回答
0

BitRock InstallBuilder allows you to create installer packages for each one of the platforms you mentioned (as well as creating RPM, DEB, packages etc. from a single project file)

于 2009-09-12T11:11:25.213 回答