Home

ITA - Debian apt pinning

linux debian

gestire i pacchetti tra Stable, Testing, Unstable ed Experimental

Attraverso il meccanismo del pinning, APT permette di stabilire con precisione da quale repository debbano essere installati o aggiornati i pacchetti. Questo consente, ad esempio, di mantenere un sistema basato su Debian Stable, installando soltanto alcuni pacchetti provenienti da testing oppure unstable, senza compromettere la stabilità dell’intero sistema. In questo articolo vedremo come funziona il pinning, come configurarlo e quali sono gli scenari più comuni.

Attenzione: utilizzare contemporaneamente più repository Debian richiede una buona conoscenza del sistema; una configurazione errata può causare aggiornamenti indesiderati o dipendenze difficili da risolvere.


Cos’è il Pinning?

APT assegna una priorità ad ogni versione disponibile di un pacchetto.

Quando si esegue un comando come:

sudo apt install nome-pacchetto

APT confronta tutte le versioni disponibili e sceglie quella con la priorità più elevata.

Il Pinning permette di modificare queste priorità.


Come funziona APT

APT legge i repository configurati in:

/etc/apt/sources.list
/etc/apt/sources.list.d/

Successivamente assegna una priorità alle versioni disponibili.

Per visualizzare le priorità di un pacchetto:

apt-cache policy vim

Esempio:

vim:
  Installed: 2:9.0.1378-2
  Candidate: 2:9.1.1234-1
  Version table:
     2:9.1.1234-1 400
        400 http://deb.debian.org/debian testing/main amd64 Packages
 *** 2:9.0.1378-2 900
        900 http://deb.debian.org/debian stable/main amd64 Packages

La colonna numerica rappresenta la priorità assegnata.


File di configurazione

Il Pinning viene configurato tramite uno o più file presenti in:

/etc/apt/preferences.d/

Ad esempio:

/etc/apt/preferences.d/debian.pref

oppure

/etc/apt/preferences.d/99-pinning

Struttura di una regola

Una regola è composta da tre elementi.

Package: *
Pin: release a=stable
Pin-Priority: 900

Package

Indica il pacchetto interessato.

Può essere:

Package: *

per tutti i pacchetti oppure

Package: firefox

per un singolo pacchetto.


Pin

Indica quale repository utilizzare.

Ad esempio:

Pin: release a=stable

oppure

Pin: release a=testing

È anche possibile utilizzare il codename della distribuzione.

Pin: release n=bookworm

Pin-Priority

Specifica la priorità.

Maggiore è il numero, maggiore sarà la probabilità che quella versione venga scelta.


Significato delle priorità

Priorità Significato
<0 Il pacchetto non verrà mai installato
1-99 Installato solo se richiesto esplicitamente
100 Mantiene la versione installata
500 Priorità predefinita
990 Preferita rispetto alle altre release
>1000 Consente anche il downgrade

Scenario 1 - Stable come sistema principale

Questa è probabilmente la configurazione più comune.

Repository:

deb http://deb.debian.org/debian stable main
deb http://deb.debian.org/debian testing main

File:

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 400

In questo modo tutti gli aggiornamenti arriveranno da Stable.

Per installare un pacchetto da Testing sarà sufficiente:

sudo apt install -t testing nome-pacchetto

Scenario 2 - Sistema Testing con accesso a Unstable

Repository:

deb http://deb.debian.org/debian testing main
deb http://deb.debian.org/debian unstable main

Pinning:

Package: *
Pin: release a=testing
Pin-Priority: 900

Package: *
Pin: release a=unstable
Pin-Priority: 400

In questo modo sarà possibile installare occasionalmente software proveniente da Unstable.


Scenario 3 - Utilizzare Experimental

Il repository Experimental non deve mai essere utilizzato come repository principale.

Si aggiunge semplicemente:

deb http://deb.debian.org/debian experimental main

con priorità molto bassa:

Package: *
Pin: release a=experimental
Pin-Priority: 1

I pacchetti verranno installati esclusivamente con:

sudo apt install -t experimental nome-pacchetto

Verificare le priorità

Per controllare la configurazione:

apt-cache policy

oppure

apt-cache policy nome-pacchetto

Questi comandi sono fondamentali durante il debug del Pinning.


Installare una versione specifica

È possibile richiedere una release precisa.

sudo apt install -t testing firefox-esr

oppure una versione specifica.

sudo apt install vim=2:9.1.1234-1

Errori comuni

Dare priorità troppo elevate

Una priorità superiore a 1000 permette il downgrade automatico.

Va utilizzata solo quando realmente necessario.


Mescolare troppe release

Stable, Testing, Unstable ed Experimental possono convivere, ma ogni nuova release aumenta il rischio di dipendenze incompatibili.


Ignorare le dipendenze

Installare un singolo pacchetto da Unstable potrebbe richiedere decine di librerie aggiuntive.

Prima di confermare un’installazione leggere attentamente l’elenco delle modifiche proposte da APT.


Buone pratiche


Riferimenti