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

10

我们有一个Linux服务器应用程序,包括一些开源工具和我们自己编写的程序。理想情况下,我们希望能够在任何常见的Linux发行版上安装此应用程序。

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

我正在寻求帮助,可能是框架、文档、代码示例等,可以使这个过程更少痛苦。以下是我们的安装程序需要执行的操作类型:

  • 创建用户/组帐户

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

  • 安装开源应用程序,可能需要在安装期间从源代码编译它们

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

  • 注册init类型的启动和关闭脚本

  • 生成加密密钥

  • 验证与中央服务器的连接

5个回答

9

与其使用安装程序方法,我认为比较好的方式是使用构建系统生成适用于每个需要支持的系统的.deb或.rpm文件进行安装。这样做可以代替在安装时使用单个脚本来完成。

一个简单的方法是使用checkinstall,它可以通过“make install”安装的文件创建软件包。因此,在每个系统上构建您的应用程序,并以发行版本地格式自动生成软件包。


2
我认为您描述的大多数任务在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管理员,我强烈倾向于与我的软件包管理系统集成的应用程序。换句话说,请创建.deb和.rpm文件,就像Vinko Vrsalovic建议的那样。构建软件包的方法已经非常好地记录在文档中:

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

1
你可能想要尝试 BitRock InstallBuilder。它是一个跨平台安装工具,可以让你做你想做的一切(添加用户,安装服务,安装预编译二进制文件等)。虽然其他帖子提到了一些你可以在脚本中使用的工具,但问题在于每个Linux发行版都有所不同,像添加用户或安装服务这样的简单任务在Debian、Ubuntu、Mandriva、RedHat、Gentoo等发行版上变得非常复杂。一个好的跨平台安装程序应该让你摆脱这些麻烦。许多商业开源公司 ,如MySQL、SugarCRM、Zenoss、Jaspersoft、Groundwork等,都基于我们的技术构建了安装程序(除了他们的常规源代码tarballs等),也正因为如此。我们还为开源项目提供免费许可证。

1

我几年前尝试过Autopackage,不知道它有多普及,但它运行得相当好(那时候是唯一真正通用的方式)。当然,你必须提供一些LSB兼容的方法来设置适当的目录,但这个软件应该会帮助你。

虽然在Linux发行版之间可能仍然存在太多的差异,无法以完全平台无关的方式完成所有事情,但我可能是错的。


0

Autopackage现已与Listaller项目合并。文档还不是很详细,但似乎正在运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接