Flatpak 入门

Fedora 是一个不回避新兴技术的发行版(毕竟,它的创始原则之一是 First)。 所以也就不足为奇了 Fedora 处于革命性的新软件包系统的前沿。 这不是第一次在杂志上提到 Flatpak,但由于 Flatpak 如此新,自上次以来发生了很多变化。

什么是 Flatpak?

Flatpak 可以粗略地描述为 RPM 的现代替代品,但它的影响远比简单地提供新的包装格式重要得多。 在我们讨论 Flatpak 提供什么之前,首先考虑当前的软件交付流程 Fedora 今天。

  1. 上游作者开发新版本,最终生成包含源代码的存档 (frobnicate-0.4.2.tar.gz)
  2. 分发打包者收到通知,他们的上游团队发布了新版本
  3. 分发打包程序下载源存档,并为所有受支持的分发构建新版本,为每个分发生成二进制 RPM (frobnicate-0.4.2-1.fc26.x86_64.rpm)
  4. 分发打包者将二进制 RPM 提交到适当的更新系统,通过工作流推动 RPM,以便……
  5. 终于有用户可以下载frobnicate的新版本(dnf upgrade frobnicate)

这个过程从开始到结束可能需要几天到几个月或更长时间。 Flatpak 为上游开发人员和最终用户提供工具,可显着缩短上游版本和二进制文件到达用户 dnf 更新之间的时间。 现在让我们重新审视 frobnicate,但在上游开发人员和最终用户都使用 Flatpak 的情况下。

  1. 上游作者开发新版本,最终生成包含源代码的存档 (frobnicate-0.4.2.tar.gz)
  2. 上游作者使用 flatpak-builder 构建 Flatpak 存储库
  3. 上游作者将新存储库推送到用户已知的 URL 和/或在项目网站上做广告
  4. 最终用户在 flatpak 更新期间收到新版本的 frobnicate

Flatpak 直接连接上游作者和终端用户; 不涉及分销中介。 Flatpak 使用 OSTree 构建一个文件系统,其中包含运行所需程序所需的所有依赖库和文件。 这意味着可以在单个 Flatpak 存储库上运行 全部 能够运行 flatpak 程序的 Linux 发行版。 此外,由于 OSTree 存储库可以分支,因此可以同时安装同一程序的不同版本(想象一下,安装了稳定的发布版本以及夜间开发者版本!)。 最后,Flatpak 在沙盒环境中运行每个程序,在访问硬件设备或文件之前请求用户的许可。

设置存储库

任何人都可以托管 Flatpak 存储库,但它需要一个服务器和一些工具来维护。 结果,一些软件团队围绕几个不同的主要存储库合并。

GNOME

GNOME 开发团队托管了一个存储库,其中包含所有核心 GNOME 应用程序以及许多其他应用程序的夜间构建。 要添加 gnome-nightly 存储库,请打开终端并运行:

flatpak remote-add --if-not-exists gnome-nightly https://sdk.gnome.org/gnome-nightly.flatpakrepo
flatpak remote-add --if-not-exists gnome-apps-nightly https://sdk.gnome.org/gnome-apps-nightly.flatpakrepo

平枢纽

Flatpak 开发团队已经启动了一个名为 平枢纽. Flathub 旨在提供一个集中的存储库,使用户可以使用 Flatpak 应用程序。 Flathub 涵盖的不仅仅是 GNOME 应用程序套件,并且会定期添加新应用程序。 要添加 Flathub 存储库,请打开终端并运行:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

应用

GNOME 软件已经支持 Flatpak 存储库,因此可以使用 GNOME 软件或 flatpak 命令安装应用程序。 从“概览”启动软件,单击“搜索”按钮并搜索所需的应用程序。 如果在传统版本中可用 Fedora 存储库作为 RPM,有两个结果。

  1. 标记为 Source: fedoraproject.org 的条目是 RPM。
  2. 标记为 Source: sdk.gnome.org 的条目是 Flatpak。

选择 Flatpak 条目并单击安装。

安装后,Polari 可以像任何其他应用程序一样从概览中启动; GNOME shell 已经支持 Flatpak 应用程序。

flatpak 命令还会列出并安装应用程序和运行时。 要列出特定存储库中可用的所有应用程序,请运行 remote-ls 命令:

flatpak remote-ls flathub --app

使用 install 命令安装应用程序:

flatpak install flathub com.valvesoftware.Steam

安装后,运行命令将运行应用程序:

flatpak run com.valvesoftware.Steam

建立你自己的

在 Flathub 或其他地方找不到您最喜欢的应用程序作为 Flatpak? 构建自己的实际上相当简单。 如果您习惯于“手动”编译软件,那么创建 Flatpak 存储库似乎很熟悉。 Flatpak 存储库可以通过几种不同的方式构建,但最简单的方法是创建一个 JSON 格式的文件,称为“清单”。 为了 example, 以 GNOME 字典为例:

{
  "app-id": "org.gnome.Dictionary",
  "runtime": "org.gnome.Platform",
  "runtime-version": "3.22",
  "sdk": "org.gnome.Sdk",
  "command": "gnome-dictionary",
  "finish-args": [
     "--socket=x11",
     "--share=network"
  ],
  "modules": [
    {
      "name": "gnome-dictionary",
      "sources": [
        {
          "type": "archive",
          "url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz",
          "sha256": "efb36377d46eff9291d3b8fec37baab2355f9dc8bc7edb791b6a625574716121"
        }
      ]
    }
  ]
}

Save 这到一个文件,并运行 flatpak-builder 来创建一个存储库。

$ flatpak-builder gnome-dictionary-app-dir org.gnome.Dictionary.json

资源

越来越多的有用资源可用于构建和使用 Flatpak。