È stata pubblicata una nuova versione stabile dell'insieme di strumenti Flatpak 1.14, che fornisce un sistema per la creazione di pacchetti autosufficienti, non legati a distribuzioni specifiche di Linux e eseguiti in un contenitore speciale che isola l'applicazione dal resto del sistema. Il supporto per l'esecuzione di pacchetti Flatpak è garantito per Arch Linux, CentOS, Debian, Fedora, Gentoo, Mageia, Linux Mint, Alt Linux e Ubuntu. I pacchetti Flatpak sono inclusi nel repository di Fedora e supportati nella programmazione di gestione delle applicazioni GNOME.
Novità principali della versione Flatpak 1.14:
- È stata abilitata la creazione di una directory per i file di stato (.local/state) e impostata la variabile d'ambiente XDG_STATE_HOME che punta a questa directory.
- Sono state aggiunte verifiche condizionali del tipo «have-kernel-module-nome» per determinare la presenza di moduli del kernel (equivalente universale alla precedente verifica have-intel-gpu, ora sostituibile con l'espressione «have-kernel-module-i915»).
- È stato implementato il comando «flatpak document-unexport —doc-id=…».
- È stato garantito l'esportazione dei metadati Appstream per l'uso nell'ambiente principale.
- Sono state aggiunte regole di completamento automatico dei comandi flatpak per la shell Fish.
- È stato consentito l'accesso di rete ai servizi X11 e PulseAudio (aggiungendo le relative impostazioni).
- Il ramo principale nel repository Git è stato rinominato da «master» a «main», poiché la parola «master» è considerata non politicamente corretta di recente.
- È stata garantita la riscrittura degli script di avvio in caso di rinominazione dell'applicazione.
- Nel comando install sono state aggiunte le opzioni «—include-sdk» e «—include-debug» per l'installazione di SDK e file debuginfo.
- Nei file flatpakref e flatpakrepo è stato aggiunto il supporto per il parametro «DeploySideloadCollectionID», che, al momento dell'installazione, imposterà l'identificativo della collezione al momento dell'aggiunta del repository remoto, piuttosto che dopo il caricamento dei metadati.
- È stato consentito di creare ambienti sandbox nidificati per i gestori in sessioni con nomi MPRIS (Media Player Remote Interfacing Specification) distinti.
- Nelle utility della riga di comando è stata garantita la visualizzazione delle informazioni sull'uso delle runtime-extension obsolete.
- Nel comando uninstall è stata implementata una richiesta di conferma prima di eliminare runtime o runtime-extension attualmente in uso.
- Nei comandi come «flatpak run» è stata aggiunta la supporto per l'opzione «—socket=gpg-agent».
- In libostree è stata risolta una vulnerabilità che poteva consentire a un utente di eliminare file arbitrari nel sistema tramite manipolazioni dell'helper flatpak-system-helper (inviando una richiesta di eliminazione con un nome di ramo appositamente formattato). Il problema si manifesta solo nelle vecchie versioni di Flatpak e libostree, rilasciate prima del 2018 (< 0.10.2), e non colpisce le versioni attuali.
Ricordiamo che Flatpak offre agli sviluppatori di applicazioni la possibilità di semplificare la distribuzione dei propri programmi, che non sono inclusi nei repository ufficiali delle distribuzioni, preparando un unico contenitore universale senza la necessità di creare versioni separate per ciascuna distribuzione. Per gli utenti preoccupati per la sicurezza, Flatpak consente di eseguire applicazioni sospette in un contenitore, fornendo accesso solo alle funzioni di rete e ai file dell'utente correlati all'applicazione. Gli utenti interessati alle novità possono installare le versioni più recenti di applicazioni in fase di test e stabili senza dover apportare modifiche al sistema. Ad esempio, i pacchetti Flatpak sono disponibili per LibreOffice, Midori, GIMP, Inkscape, Kdenlive, Steam, 0 A.D., Visual Studio Code, VLC, Slack, Skype, Telegram Desktop, Android Studio, e molti altri.
Per ridurre la dimensione del pacchetto, include solo le dipendenze specifiche per l'applicazione, mentre le librerie di sistema e grafiche di base (GTK, Qt, librerie GNOME e KDE, ecc.) sono fornite come runtime di base modulari. La principale differenza tra Flatpak e Snap è che Snap utilizza i componenti dell'ambiente del sistema principale e l'isolamento basato sulla filtrazione delle chiamate di sistema, mentre Flatpak crea un contenitore separato dal sistema e opera con ampie collezioni di runtime, fornendo come dipendenze non pacchetti, ma ambienti di sistema modulari (ad esempio, tutte le librerie necessarie per il funzionamento dei programmi GNOME o KDE).
Oltre all'ambiente di sistema standard (runtime), installato tramite un repository dedicato, vengono fornite dipendenze aggiuntive (bundle) necessarie per il funzionamento dell'applicazione. Insieme, runtime e bundle costituiscono il contenuto del contenitore, poiché il runtime è installato separatamente e può essere legato a più contenitori, evitando così la duplicazione dei file di sistema comuni. In un sistema possono essere installati diversi runtime (GNOME, KDE) o più versioni dello stesso runtime (GNOME 3.40, GNOME 3.42). Un contenitore con un'applicazione come dipendenza utilizza il legame solo a un determinato runtime, senza considerare i pacchetti separati di cui è composto il runtime. Tutti gli elementi mancanti vengono confezionati direttamente insieme all'applicazione. Durante la creazione del contenitore, il contenuto del runtime è montato come la partizione /usr, mentre il bundle è montato nella directory /app.
La configurazione del runtime e dei contenitori delle applicazioni avviene tramite la tecnologia OSTree, che consente di aggiornare l'immagine in modo atomico da un repository simile a Git, permettendo l'applicazione di metodi di controllo versione ai componenti della distribuzione (ad esempio, è possibile ripristinare rapidamente il sistema a uno stato precedente). I pacchetti RPM vengono trasmessi al repository OSTree tramite un'apposita interfaccia chiamata rpm-ostree. L'installazione e l'aggiornamento dei pacchetti all'interno dell'ambiente di lavoro non sono supportati; il sistema viene aggiornato non a livello di singoli componenti, ma in modo completo, cambiando il proprio stato in modo atomico. Sono forniti strumenti per l'applicazione incrementale degli aggiornamenti, evitando la necessità di una sostituzione totale dell'immagine ad ogni aggiornamento.
L'ambiente isolato viene creato in modo completamente indipendente dal sistema operativo utilizzato e, con le impostazioni di pacchetto appropriate, non ha accesso ai file e ai processi dell'utente o del sistema principale; non può accedere direttamente all'hardware, tranne per l'output tramite DRI e le chiamate al sottosistema di rete. L'output grafico e l'organizzazione dell'input sono implementati tramite il protocollo Wayland o attraverso il forwarding del socket X11. L'interazione con l'ambiente esterno è basata sul sistema di messaggistica DBus e su una API speciale, Portals.
Per l'isolamento si utilizza un layer Bubblewrap e le tradizionali tecnologie di virtualizzazione dei contenitori di Linux, basate su cgroups, spazi dei nomi (namespaces), Seccomp e SELinux. Per l'uscita audio viene utilizzato PulseAudio. In questo caso, l'isolamento può essere disabilitato, una pratica adottata dagli sviluppatori di molti pacchetti popolari per ottenere accesso completo al filesystem e a tutti i dispositivi nel sistema. Ad esempio, pacchetti come GIMP, VSCodium, PyCharm, Octave, Inkscape, Audacity e VLC sono forniti con una modalità di isolamento limitata che lascia accesso completo alla directory home. In caso di compromissione dei pacchetti con accesso alla directory home, nonostante la presenza dell'etichetta «sandboxed» nella descrizione del pacchetto, per l'attaccante è sufficiente modificare il file ~/ .bashrc per eseguire il proprio codice. Un'altra questione è il controllo sulle modifiche ai pacchetti e la fiducia nei costruttori di pacchetti, che spesso non sono legati al progetto principale o alle distribuzioni.
Fonte: opennet.ru
