[Linux] A Flatpak

Áttekintjük az elméleti alapjait és az alapvető parancssori működést valamint néhány hasznos alkalmazást.

Gyakorlati alkalmazás

Telepítés

Flatpak csomagok használatához elsősorban a flatpak parancssori eszközre van szükségünk. Ezt szokás szerint a disztribúciónk csomagkezelőjével telepíthetjük. Debian, Ubuntu és Ubuntu-alapú rendszerek esetén például így:
sudo apt install flatpak

Ha a Gnome Software programot használjuk, ahhoz is hozzáadhatjuk a Flatpak támogatást:
sudo apt install gnome-software-plugin-flatpak

Illetve ha KDE Discovert használunk, abban az esetben ahhoz:
sudo apt install plasma-discover-backend-flatpak

És végül, ha szeretnénk, hozzáadhatjuk a Flathub repót a rendszerünkhöz:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Nagyon sok disztróban (pl. Linux Mintben, Fedorában, OpenSuse-ban) alapértelmezetten telepítve van a flatpak csomag. Ilyen esetben csak adjuk hozzá azt a repót, amelyiket szeretnénk. Egyed disztrók (pl. a Fedora) saját Flatpak repóval is rendelkeznek.

A Flathub biztosít egy mini telepítési útmutatót a népszerűbb disztrókhoz: https://flathub.org/setup

Csomagok azonosítása

Flatpak esetén minden csomagot az ún. reverse domain name notation (reverse DNS) módszerrel azonosítunk. Ezt azt jelenti, hogy a csomagok nevei a fejlesztő domain nevéből, és az alkalmazás nevéből állnak, fordított sorrendben, pl.:
com.spotify.Client
de.haeckerfelix.Shortwave
org.gimp.GIMP
org.gnome.Connections

Ez biztosítja, hogy még véletlenül se létezhessen két azonos nevű alkalmazás.

Telepítés

Ha telepíteni szeretnénk egy alkalmazást, így tudjuk megtenni:

flatpak install <név>

Pl. flatpak install org.gimp.GIMP

Ha hozzácsapjuk a --user (-u) kapcsolót, akkor felhasználószintű telepítés jön létre. Pl.:
flatpak install --user org.gimp.GIMP

Ez csak akkor használható, ha előzőleg már felhasználó szinten is felvettük az adott repót, tehát nem elég, ha rendszerszinten fel van véve.
A flatpak újabb verziói annyi könnyítést engednek, hogy nem kell kiírnunk a teljes nevet, elég csak egy részletét, pl.
flatpak install gimp

Ha több találat is van a 'gimp' szóra, a rendszer megkérdezi, melyiket szeretnénk telepíteni, illetve ha több repozitórium is fel van véve, akkor a rendszer azt is megkérdezi, hogy melyikből telepítse.

Telepített alkalmazásainkat a flatpak list paranccsal tudjuk kilistázni:

flatpak list

Ha csak a runtime-okat szeretnék kilistázni, akkor tegyük hozzá a --runtime kapcsolót, ha pedig csak az alkalmazásokat, akkor az --app kapcsolót. Itt is működik az, ami a legtöbb flatpak parancsnál, hogy ha a --user kapcsolót tesszük hozzá, akkor csak a felhasználószintű telepítéseket látjuk, ha pedig a --system kapcsolót, akkor csak a rendszerszintűeket.
Egy alkalmazást futtatni pedig így tudunk:

flatpak run <teljes név>
Pl. flatpak run org.gimp.GIMP

Itt viszont már nem kapjuk meg azt a könnyítést, amit a telepítésnél, kénytelenek vagyunk kiírni az alkalmazás teljes nevét.
A flatpak ps parancssal megtekinthetjük az éppen futó Flatpak alkalmazásokat, a flatpak kill <teljes név> paranccsal pedig le is állíthatunk egy futó alkalmazást.


Ha egy repó rendszerszinten és felhasználószinten is fel van véve, akkor a Flatpak megkérdezi, melyikből telepítse a programot. Ha egy keresőszóra több találat is van, akkor felajánlja az összes találatot. Végül megmutatja a csomag által igényelt jogosultságokat, és hogy mely másik csomagokat (runtime-okat) fogja még feltelepíteni

Mint ahogy korábban írtam, mindig ellenőrizzük le a telepíteni kívánt alkalmazás jogosultságait! Szerencsére a Flathub is, és a gyakran használt grafikus csomagkezelők is nyújtanak erre lehetőséget. A Flathub külön szekcióban jelzi, hogy az alkalmazás potenciálisan veszélyes lehet:

Ha ide kattintunk, láthatjuk, hogy milyen jogosultságokat igényel az alkalmazás:

A Home folder read/write access jogosultság azt jelenti, hogy az adott alkalmazás írni és olvasni is tudja a teljes /home könyvtárunkat! Ha ezt nem szeretnénk megengedni neki, a Flatseal programmal (vagy paranccsorban) könnyen letilthatjuk ezt a jogosultságot.

Arra is érdemes odafigyelnünk, hogy az alkalmazás státusza Ellenőrzött (kék plecsniben sötét pipa) vagy nem ellenőrzött (unverified). Az ellenőrzött azt jelenti, hogy az alkalmazást annak fejlesztője, vagy a fejlesztő által meghatalmazott személy töltötte fel a Flathubra (és nem hitelesítetlen harmadik fél). Lehetőség szerint csak ellenőrzött alkalmazásokat használjunk, vagy ha mindenképp unverified alkalmazást szeretnénk telepíteni, ellenőrizzük az alkalmazás manifest fájlját (lásd lejjebb)!

Célszerű megnéznünk még azt is, hogy milyen licenccel rendelkezik az adott alkalmazás. A Proprietary (tulajdonosi) licenc azt jelenti, hogy a szoftver tulajdonosa szigorúan szabályozza a szoftver felhasználását, terjesztését és módosítását. Ez a licenc általában megtiltja vagy jelentősen korlátozza a forráskódhoz való hozzáférést (zárt forráskód) és a szoftver szabad módosítását.
A Community built (közösségileg készítve) licenc viszont olyan licenctípusokat takar, amelyek megengedik a forráskód terjesztését (nyílt forráskód), módosítását, újrafelhasználását (bizonyos megkötésekkel). Amikor csak lehet, ez utóbbit részesítsük előnyben!


Példa egy tulajdonosi és két közösségi licenctípusra.

Valamint van még egy dolog, amire érdemes odafigyelnünk. A Flathubon is szerepel, valamint a parancssoros telepítős és a grafikus telepítő is jelzi, ha olyan alkalmazást szeretnénk telepíteni, ami elavult, már nem karbantartott runtime-ot használ (Uses an end-of-life runtime):

Az ilyen alkalmazásokat ne telepítsük fel, mert biztonsági kockázatot jelentenek! A csomag karbantartójának feladata a program frissítése az aktuális runtime-ra.

Tipp: előfordulhat olyan, hogy egy alkalmazáshoz szükséges runtime-ot törlünk, ilyenkor az alkalmazás nem fog elindulni. Ez esetben egyszerűen csak telepítsük újra az alkalmazást, magával fogja hozni az adott runtime-ot is:
flatpak install --reinstall <teljes név>

Ha az összes alkalmazásunkat szeretnénk egy lépésben újratelepíteni, így tehetjük meg:
flatpak list --app --columns=application | xargs flatpak install -y --reinstall --user

Ez felhasználószinten telepít újra minden alkalmazást, ha rendszerszinten szeretnénk, vegyük ki a --user kapcsolót.

Manifest ellenőrzése

Minden flatpak alkalmazáshoz tartozik egy manifest fájlt. Ez a fájl írja le a flatpak csomag építéséhez szükséges paramétereket (a flatpak-builder segédprogram ez alapján készíti el a csomagot).
Flathubon minden egyes alkalmazás oldalán fel van tüntetve a manifest fájlra mutató hivatkozás, a lap alján a "Links" szekcióban.

A manifest fájl JSON vagy YAML formátumú lehet. Ha rákattintunk a linkre, megnyílik a csomag tárolója, ahol meg tudjuk keresni a manifest fájlt. A fájl neve általában megegyezik az alkalmazás teljes azonosítójával, és json vagy yaml kiterjesztéssel rendelkezik. A struktúrája eltérő, attól függően, hogy JSON vagy YAML formátumú, de a paraméterek mindkét esetben ugyanazok.
Ha megkeressük a fájlban a "modules" / "sources" részt, ott láthatunk egy hivatkozást (url), amely arra a tárolóra mutat, amelyből a csomag készült. Egy példa JSON formátumú manifest fájlra:

"modules" : [
{
"name" : "inspector",
"builddir" : true,
"buildsystem" : "meson",
"sources" : [
{
"type" : "git",
"commit" : "5e3ac67e7e193bac25dc0cfb8dca7ef982cfcc0e",
"url" : "https://github.com/Nokse22/inspector"
}
]

Egy másik példa egy YML formátumú fájlra:

modules:
- name: bleach
builddir: true
no-autogen: true
cleanup:
- /share/pixmaps
sources:
- type: git
url: https://github.com/bleachbit/bleachbit.git
tag: v4.6.2
commit: f49ae456f4bf416b7d9c6e720704e69a3a3f8f80

Ha a program nyílt forráskódú, akkor a hivatkozott URL rendszerint közvetlenül a program forráskódjának tárolójára mutat. Ha zárt forráskódú, akkor pedig azokat a bináris forrásokat sorolja fel, amik alapján készült a csomag.
Egy manifest fájlban több "sources" szakasz is lehet, mindegyik fordítási egység rendelkezik egy sajáttal.

Ez alapján megbizonyosodhatunk arról, hogy a csomag valóban abból a forrásból készült, aminek mondja magát. Ez főleg unverified csomagok esetén lehet hasznos, mert így le tudjuk ellenőrizni, hogy a csomag az eredeti forrásból készült.

Törlés

Alkalmazást törölni így tudunk:

flatpak remove <teljes név>
vagy
flatpak uninstall <teljes név>

Pl.:
flatpak remove org.gimp.GIMP
flatpak uninstall org.gimp.GIMP

Frissítés

Ha csak egyetlen alkalmazást szeretnénk frissíteni, használjuk a flatpak update <teljes név> parancsot, pl.:
flatpak update org.gimp.GIMP

Ha az összes alkalmazást szeretnénk frissíteni, egyszerűen csak adjuk ki a flatpak update parancsot.
A legtöbb parancsnál használható a -y (--assumeyes) kapcsoló, ami azt eredményezi, hogy a rendszer az eldötendő kérdéseknél nem fog visszakérdezni, hanem automatikusan az igen lehetőséget fogja választani. Frissítés esetén érdemes használni, törlés esetén nem annyira.
A legtöbb szoftveráruház (Gnome Softwares, KDE Discover, stb.) a megfelelő pluginnal képes akár automatikusan is frissíteni a Flatpak alkalmazásainkat, tehát viszonylag ritkán kell parancssorban ezzel foglalkoznunk.
Egyébként a Flatpak ún. delta frissítéseket használ, ami azt jelenti, hogy nem tölti le a teljes frissítést, hanem csak a korábbi verzióhoz képest történt változásokat, emiatt a frissítések rendszerint kisebb méretűek, mint az alaptelepítések.

Információk lekérdezése egy telepített appról

Ha le szeretnénk kérdezni egy telepített app információit, használjuk a flatpak info <teljes név> parancsot, pl.:

flatpak info org.gimp.GIMP 

GNU képszerkesztő program - Képek létrehozása és fotók szerkesztése
Azonosító: org.gimp.GIMP
Hivatkozás: app/org.gimp.GIMP/x86_64/stable
Architektúra: x86_64
Ág: stable
Version: 2.10.38
License: GPL-3.0+ AND LGPL-3.0+
Eredet: flathub
Collection: org.flathub.Stable
Installation: user
Installed: 368,8 MB
Futtatókörnyezet: org.gnome.Platform/x86_64/46
Sdk: org.gnome.Sdk/x86_64/46
Kommit: 83b335255cc239e223ada842f99107d1d6ce51b511a8ae2a278005c2e2809242
Szülő: ed836c267becb833db2945b42a0a89d69e6fc122b4b5284124f20510c9602ffe
Tárgy: Update poppler and cairo modules (#355) (735387ad)
Dátum: 2024-09-14 22:36:06 +0000

Repozitóriumok kezelése

Flatpak repókat hozzáadni a flatpak remote-add paranccsal tudunk, pl.

flatpak remote-add --if-not-exists <repó neve> <távoli .flatpakref fájl>

Pl.: flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Az --if-not-exists kapcsoló biztosítja, hogy a repó csak egyszer legyen hozzáadva (ha már fel van véve, nem adja hozzá többször).
Itt is használhatjuk a --user kapcsolót, ami azt eredményezi, hogy a repó csak a saját felhasználói fiókunkhoz lesz hozzáadva.
Ha ki szeretnénk listázni a repóinkat, használjuk a flatpak remote-list parancsot, de még véletlenül se keverjük össze a flatpak remote-ls parancssal, ami az elérhető alkalmazásokat és runtime-okat listázza ki. Ha a flatpak remote-ls <tároló neve> formát használjuk, akkor csak az adott tárolóban lévő csomagokat listázza ki.

Keresés

Ha viszont meg szeretnénk keresni egy alkalmazást, ne a flatpak remote-ls a parancsot használjuk, hanem a flatpak search parancsot, pl.:
flatpak search gimp

Ez az alkalmazás összes információját (név, leírás, stb.) átfésüli, és visszadja azt az alkalmazást vagy runtime-ot, amelyik illeszkedik a keresőszóra.

Ha le szeretnénk kérni egy alkalmazás vagy runtime adatait, használjuk a flatpak remote-info parancsot, pl.:
flatpak remote-info flathub org.gnome.gedit

Repozitórium tulajdonságainak módosításához használhatjuk a flatpak remote-modify parancsot, pl.:
flatpak --user remote-modify --no-gpg-verify test-repo

Repozitóriumot eltávolítani a rendszerből pedig a flatpak remote-delete paranccsal tudunk, pl.:
flatpak remote-delete test-repo

Nagyjából ennyi tudás elég ahhoz, hogy kezelni tudjuk Flatpak alkalmazásainkat. A továbbiakban a ritkábban használt parancsokról írok pár szót.

Portál engedélyek (dinamikus engedélyek)

A flatpak permissions paranccsal ki tudjuk listázni az alkalmazásaink portáljai által használt engedélyeket (dinamikus engedélyek), de amit cserébe kapunk, abban nem lesz köszönet...
Használjuk inkább a flatpak permission-show <teljes név> formát, pl.:
flatpak permission-show org.mozilla.firefox

Itt megtekinthetjük az alkalmazás portáljai által használt engedélyeket, beleértve a fájlokat is, amiket a portálokon keresztül értünk el.
A flatpak permission-reset <teljes név> paranccsal alapértelmezettre állíthatjuk a portálok által használt engedélyeket.

A flatpak permission-set <teljes név> és flatpak permission-remove <teljes név> parancsokkal tudunk engedélyeket hozzáadni és eltávolítani, de ezen parancsok szintaktikája eléggé bonyolult, és jó eséllyel sosem fogjuk használni őket. Ha érdekel a működésik, olvassuk el a referencia dokumentációt:
https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-permission-set
https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-permission-remove

Statikus engedélyek

Mint korábban volt szó róla, a dinamikus engedélyek azok az engedélyek, amelyeket mi adunk az alkalmazásnak akkor, amikor egy portálját használjuk. Ezzel szemben a statikus engedélyek azok az engedélyek, amelyek az alkalmazással együtt érkeznek. Ezek az engedélyek futás közben nem változtathatók meg. Ha egy ilyen engedélyt adunk egy alkalmazásnak, vagy visszavonjuk tőle, az addig nem fog érvényesülni, amíg az alkalmazás teljesen le nem áll és újra nem indul.

Egy alkalmazás statikus engedélyeit a flatpak info --show-permissions <teljes név> parancssal tudjuk kilistázni, pl.:
flatpak info --show-permissions org.mozilla.firefox

vagy

flatpak info -M org.mozilla.firefox

Valami ilyesmit fogunk látni:
[Context]
shared=network;ipc;
sockets=x11;wayland;pulseaudio;fallback-x11;pcsc;cups;
devices=dri;all;
features=devel;
filesystems=xdg-download;/run/.heim_org.h5l.kcm-socket;xdg-run/speech-dispatcher:ro;
persistent=.mozilla;

[Session Bus Policy]
org.mozilla.firefox_beta.*=own
org.mozilla.firefox.*=own
org.gtk.vfs.*=talk
org.mpris.MediaPlayer2.firefox.*=own
org.a11y.Bus=talk
org.freedesktop.FileManager1=talk

[System Bus Policy]
org.freedesktop.NetworkManager=talk

[Environment]
DICPATH=/usr/share/hunspell

Ezek közül talán a legfontosabb a filesystems, itt találhatók a fájlrendszerhez megadott engedélyek. Az xdg-download a letöltések könyvtárat jelenti. Amelyik könyvtár neve után :ro szerepel, az azt jelenti, hogy csak olvasni tudja az adott könyvtárat (read only). Amelyik könyvtár után pedig :create szerepel, az azt jelenti, hogy ahhoz a könyvtárhoz van írási/olvasási joga a programnak, és létre is hozhatja az adott könyvtárat, ha az nem létezik.

Fájlrendszer jogosultságoknál nem csak könyvtárnevek szerepelhetnek, hanem a következő formák is:
host - hozzáférés a /home, /media, /opt, /run/media, /srv könyvátrakhoz és összes alkönyvtárukhoz, és azokhoz, amiket a host-os és a host-etc jogosultság biztosít
host-etc - hozzáférés az /etc könyvtárhoz
host-os - hozzáférés a /usr, /bin, /sbin, /lib{32, 64}, /etc/ld.so.cache, /etc/alternatives könyvátrakhoz
home - hozzáférés a felhasználó home könyvátárhoz (kivéve ~/.var/app)
xdg-desktop - hozzáférés a felhasználó asztal könyvtárához
xdg-documents - hozzáférés a felhasználó dokumentumok könyvtárához
xdg-download - hozzáférés a felhasználó letöltések könyvtárához
xdg-music - hozzáférés a felhasználó zenék könyvtárához
xdg-pictures - hozzáférés a felhasználó képek könyvtárához
xdg-videos- hozzáférés a felhasználó videók könyvtárához
xdg-templates - hozzáférés a felhasználó sablonok könyvtárához
xdg-cache - hozzáférés a felhasználó cache könyvtárához (~/.cache)
xdg-data - hozzáférés a felhasználó adatkönyvtárához (~/.local/share)
xdg-run/path - hozzáférés a felhasználó XDG runtime könyvtárához és alkönyvtáraihoz (/run/user/$UID/path)
xdg-public-share - hozzáférés a nyilvános megosztott könyvtárhoz

Megnézhetjük a sockets szekciót is. Az itt szereplők a következőket jelentik:

x11: engedély az X11 alrendszerhez, azaz megjeleníthet ablakokat az X11 használatával.
wayland: engedély a Wayland alrendszerhez, azaz megjeleníthet ablakokat Wayland használatával.
pulseaudio: hozzáférés a hangeszközökhöz, beleértve a bemeneteket (mikrofon), a lejátszóeszközöket, MIDI és ALSA alrendszert, stb.
fallback-x11: ha a Wayland nem érhető el, akkor az X11 legyen használva.
pcsc: hozzáférés az okoskártyákhoz.
cups: hozzáférés a nyomtatáshoz, tehát a program tud nyomtatni.

Ha részletesebben is érdekelnek a jogosultságok, keressük fel a hivatalos dokumentációt: https://docs.flatpak.org/en/latest/sandbox-permissions.html

Egy program statikus jogosultságait módosíthatjuk a flatpak override paranccsal. Ha például azt szeretnénk, hogy az adott program hozzáférjen az /etc könyvtárhoz, így tehetjük meg:
sudo flatpak override --filesystem=host-etc <teljes név>

Ahogy feljebb írtam, használhatunk általános formákat, és a :ro vagy a :create utótagokat is:
sudo flatpak override --filesystem=xdg-pictures:ro org.gimp.GIMP

Így a GIMP csak olvasni tudja a képek mappában lévő fájlokat.

Ha vissza szeretnénk vonni egy hozzáférést, a következő módon csinálhajtuk:
sudo flatpak override --nofilesystem=host-etc <teljes név>

Ha egy adott funkcióhoz szeretnénk hozzáférést adni a programnak, így tehetjük meg:
sudo flatpak override --allow=bluetooth <teljes név>

Ennek visszavonása pedig így néz ki:
sudo flatpak override --disallow=bluetooth <teljes név>

A logika a többi jogosultság esetén is hasonló. Részletekért keressük fel a hivatalos dokumentációt: https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-override

Fontos, hogy csak akkor állítsuk át egy alkalmazás jogosultságait, ha pontosan tudjuk, hogy mit csinálunk! Egyébként akár működésképtelenné is tehetjük az alkalmazást.

Egyebek

A flatpak history parancssal vissza tudjuk nézni a korábban elkövetett flatpak műveleteket.

A teljes parancssori referencia: https://docs.flatpak.org/en/latest/flatpak-command-reference.html

A cikk még nem ért véget, kérlek, lapozz!