2009-03-04 67 views
1

在windows应用程序通常打包为MSI,在Redhat Linux上作为RPM,什么是最好的开源打包方法,可用于将应用程序部署到所有平台,包括不同类型的unix和windows?打包用来部署跨平台?

内容包括exes,unix二进制文件,java jar文件,用户数据,甚至要运行的数据库脚本。我认识到每个目标操作系统的内容会有所不同,例如,二进制文件会不同,win.exe与unix二进制文件等不同,但是例如配置文件可能是相同的,或者在java甚至是字节码罐的情况下)。

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

回答

1

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

http://izpack.org/

5

与其构建一个应该在所有平台上工作的软件包(这可能不可能),您应该让您的构建系统为每个目标平台构建不同的软件包。

+0

如果这确实是不可能的,我将不得不遵循你推荐的方法。但我仍然希望1解决方案适合所有。 – 2009-03-04 23:48:41

+0

我可能错了,这是不可能的,但我认为最佳实践可能会建议您构建平台特定的软件包。 – RibaldEddie 2009-03-05 00:27:31

1

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

因此,我不会建议您尝试为不同平台构建一个包/安装程序。但是,正如RibaldEddie所指出的那样,多个软件包:每个平台都有一个软件包。这也允许将包的内容限制到与每个平台相关的文件。

0

如果你想支持包装多种发行,我建议,帮助那些发行了打包;为您的软件使用某种知名的构建系统(GNU的autotools或类似sconswaf),并将构建,可选依赖关系等记录在案。

这样,当Debian,Ubuntu,Red Hat,SuSE,无论什么包装商出现时,他们都可以为您创建软件包。如果需要,您可以选择在一个可用的单独VCS树中包含一个或多个发行版的打包模板。

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

2

With CPack(它附带CMake)你可以使用“make package”为Windows(带NSIS),Linux(rpm和deb)和OS X创建软件包。 CMake也简化了跨平台构建。

对于一个样品,你可以看看阿伏伽德罗CMakeLists.txtAvoCPack.cmake

0

BitRock InstallBuilder允许你创建你提到的平台上的每一个安装程序包(以及从一个单一的项目创建RPM,DEB,包等。文件)