Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione al pinning su Debian

Come molti sapranno, esistono tre versioni di Debian (chiamate anche release):

  1. Debian stable, attualmente Squeeze;
  2. Debian testing, attualmente Wheezy;
  3. Debian unstable, attualmente (e sempre, un nome fisso) Sid.

Il software della stable non viene aggiornato, eccezion fatta per gli aggiornamenti della sicurezza; il software della testing e della unstable viene al contrario aggiornato frequentemente, con una maggiore frequenza per la unstable. Oltre queste tre, ci sarebbero anche la oldstable (la vecchia stable, precedente all’attuale stable) e la experimental (una versione altamente sperimentale), ma di scarsissima diffusione rispetto alle altre (e che vi sconsiglio caldamente).
Vi invito ad un approfondimento dell’argomento (approfondimento che personalmente considero molto interessante), sia sulle precise differenze tra le versioni, sia sui meccanismi che portano al passaggio da una versione a un’altra².

Ora, spesso accade che utilizzando la testing o ancor di più la stable si voglia del software più nuovo rispetto a quello in dotazione; o che al contrario, utilizzando la testing o ancor di più la unstable si voglia del software più stabile rispetto a quello in dotazione. Qui entra in gioco il pinning dei repository, o meglio “tra i repository”, che permette di installare con semplicità del software appartenente a una versione di Debian diversa da quella in uso o anche solo appartenente alla stessa distribuzione, ma proveniente da un altro repository. Tutto ciò eliminando il rischio di creare problemi nel sistema e nel gestore dei pacchetti poiché non è detto che l'attribuzione di priorità automatica dia il risultato voluto e/o migliore. Il pinning permette anche di scegliere se installare solo un pacchetto da un’altra versione o anche le sue relative dipendenze (alternativamente, verranno utilizzate le dipendenze della versione in uso, se disponibili). Affinché questo sia possibile, è necessario innanzitutto istruire apt secondo i nostri desideri. I file in questione sono due e precisamente /etc/apt/apt.conf e /etc/apt/preferences, che ora andremo ad analizzare. In un’installazione di default questi due file non sono normalmente presenti (vengono utilizzate delle impostazioni di default), quindi dovremmo procedere col crearli manualmente con i privilegi di root.

Il file /etc/apt/apt.conf

APT::Default-Release "testing";
APT::Cache-Limit 24000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";
APT::Force-LoopBreak=true;
APT::Get::AllowUnauthenticated 1;

Andiamo ad analizzare questo esempio riga per riga:

  1. specifichiamo la versione di Debian predefinita, quella che vogliamo utilizzare di default (nel mio caso e negli esempi successivi la testing);
  2. specifichiamo la dimensione della cache;
  3. ordiniamo il purge dei pacchetti;
  4. ordiniamo la pulizia della cache;
  5. chiediamo di sistemare automaticamente i pacchetti che presentano dipendenze non soddisfatte;
  6. chiediamo di sistemare i pacchetti non possibili da installare;
  7. chiediamo di mostrare gli upgrade dei pacchetti;
  8. chiediamo di forzare il loop dei pacchetti con dipendenze non soddisfatte;
  9. autorizziamo l’installazione di pacchetti non autenticati.

Essendo questo un argomento molto complesso, per scoprire tutte le funzioni disponibili e per approfondire il funzionamento di quelle appena elencate, vi rimando al manuale e agli help:

# apt-get --help
# aptitude --help
man apt.conf

Il file /etc/apt/preferences

Nel file preferences è possibile definire la priorità delle varie versioni dei pacchetti tramite un sistema basato sui pin. Vediamo quindi i possibili valori dei pin, avendo cura di ricordare che con "target relase" si intende quella specificata alla riga APT::Default-Release del file apt.conf (quindi testing nel caso del precedente esempio).

  • pin maggiore di 1000: il pacchetto ha l’assoluta priorità nell’installazione, anche nel caso cioè che sia disponibile una versione dello stesso nel repository della "target relase" e persino se l'eventuale versione già installata è più recente (quindi è possibile anche un downgrade);
  • pin compreso tra 991 e 1000: il pacchetto viene installato anche nel caso sia disponibile una versione dello stesso nel repository della "target relase", ma NON se nel sistema è già presente una versione più recente;
  • pin compreso tra 501 e 990: il pacchetto sarà installato solo se questo non è presente nella "target relase" e/o se la versione eventualmente già installata non è più recente;
  • pin compreso tra 101 e 500: il pacchetto sarà installato solo se questo non è presente nella "target relase" e/o in altri repository e/o se la versione eventualmente già installata non è più recente;
  • pin compreso tra 0 e 100: il pacchetto viene installato solo se non è installata nessuna versione del pacchetto;
  • pin minore di 0 (negativo): l’installazione del pacchetto è impedita a priori (salvo apposito comando), qualsiasi sia l’origine.

Ecco un esempio del file preferences:

Package: *
Pin: release a=testing
Pin-Priority: 900
 
Package: *
Pin: release o=Debian
Pin-Priority: -10

Questo esempio tiene conto di due casi:

  1. i pacchetti della testing, cui viene assegnato pin 900 (dalla riga 1 alla 3);
  2. tutti gli altri pacchetti di tutte le altre versioni (in questo caso quindi di stable e unstable), cui viene assegnato pin -10 (dalla riga 5 alla 7).

In altri termini, qui abbiamo specificato che i pacchetti della testing (che è anche la versione indicata in apt.conf) dovranno avere la massima priorità. Ai pacchetti di altre versioni non è assegnata nessuna priorità (pin minore di 0) e quindi verranno eventualmente installati solo su nostro comando.
Per una guida esaustiva man apt_preferences.

Installare tramite pinning

Fatto questo, sarà sufficiente aggiungere al proprio /etc/apt/sources.list i repository delle altre versioni che ci interessano. Per installare pacchetti dalla nostra versione in uso, quella che abbiamo anche specificato in apt.conf, procederemo normalmente, come abbiamo sempre fatto. Per pacchetti di altre versioni, invece, avremo a disposizione due comandi:

# apt-get install pacchetto/unstable

che installa pacchetto dalla unstable con le dipendenze della versione indicata in /etc/apt/apt.conf (nell’esempio vista prima, la testing), se disponibili. In alternativa:

# apt-get install -t unstable pacchetto

che installa pacchetto dalla unstable con le dipendenze della unstable.

Credits

Questa guida è una riproposizione della guida originale pubblicata su www.mirkopagliai.it, distribuita secondo licenza originale CC.