全部文章目錄:
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應用程序安裝在每個用戶的安裝區域並運行它。