I gestori di pacchetti

Un'introduzione ai più comuni package manager

I gestori di pacchetti
Indice

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

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