Flatpak打包(7)——Flatpak Builder

全部文章目錄:
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-builder工具可以自動執行多步構建過程,從而可以使用單個命令構建所有應用程序模塊。
flatpak-builder支持各種構建系統,包括 autotoolscmakecmake-ninjameson,一種簡單的稱爲“simple”的構建系統,它允許提供一系列運行命令,以及所謂的Build API
所有json實體都在flatpak-builder的man頁面中解釋。

Manifests

flatpak-builder的輸入是一個json文件,它描述了構建應用程序的參數以及要捆綁的每個模塊。這個文件被稱爲manifest。模塊源可以有多種類型,包括運行的.tar.zip存檔,Git或Bzr存儲庫,補丁文件或shell命令。
GNOME Dictionary的Manifests很短,因爲唯一的模塊是應用程序本身:

{
  "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"
        }
      ]
    }
  ]
}

可以看出,這個manifest包含了有關應用程序的基本信息,然後指定了一個要下載和構建的.tar文件。更復雜的manifest包括一系列模塊。

清理(Cleanup)

構建完成後,flatpak-builder會執行清理階段。這可以用來除去頭文件和開發文檔等等。 manifest文件中的兩個屬性用於此目的。
首先,可以包含文件名模式列表:

"cleanup": [ "/include", "/bin/foo-*", "*.a" ]

第二個清理屬性是在清理階段運行的命令列表:

"cleanup-commands": [ "sed s/foo/bar/ /bin/app.sh" ]

可以基於每個模塊設置清理屬性,在這種情況下,只有由該特定模塊創建的文件名纔會匹配。

文件重命名

由flatpak導出的文件必須使用應用程序ID作爲前綴。如果應用程序的源文件沒有使用該約定命名,則flatpak-builder允許將它們重命名爲構建過程的一部分。要重命名應用程序圖標,桌面文件和 AppData文件,請使用rename-icon, rename-desktop-filerename-appdata-file屬性。

Splitting things up

默認情況下,flatpak構建器會將翻譯和調試信息拆分爲單獨的.locale.debug擴展名。這些’標準’擴展點將被添加到應用程序的元數據文件中。可以使用separate-localeno-debuginfo關閉它,但不應該有任何理由。
當flatpak構建器將構建版本導出到存儲庫時,它會自動包含.locale.debug擴展。如果手動進行導出,請不要忘記包含它們。

例子

要自己嘗試使用flatpak-builder,創建一個名爲org.gnome.Dictionary.json的文件,並將上面的Dictionary manifest json內容粘貼到該文件中。
然後運行以下命令:

$ flatpak-builder --repo=repo dictionary2 org.gnome.Dictionary.json

這會:

  • 創建一個名爲dictionary2的新目錄(相當於使用flatpak build-init
  • 下載並驗證Dictionary源代碼
  • 使用sdk而不是主機系統構建和安裝源代碼
  • 完成構建,通過設置權限(在這種情況下允許訪問X和網絡)
  • 創建一個名爲repo的新存儲庫(如果它不存在)並將生成的構建導出到其中


1 如果這個出現一下錯誤:

$ flatpak-builder --repo=repo dictionary2 org.gnome.Dictionary.json
Downloading sources
Downloading https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz
Failed to download sources: module gnome-dictionary: 已到超時限制

可以通過將文件下載到本地,然後更改org.gnome.Dictionary.json中的"url": "https://download.gnome.org/sources/gnome-dictionary/3.20/gnome-dictionary-3.20.0.tar.xz","path": "The path of the archive"即可。
2 如果出現Flatpak打包(6)——構建一個簡單的應用中出現的bug。可以將文件解壓之後重新進行壓縮。

flatpak-builder還會做一些其他有用的事情,比如創建一個可單獨安裝的debug運行時(本例中稱爲org.gnome.Dictionary.Debug)和一個可單獨安裝的translation運行時(稱爲org.gnome.Dictionary.Locale)。
如果已完成構建簡單應用程序的教程,則可以使用由flatpak-builder構建並導出的新版本來更新安裝的字典應用程序:

$ flatpak --user update org.gnome.Dictionary

否則,您需要將repo添加到flatpak並安裝該應用程序。使用如下命令:

$ flatpak --user remote-add --no-gpg-verify --if-not-exists tutorial-repo repo
$ flatpak --user install tutorial-repo org.gnome.Dictionary

要檢查應用程序是否已成功更新,可以將安裝的應用程序的sha256提交與flatpak-builder命令打印的提交ID進行比較:

$ flatpak info org.gnome.Dictionary
$ flatpak info org.gnome.Dictionary.Locale

最後,您可以運行新版本的Dictionary應用程序:

$ flatpak run org.gnome.Dictionary

manifests示例

除了爲一系列其他gnome應用程序提供manifests之外,還可以使用從git構建的gnome字典的完整manifests

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章