Introduzione al pinning
Introduzione al pinning su Debian
Come molti sapranno, esistono tre versioni di Debian (chiamate anche release):
- Debian stable, attualmente Squeeze;
- Debian testing, attualmente Wheezy;
- 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 – meglio “tra i repository” -, che permette di installare con semplicità del software appartenente a una versione di Debian diversa da quella in uso, senza creare casino nel sistema e nel gestore dei pacchetti e permettendo di scegliere se installare solo un pacchetto da un’altra versione o se 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:
- specifichiamo la versione di Debian predefinita, quella che vogliamo utilizzare di default (nel mio caso e negli esempi successivi la testing);
- specifichiamo la dimensione della cache;
- ordiniamo il purge dei pacchetti;
- ordiniamo la pulizia della cache;
- chiediamo di sistemare automaticamente i pacchetti che presentano dipendenze non soddisfatte;
- chiediamo di sistemare i pacchetti non possibili da installare;
- chiediamo di mostrare gli upgrade dei pacchetti;
- chiediamo di forzare il loop dei pacchetti con dipendenze non soddisfatte;
- 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 andremo a stabilire la priorità delle varie versioni tramite un sistema basato sui pin. Vediamo i possibili valori di questi pin:
- pin maggiore di 1000: il pacchetto ha l’assoluta priorità nell’installazione (può implicare il downgrade);
- pin compreso tra 991 e 1000: il pacchetto verrà installato anche se non fa parte della release specificata in apt.conf, a meno che la versione installata sia più recente;
- pin compreso tra 551 e 990: il pacchetto verrà installato a meno che ci sia disponibile una versione che fa parte della release specificata in apt.conf o che la versione installata sia più recente;
- pin compreso tra 101 e 550: il pacchetto verrà installato a meno che ci sia disponibile una versione appartenente a qualsiasi release o che la versione installata sia 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): previene l’installazione del pacchetto, 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:
- i pacchetti della testing, cui viene assegnato pin 900 (dalla riga 1 alla 3);
- 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.
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.