我想使用 14.04 中的软件包创建一个 gVim AppImage(为什么不使用 16.04?因为 16.04 软件包太新了,因为 AppImage 只能在较新或与其软件包所基于的发行版相同的发行版上运行)。现在我希望我的 gVim AppImage 适用于最新版本的 gVim,所以我需要一个提供最新 gVim 的 14.04 存储库。我在 Launchpad 上搜索了维护的 Vim PPA,但一无所获(我找到的所有 PPA 都已过期)。
我的问题:
我知道我可以使用 checkinstall 将最新的 gVim 构建为 Debian 包,但我想使用包存储库中的 gVim 来构建我的 gVim AppImage,因为它使事情变得简单得多。在哪里可以找到最新的 Debian gVim 软件包?
或者,我如何从任意一组二进制文件(从某处下载或从源代码编译)构建 AppImage 容器?
答案1
AppImage 基本上只是一个自挂载文件系统映像,它包含应用程序及其在单个文件中运行所需的一切。
以下是在 Travis CI 上构建 GNU Emacs 并将其打包为 AppImage 的示例:https://github.com/probonopd/Emacs.AppImage
您应该能够对 gVim 执行相同的操作。
- 收集合适的二进制文件。如果应用程序已经编译,则可以使用现有的二进制文件(例如,包含在 .tar.gz、deb 或 rpm 档案中)。请注意,二进制文件不能在比您目标发行版更新的发行版上编译。换句话说,如果您的目标是 Ubuntu 9.10,则不应使用在 Ubuntu 10.04 上编译的二进制文件。对于上游项目,编译用于 AppImages 的特殊版本可能会更有优势,我在本例中推荐这样做。请参阅上面的 GNU Emacs 示例。(有关重新使用现有二进制文件,请参阅https://github.com/probonopd/AppImages/tree/master/recipes/meta反而。)
- 收集不属于您所针对的基本操作系统的所有依赖项的合适二进制文件。例如,如果您的目标是 Ubuntu、Fedora 和 openSUSE,那么您需要收集应用程序运行时所需的所有库和其他依赖项,这些依赖项在默认安装中不属于 Ubuntu、Fedora 和 openSUSE。
- 创建一个有效的 AppDir来自您的二进制文件。当您执行其 AppRun 文件时,工作的 AppImage 会运行您的应用程序。再次查看上面链接的 GNU Emacs 示例。
- 将您的 AppDir 变成 AppImage。这会将 AppDir 的内容压缩为单个、自安装且可自执行的文件。上面的示例为此使用了 functions.sh 中的 generate_type2_appimage 函数。
- 测试你的 AppImage在所有目标操作系统上。这是您不应跳过的重要步骤。发行版之间的细微差别使得这一步必不可少。虽然在大多数情况下可以创建在各种发行版上运行的 AppImage,但这并不是自动的,而是需要仔细的手动调整。
这听起来比实际要复杂,除了测试之外的所有步骤都可以在一个小的 bash 脚本中完成,如示例中所示。正如你在https://github.com/probonopd/Emacs.AppImage,就可以很容易的制作出AppImage了。
我建议与软件的上游作者合作,这样上游项目本身就会提供官方的 AppImage。这样,上游项目就可以控制其软件的端到端用户体验;这是许多上游应用程序项目所欣赏的。用户还可以放心,AppImage 是按照软件原作者的意图组装的,不会被中间人以某种方式更改。