Vítejte v seriálu návodů, jak vytvářet aplikace xdg-app. V druhé části jsme vytvořili xdg-app pro gnome-dictionary. Nicméně podíváte-li se blíže na příkazy, které jsme použili, zjistíte, že ne mnoho toho bylo specifické pro tuto aplikaci.

Ve skutečnosti jediné věci, které souvisí s gnome-dictionary, jsou:

  • ID aplikace
  • URL zdroje
  • binární název
  • nezbytná povolení

Jak je to možné?

Ukazuje se, že většina open source aplikací se sestavuje podobně. Můžeme na to nahlížet jako na API pro sestavování modulů. A pokud nějaký modul tomuto API neodpovídá, můžete to v upstreamu jednoduše změnit. A pokud upstream nemá zájem, můžete aplikovat lokální patch.

Nástroj xdg-app-builder, který je součástí xdg-app, je na této myšlence založený. Popíšete svoji aplikaci, potom moduly, které do ní chcete sestavit, a potom se za vás xdg-app-builder postará o nízkoúrovňová volání, pomocí kterých se moduly sestaví.

Ekvivalent toho, co jsme dělali v druhém díle, je tento json:

{
"app-id": "org.gnome.Dictionary",
"runtime": "org.gnome.Platform",
"runtime-version": "master",
"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.19/gnome-dictionary-3.19.90.tar.xz",
"sha256": "c719333d77b8c1dffc46baab2402bad565bd949440b5b625d758047a98493418"
     }
    ]
   }
  ]
}

Vložíte-li tento text do souboru nazvaného org.gnome.Dictionary.json, můžete aplikaci sestavit a exportovat pomocí:

$ xdg-app-builder --repo=repo appdir3 org.gnome.Dictionary.json

Otestovat to můžete pomocí:

$ xdg-app --user update org.gnome.Dictionary
$ xdg-app run org.gnome.Dictionary

Příkazy výše stáhly soubory, vytvořily adresář pro sestavování, sestavily moduly, dokončily aplikaci a exportovaly ji do repozitáře. Přesně tak, jak jsme to udělali před tím.

Nicméně i s tímto jednoduchým souborem to udělalo celou řadu dalších užitečných věcí:

  • Ověřil se kontrolní součet sha256 staženého tarballu.
  • Všechny zdroje se sestavily v pevném umístění (v /run/build), aby se zajistily lépe reprodukovatelná sestavení.
  • Sestavovalo to bez přístupu k jakékoliv části souborového systému hosta kromě adresáře s rozbaleným zdrojovým kódem. To znamená menší pravděpodobnost, že stroj, na kterém sestavování probíhá, ovlivní samotné sestavení.
  • Ladící informace se automaticky vyjmuly z nainstalovaných binárek do samostatných souborů a ty byly uložené do odděleného běhového prostředí nazvaného org.gnome.Dictionary.Debug.
  • Překlady byly vyjmuty do oddělenéhých běhových prostředí nazvaných org.gnome.Dictionary.Locale.$lang.
  • Do cache jsou uložené jednotlivé fáze sestavování, takže když budete potřebovat aplikaci znovu sestavit, pouze moduly, které se změnily, se budou znovu sestavovat.

Kromě tohoto má xdg-app-builder plno užitečných funkcí. Zřejmou je to, že můžete sestavovat více modulů do aplikace a můžete mít více zdrojových kódů pro každý modul. Zdroje mohou mít různou podobu. Momentálně jsou podporovány: archivy (.tar, .zip), git, bzr, patche nebo spouštění příkazů shellu.

Po každém sestavení také následuje "uklízecí" fáze, v které můžete odstranit věci, které byly přidány během sestavení a které nebudou potřeba pro běh aplikace. Např. můžete odstranit hlavičky, vývojářskou dokumentaci a podobné věci. xdg-app-builder pro to podporuje dvě vlastnosti. První je seznam vzorů pro souborový systém, druhá seznam příkazů pro běh během "uklízecí" fáze.

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

Vlastnosti uklízení lze nastavit pro každý modul zvlášť. V takovém případě se budou řešit jen soubory, které byly vytvořeny daným modulem.

Další speciální funkcí jsou rename-icon, rename-desktop-file a rename-appdata, které vám umožní tyto typy souborů přejmenovat tak, aby odpovídaly ID aplikace. To musíte použít proto, že upstreamové soubory nepoužívají ID aplikace v názvu, což není xdg-app během exportu povoleno.

Noční sestavení GNOME aplikací jsou sestavena pomocí xdg-app-builder a najdete tam hodně příkladů souborů json, např. kompletní verzi gnome-dictionary sestaveného z gitu. Mám také pár dalších příkladů zde.

Chcete-li zjistit více o vlastnostech xdg-app-builder, podívejte se na manuální stránku xdg-app-builder.

To je pro dnešek vše. V dalším díle se podíváme podrobněji na xdg-app sandbox.

Autorem původního textu je Alex Larsson, který jej publikoval na svém blogu. Na mojefedora.cz jej vydáváme s jeho souhlasem přeložený do češtiny.