为Linux应用程序编写通用安装程序的最佳方法?

我们有一个Linux服务器应用程序,它由许多开源工具以及我们自己编写的程序组成。 理想情况下,我们希望能够在任何常见的Linux发行版上安装此应用程序。

在过去,我们已经编写了perl脚本来自动安装这个应用程序。 不幸的是,由于不同的Linux发行版的特性,这些安装脚本中的逻辑变得非常复杂,并且可以随着每个受支持的发行版的新版本的发布而变化。 因此,维护安装程序成为项目中最耗时的部分之一!

我正在寻求帮助,无论是框架,文档还是代码示例,都可以让这个过程变得不那么痛苦。 以下是我们的安装程序需要做的事情types:

  • 创build用户/组帐户

  • 创build具有特定所有权和权限的目录树

  • 安装开源应用程序,可能在安装过​​程中从源代码编译它们

  • 将预编译的二进制文件,脚本,configuration文件和文档插入到特定的目录中

  • 注册inittypes的启动和closures脚本

  • 生成encryption密钥

  • validation与中央服务器的连接

Solutions Collecting From Web of "为Linux应用程序编写通用安装程序的最佳方法?"

我认为比安装单一脚本更好的方法是安装生成.deb或.rpm文件的生成系统,这些文件适合在每个系统上安装。

一个穷人的方式可能是使用checkinstall ,它通过“make install”安装的文件创建软件包。 所以你应该在每个系统上构建你的应用程序,并且以发行版本身的格式神奇地创建这个包。

我相信你描述的大部分任务在Linux发行版之间是相当标准化的。 根据我的经验,以下内容适用于Debian系列(包括Ubuntu)和Red Hat系列(包括Fedora和CentOS):

  • 创建用户/组帐户 – adduser命令
  • 创建目录树 – mkdirinstall ,或者只是展开一个tarball
  • 安装开放源代码的应用程序 – 除非你有特别深奥的需求,这应该留给发行版的包管理器。
  • 安装文件 – install ,或者只是展开一个tarball
  • 启动和关闭脚本 – install/etc/init.d然后符号链接到/etc/rc*.d

VMware server免费提供给Linux,并执行您描述的大部分任务。 它使用Perl和可能的shell来进行安装和配置,所以你可能会看到它的方法。

但是,作为一名Linux管理员,我非常喜欢与我的软件包管理系统集成的应用程序。 换句话说,像Vinko Vrsalovic建议的那样创建.deb和.rpm文件。 建设软件包是非常有据可查的:

  • 为Fedora(或Red Hat或CentOS)构建RPM: RPM 文档草稿 , RPM指南
  • 为Debian(或Ubuntu)构建.debs: Debian维护者指南

几年前我尝试过Autopackage ,不知道它有多普遍,但工作得很好(当时是唯一真正普遍的方法)。 当然,你必须提供一些LSB兼容的方法来建立你自己的目录,但是这个软件应该可以帮助你。

尽管在Linux发行版中可能仍然有太多的差异,无法以完全与平台无关的方式做所有事情 ,但我可能是错的。

你可能想试试BitRock InstallBuilder 。 这是一个跨平台的安装工具,可以让你做你正在寻找的东西(添加用户,安装服务,安装预编译的二进制文件等)。 虽然其他一些帖子提到了一些你可以在你的脚本中使用的工具,但是问题是每个Linux发行版都有一些不同,而像添加一个用户或者安装一个服务这样简单的任务在你需要在Debian,Ubuntu,Mandriva,RedHat,Gentoo等等上执行。一个好的跨平台安装程序应该将您与所有这些隔离。 许多商业开源公司,如MySQL,SugarCRM,Zenoss,Jaspersoft,Groundwork等已经建立了基于我们的技术的安装程序,正因为如此(除了它们的常规源代码tarball等),我们还提供免费的开源项目许可证。

Autopackage现在与Listaller项目合并。 文件不是很彻底,但似乎正在工作。