用于部署跨平台的打包?
-
03-07-2019 - |
题
在Windows上,应用程序通常打包为MSI,在Redhat Linux上打包为RPM,什么是最好的开源打包方法,可用于将应用程序部署到所有平台,包括不同风格的unix和windows?
内容包括exes,unix二进制文件,java jar文件,用户数据,甚至是要运行的数据库脚本。
(我认识到每个目标操作系统的内容会有所不同,即二进制文件会有所不同,win exe vs unix binary等,但是例如配置文件可能是相同的,或者在java的情况下甚至是字节码jar)
主要功能我希望支持的包装是不同用户和不同目录的权限,但我认为支持此功能可能非常难以实现多平台。
解决方案
我有一个客户端使用IzPack创建一个安装程序(它是基于Java的),可以在Windows,OS X和Linux上安装他们的应用程序。
其他提示
您应该让构建系统为每个目标平台构建不同的包,而不是构建一个应该在所有平台上工作的包,这可能是不可能的。
使用 CPack (附带 CMake )您可以为Windows(使用NSIS),Linux(rpm和deb)以及带有”make package“的OS X创建包。 CMake还简化了跨平台构建。
有关样本,您可以查看avogadro的 CMakeLists.txt 和 AvoCPack.cmake
NSIS 是一个开源解决方案,据我所知,它可以构建安装程序在Windows和UNIX上运行的一样。但是,对于Windows上的软件部署(特别是在企业环境中),MSI是可行的方式,NSIS更令人头疼。
因此,我不建议您尝试为不同平台构建单个程序包/安装程序。但是,正如RibaldEddie指出的那样,多个包:每个平台一个。这也允许将包的内容限制为与每个平台相关的文件。
如果您想支持多个发行版的打包,我建议您帮助这些发行版的打包商;为您的软件使用某种着名的构建系统(GNU的 autotools
或类似 scons
或 waf
),并记录构建,可选依赖性,等等。
那样的话,当Debian,Ubuntu,Red Hat,SuSE,无论如何,打包器出现时,他们都能够为你创建包。如果您愿意,可以选择在可用的单独VCS树中包含一个或多个发行版的打包模板。
如果您正在考虑为多个系统打包一个闭源/专有应用程序,您可能最好打包一个.tar.gz文件并记录它的安装过程。您还需要确保所使用的构建过程不会将任何路径信息嵌入到应用程序中,以便它可以在 / opt
, / usr
中运行。或 / usr / local
,这是第三方附加软件的一些流行选择。
BitRock InstallBuilder 允许您为您提到的每个平台创建安装程序包(以及创建RPM,DEB,来自单个项目文件的包等)