Guida alle tecnologie

Una breve introduzione ad apt-pinning

6 min read Linux Aggiornato 22 Oct 2025
Guida rapida a apt-pinning su Debian
Guida rapida a apt-pinning su Debian

Introduzione

Apt-pinning è una funzionalità di APT che consente di assegnare priorità ai pacchetti provenienti da diverse distribuzioni o repository. In questo modo puoi far girare un sistema basato principalmente su stable ma installare singoli pacchetti più recenti da testing o unstable (o da repository di terze parti) quando necessario.

Avvertenza: non garantisco che tutto funzioni nel tuo ambiente — testa sempre in un ambiente di staging o usa snapshot/backup.

1 Nota preliminare

Negli esempi uso un sistema Debian Lenny (stable all’epoca dell’articolo). L’esempio pratico prende come riferimento il pacchetto phpmyadmin, presente in tre versioni diverse nelle release stable, testing e unstable (al momento della stesura originale):

  • lenny (stable): versione 4:2.11.8.1-5
  • squeeze (testing): versione 4:3.1.2-2
  • sid (unstable): versione 4:3.1.3-1

Puoi verificare le versioni disponibili su: http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all

2 Configurare /etc/apt/sources.list

Aggiungi i repository testing e unstable al tuo /etc/apt/sources.list. Nell’articolo originale il file è così:

vi /etc/apt/sources.list

| deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main ## Lenny / Stable deb http://ftp2.de.debian.org/debian/ lenny main deb-src http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main deb-src http://security.debian.org/ lenny/updates main ## Squeeze / Testing deb http://ftp2.de.debian.org/debian/ squeeze main deb-src http://ftp2.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main ## Sid / Unstable deb http://ftp2.de.debian.org/debian/ sid main deb-src http://ftp2.de.debian.org/debian/ sid main |

Mantieni i percorsi esatti dei repository che decidi di usare per il tuo sistema.

3 Aumentare il cache limit (se necessario)

Apri /etc/apt/apt.conf:

vi /etc/apt/apt.conf

… e aggiungi la seguente riga:

| APT::Cache-Limit "100000000"; |

Senza questo parametro potresti ricevere un errore come:

E: Dynamic MMap ran out of room

Dopo aver aggiornato la configurazione, esegui:

apt-get update

4 Perché serve apt-pinning

Con la configurazione di repository multipli APT tende a scegliere la versione più nuova disponibile (spesso proveniente da testing o unstable). Questo può portare a installazioni non volute di pacchetti più recenti e, in casi estremi, a un sistema instabile. Con apt-pinning si impostano priorità che dicono ad APT da quale release preferire i pacchetti.

Puoi visualizzare le priorità correnti con:

apt-cache policy

Un esempio di output (formattato nell’articolo originale):

server1:~# apt-cache policy
 Package files:
  100 /var/lib/dpkg/status
      release a=now
  500 http://volatile.debian.org lenny/volatile/main Packages
      release o=volatile.debian.org,a=stable,l=debian-volatile,c=main
      origin volatile.debian.org
  500 http://ftp2.de.debian.org sid/main Packages
      release o=Debian,a=unstable,l=Debian,c=main
      origin ftp2.de.debian.org
  500 http://security.debian.org squeeze/updates/main Packages
      release v=None,o=Debian,a=testing,l=Debian-Security,c=main
      origin security.debian.org
  500 http://ftp2.de.debian.org squeeze/main Packages
      release o=Debian,a=testing,l=Debian,c=main
      origin ftp2.de.debian.org
  500 http://security.debian.org lenny/updates/main Packages
      release v=5.0,o=Debian,a=stable,l=Debian-Security,c=main
      origin security.debian.org
  500 http://ftp2.de.debian.org lenny/main Packages
      release v=5.0,o=Debian,a=stable,l=Debian,c=main
      origin ftp2.de.debian.org
 Pinned packages:
server1:~#

Nell’esempio tutte le release hanno priorità 500: APT sceglierebbe quindi la versione più recente (in questo caso quella da unstable).

Per controllare un singolo pacchetto:

apt-cache policy phpmyadmin

Output d’esempio:

server1:~# apt-cache policy phpmyadmin
 phpmyadmin:
   Installed: (none)
   Candidate: 4:3.1.3-1
   Version table:
     4:3.1.3-1 0
        500 http://ftp2.de.debian.org sid/main Packages
     4:3.1.2-2 0
        500 http://ftp2.de.debian.org squeeze/main Packages
     4:2.11.8.1-5 0
        500 http://ftp2.de.debian.org lenny/main Packages
server1:~#

La riga Candidate mostra la versione che sarebbe installata.

5 Come funzionano le priorità (apt_preferences)

La logica delle priorità è documentata in man 5 apt_preferences e, in sintesi, può essere riassunta così:

  • P > 1000: forza l’installazione di una versione anche se costituisce un downgrade.
  • 990 < P <= 1000: forza l’installazione di una versione anche se non proviene dalla release target, a meno che la versione installata non sia più recente.
  • 500 < P <= 990: la versione viene installata a meno che non esista una versione appartenente alla release target o la versione installata sia più recente.
  • 100 < P <= 500: la versione viene installata a meno che non esista una versione appartenente ad un’altra distribuzione o la versione installata sia più recente.
  • 0 < P <= 100: la versione viene installata solo se non esiste una versione installata del pacchetto.
  • P < 0: impedisce l’installazione della versione.

Per impostare priorità personalizzate si crea o modifica /etc/apt/preferences o file sotto /etc/apt/preferences.d/.

Esempio minimo di entry in /etc/apt/preferences (concetto):

Package: phpmyadmin
Pin: release a=stable
Pin-Priority: 600

Questo indica ad APT di preferire la versione proveniente dalla release stable, assegnandole priorità 600.

Mini-metodologia (passi consigliati)

  1. Identifica i pacchetti che vuoi mantenere su stable o che vuoi aggiornare da testing/unstable.
  2. Aggiungi i repository necessari in /etc/apt/sources.list o in /etc/apt/sources.list.d/.
  3. Aumenta APT::Cache-Limit in /etc/apt/apt.conf se necessario.
  4. Esegui apt-get update.
  5. Controlla apt-cache policy e apt-cache policy per capire candidate e version table.
  6. Scrivi regole in /etc/apt/preferences.d/ per pin specifici (per pacchetto o per origine).
  7. Testa l’installazione in staging e verifica le dipendenze:
    • apt-get install -s per simulare.
  8. Esegui l’installazione reale solo a risultato verificato.

Alternative e approcci complementari

  • backport: rebuild del pacchetto per stable (backport) invece di usare testing/unstable.
  • apt-mark hold: bloccare una versione già installata.
  • costruire il pacchetto localmente (dpkg-buildpackage) e installare il .deb.
  • usare container (Docker/LXC) per eseguire servizi con librerie più recenti senza toccare il sistema host.

Quando apt-pinning fallisce o crea problemi (controesempi)

  • dipendenze complesse: pacchetti in testing possono richiedere librerie che non sono compatibili con stable; forzare l’installazione può rompere il sistema.
  • repository di terze parti con policy non compatibili o pacchetti non firmati.
  • errori dovuti a pin troppo permissivi (es. priority > 990 senza considerare downgrade non voluti).

Nota: in presenza di problemi, considera di usare snapshot, backup completo, o ripristino via sistema di immagini.

Importante: testa sempre le modifiche in un ambiente separato e crea backup dei dati e dell’immagine del sistema prima di applicare pin estesi.

Esempio pratico: pin per phpmyadmin

Supponiamo di voler mantenere il sistema su stable ma installare phpmyadmin dalla squeeze (testing) se necessario. Un file sotto /etc/apt/preferences.d/ potrebbe contenere:

Package: phpmyadmin
Pin: release a=squeeze
Pin-Priority: 600

Poi esegui:

apt-get update
apt-cache policy phpmyadmin
apt-get install -s phpmyadmin   # simulazione
apt-get install phpmyadmin      # installazione reale

Controlli e test (casi di accettazione)

  • apt-cache policy mostra la release preferita come Candidate in simulazione.
  • apt-get install -s non causa la rimozione di pacchetti critici.
  • I servizi dipendenti dal pacchetto partono e funzionano dopo l’installazione.

Heuristics / Modello mentale rapido

  • Preferisci backport o rebuild locale per singoli pacchetti quando possibile.
  • Usa pin solo per pacchetti singoli o origini ben identificate, non come politica globale.
  • Se una dipendenza richiede molte altre librerie, opta per container o backport.

Decision tree (semplice)

flowchart TD
 A[Ho bisogno di una versione più recente?] -->|No| B[Usa stable]
 A -->|Sì| C{Dipendenze compatibili con stable?}
 C -->|Sì| D[Usa apt-pinning o backport]
 C -->|No| E[Valuta container/backport/build locale]

Checklist per ruolo

  • Sysadmin:
    • backup immagini e database
    • test in staging
    • usare apt-get install -s per simulazione
    • documentare i pin in repo di configurazione
  • Utente desktop:
    • preferire PPA o pacchetti singoli ricompilati
    • evitare pin globali che coinvolgono librerie di sistema

Glossario (una riga ciascuno)

  • apt: il gestore di pacchetti su Debian/Ubuntu.
  • pinning: assegnare priorità ai pacchetti da repository diversi.
  • release: una versione della distribuzione (stable/testing/unstable).
  • Pin-Priority: valore numerico che determina quale versione APT preferisce.

Riepilogo

Apt-pinning è uno strumento potente per bilanciare stabilità e necessità di pacchetti più recenti. Usalo con cautela: preferisci pin mirati, testa sempre e considera alternative come backport o container per limitare il rischio di rompere il sistema.

Note finali

  • Consulta man 5 apt_preferences per dettagli formali.
  • Mantieni la documentazione delle modifiche ai repository e alle preferences.
Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/