全部文章目录:
Flatpak打包(1)——Flatpak 介绍
Flatpak打包(2)——Flatpak应用元素
Flatpak打包(3)——应用Flatpak
Flatpak打包(4)——构建第一个Flatpak
Flatpak打包(5)——开始配置
Flatpak打包(6)——构建一个简单的应用
Flatpak打包(7)——Flatpak Builder
Flatpak打包(8)——应用Sandbox(沙盒)
Flatpak打包(9)——应用分发
Flatpak打包(10)——可用运行时(Runtime)
Flatpak打包(11)——命令参考
Flatpak打包(12)——Flatpak-builder命令参考
参考文章:http://docs.flatpak.org/en/latest/introduction.html
flatpak是一种构建、发布、安装和运行应用的技术,它的桌面应用领域是linux桌面环境,尽管它也可以作为其他环境,例如嵌入式环境中进行应用程序的发布。
flatpak已经设计并且实现了以下几个目标:
- 允许应用安装在任何一个Linux发行版中;
- 给应用程序提供一致的环境,便于测试和减少bug;
- 将应用程序与操作系统解耦,使应用程序不依赖于每个特定的发行版;
- 允许应用程序捆绑它们自己的依赖项,这样就可以使用Linux发行版没有提供的库,因此它们可以依赖于特定版本的库,甚至可以使用库的修补版本;
- 通过在不同容器(sandboxes)来隔离不同的应用,来提高Linux桌面的安全性。
flatpak如何工作
我们能够通过很少的关键概念来理解flatpak,这也是它不同于其他软件包的地方。
运行时(Runtimes)
运行时提供了应用所需的基础环境,现在已经有很多可用的运行时。可以从 http://flatpak.org/runtimes.html 查找到目前可用的运行时。
每一个应用必须在一个runtimes下进行构建,并且为了保证应用能运行,还要保证runtimes安装在了电脑中。用户能安装很多不用的runtimes,也能安装同一个runtimes的不同版本。
绑定库(Bundled libraries)
如果应用程序需要运行时里面不存在的某些依赖项,那么它们可以与应用程序本身捆绑在一起。这允许应用程序使用分布中不可用的依赖项,或者使用安装在主机上的依赖项的不同版本。
SDK
sdk是一个运行时,包含运行时不需要的’devel’部分,比如构建和打包工具,头文件,编译器和调试器。每个应用程序都是针对与运行时(这是应用程序在运行时使用的运行时)配对的sdk构建的。
扩展
扩展是运行时或应用程序的可选附件。它们通常用于从运行时分割翻译和调试信息。例如,可以将org.freedesktop.platform.locale
添加到org.freedesktop.platform
运行时以添加翻译。
沙盒
应用flatpak,每个应用程序是建立和运行在一个孤立的环境。默认情况下,应用程序只能“看到”自身及其运行时。访问用户文件,网络,图形插座,总线和设备上的子系统必须明确授予。(如后面将要描述的,flatpak提供了几种方法来做到这一点),有意无法访问其他事物,比如其他进程。
Flatpak命令
flatpak
是用于安装,删除和更新运行时和应用程序的命令。它也可以用来查看当前安装的内容,以及用于构建和分发应用程序包。flatpak --help
提供了可用命令的完整列表。
大多数flatpak命令默认在系统范围内执行。要仅为当前用户执行命令,请使用--user
选项。这允许运行时和应用程序包被安装在每个用户。
有关flatpak命令的更多信息,请参阅Command Reference。
标识
flatpak使用唯一的名称来标识每个应用程序,运行时和sdk,这个名称有时用作名称/Arch/分支三元组的一部分。
命名
flatpak名称采用反向DNS地址的形式,如com.company.app
。这个地址的最后一段是对象的名字,前面的部分是它所属的域。为了防止名称冲突,这个域应该对应一个dns注册地址。这意味着使用来自网站的域名,无论是应用程序还是组织。例如,如果应用程序App
在app.com
上有自己的网页,则其flatpak名称将是com.app.app
。多个应用程序可以属于同一个域,例如org.organization.app1
和org.organization.app2
。
如果您的应用程序没有注册域名,则可以使用第三方网站轻松获取。例如,github允许创建可用于此目的的个人页面。在这里,name.github.io
的个人名字空间可以被用作应用程序标识符io.github.name.app
的基础。
如果应用程序提供了一个D-Bus服务,则D-Bus服务名称应该与应用程序名称相同
确定三元组
许多flatpak命令只需要应用程序的名称,运行时或sdk。但是,在某些情况下,还需要指定体系结构和分支(分支允许指定特定的版本)。这是使用名称/Arch/分支三元组完成的。例如org.gnome.Sdk/x86_64/3.14
和org.gnome.Builder/i386/master
。
在hood下
flatpak使用一些预先存在的技术。通常没有必要为了使用flatpak熟悉这些,虽然在某些情况下它可能是有用的。他们包括:
- 项目原子( Project Atomic)的bubblewrap实用程序,它允许非特权用户使用以下内核特性设置和运行容器:
- Cgroups
- Namespaces
- Bind mounts
- Seccomp rules
- systemd为沙箱设置cgroups
- D-Bus是一种为应用程序提供高级API的完善方法
- 来自开放容器倡议的OCI格式,作为单一文件包的便捷传输格式
- 用于版本控制和分配文件系统树的OSTree系统
- Appstream元数据,允许flatpak应用程序在软件中心应用程序中很好地显示