Kdysi dávno distribuce Linuxu dodávala operační systém spolu se všem pro něj dostupný software. Neexistoval žádný koncept softwaru „třetí strany“, protože vše bylo součástí distribuce. Aplikace nebyly ani tak nainstalovány, ale byly povoleny z velkého velkého softwarového úložiště, které jste získali na jedné z mnoha disket nebo později na CD, které jste si zakoupili nebo stáhli.
To se vyvinulo v něco ještě pohodlnějšího, když se internet stal všudypřítomným a zrodil se koncept toho, co je nyní „obchod s aplikacemi“. Distribuce Linuxu tomu samozřejmě obvykle říkají softwarové úložiště nebo jen repo zkráceně s některými variantami pro „značku“, jako je Ubuntu Software Center nebo s typickým minimalismem GNOME jednoduše Software .
Tento model fungoval dobře v době, kdy byl software s otevřeným zdrojovým kódem ještě novinkou a počet aplikací s otevřeným zdrojovým kódem byl spíše číslem než teoretickým číslo. V dnešním světě GitLab a GitHub a Bitbucket (a mnoha mnoha dalších) je stěží možné spočítat počet projektů s otevřeným zdrojovým kódem, natož pak je zabalit do úložiště. Žádná distribuce Linuxu dnes, dokonce ani Debian a jeho impozantní skupina správců balíčků, nemůže tvrdit nebo doufat, že bude mít balíček pro každý instalovatelný open source projekt.
Linuxový balíček samozřejmě nemusí být v úložišti, aby se dal nainstalovat. Každý programátor může zabalit svůj software a distribuovat jej ze svých vlastních webových stránek. Protože jsou však úložiště považována za nedílnou součást distribuce, neexistuje univerzální formát balení, což znamená, že programátor se musí rozhodnout, zda vydá .deb
nebo .rpm
, nebo sestavení skriptu AUR, nebo balíčku Nix nebo Guix, nebo skriptu Homebrew, nebo jen většinou generického .tgz
archiv pro /opt
. Je to zdrcující pro vývojáře, který žije a dýchá Linux každý den, natož pro vývojáře, který se snaží vynaložit maximální úsilí na podporu bezplatného a open source cíle.
Proč Flatpak?
Projekt Flatpak poskytuje univerzální formát balení spolu s decentralizovanými prostředky distribuce, navíc přenositelnost a sandboxing.
- Univerzální Nainstalujte si systém Flatpak a můžete spouštět Flatpak bez ohledu na vaši distribuci. Není potřeba žádný démon ani systemd. Stejný Flatpak běží na Fedoře, Ubuntu, Mageia, Pop OS, Arch, Slackware a dalších.
- Decentralizované Vývojáři mohou vytvářet a podepisovat své vlastní balíčky a úložiště Flatpak. Neexistuje žádný repozitář pro petici, aby byl balíček zahrnut.
- Přenositelnost Pokud máte ve svém systému Flatpak a chcete jej předat příteli, aby mohl spustit stejnou aplikaci, můžete Flatpak exportovat na USB flash disk.
- V izolovaném prostoru Flatpaks používají model založený na kontejnerech, který umožňuje existenci více verzí knihoven a aplikací v jednom systému. Ano, můžete si snadno nainstalovat nejnovější verzi aplikace k otestování a zároveň zachovat starou verzi, na kterou spoléháte.
Sestavení Flatpak
Chcete-li sestavit Flatpak, musíte nejprve nainstalovat Flatpak (subsystém, který vám umožňuje používat balíčky Flatpak) a aplikaci Flatpak-builder.
Na Fedoře, CentOS, RHEL a podobných:
$ sudo dnf install flatpak flatpak-builder
Na Debianu, Ubuntu a podobných:
$ sudo apt install flatpak flatpak-builder
Musíte také nainstalovat vývojové nástroje potřebné k sestavení aplikace, kterou balíte. Vzhledem k povaze vývoje aplikace, kterou nyní balíte, můžete mít již nainstalované vývojové prostředí, takže si možná nevšimnete, že jsou tyto komponenty vyžadovány, ale pokud začnete vytvářet Flatpaky pomocí Jenkins nebo z kontejnerů, musíte zajistit, aby vaše nástroje pro vytváření jsou součástí vašeho řetězce nástrojů.
U prvního příkladu sestavení tento článek předpokládá, že vaše aplikace používá GNU Autotools, ale samotný Flatpak podporuje další systémy sestavení, jako je cmake
, cmake-ninja
, mezon
, ant
, stejně jako vlastní příkazy (jednoduché
sestavení systému, v terminologii Flatpak, ale v žádném případě to neznamená, že samotné sestavení je ve skutečnosti jednoduché).
Adresář projektu
Na rozdíl od přísné infrastruktury sestavení RPM Flatpak neukládá strukturu adresářů projektu. Dávám přednost vytváření adresářů projektů na základě dist balíčky softwaru, ale neexistuje žádný technický důvod, proč byste místo toho nemohli integrovat proces sestavení Flatpak se zdrojovým adresářem. Technicky je jednodušší postavit Flatpak ze svého vzdálenosti balíček a je to také jednodušší demo, takže tento model používá tento článek. Nastavte adresář projektu pro GNU Hello, který bude sloužit jako váš první Flatpak:
$ mkdir hello_flatpak
$ mkdir src
Stáhněte si svůj distribuovatelný zdroj. V tomto příkladu je zdrojový kód umístěn na adrese https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
.
$ cd hello_flatpak
$ wget https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
Manifest
Linuxový terminál
- 7 nejlepších emulátorů terminálu pro Linux
- 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
- Stáhnout nyní:SSH cheat sheet
- Cheat sheet pro pokročilé příkazy systému Linux
- Výukové programy příkazového řádku systému Linux
Flatpak je definován manifestem, který popisuje, jak sestavit a nainstalovat aplikaci, kterou dodává. Manifest je atomární a reprodukovatelný. Flatpak však existuje v kontejneru „sandbox“, takže manifest je založen na většinou prázdném prostředí s voláním kořenového adresáře /app
.
První dva atributy jsou ID aplikace, kterou balíte, a příkaz, který poskytuje. ID aplikace musí být jedinečné pro aplikaci, kterou balíte. Kanonický způsob formulování jedinečného ID spočívá v použití trojité hodnoty sestávající z entity zodpovědné za kód následované názvem aplikace, například org.gnu.Hello
. Příkaz poskytovaný aplikací je to, co zadáte do terminálu pro spuštění aplikace. To neznamená, že aplikace je určena ke spouštění z terminálu namísto z .desktop
soubor v nabídce Aktivity nebo Aplikace.
V souboru s názvem org.gnu.Hello.yaml
, zadejte tento text:
id: org.gnu.Hello
command: hello
Manifest lze napsat v YAML nebo JSON. Tento článek používá YAML.
Dále musíte definovat každý „modul“ dodávaný tímto balíčkem Flatpak. Modul si můžete představit jako závislost nebo komponentu. Pro GNU Hello existuje pouze jeden modul:GNU Hello. Složitější aplikace mohou vyžadovat specifickou knihovnu nebo zcela jinou aplikaci.
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
path: src/hello-2.10.tar.gz
systém sestav
hodnota určuje, jak musí Flatpak modul sestavit. Každý modul může používat svůj vlastní systém sestavení, takže jeden Flatpak může mít definováno několik systémů sestavení.
bez autogenu
value říká Flatpaku, aby nespouštěl instalační příkazy pro autotools
, které nejsou nutné, protože zdrojový kód GNU Hello je produktem make dist
. Pokud kód, který vytváříte, není ve snadno sestavitelné podobě, možná budete muset nainstalovat autogen
a autoconf
připravit zdroj pro autotools
. Tato možnost se vůbec nevztahuje na projekty, které nepoužívají autotools
.
typ
value sděluje Flatpak, že zdrojový kód je v archivu, který před vytvořením spouští požadované úlohy unarchivace. cesta
ukazuje na zdrojový kód. V tomto příkladu zdroj existuje v src
adresář na vašem místním sestavení, ale můžete místo toho definovat zdroj jako vzdálené umístění:
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
url: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
Nakonec musíte definovat platformu potřebnou pro spuštění a sestavení aplikace. Správci Flatpak dodávají runtime a sady SDK, které zahrnují běžné knihovny, včetně freedesktop
, gnome
a kde
. Základním požadavkem je freedesk
runtime a SDK, i když to může být nahrazeno GNOME nebo KDE, v závislosti na tom, co váš kód potřebuje ke spuštění. Pro tento příklad GNU Hello jsou vyžadovány pouze základy.
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
Celý manifest GNU Hello flatpak:
id: org.gnu.Hello
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
command: hello
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
path: src/hello-2.10.tar.gz
Sestavení Flatpak
Nyní, když je balíček definován, můžete jej sestavit. Proces sestavení vyzve Flatpak-builder, aby analyzoval manifest a vyřešil každý požadavek:zajistí, aby byly k dispozici potřebné platformy a SDK (pokud nejsou, budete je muset nainstalovat pomocí flatpak příkaz), zruší archivaci zdrojového kódu a spustí
buildsystem
specifikováno.
Příkaz ke spuštění:
$ flatpak-builder build-dir org.gnu.Hello.yaml
Adresář build-dir
se vytvoří, pokud již neexistuje. Název build-dir
je libovolný; můžete to nazvat build
nebo bld
nebo tučňák
a ve stejném adresáři projektu můžete mít více než jeden cíl sestavení. Nicméně výraz build-dir
je častá hodnota používaná v dokumentaci, takže její použití jako doslovné hodnoty může být užitečné.
Testování aplikace
Svou aplikaci můžete otestovat před nebo po sestavení spuštěním příkazu build spolu s --run
a ukončete příkaz příkazem, který poskytuje Flatpak:
$ flatpak-builder --run build-dir \
org.gnu.Hello.yaml hello
Hello, world!
Balení aplikací GUI pomocí Flatpak
Balení jednoduchého samostatného ahoj světe aplikace je triviální a naštěstí není sbalit GUI aplikaci o moc těžší. Nejobtížněji se balí aplikace, které se nespoléhají na běžné knihovny a rámce (v kontextu balení „společné“ znamená cokoliv ne již zabalené někým jiným). Komunita Flatpak poskytuje sady SDK a rozšíření SDK pro mnoho komponent, které byste si jinak museli zabalit sami. Například při balení čisté Java implementace pdftk
, používám rozšíření OpenJDK SDK, které jsem našel v úložišti Flatpak Github:
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.openjdk11
Komunita Flatpak dělá spoustu práce na základech potřebných pro běh aplikací, aby vývojářům usnadnil proces balení. Například hra Kblocks z komunity KDE vyžaduje ke spuštění platformu KDE, která je již dostupná z Flatpak. Další libkdegames
knihovna není zahrnuta, ale je stejně snadné ji přidat do seznamu modulů
jako kblocks
sám.
Zde je manifest pro hru Kblocks:
id: org.kde.kblocks
command: kblocks
modules:
- buildsystem: cmake-ninja
name: libkdegames
sources:
type: archive
path: src/libkdegames-19.08.2.tar.xz
- buildsystem: cmake-ninja
name: kblocks
sources:
type: archive
path: src/kblocks-19.08.2.tar.xz
runtime: org.kde.Platform
runtime-version: '5.13'
sdk: org.kde.Sdk
Jak vidíte, manifest je stále přímočarý a relativně intuitivní. Systém sestavení je odlišný a běhové prostředí a SDK odkazují na KDE místo na Freedesktop, ale struktura a požadavky jsou v zásadě stejné.
Protože se však jedná o aplikaci s grafickým uživatelským rozhraním, jsou vyžadovány některé nové možnosti. Nejprve potřebuje ikonu, aby když je uvedena v nabídce Aktivity nebo Aplikace, vypadala hezky a byla rozpoznatelná. Kblocks obsahuje ikonu ve svých zdrojích, ale názvy souborů exportovaných Flatpakem musí mít předponu pomocí ID aplikace (například org.kde.Kblocks.desktop
). Nejjednodušší způsob, jak to udělat, je přejmenovat soubor přímo ve zdroji aplikace, což Flatpak může udělat za vás, pokud do manifestu zahrnete tuto direktivu:
rename-icon: kblocks
Dalším jedinečným rysem GUI aplikací je, že často vyžadují integraci s běžnými desktopovými službami, jako je samotný grafický server (X11 nebo Wayland), zvukový server, jako je Pulse Audio, a podsystém Inter-Process Communication (IPC).
V případě Kblocks jsou požadavky:
finish-args:
- --share=ipc
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --device=dri
- --filesystem=xdg-config/kdeglobals:ro
Zde je konečný, úplný manifest využívající adresy URL zdrojů, abyste si to mohli snadno vyzkoušet na svém vlastním systému:
command: kblocks
finish-args:
- --share=ipc
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --device=dri
- --filesystem=xdg-config/kdeglobals:ro
id: org.kde.kblocks
modules:
- buildsystem: cmake-ninja
name: libkdegames
sources:
- sha256: 83456cec44502a1f79c0be00c983090e32fd8aea5fec1461fbfbd37b5f8866ac
type: archive
url: https://download.kde.org/stable/applications/19.08.2/src/libkdegames-19.08.2.tar.xz
- buildsystem: cmake-ninja
name: kblocks
sources:
- sha256: 8b52c949e2d446a4ccf81b09818fc90234f2f55d8722c385491ee67e1f2abf93
type: archive
url: https://download.kde.org/stable/applications/19.08.2/src/kblocks-19.08.2.tar.xz
rename-icon: kblocks
runtime: org.kde.Platform
runtime-version: '5.13'
sdk: org.kde.Sdk
Chcete-li sestavit aplikaci, musíte mít nainstalovanou platformu KDE a SDK Flatpaks (verze 5.13 v době psaní tohoto článku). Jakmile je aplikace vytvořena, můžete ji spustit pomocí --run
metodu, ale abyste viděli ikonu aplikace, musíte ji nainstalovat.
Distribuce a instalace vytvořeného Flatpak
Distribuce flatpaků probíhá prostřednictvím repozitářů.
Své aplikace můžete uvést na Flathub.org, komunitním webu myšleném technicky decentralizované (ale v duchu centrální) umístění pro Flatpaks. Chcete-li odeslat svůj Flatpak, umístěte svůj manifest do úložiště Git a odešlete žádost o stažení na Github.
Případně si můžete vytvořit své vlastní úložiště pomocí flatpak build-export
příkaz.
Můžete také nainstalovat pouze lokálně:
$ flatpak-builder --force-clean --install build-dir org.kde.Kblocks.yaml
Po instalaci otevřete nabídku Aktivity nebo Aplikace a vyhledejte Kblocks.
Další informace
Dokumentační stránka Flatpak obsahuje dobrý návod, jak vytvořit svůj první Flatpak. Stojí za přečtení, i když jste sledovali tento článek. Kromě toho dokumenty poskytují podrobnosti o dostupných platformách a sadách SDK.
Pro ty, kteří se rádi učí z příkladů, existují manifesty pro každou aplikaci k dispozici na Flathub.
Zdrojů pro vytváření a používání Flatpaků je spousta a Flatpak spolu s kontejnery a aplikacemi v izolovaném prostoru jsou pravděpodobně budoucností, takže se s nimi seznamte, začněte je integrovat do svých kanálů Jenkins a užijte si snadné a univerzální balení aplikací pro Linux.