GNU/Linux >> Znalost Linux >  >> Ubuntu

Vytváření linuxových aplikací pro různé distribuce pomocí Flatpak

Fragmentace je v linuxovém ekosystému problémem již delší dobu. Dnes existuje celá řada distribucí s vlastními správci balíčků a vlastní představou o tom, z čeho se skládá „základní systém“. To je pro vývojáře aplikací únavné – po sestavení balíčků specifických pro distribuci a údržbě úložišť musí opravit všechny chyby specifické pro distribuci, které se mohou objevit. Na rozdíl od mobilních platforem, jako jsou iOS a Android, také aplikace pro Linux běží mimo izolovaný prostor s přístupem ke všem funkcím základního systému.

Pro řešení těchto problémů byla navržena široká škála řešení. V tomto článku se podíváme na Flatpak – způsob, jak distribuovat aplikace a spouštět je v izolovaném prostoru s omezeným přístupem.

Co je Flatpak?

Flatpak je technologie pro vytváření, distribuci, instalaci a spouštění aplikací, primárně zaměřená na desktop Linux. Umožňuje aplikacím sdružovat závislosti a dodávat s běhovými moduly, takže aplikace neskončí v závislosti na zvláštnostech konkrétní distribuce. Kromě toho zvyšuje bezpečnost linuxových aplikací tím, že je izoluje do sandboxů.

Architektura aplikace Flatpak je znázorněna na obrázku níže:

Každá aplikace Flatpak je podporována „runtime“, který obsahuje základní závislosti používané aplikacemi. Tyto běhové moduly jsou sdíleny mezi aplikacemi. V systému může současně existovat více běhových prostředí a dokonce i různé verze stejného běhového prostředí. Tímto způsobem mají aplikace poměrně konzistentní základní systém, na který se mohou spolehnout.

Aby bylo možné vytvářet aplikace pro toto běhové prostředí, jsou poskytovány speciální běhové prostředí nazývané SDK (Software Development Kit). Obsahují nástroje, jako jsou kompilátory a vývojové hlavičky. Pokud vaše aplikace závisí na knihovnách, které nejsou součástí běhového prostředí, musíte je se sadou SDK zkompilovat spolu s vaší aplikací.

Kromě toho existují „rozšíření“, což jsou volitelné doplňky pro runtime a aplikace. Nejčastěji se používají k oddělení informací o překladu a ladění od původního běhového prostředí nebo aplikace.

Jedním z cílů Flatpak je zvýšit bezpečnost aplikací jejich vzájemnou izolací. Ve výchozím nastavení poskytuje Flatpak velmi omezený přístup ke zdrojům hostitelského systému. Pokud to není výslovně požadováno, aplikacím není povoleno používat síť, přistupovat k souborům v základním systému nebo komunikovat se službami jako X, DBus nebo Pulseaudio. Kromě toho „portály“ umožňují selektivní přístup ke zdrojům prostřednictvím rozhraní API na vysoké úrovni.

Instalace, příkazy Flatpak a konvence pojmenování

Flatpak je k dispozici v repozitářích většiny distribucí. Na Arch Linuxu a Fedoře musíte nainstalovat flatpak balíček k instalaci flatpak který vám pomůže instalovat a sestavovat aplikace.

sudo dnf install flatpak # Fedora
sudo pacman -S flatpak # Arch

Uživatelé Ubuntu jej nemají ve výchozích úložištích, takže jeho instalace je o něco složitější. Nejprve musíte do systému přidat tuto PPA:

sudo add-apt-repository ppa:alexlarsson/flatpak

Poté můžete balíček nainstalovat pomocí:

sudo apt update
sudo apt install flatpak

Zatímco flatpak příkaz vám jistě může pomoci při vytváření aplikací, není to nejpohodlnější způsob. Existuje další nástroj s názvem flatpak-builder , který umožňuje sestavovat aplikace Flatpak ze souboru JSON. (Tento nástroj probereme dále v tomto článku.)  Tento nástroj můžete nainstalovat pomocí:

sudo dnf install flatpak-builder # Fedora
sudo pacman -S flatpak-builder # Arch
sudo apt install flatpak-builder # Ubuntu

Nyní, abyste mohli nainstalovat aplikace nebo runtime, musíte přidat úložiště do seznamu vzdálených ovladačů Flatpak. Tyto vzdálené ovladače mohou být umístěny v místním adresáři nebo online. Runtime/aplikace jsou identifikovány pomocí inverzní adresy DNS, například com.booleanworld.foo . Za určitých okolností může být také nutné zadat architekturu a „větev“ běhového prostředí. To se provádí pomocí trojice oddělených lomítkem, například com.booleanworld.foo/x86_64/1.3 .



flatpak příkaz obvykle přidává software a úložiště pro všechny uživatele. To však není vhodné pro zkoušení, takže použijeme --user příznak omezit takové změny pouze na aktuálního uživatele.

Nyní, když máme základy na místě, podíváme se na nějakou teorii o vytváření aplikací Flatpak.

Struktura aplikace Flatpak

Když sbalíte aplikaci s Flatpakem, automaticky se vytvoří následující adresářová struktura:

  • metadata :Tento soubor obsahuje informace o sadě SDK a běhovém prostředí, na kterém bude aplikace spuštěna, a také seznam základních systémových prostředků, ke kterým aplikace potřebuje přístup.
  • files :Tento adresář obsahuje soubory, které tvoří aplikaci, včetně všech dat aplikace. bin podadresář zde obsahuje spustitelné soubory aplikace.
  • export :Tento adresář obsahuje všechny soubory, ke kterým základní systém potřebuje přístup. Příklady zahrnují data AppStream, .desktop soubor a ikonu aplikace. Všechny soubory, které sem vložíte, by měly mít předponu identifikátoru. Například soubor plochy může mít název com.booleanworld.foo.desktop .

I když můžete tuto strukturu postavit ručně, není to nutné. Flatpak má nástroje, které vám pomohou automaticky vytvořit tuto strukturu, a pokud máte typický projekt založený na automatických nástrojích, vyžaduje velmi malou konfiguraci. U projektů, které nejsou založeny na automatických nástrojích, obvykle potřebujete nastavit adresář „prefix“ na /app aby věci fungovaly.

Předpoklady

Následující části článku obsahují několik příkladů vytváření aplikací Flatpak. Jak jsme již zmínili dříve, aplikace potřebují ke spuštění runtime a sadu SDK pro proces sestavení. Prvním krokem je tedy přidání úložiště, ze kterého jsou dostupné. Přidáme úložiště dostupné na sdk.gnome.org pro naše použití.

flatpak remote-add --from gnome https://sdk.gnome.org/gnome.flatpakrepo --user

K sestavení níže uvedených příkladů potřebujeme dvě běhová prostředí: org.freedesktop.Platform a org.gnome.Platform a dvě sady SDK: org.freedesktop.Sdk a org.gnome.Sdk . Zde jsme použili verze 1.6 a 3.24 Freedesktop a Gnome runtime/SDK.

flatpak install --user gnome org.freedesktop.Platform/x86_64/1.6
                             org.freedesktop.Sdk/x86_64/1.6
                             org.gnome.Plaform/x86_64/3.24
                             org.gnome.Sdk/x86_64/3.24

Dále se podívejte na repozitář flatpak-resources, který obsahuje všechny zdroje potřebné k prostudování tohoto článku.

git clone https://github.com/boolean-world/flatpak-resources
cd flatpak-resources

V následujících částech se podíváme na dva příklady stavebních aplikací.

Stavení „kotě“, lehké „kočky“

V této části se naučíme, jak vytvořit základní aplikaci Flatpak. Aplikace je malou verzí cat příkaz s názvem kitten .

Nejprve musíte vytvořit adresářovou strukturu, o které jsme hovořili dříve. build-init příkaz to může udělat za vás. Musíte mu dát adresář sestavení, název vaší aplikace a sadu SDK a runtime, které se mají použít (v tomto pořadí). Můžete také přidat volitelný „název pobočky“, ale v tomto příkladu jej vynecháme.

flatpak build-init kitten-build com.booleanworld.kitten
                                org.freedesktop.Sdk
                                org.freedesktop.Platform

Jak jsme zmínili dříve, adresář s předponou aplikací Flatpak je /app a musíte vytvořit bin adresář v něm. Pokud chcete spustit příkaz v adresáři sestavení, použijte build příkaz:

flatpak build kitten-build mkdir -p /app/bin

Dalším krokem je kompilace kitten.c s gcc :

flatpak build kitten-build gcc kitten.c -o /app/bin/kitten

Poté můžete dokončit sestavení pomocí build-finish . Příkaz bude kitten a potřebuje přístup k souborovému systému hostitele (aby bylo možné zobrazit jakýkoli soubor na hostitelském systému). Takže můžete dokončit sestavení s těmito parametry:

flatpak build-finish kitten-build --filesystem=host --command=kitten

Nyní, pokud chcete aplikaci otestovat, musíte ji nainstalovat. Prvním krokem je export aplikace do místního úložiště. V našem příkladu je složka úložiště my-repo :

flatpak build-export my-repo kitten-build

Dále přidáme úložiště s názvem test-repo . Protože nepoužíváme podpisy GPG, informujeme Flatpak pomocí --no-gpg-verify přepínač.



flatpak remote-add --user --no-gpg-verify test-repo my-repo

Nakonec jej můžete nainstalovat pomocí:

flatpak install --user test-repo com.booleanworld.kitten

Nyní můžete vyzkoušet, zda to funguje, spuštěním takto:

flatpak run com.booleanworld.kitten ~/.bashrc

Pokud jste doposud správně provedli všechny kroky, měl by se zobrazit obsah vašeho .bashrc soubor:

Gratulujeme k vytvoření vaší první aplikace Flatpak!

Kroky byly zatím poměrně jednoduché, ale build-finish velení vyžaduje další diskusi. To je to, co uděláme v další části.

Hlubší pohled na příkaz „build-finish“

Jedním z primárních cílů Flatpak je sandbox aplikací a poskytování pouze minimálního přístupu ke zdrojům hostitelského systému. V předchozím příkladu jsme aplikaci „kotě“ umožnili přístup k libovolnému souboru v systému s build-finish . Přepínače, které můžete použít k povolení přístupu k různým zdrojům, jsou uvedeny níže:

  • --filesystem={path}

Tento přepínač umožňuje přístup ke konkrétním cestám v systému. Můžete zadat konkrétní cestu (například /usr/share ). home umožňuje přístup k domovskému adresáři uživatele a host umožňuje přístup ke všem souborům v systému. Kromě toho můžete také vytvořit cestu pouze pro čtení pomocí :ro . Například --filesystem=/usr/share:ro --filesystem=home umožňuje přístup pouze pro čtení k /usr/share a přístup pro čtení a zápis do domovského adresáře uživatele.

  • --share={type}

Tento přepínač umožňuje přístup ke konkrétním zdrojům. Nejčastěji používané typy jsou ipc a network , které umožňují IPC a síťový přístup. Ve většině aplikací s grafickým rozhraním --share=ipc se používá pro fungování sdílené paměti X, což zlepšuje výkon.

  • --socket={type}

Tento přepínač umožňuje používat konkrétní zásuvky. Nejčastěji používané typy soketů jsou x11 , wayland a pulseaudio . První dva používají aplikace k vykreslování prvků GUI a druhý se používá k přehrávání zvuku prostřednictvím démona Pulseaudio.

  • --device={device}

To umožňuje aplikacím selektivně přistupovat k některým zařízením. Nejčastěji dri se zde používá, aby aplikace mohly používat vykreslování OpenGL.

  • --talk-name={name} a --system-talk-name={name}

Tyto přepínače umožňují aplikacím komunikovat s pojmenovanými službami prostřednictvím sběrnice relace a systémové sběrnice DBus.

  • --env={varname}={value}

env přepínač umožňuje exportovat proměnné prostředí. {varname} je název proměnné, který je nastaven na daný {value} .

Pokud aplikace vyžaduje přístup k dconf, musíte použít následující přepínače:

--filesystem=xdg-run/dconf
--filesystem=~/.config/dconf:ro
--talk-name=ca.desrt.dconf
--env=DCONF_USER_CONFIG_DIR=.config/dconf

Praktický příklad zahrnující tyto přepínače uvidíme v pozdější části.

Automatické vytváření aplikací:flatpak-builder

Ačkoli jsou kroky při vytváření aplikací Flatpak poměrně jednoduché, je stále zdlouhavé je vytvářet krok za krokem. flatpak-builder je nástroj, který vám umožňuje vytvářet aplikace deklarativně pomocí manifestů JSON. Pokud je zdrojový kód uspořádán podle „build API“, může tvůrce kompilovat a instalovat aplikace ze zdrojových archivů. Většina softwaru založeného na automatických nástrojích již odpovídá API, takže obvykle není potřeba žádná další konfigurace.

Typický soubor manifestu obvykle vypadá takto:

{
  "app-id": "com.booleanworld.kitten",
  "runtime": "org.freedesktop.Platform",
  "runtime-version": "1.6",
  "sdk": "org.freedesktop.Sdk",
  "command": "kitten",
  "finish-args": [
     "--filesystem=host"
  ],
  "modules": [
    {
      "name": "kitten",
      "sources": [
        {
          "type": "archive",
          "url": "https://opensource.example.com/kitten-0.0.1.tar.gz",
          "sha256": "38ecfd39b76a2505376f5a57ebcc7b19d35efaf9f8c724a24382c45aa1378018"
        }
      ]
    }
  ]
}

Jak vidíte, tento soubor obsahuje stejné informace, jaké jsme dříve specifikovali pomocí různých příkazů. Navíc obsahuje seznam modulů k sestavení. Ve výše uvedeném příkladu je pouze jeden modul. Pokud máte složitou aplikaci, která závisí na více modulech, museli byste je uvést všechny. Například gnome-calculator závisí na mpc a mpfr a manifest vypadá takto.

Jsou podporovány různé typy zdrojů. Dalším oblíbeným typem zdroje je git a musíte zadat adresu URL úložiště a volitelně větev, která musí být odhlášena.

Manifest je velmi výkonný a podporuje nastavení CFLAGS/CXXFLAGS, přejmenování souborů pro export a odstranění nepotřebných souborů. V další části analyzujeme praktickou aplikaci a naučíme se, jak ji zabalit pro Flatpak.

Skutečný příklad:balicí přístroj

V této části vezmeme galculator, jednoduchou aplikaci pro kalkulačku a vytvoříme ji s flatpak-builder . Musíme provést malou analýzu, abychom zjistili, které soubory je třeba přejmenovat nebo smazat. Jako první krok tedy provedeme zkušební instalaci. Poté můžeme manifest sestavit podle potřeby.

Vzhledem k tomu, že galculator je aplikace GTK, použijeme běhové prostředí Gnome a SDK. Měli byste je nainstalovat nyní, pokud jste tak ještě neučinili. Kromě toho byste si odtud měli stáhnout zdrojový archiv. (Použili jsme verzi 2.1.4, což je nejnovější verze v době psaní tohoto článku.)

Nalezení souborů, které by měly být exportovány/smazány

Jakmile stáhnete a rozbalíte zdrojový archiv, měli byste ho zkusit sestavit pomocí SDK. Gnome SDK také obsahuje nástroje jako bash, takže to můžete spustit pomocí:

flatpak run --command=bash --filesystem=host --devel org.gnome.Sdk/x86_64/3.24

Nyní se přesuňte do zdrojového adresáře galculatoru a použijte k jeho sestavení běžné zaklínadlo. Náš adresář prefixů nastavíme na ~/galculator-test .

./configure --prefix=$HOME/galculator-test
make install

Nyní můžete prozkoumat soubory v galculator-test adresář. Jak pravděpodobně víte, je třeba exportovat následující soubory:

  • Informace AppStream v share/appdata/galculator.appdata.xml
  • Ikony v share/icons
  • Položka na ploše v share/applications/galculator.desktop

Bohužel nemají předponu s názvem aplikace. Proto je musíte v manifestu přejmenovat pomocí následujících vlastností:

{
	"rename-appdata-file": "galculator.appdata.xml",
	"rename-icon": "galculator",
	"rename-desktop-file": "galculator.desktop"
}

Jakmile jsou tyto soubory přejmenovány, flatpak-builder automaticky je exportuje. Jakmile je balíček Flatpak sestaven, pomůže to při vytváření položek menu v základním systému.

Kromě toho share/man a share/pixmaps adresáře nejsou nutné, takže je můžete odstranit pomocí:

{
    "cleanup": [
        "/share/man",
        "/share/pixmaps"
    ]
}

Konfigurace izolovaného prostoru

Protože se jedná o aplikaci GTK, musíte jí povolit přístup k X11 a Wayland a sdílet mechanismy IPC. Musíte mu také povolit použití vykreslování OpenGL. Kromě toho potřebuje galculator přístup k dconf a vy musíte přidat položky, o kterých jsme hovořili dříve. Přepínače, které by byly předány build-finish jsou uvedeny v finish-args vlastnost v manifestu:

{
    "finish-args": [
        "--share=ipc",
        "--socket=x11",
        "--socket=wayland",
        "--device=dri",
        "--filesystem=xdg-run/dconf",
        "--filesystem=~/.config/dconf:ro",
        "--talk-name=ca.desrt.dconf",
        "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
    ]
}

Dokončení manifestu

V tomto okamžiku jste nakonfigurovali většinu důležitých částí manifestu. Konfigurace zbytku by měla být poměrně snadná a konečný manifest, který jsme použili, je zde. Přidali jsme sadu build-options , který nastaví CFLAGS a CXXFLAGS na -O3 .

Sestavení a testování aplikace

Konečně můžeme sestavit aplikaci. Jednoduše spusťte flatpak-builder s adresářem sestavení a manifestem. V tomto příkladu galculator je adresář sestavení a org.mnim.galculator.json je soubor manifestu.

flatpak-builder galculator org.mnim.galculator.json

Dále jej exportujte do úložiště jako dříve:

flatpak build-export my-repo galculator

Nyní můžete aplikaci vyzkoušet instalací:

flatpak install --user test-repo org.mnim.galculator

Aplikace je okamžitě nainstalována a dokonce získáte záznamy na ploše jako běžná aplikace! Můžete jej spustit ze záznamu v nabídce nebo jej spustit pomocí flatpak run jako jsme to udělali dříve.

Distribuce aplikací

Nyní, když jste vytvořili aplikaci, jak postupujete při její distribuci? Nejjednodušší způsob, jak toho dosáhnout, je přenést adresář úložiště na server a poskytnout jej přes web. Poté můžete požádat uživatele, aby přidali vaše úložiště do svého seznamu a instalovali aplikace tímto způsobem.

Mnoho lidí dává přednost instalaci softwaru podepsaného pomocí GPG, protože to dokazuje, že aplikace skutečně pochází od původního správce. Klíče GPG můžete snadno vytvořit pomocí gpg2 příkaz:

gpg2 --quick-key-gen [email protected]

Nezapomeňte si poznamenat ID klíče, protože jej budete později potřebovat. V našem příkladu budeme předpokládat, že ID klíče je A318C188C20D410A .

Poté můžete při spuštění build-export vytvořit úložiště podepsané GPG takhle:

flatpak build-export my-repo galculator --gpg-sign=A318C188C20D410A

Pokud máte existující nepodepsané úložiště, můžete jej podepsat takto:

flatpak build-sign my-repo --gpg-sign=A318C188C20D410A
flatpak build-update-repo my-repo --gpg-sign=A318C188C20D410A

Když chcete publikovat úložiště, nezapomeňte uživatelům poskytnout kopii veřejného klíče. Chcete-li exportovat svůj veřejný klíč, spusťte:

gpg2 --export A318C188C20D410A > public.gpg

Tento klíč byste měli zveřejnit na svém webu. Když vaši uživatelé chtějí přidat vaše úložiště, měli by si stáhnout veřejný klíč. Pokud si uživatel stáhl klíč s názvem public.gpg , mohou nyní přidat úložiště spuštěním:

flatpak remote-add --gpg-import=public.gpg test-repo https://software.example.com/repo/

Tato metoda je však pro uživatele extrémně nepohodlná. Naštěstí můžete tento proces zjednodušit vytvořením souborů flatpakref a flatpakrepo, které jsou podrobně popsány v dokumentaci.

Závěr

V tomto článku jsme se dozvěděli o Flatpak a o tom, jak můžete distribuovat software pomocí této nové technologie. Je více zaměřený na zabezpečení a nabízí lepší možnosti integrace a aktualizace ve srovnání s tradičními metodami, jako je AppImage.

Pokud si chcete přečíst více o tomto tématu, dokumentaci pro vývojáře a flatpak-manifest manuálová stránka jsou dobrá místa pro začátek. Pokud si chcete přečíst složitější příklady souborů manifestů/flatpakref, podívejte se na úložiště Gnome-apps a příklady Flathub.


Ubuntu
  1. Flatpak na Linuxu:Co to je a jak s ním instalovat aplikace

  2. Jak spouštět aplikace se zpožděním v systému Linux

  3. Můžete vyvíjet aplikace pro Linux pomocí Xamarin?

  1. Instalujte aplikace na Linux pomocí Flatpak

  2. Nainstalujte Linux pomocí LVM

  3. Nahradit du prachem v Linuxu

  1. Nejlepší fotografické aplikace pro Linux

  2. Linux Source Command s příklady

  3. wc Linux Command s příklady