全部文章目录:
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命令参考
flatpak
实用程序提供了一组用于构建和分发应用程序的命令。这些命令允许创建新的Flatpak应用,可以在其中构建新的或现有的应用程序。
本节将介绍如何构建一个简单的应用程序,该应用程序在运行时不需要任何额外的依赖关系。为了完成这些示例,您应该先完成设置步骤(Getting Setup)。
创建应用
要创建一个应用程序,第一步是使用build-init
命令。这会创建一个可以构建应用程序的目录,其中包含正确的目录结构和有关应用程序信息的元数据文件。build-init的格式是:
$ flatpak build-init DIRECTORY APPNAME SDK RUNTIME [BRANCH]
- DIRECTORY是将被创建以包含应用程序的目录的名称
- APPNAME是应用程序的D-Bus名称
- SDK 是将用于构建应用程序的SDK 的名称
- RUNTIME是应用程序所需的运行时的名称
- BRANCH通常是将要使用的SDK和运行时的版本
例如,要使用GNOME 3.22 SDK构建GNOME Dictionary 应用程序,该命令将如下所示:
$ flatpak build-init dictionary org.gnome.Dictionary org.gnome.Sdk org.gnome.Platform 3.22
现在可以试试这个命令。在下一步中,将在生成的dictionary
目录中构建一个应用程序。
构建
flatpak build
用于使用sdk构建应用程序。此命令用于提供对沙箱的访问权限。例如,以下内容将在appdir沙盒(位于files目录中)中创建一个文件:
$ flatpak build dictionary touch /app/some_file
(最好在继续之前删除此文件。)
build命令允许使用传统的configure,make和make install在flatpak中构建已有的应用程序。可以用GNOME Dictionary来试试这个。
首先,下载源文件,提取它们并切换到生成的目录:
$ wget https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz
$ tar xvf gnome-dictionary-3.20.0.tar.xz
$ cd gnome-dictionary-3.20.0/
那么您可以使用build命令在以前创建的dictionary 目录中构建和安装源代码:
$ flatpak build ../dictionary ./configure --prefix=/app
$ flatpak build ../dictionary make
$ flatpak build ../dictionary make install
$ cd ..
注:此处make
的时候会有一个bug,提示错误:
...
make[3]: Entering directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
CC libgdict_1_0_la-gdict-enum-types.lo
In file included from gdict-enum-types.c:6:0:
./gdict-client-context.h:84:1: error: unknown type name ‘GdictContext’
GdictContext * gdict_client_context_new (const gchar *hostname,
^~~~~~~~~~~~
make[3]: *** [Makefile:656: libgdict_1_0_la-gdict-enum-types.lo] Error 1
make[3]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
make[2]: *** [Makefile:535: all] Error 2
make[2]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0/libgdict'
make[1]: *** [Makefile:484: all-recursive] Error 1
make[1]: Leaving directory '/home/zhangsl/Desktop/qtiplot/gnome-dictionary-3.20.0'
make: *** [Makefile:416: all] Error 2
参考https://git.gnome.org/browse/gnome-dictionary/commit/?id=d529e2dd056f05cb1115c2f68bb6f773b4b14948可知,解决方法如下:
--- a/libgdict/gdict-client-context.h
+++ b/libgdict/gdict-client-context.h
@@ -19,7 +19,7 @@
#ifndef __GDICT_CLIENT_CONTEXT_H__
#define __GDICT_CLIENT_CONTEXT_H__
-#include <glib-object.h>
+#include "gdict-context.h"
#define GDICT_TYPE_CLIENT_CONTEXT (gdict_client_context_get_type ())
#define GDICT_CLIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDICT_TYPE_CLIENT_CONTEXT, GdictClientContext))
因为这些都在沙箱中运行,所以sdk中的编译器和其他工具用于构建和安装,而不是主机系统上的那些工具。
完成构建
一旦构建了应用程序,就需要使用build-finish
命令来指定对主机不同部分的访问,例如联网和图形套接字。该命令还用于指定用于运行应用程序的命令(通过修改元数据文件完成)以及创建应用程序的exports目录。例如:
$ flatpak build-finish dictionary --socket=x11 --share=network --command=gnome-dictionary
在这一点上,已经成功地建立了一个flatpak应用并准备好运行。要测试应用程序,您需要将Dictionary 导出到存储库,添加该存储库,然后安装并运行该应用程序:
$ flatpak build-export repo dictionary
$ flatpak --user remote-add --no-gpg-verify --if-not-exists tutorial-repo repo
$ flatpak --user install tutorial-repo org.gnome.Dictionary
$ flatpak run org.gnome.Dictionary
注:
这里我在执行安装命令的时候会出现一个错误:
$ flatpak --user install tutorial-repo org.gnome.Dictionary
error: Error searching remote tutorial-repo: Can't find ref org.gnome.Dictionary
出现原因是没有在同一目录内构建所有的flatpak应用,即所有的flatpak应用均应在同一目录中构建。
这会导出应用程序,创建一个名为tutorial-repo的存储库,将Dictionary应用程序安装在每个用户的安装区域并运行它。