Nella precedente guida su Linux abbiamo esplorato brevemente il panorama delle distribuzioni. In questo articolo invece approfondiremo la gestione dei pacchetti software su tale piattaforma, ovvero le modalità con cui l’utente installa e amministra le applicazioni nel proprio ambiente di lavoro. Vediamo quindi i principali gestori di pacchetti.
Come si gestiscono le applicazioni sulle distribuzioni Linux
Di base l’utente Linux ha due opzioni per ottenere il software che desidera, ovvero: i repository oppure i singoli pacchetti eseguibili scaricabili direttamente dai portali web delle case di sviluppo.
Repository e gestori di pacchetti
Nelle piattaforme proprietarie, come ad esempio Windows, gli utenti sono abituati a reperire i programmi recandosi di volta in volta sui siti delle varie software house. Su Linux invece le applicazioni vengono raccolte all’interno dei repository della distribuzione e rese accessibili tramite riga di comando oppure con un tool che offre una GUI (Graphical User Interface) maggiormente user friendly.
Un repository è sostanzialmente un deposito di eseguibili e librerie software pronti per essere installate tramite un programma chiamato package manager o gestori di pacchetti. Questa metodologia di installazione e gestione degli eseguibili ha diversi vantaggi pratici ma anche qualche svantaggio, ovvero:
Vantaggi:
- Aggiornamento centralizzato e automatizzato degli applicativi e librerie installate;
- Affidabilità del codice verificata alla fonte;
- Librerie condivise con tutto il sistema.
Svantaggi:
- Disponibilità delle nuove build non istantanea;
- Poca flessibilità nell’installazione di librerie diverse da quelle ufficiali;
- Obbligo per l’utente di abbandonare le release delle distribuzioni non più supportate.
I programmi presenti all’interno dei repository vengono caricati, e aggiornati, direttamente dal team di sviluppatori che si occupano del mantenimento del sistema Linux che abbiamo scelto di utilizzare. Inoltre prima di poter proporre l’ingresso di un nuovo pacchetto nel repository è necessario “pacchettizzarlo” seguendo delle precise linee guida.
Oltretutto i maintainer, ovvero i developer che si occupano di mantenere e aggiornare i repository ed i componenti del sistema, della distribuzione operano un controllo preventivo del codice, nel caso di applicazioni sotto licenza open source, dei diversi pacchetti prima di renderli disponibili agli utenti. Con tale maccanismo di verifica è possibile assicurare un parco software affidabile e sicuro. I repository infatti sono virtualmente inaccessibili a qualsiasi forma di software malevolo.
Numerose distribuzioni gestiscono i repository, ed i pacchetti al loro interno, suddividendoli in diversi rami di sviluppo. Cosi facendo è possibile offrire all’utente, in base alle diverse necessità, un parco software più aggiornato, ma potenzialmente meno stabile, oppure uno relativamente meno attuale ma esente dai possibili bug presenti nelle build appena rilasciate dai diversi progetti software.
Tramite questa metodologia di gestione degli applicativi è possibile anche assicurarsi che tutto il bacino di programmi installato faccia affidamento esclusivamente al set di librerie presenti nei repository. Con tale impostazione si risparmia spazio su disco e si ottengono download più rapidi.
Questo perché chi pacchettizza l’eseguibile non include al suo interno le numerose dipendenze necessarie al suo funzionamento. Queste librerie saranno infatti disponibili a parte tramite pacchetti dedicati, dunque il packet manager le va a scaricare e ad installare una singola volta, rendendole accessibili a tutte le applicazioni che ne fanno richiesta.
Ad esempio, il client Linux di Dropbox è stato scritto in Python e per essere eseguito correttamente sono necessarie anche le relative librerie di questo linguaggio di programmazione. Nel momento in cui l’utente chiede al sistema di installare tale software il gestore di pacchetti andrà prima di tutto a verificare la sua disponibilità sui repository e successivamente si assicurerà di reperire le dipendenze.
Se queste ultime sono già installate non sarà necessario riscaricarle ma il packet manager esegue semplicemente il download e configurare il singolo pacchetto del client. Nelle altre piattaforme invece i developer non di rado includono all’interno degli installer anche le dipendenze, rendendo quindi gli eseguibili più pesanti e occupando più spazio di quanto sia realmente necessario.
Tuttavia il sistema dei repository non è perfetto e ha il suo rovescio della medaglia. Infatti prima di poter accedere alle nuove release di un determinato programma è necessario attendere e che i maintainer analizzino il codice con le novità introdotte dalla casa di sviluppo o dal coder indipendente.
Le tempistiche di queste analisi variano in base alla distribuzione e alla tipologia dell’applicazione. Solitamente le utility ed i piccoli tool hanno tempi di verifica più rapidi mentre software più complessi, come ad esempio i driver o le release del kernel Linux, possono impiegarci anche diverse settimane per raggiungere i rami più stabili.
Senza contare che una gestione delle librerie cosi centralizzata e rigida comporta una serie di compromessi. Nel caso l’utente abbia la necessità di installare delle specifiche librerie da una fonte esterna ai repository si dovranno non solo rimuovere quelle già installate ma anche i rispettivi pacchetti che dipendono da esse.
Inoltre non appena termina il periodo di supporto di una determinata release della distribuzione i repository correlati vengono dismessi, costringendo di fatto l’utente ad eseguire un upgrade completo del proprio ambiente di lavoro.
Sistemi di pacchetti eseguibili
Nel mondo Linux i repository sono sicuramente il sistema maggiormente utilizzato per reperire e gestire i software. Tuttavia da diversi anni esistono delle valide alternative. Si tratta di formati di pacchetti concettualmente molto simili a quelli che si usano su Windows o MacOS. I più gettonati dalla community sono gli Snap, creati dai developer di Canonical, ed i Flatpack, realizzati da Red Hat.
Tali formati offrono diversi benefici:
- I pacchetti integrano al loro interno le dipendenze necessarie per il funzionamento dell’applicazione;
- Completa indipendenza dalle librerie presenti nel sistema;
- Aggiornamenti automatici;
- Isolamento totale dall’ambiente di lavoro tramite sandboxing;
- Compatibilità tra le varie distribuzioni.
Dunque sia con Snap che con Flatpack l’utente può installare, disinstallare, aggiornare oppure eseguire un downgrade di versione di un applicativo senza preoccuparsi della versione delle librerie software già presenti sulla distribuzione.
Questo è possibile grazie all’implementazione del sandboxing, ovvero una forma di esecuzione dei programmi che va ad isolare totalmente il codice dell’applicazione dal sistema operativo. Tale feature garantisce dunque un ambiente estremamente stabile e versatile.
Oltretutto poter pacchettizzare direttamente le dipendenze all’interno dell’eseguibile facilità notevolmente il lavoro di sviluppatori e maintainer. Con tale impostazioni infatti è possibile distribuire un singolo installer compatibile con tutte le distribuzioni che supportano il formato Snap o Flatpack.
Ovviamente le applicazioni distribuite con questi standard possono anche essere gestite e aggiornate tramite un package manager via shell, cioè tramite un emulatore di terminale, oppure con un comodo tool grafico messo a disposizione dalla distribuzione.
L’unico vero svantaggio di questo formato è rappresentato dalla possibilità, se pur remota in ambito Linux, di incappare in del software malevolo. Infatti tali pacchetti possono essere distribuiti ed installati senza prima essere revisionati dai vari team della distribuzioni, dunque, cosi come capita su altre piattaforme, l’utente potrebbe inconsapevolmente installare sul proprio computer una qualche forma di virus informatico.
I gestori di pacchetti più utilizzati
Nell’ecosistema Linux sono disponibili decine di gestori di pacchetti diversi. Esistono infatti numerosi progetti del genere. Ecco quelli maggiormente gettonati:
APT
Advanced Packaging Tool, meglio noto come APT, è un progetto nato nel 1998 e fin dal rilascio di Debian 2.1 fa parte dei programmi base preinstallati nel sistema. Questo package manager viene utilizzato anche nelle diverse distribuzioni derivate, come ad esempio su Ubuntu o Raspberry Pi OS, in modo da mantenere la compatibilità con i software già disponibili per Debian, oltre che per la sua grande versatilità ed affidabilità.
Nel dettaglio APT si occupa della gestione dei pacchetti in formato .deb e come accennato in precedenza può essere usato tramite un front-end grafico, come Synaptic o Gnome Software, oppure via shell con un emulatore di terminale, come ad esempio Bash.
Interfacciarsi con APT tramite riga di comando è semplicissimo, basta digitare “apt-get” più l’azione che si desidera eseguire. Dunque nel caso si volesse installare un programma:
apt-get install programma
disinstallarlo è altrettanto semplice:
apt-get remove programma
Per fare pulizia anche delle dipendenze è possibile affidarsi all’opzione autoremove:
apt-get autoremove programma
Mentre per tenere aggiornato il proprio parco software basterà scrivere:
apt-get update && apt-get upgrade
Tramite l’opzione “&&” si concatenano due comandi in uno. Nel dettaglio il primo si occupa di aggiornare la lista dei pacchetti disponibili nei repository mentre il secondo procede al download e all’upgrade vero e proprio.
Per connettersi al repository e reperire le applicazioni APT si basa su un file chiamato source.list, solitamente posizionato dentro la directory /etc/apt. Al suo interno è possibile trovare gli URL (Uniform Resource Locator) con tutti i repository della distribuzione. Ecco un esempio:
deb http://deb.debian.org/debian/ bullseye main
deb-src http://deb.debian.org/debian/ bullseye main
Gli utenti più esperti possono anche aggiungere dei repository extra dentro tale file in modo da poter accedere a software di terze parti non presenti in quelli di default.
DNF
DNF, o Dandified yum, è il gestore di pacchetti, in formato .rpm, di riferimento delle distribuzioni sviluppate da Red Hat. A partire da Fedora 22 ha mandato in pensione lo storico package tool YUM. DNF dispone di un interfaccia di comando semplice da utilizzare sia da shell che da front-end grafico.
Ecco un serie di esempi su come installare, rimuovere o aggiornare dei pacchetti:
dnf install programma
dnf remove programma
dnf upgrade
Se non si desidera eseguire un update alle nuove major release delle applicazioni disponibili nei repository è possibile utilizzare tale comando:
dnf upgrade-minimal
In questo modo verranno scaricati ed installati solo i bugfix e le patch di sicurezza senza migrare alle release degli applicativi più recenti.
Anche DNF supporta l’aggiunta di repository extra. L’utente può reperire l’elenco base sul file dnf.conf all’interno della directory /etc/dnf.
snapd
Snapd è il package tool ideato per gestire le applicazioni distribuite in formato .snap. Si trova preinstallato in Ubuntu ed è compatibile con una vastissima pletora di distribuzioni Linux.
Snapd dispone di diverse UI (User Interface), di base è possibile interfacciarsi con esso direttamente da terminale tramite un classico set di comandi:
Per installare un programma:
snap install programma
Per rimuoverlo dal sistema:
snap remove programma
Per aggiornarlo manualmente:
span refresh programma
Gli applicativi distribuiti in versione .snap possono anche essere avviati direttamente da snapd in questo modo:
snap run programma
Gnome Software
Questa utility integrata nel Desktop Environment GNOME Shell può operare come gestore di pacchetti degli eseguibili Flatpack.
Gnome Software si limita ad offrire una GUI, infatti tale formato di applicativi può essere amministrato da riga di comando, ecco alcuni esempi pratici:
Installazione di un software:
flatpack install programma
Disinstallazione:
flatpack uninstall programma
Avvio dell’eseguibile:
flatpack run programma
Mentre con tale comando è possibile ricercare gli aggiornamenti:
flatpack update
Conclusione sui gestori di pacchetti
Le distribuzione Linux offrono all’utente piena libertà su come reperire, installare e gestire il proprio bacino di applicazioni. Gli utenti alle prime armi con questo sistema operativo dunque non avranno problemi ad ottenere i programmi necessari al proprio ambiente di lavoro tramite uno dei tanti gestori di pacchetti Linux disponibili.
Nel momento in cui ci si approccia a tale piattaforma si potrà quindi decidere se affidarsi ai repository, ovvero ad un “deposito” di programmi e librerie controllate dalla propria distribuzione, oppure amministrare in completa autonomia i vari applicativi e sfruttare dei pacchetti eseguibili in formato Snap o Flatpack.
Snap e Flatpack in certi contesti, come ad esempio il classico PC di casa, possono risultare molto più versatili rispetto ai comuni repository. Tuttavia uscendo dal “recinto” delle distribuzioni si è sempre esposti al rischio di installare un qualche software compromesso o malevolo, proprio come avviene con i vari installer disponibili per i sistemi operativi proprietari.
Dunque se si desidera un ambiente quanto più stabile e sicuro per la gestori di pacchetti è il caso di affidarsi al repository di riferimento del proprio sistema Linux.