1

可能重复:
为 Linux 分发二进制应用程序的最佳方式是什么?

我们想在 Linux 上发布一个专有游戏。游戏比较简单,有一个用C++编写的自定义引擎。我们一直在 Windows 上使用 MinGW 编译器,并且有人在 Linux 中使用 g++ 编译器进行编程和测试。

该游戏完全使用开源库编写,这些库都是跨平台的。

使适用于 Linux 的程序在所有 Linux 发行版上运行而不需要对其中任何一个进行打包的推荐方法是什么?对我来说,理想的方法是将其打包为 .zip 或 tarball 并提供下载,就像 Windows 下与系统库一起使用的良好 ol' .exe 文件一样。

我在 Linux 下玩过的大多数提供此类下载的游戏都提供了一个启动它的 shell 脚本(这本身就是一个兼容性问题!)。我对此没有任何问题,但它散发出对用户不友好的味道。此外,许多游戏需要额外的库。例如,流行库的硬件加速新版本 SDL 2.0 尚未在大多数发行版的存储库中可用,但已知有几个游戏使用它,我不得不自己编译它。这更糟。

我想要一个解决方案,客户可以在他们选择的文件管理器中单击二进制文件,它会运行,不需要“apt-getting”或“yumming”必要的库。我不介意打破标准,如果它必须进入 /opt,它会的。

4

2 回答 2

3

我想要一个解决方案,客户可以在他们选择的文件管理器中单击二进制文件,它会运行,没有“apt-getting”或“yumming”。我不介意打破标准,如果它必须进入 /opt,它会的。

首先,你要明白,“yumming”和“apt-getting”并不是真正的应用程序(包)的安装程序,它们只是用于查找/下载/更新/跟踪包的前端程序。存储库(来自发行版和您手动添加的其他存储库)。所以,当你说“没有 'apt-getting' 或 'yumming'”时,我们必须假设你的意思是你不想把你的游戏放在存储库上,如果你想让人们付费,这是有道理的获取您的游戏(相对于其他专有但免费的软件,如闪存、图形驱动程序、视频编解码器以及您通常在存储库中找到的其他东西)。

因此,实际上只有两种类型的包管理系统,RPM 和 DEB,它们使用命令行程序,rpm并且dpkg分别用于实际进行安装。大多数发行版还带有用于这些程序的 GUI 前端(不是 Synaptic 风格的包管理软件(它是 apt-get 或 yum 的 GUI 前端),但更简单一些)。当你双击一个.deb.rpm文件时,在大多数发行版上,你会弹出这个 GUI 前端,要求你提供管理员凭据并告诉你所需的依赖项,显然,你将要安装这个包到您的系统上。据我所知,这正是你想要的。因此,您需要提供的是一个.deb文件(对于 Debian 发行版)和一个.rpm(对于 Red Hat 发行版),对于您的游戏的 32 位和 64 位版本,就像我假设您.msi为您的 Windows 版本提供一个文件一样。

至于用户可能难以找到的依赖项。您应该做的是在安装程序的某个目录中包含一些用于这些深奥依赖项的附加(“推荐”版本)包,以便如果无法从发行版的存储库中获取较新版本,则可以从这些脱机包中安装它们。就是这样。

您可以让人们付费以获取游戏的 deb 或 rpm 安装程序,或者包含某种许可证密钥系统来解锁游戏(因此,使 deb/rpm 文件可供下载,并收取密钥费用/代码来解锁它)。

对我来说,理想的方法是将其打包为 .zip 或 tarball 并提供下载,就像 Windows 下与系统库一起使用的良好 ol' .exe 文件一样。

理想的?真的!?!是的,如果您所做的只是使用系统库,那么它将起作用。但如果还有更多,那将是一场噩梦(几乎和在 Windows 下一样糟糕,你不依赖安装程序)。

该游戏完全使用开源库编写,这些库都是跨平台的。

确保这些开源库都不是 GPL 许可的,因为如果是这样,你就不能让你的游戏成为专有的。您的依赖项必须在 LGPL 或 BSD 或类似许可下获得许可,因此请注意这一点。

于 2013-01-13T21:26:09.720 回答
1

使适用于 Linux 的程序在所有 Linux 发行版上运行而不需要对其中任何一个进行打包的推荐方法是什么?

建议开始。所以你需要一种不那么不推荐的方式来做到这一点。我想这意味着生成一个静态链接的二进制文件(无论如何你都需要一个 32 位和一个 64 位版本)。

推荐的方法是决定一个分发系统(RPM,DEB,...)并验证对各种目标平台的依赖关系。然后用户可以单击安装程序包 - 就像他/她对 Windows MSI 文件所做的那样 - 并且以后也能够卸载/升级程序。

请注意,在实践中,即使您分发了静态二进制文件,您也必须为目标平台提供测试平台环境,因为您无法避免进行测试。那时,打包 RPM/DEB/etc 并不会真正显着增加时间消耗;另一方面,它会使包更紧凑,更容易下载和安装。

于 2013-01-13T20:59:38.767 回答