Seriál se věnuje vytváření aplikací XdgApp. Seznámit s touto technologií se můžete v článku, který jsme vydali minulý rok. Původním autorem 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.

Ze všeho nejdříve si musíte nainstalovat xdg-app. Fedora 23 balíček obsahuje, ale další distribuce nemusí. Proto jsem vytvořil stránku s balíčky, které můžete použít.

Tento návod pracuje s xdg-app 0.4.12, což je nejnovější verze. Starší verze by měly také fungovat, ale můžete narazit na menší rozdíly v příkazech a ne všechny funkce mohou být podporované.

Základním konceptem xdg-app je rozdělení běhového prostředí (runtimu) a aplikace. Každá aplikace závisí na běhovém prostředí, které poskytuje základní knihovny, které aplikace potřebuje. Běhová prostředí jsou typicky využívána mnoha aplikacemi, ale uživatel může mít nainstalovaných více běhových prostředí naráz.

V tomto návodu budeme používat běhové prostředí gnome nightly. Je dostupné v repozitáři xdg-app na sdk.gnome.org. Pokud jste již vyzkoušeli buildy gnome nightly z mého dřívějšího článku, máte ho již nainstalovaný. Pokud ne, můžete jej naintalovat takto:

$ wget https://people.gnome.org/~alexl/keys/nightly.gpg
$ xdg-app --user remote-add --gpg-key=nightly.gpg gnome-nightly http://sdk.gnome.org/nightly/repo
$ xdg-app --user install gnome-nightly org.gnome.Platform

Jakmile jej máme nainstalovaný, můžete jej aktualizovat:

xdg-app --user update org.gnome.Platform

Nyní máme vše, co potřebujeme k vytvoření jednoduché aplikace. Začněme tedy tak, že si aplikaci napíšeme. Vložte následující text do souboru nazvaného "hello.sh":

#!/bin/sh
echo "Hello world, from a sandbox"

Poté budeme potřebovat nějaké informace o aplikaci. V xdg-app se toto definuje v souboru nazvaném "metadata" ve formě klíč-hodnota. V případě jednoduché aplikace, jako je tato, není potřeba mnoho, můžeme jej vytvořit ručně:

[Application]
name=org.test.Hello
runtime=org.gnome.Platform/x86_64/master
command=hello.sh

Specifikovaný je identifikátor aplikace (org.test.Hello), stejně tak běhové prostředí, které aplikace používá, a příkaz pro její start.

Xdg-app opravdu nevyžaduje víc. Nicméně aplikace musí mít speciální rozložení. Adresář aplikace "appdir" vytvoříme takto:

mkdir appdir
mkdir appdir/files
mkdir appdir/files/bin
mkdir appdir/export
cp metadata appdir/
cp hello.sh appdir/files/bin/
chmod a+x appdir/files/bin/hello.sh

Abychom mohli aplikaci nainstalovat, musíme ji dát do repozitáře. To můžete udělat pomocí příkazu build-export:

xdg-app build-export repo appdir

To vytvoří lokální repozitář v adresáři "repo" a aplikaci do něj exportuje. Můžeme si to otestovat pomocí následujících příkazů:

xdg-app --user remote-add --no-gpg-verify tutorial-repo repo
xdg-app --user install tutorial-repo org.test.Hello
xdg-app run org.test.Hello

To vypíše "Hello world, from a sandbox", což znamená, že jsme právě vytvořili, zabalili, nainstalovali a spustili první aplikaci xdg-app!

Chcete-li sandbox trochu prozkoumat, můžete použít parametr --command=sh s příkazem xdg-app run, což vám dá shell uvnitř sandboxu aplikace a můžete jej tak prozkoumat. Např.:

[alex@localhost ~]$ xdg-app run --command=sh org.test.Hello
sh-4.3$ ls -lR /app
/app:
total 0
drwxr-xr-x 1 alex wheel 16 jan 1 1970 bin
/app/bin:
total 4
-rwxr-xr-x 2 alex wheel 45 jan 1 1970 hello.sh
sh-4.3$ echo $PATH
/app/bin:/usr/bin
sh-4.3$ hello.sh
Hello world, from a sandbox
sh-4.3$ ls -la ~/
total 0
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 .
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 ..
drwxr-xr-x 3 alex wheel 60 feb 19 16:11 .var
sh-4.3$ ls ~/.var/app/org.test.Hello/
cache  config  data

Tady můžeme vidět, že se všechny soubory aplikace objevují v /app a PATH ukazuje na /app/bin, což znamená, že ji můžete jednoduše spustit. Můžeme také vidět, že aplikace nemá ve výchozím stavu přístup k žádným souborům z domovského adresáře uživatele (je prázdný) kromě adresáře ~/.var/app/org.test.Hello, kde může aplikace ukládat svá data. Můžete se podívat také na /usr, který je poskytovaný běhovým prostředním.

Toto je velmi manuální přístup k vytváření aplikace xdg-app. V dalším díle se podíváme na to, jak používat příkaz "xdg-app build" a SDK pro sestavování aplikací.