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

时间:2008-10-31 16:10:35

标签: linux installer

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

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

我正在寻求帮助,无论是框架,文档,代码示例,都可以让这个过程不那么痛苦。以下是我们的安装程序需要执行的操作类型:

  • 创建用户/群组帐户

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

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

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

  • 注册init-type启动和关闭脚本

  • 生成加密密钥

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

5 个答案:

答案 0 :(得分:9)

除了安装程序方法之外,我认为比安装时使用单个脚本更好的方法是拥有一个生成.deb或.rpm文件的构建系统,这些文件适合安装在您必须支持的每个系统上。

一个穷人的方式可能是使用checkinstall,它通过'make install'从安装的文件中创建包。因此,您需要在每个系统上构建应用程序,并以发行版的原生格式神奇地创建包。

答案 1 :(得分: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建议的那样。构建包的文档非常详细:

答案 2 :(得分:1)

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

虽然Linux发行版中可能仍有太多的差异,以完全平台无关的方式做一切,但我可能错了。

答案 3 :(得分:1)

您可以尝试BitRock InstallBuilder。它是一个跨平台安装工具,允许您完全按照您的要求进行操作(添加用户,安装服务,安装预编译的二进制文件等)。虽然其他一些帖子提到了许多可以在脚本中使用的工具,但问题是每个Linux发行版都有所不同,当你需要时,添加用户或安装程序服务等简单的任务突然变得非常重要。在Debian,Ubuntu,Mandriva,RedHat,Gentoo等上完成它们。一个好的跨平台安装程序应该让你与众不同。许多commercial open source companies如MySQL,SugarCRM,Zenoss,Jaspersoft,Groundwork等都基于我们的技术构建了安装程序,因为它(除了常规源代码tarball等)之外我们还提供开源的免费许可证。项目

答案 4 :(得分:0)

Autopackage现在与Listaller项目合并。文档还不是很透彻,但似乎有效。

相关问题