I gestori di pacchetti
Un'introduzione ai più comuni package manager
Senza alcun dubbio, da quando ho cominciato ad appassionarmi al mondo di GNU/Linux e a provare le varie distribuzioni, uno degli aspetti che mi ha affascinato maggiormente è stato l’uso dei gestori pacchetti (package manager).
Arrivando da Windows, il meccanismo di installazione ed aggiornamento mi è piaciuto all’istante, in quanto permette di aggiornare completamente il sistema in pochi semplici passaggi, sia da terminale che tramite un’interfaccia grafica.
Le distribuzioni GNU/Linux possono essere suddivise in base alla tipologia di pacchetto adottata, dove con il termine pacchetto si intende un archivio compresso, contenente i file di un dato programma e le informazioni relative alle sue dipendenze, i permessi dei file da installare ed eventuali script pre e post installazione. Esistono, inoltre, alcuni pacchetti (chiamati metapacchetti) che hanno lo scopo di facilitare l’installazione di altri, strettamente correlati tra loro. Talvolta, i gruppi di pacchetti sono gestiti direttamente dal gestore: un esempio di metapacchetto o gruppo di pacchetti è quello dei Desktop Environment (GNOME, KDE ecc..).
I principali formati di pacchetti sono:
- RPM (Red Hat e derivate, Fedora CEntOS OpenSUSE, SLES, ecc…);
- DEB (Debian e derivate, Ubuntu e derivate, Mint, ecc…). Questa immagine rende bene l’idea: Linux Distribution Timeline
Altre distribuzioni hanno dei formati meno standard, ma personalizzati per i propri gestori pacchetti; ad esempio, ArchLinux usa file con estensione pkg.tar.xz. Altre ancora, prediligono la compilazione dei pacchetti e la risoluzione delle dipendenze manuali.
I vari formati dei pacchetti vengono, quindi, presi in gestione dai package manager adottati. Ecco i principali:
Gestori pacchetti da linea di comando:
- rpm (RedHat/CEntOS/Fedora/OpenSUSE)
- yum (CEntOS/Fedora)
- zypper (OpenSUSE)
- dpkg (Debian/Ubuntu e derivate)
- apt (Debian/Ubuntu)
- pacman (ArchLinux)
Gestori pacchetti da interfaccia grafica:
- Synaptic (Debian, Ubuntu)
- YaST2 (OpenSUSE)
- packagekit (multi distribuzione ArchLinux, Fedora, ecc..)
La scelta tra interfaccia grafica o linea di comando è sicuramente influenzata dai gusti e dalle abitudini dell’utente ma, di sicuro, una volta ottenuta la giusta dimestichezza, la seconda via risulta sempre più rapida e immediata e, con il tempo e la pratica, anche chi preferisce le interfacce grafiche non ne potrà fare a meno.
I gestori pacchetti recuperano i pacchetti dai repository, ovvero server su Internet appositamente creati e contenenti i pacchetti, suddivisi per versione della distribuzione e architettura del sistema. Normalmente, i repository sono preconfigurati in fase di installazione, ma l’utente è libero di modificarli o di aggiungerne di personalizzati, così da poter installare altri pacchetti che la distribuzione non mette a disposizione. È bene tener presente che l’aggiunta di repository esterni deve sempre essere fatta con molta cautela, in quanto i rischi sono molteplici: infatti, dall’installazione di pacchetti esterni possono derivare sia l’instabilità del sistema che conflitti di versioni (nel caso in cui sul repository esterno siano presenti pacchetti in comune con quelli di base) oppure, nel peggiore dei casi, l’installazione di pacchetti malevoli, se il repository non è fidato.
Alcuni tra i repository più noti forniscono chiavi per la verifica delle firme dei pacchetti, proprio come quelli dei repository ufficiali. È, quindi, buona norma documentarsi su come abilitare correttamente tali repository e su come abilitarne la verifica. Tra i repository non ufficiali più famosi ci sono EPEL(Red Hat/CEntOS), RepoForge (ex RPMForge per Red Hat CEntOS, ecc..), repo-ck (ArchLinux), i Repository di Google per le proprie App come Chrome, Earth e molti altri ancora.
Quali sono, dunque, le funzioni dei gestori di pacchetti?
- Aggiornamento completo del sistema o del singolo pacchetto;
- Verifica delle dipendenze dei pacchetti;
- Installazione e rimozione dei pacchetti;
- Ricerche di pacchetti all’interno dei repository;
- Elencare i pacchetti installati;
- Effettuare un backup della lista dei pacchetti installati (in vista di una successiva installazione su un nuovo sistema);
- Rimozione dal sistema dei pacchetti non più necessari (solitamente dipendenze di altri pacchetti non più presenti);
- Pulizia delle cache dei pacchetti archiviati localmente (utile per liberare spazio su disco);
- Verificare quale pacchetto ha installato un certo file.
e molto altro ancora.
Certi gestori pacchetti, come yum, hanno la possibilità di essere estesi nelle loro funzionalità grazie ad appositi plug-in; ad esempio, sono funzionalità aggiuntive:
la creazione di uno snapshot LVM del filesystem prima dell’aggiornamento(richiede una installazione su volumi logici LVM); la verifica dell’integrità dei pacchetti installati e dei file installati da essi; la ricerca dei mirror più veloci (i mirror altro non sono che fonti diverse e geolocalizzate dei repository).
Un’altra interessante peculiarità di alcuni gestori pacchetti (come yum) è la gestione dei delta. Il delta non è un pacchetto completo, bensì una patch da applicare alla versione precedente del pacchetto, così da ottenere la versione più aggiornata.
L’uso dei delta, da un lato, diminuisce il tempo e il traffico di download, dall’altro, aumenta, di poco, il tempo di applicazione degli aggiornamenti, poiché il pacchetto finale viene “costruito” localmente con l’applicazione del delta. Si noti, però, che se l’utente non aggiorna spesso e la versione locale è troppo vecchia per l’applicazione del delta, il gestore pacchetti opta per il download di quello più aggiornato.
Ecco alcuni degli esempi che mi vengono in mente (certo non potrei elencarli tutti!):
Pacman
Aggiornamento dell’elenco pacchetti
pacman -Sy
Elenco degli aggiornamenti disponibili (dopo aver aggiornato l’elenco)
pacman -Qu
Installazione di un pacchetto
pacman -S firefox
Rimozione di un pacchetto
pacman -R firefox
Backup della lista pacchetti
pacman -Qqen > listapacchetti
Re-installazione dei pacchetti da una lista
pacman -S - < listapacchetti
Pulizia dei pacchetti non più installati (ad esempio, le vecchie versioni o vecchie dipendenze) dalla cache dei pacchetti
pacman -Sc
Pulizia completa della cache dei pacchetti
pacman -Scc
Rimozione dei pacchetti installati, ma non più richiesti
pacman -Qdt
RPM
Elencare i pacchetti installati
rpm -qa
Elencare i file installati da un pacchetto
rpm -ql firefox
Ottenere il pacchetto che ha installato il file
rpm -qf /usr/bin/firefox
YUM
Aggiornamento dell’elenco dei pacchetti ed elenco degli aggiornamenti disponibili
yum check-update
Aggiornamento del sistema
yum update
Installazione di un pacchetto
yum install firefox
Rimozione di un pacchetto
yum remove firefox
Installazione di un gruppo di pacchetti
yum groupinstall "KDE"
Rimozione di un gruppo di pacchetti
yum groupremove “KDE”
Pulizia completa della cache dei pacchetti
yum clean all
Elenco degli aggiornamenti specificando quali sono quelli sicurezza
yum check-update --security
Verifica dell’integrità dei pacchetti e dei file installati (richiede il plugin yum-plugin-verify) tutti i pacchetti
yum verify all
singolo pacchetto
yum verify firefox
zypper
Aggiornamento del sistema
zypper up
Aggiornamento della lista dei pacchetti ed elenco degli aggiornamenti
zypper lu
Installazione di un pacchetto
zypper in firefox
dpkg
Elencare i pacchetti installati
dpkg -l
Rimuovere un pacchetto
dpkg -r firefox
Elencare i file installati da un pacchetto
dpkg -L firefox
Riconfigurare un pacchetto
dpkg --configure firefox
APT
Aggiornamento dell’elenco dei pacchetti
apt-get update
Aggiornamento del sistema
apt-get upgrade
Installazione di un pacchetto
apt-get install firefox
Rimozione di un pacchetto
apt-get remove firefox
Rimozione di un pacchetto e delle relative configurazioni
apt-get --purge remove firefox
Pulizia della cache dei pacchetti non installati sul sistema
apt-get autoclean
Pulizia completa della cache dei pacchetti
apt-get clean
Link utili
ArchLinux Wiki - pacman
The Debian GNU/Linux FAQ - Capitolo 8 - Gli strumenti di gestione dei pacchetti Debian
CEntOS Wiki - RPM(contiene altri link molto utili)
Managing Software with yum
CEntOS Wiki - Yum and RPM tricks
Infine, ricordate sempre che il terminale vi è amico e se avete bisogno di informazioni su un comando potete sempre utilizzare il comando man
man yum
Claudio con la revisione di Davide e Alek