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.