【问题标题】:What is the prefered way to publish a binary-only application for multiple Linux distributions?为多个 Linux 发行版发布纯二进制应用程序的首选方式是什么?
【发布时间】:2009-10-01 08:08:14
【问题描述】:

我有一个要分发的闭源 Linux 应用程序。此应用程序正在使用 wxWidgets/GTK,因此该应用程序依赖的共享库(60 多个)的巨大列表。

发布应用程序并支持最大发行版数量的首选方式是什么?

  • 是否为每个受支持的发行版构建应用程序并单独发布它们?这样做的缺点是构建起来很复杂(一个 chroot 和一个每个发行版的构建),并且只能在受支持的发行版上工作。

  • 是否在安装程序中添加所有共享库并将它们与 LD_LIBRARY_PATH 环境变量(如 VMware)一起使用?这样做的缺点是会增加安装程序的大小。

  • 是构建一个完全静态的应用程序吗?这肯定是不可能的,因为它会破坏一些许可证。

  • 是该选项的混合还是其他选项?大多数商业供应商如何发布自己的图形(最好是基于 GTK)的应用程序?

【问题讨论】:

    标签: linux packaging commercial-application


    【解决方案1】:

    你应该看看Linux Standard Base。它专为帮助处于您位置的人而设计。它定义了第 3 方应用程序开发人员可以依赖的环境——因此有 libc 和其他库的固定版本,并且某些程序和目录位于已知位置。所有主要的 Linux 发行版都支持 LSB。

    也就是说,您仍然应该为每个主要发行版专门打包结果 - 以便您的客户可以使用他们熟悉的包管理工具来管理您的应用。

    【讨论】:

      【解决方案2】:

      基本上,有两种方法。如果你愿意,你可以选择两者。

      第一种方式是常见的游戏方式等。创建一个 lib/ 子目录,使用 LD_LIBARY_PATH 并包含您需要的几乎所有共享库。这确保了用户的无痛体验,但确实使安装程序更大,并且可能内存占用也更大。我什至不会尝试重用预先存在的库,因为它们会随着系统的升级而消失。

      第二种方式是提供分发包。这些通常并不难制作,然后会很好地与发行版集成,而且看起来更受您的客户欢迎。两个缺点是:您需要为每个发行版都这样做(Debian、Ubuntu、SuSE、redhat 可能是一个好的开始),并且您需要维护它们:随着时间的推移,一些库将不再可用在特定版本中,因此用户会遇到依赖性问题。

      【讨论】:

      • Debian 软件包很可能无需修改即可在 Ubuntu 上运行。
      • 你可能会发现你的共享库列表在包依赖形式中实际上要短得多,因为许多可能属于元包。
      【解决方案3】:

      在您的安装程序中,检查哪些库已安装,然后为未安装的库下载二进制文件。

      为了让您的用户更加舒适,如果没有连接到 Internet,请让安装程序生成一个密钥,您可以在您的网站上输入该密钥以接收 ZIP 存档,然后您可以将其提供给安装程序。

      为了获得最大的舒适度,请检查目标发行版上可用的库,并要求用户使用标准管理工具来安装它们。这样,您就不会使用同一库的不同版本污染计算机。

      也就是说:将有价值的代码放入链接库中,然后在源包中将其作为二进制 blob 提供可能更聪明。这样一来,您的代码就像在纯二进制文件中一样受到保护,用户可以在他们喜欢的系统上编译胶水代码,而无需担心任何事情。

      我的意思是:设置 UI 的代码部分值多少钱?如果有人偷了,你会损失多少?

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        • 2011-01-02
        • 2010-10-30
        • 2011-08-09
        相关资源
        最近更新 更多