Repository & pinning

Versione del 24 giu 2014 alle 10:04 di HAL 9000 (discussione | contributi) (estensione (TODO: da ridurre qualcosa per rientrare sotto 32KB...))
I repository
Arrow left.png

Introduzione ai repository

Repository ufficiali di Debian

Repository esterni

Extra

Arrow right.png



Repository e Pinning
Banner e-zine.png
La prima e-zine italiana sul mondo Debian

Una rapida panoramica su uno dei temi più importanti in Debian: il funzionamento e la configurazione dei repository, ed il pinning ovvero la possibilità di attingere dai repository dei diversi rami, cercando di mantenere il sistema più stabile possibile.

Dopo aver installato una Debian nasce il bisogno di aggiungere nuovi programmi e allo stesso tempo tenerla costantemente aggiornata. Per questo scopo Debian dispone di un tool potentissimo: apt (Advanced Packaging Tool), con numerosi strumenti sia da riga di comando (la shell), come dpkg, apt-get, aptitude, dselect, wajig, sia per mezzo di interfacce grafiche come synaptic, aptitude, adept, gjig ed altri. Per comprendere appieno tutto il meccanismo delle installazioni e degli aggiornamenti bisogna conoscere com'è strutturata una Debian. Questo articolo vuole essere un'introduzione alla comprensione della struttura per la gestione dei 20.000 ed oltre pacchetti che Debian offre. Per approfondimenti consultare le ricche pagine di documentazione che accompagnano Debian come debian-reference-it, debian-faq-it, etc.

Tratto dalla e-zine di Debianizzati.org

Link agli articoli:

Repository e Pinning


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

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

  1. Debian stable, attualmente Wheezy;
  2. Debian testing, attualmente Jessie;
  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 che non è una versione completa e funzionante di Debian, ma solo un repository contenente vario software in fase di progettazione, da sperimentare o altamente instabile, dal quale si può attingere dalle altre versioni ma a proprio rischio.

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 distribuzione di Debian diversa da quella in uso o anche solo appartenente alla stessa distribuzione, ma proveniente da un altro repository.Tutto ciò riducendo al minimo (posto di sapere quel che si fa) il rischio di creare problemi nel sistema e nel gestore dei pacchetti.

  ATTENZIONE
Installare pacchetti provenienti da distribuzioni e/o fonti differenti è sempre e comunque fonte di possibili rischi, anche se piccoli. Questa guida presuppone che il lettore abbia ben chiari i concetti esposti nella guida I repository ed il loro utilizzo, nonché di avere discreta conoscenza di strumenti come apt-get e aptitude.


Prima di procedere nella descrizione operativa del pinning è fondamentale capire come gestisce la priorità dei pacchetti APT e sapere che:

  • Col termine distribuzione si intendono stable, testing e unstable. Ciascuna distribuzione ha un suo singolo repository (fonte) principale (due se si conteggia anche l'eventuale repository dedicato agli aggiornamenti di sicurezza) che è quello automaticamente dichiarato dall'installer di debian, ma si tenga presente che ogni distribuzione può avere più fonti sia ufficiali che non ufficiali.
  • Col termine fonti si intendono genericamente i repository, ufficiali (es. stable, testing, unstable e backports) o meno (es. deb-multimedia), che forniscono pacchetti relativi ad una o più distribuzioni. Ogni fonte può avere più copie di se stesso (mirrors).
  Importante
Il pinning è uno strumento per regolare la priorità in base al numero di versione dei pacchetti, e non alla fonte di provenienza. Questo significa che non è possibile discriminare tra due pacchetti aventi lo stesso numero di versione e provenienti da due repository differenti, ovvero in caso di pari versione ad essere installato sarà la versione proveniente dal repository elencato per primo nel file sources.list.


Priorità come punteggio

Il concetto di priorità viene gestito attraverso l'assegnazione di un punteggio ai vari pacchetti, sia installati che ancora da installare. Valgono le seguenti regole:

  • priorità 1, caso particolare e poco comune. È quella di default per experimental (NotAutomatic: yes nel file Release del repository). Si veda il manuale (man apt_preferences) per maggiori informazioni.
  • priorità 100 alla versione dei pacchetti già installati e quella dei backports ufficiali (NotAutomatic: yes e ButAutomaticUpgrades: yes nel file Release del repository).
  • priorità 500 alle versioni che non appartengono alla distribuzione obiettivo, dove con quest'ultimo termine si deve intendere "Default Release", "Target Release". Si noti che di default non esiste una "Default Release", e quindi ogni repository ha una priorità di 500, salvo backports ed experimental.
  • priorità 990 alle versioni che non sono installate e appartengono alla distribuzione obiettivo, posto che l'utente abbia definito una distribuzione obiettivo, altrimenti la priorità assegnata sarà una di quelle appena descritte.

Piccolo esempio teorico. Si supponga quanto segue:

  • si desidera installare il pacchetto "vattelapesca" appartenente alla propria distribuzione, cioè quella che si è installata (si supponga testing);
  • il suddetto pacchetto è presente in tre fonti, repoA, repoB, repoC tutte correttamente specificante nel file source.list;
  • tutti i pacchetti presenti in repoA appartengono alla distribuzione installata, in repoB e repoC sono contenuti pacchetti appartenenti ad un'altra distribuzione (ad esempio unstable e stable rispettivamente);
  • la versione di "vattelapesca" in repoA è la 1.4, in repoB la 2.0 e in in repoC la 1.1;
  • nel sistema è installata la versione 1.3 di "vattelapesca";
  • non esiste un file preferences o comunque non è stata specificata una priorità per nessuna delle tre distribuzioni considerate;
  • non è stato dichiarato il parametro Default Release in un eventuale file apt.conf, ovvero non è stata esplicitamente definita una distribuzione obiettivo.

Nel momento in cui l'utente esegue il comando apt-get install vattelapesca saranno assegnati i seguenti punteggi:

  • 500 a "vattelapesca" presente in repoC;
  • 500 a "vattelapesca" presente in repoB;
  • 500 a "vattelapesca" presente in repoA;

Tutti e tre i pacchetti hanno lo stesso punteggio, ma il pacchetto proveniente da C viene immediatamente scartato perché implicherebbe retrocessione dello stesso (downgrade, il significato delle varie fascie di punteggio sarà spiegato poco più avanti). A questo punto APT sceglierà tra repoA e repoB in base ad un altro criterio, la versione, quindi ad essere installato sarà il pacchetto proveniente da repoB e non da repoA come desiderato. Il problema evidentemente non può che esplodere quando si esegue il comando apt-get upgrade (o peggio apt-get dist-upgrade), cioè quando si tenta di aggiornare tutti i pacchetti di sistema.

La soluzione è, come facilmente intuibile, quella di assegnare manualmente un punteggio ai vari pacchetti, singolarmente o raggruppandoli. Prima però è necessario capire il significato dei vari punteggi (pin-priority). Nel seguito si indicherà col termine "candidato" il pacchetto o gruppo di pacchetti proveniente dalla generica fonte dichiarata nel file sources.list.

  • Pin minore di 0 (negativo), l’installazione del candidato è impedita a priori (salvo apposito comando).
  • Pin compreso tra 1 e 99, il candidato sarà installato solo se sono verificate entrambe le seguenti due condizioni: primo non esistono candidati appartenenti ad altre distribuzioni, secondo nel sistema non è già installata una versione (anche inferiore) del candidato.
  • Pin compreso tra 100 e 499, il candidato sarà installato solo se non esistono candidati appartenenti ad altre distribuzioni e se la versione eventualmente già installata non è superiore a quella del candidato.
  • Pin compreso tra 500 e 989, il candidato sarà installato solo se non esistono candidati appartenenti alla distribuzione obiettivo e se la versione eventualmente già installata non è superiore a quella del candidato. Si noti che il semplice fatto di aver installato una certa distribuzione, per esempio testing, non significa aver definito la distribuzione obiettivo, che può essere solo definita manualmente dall'utente (il come sarà spiegato nella discussione del file apt.conf).
  • Pin compreso tra 990 e 999, il candidato sarà installato solo se non esistono altri candidati con pin maggiore e se la versione eventualmente già installata non è superiore a quella del candidato.
  • Pin 1000 o superiore, il candidato sarà installato se non esistono altri candidati con pin maggiore, è quindi possibile la retrocessione di versione (downgrade) se la versione eventualmente già installata è superiore a quella del candidato. Es. è possibile installare la versione 1.1 di un pacchetto anche se ad essere già installata è la 1.2 o superiore.
  IMPORTANTE
Si noti che gli intervalli sopra specificati sono la diretta conseguenza della procedura di assegnamento automatico di APT.

Posto infatti per esempio di assegnare priorità 44 al pacchetto "vattelapesca" di stable e contestualmente di non dichiarare alcuna priorità per i "vattelapesca" di testing e unstable (assunto ovviamente di aver specificato tutti e tre i repository in sources.list) è evidente che un candidato vattelapesca di stable potrà essere installato solo se:

  1. Non esistono altri candidati dello stesso pacchetto provenienti dalle altre due fonti, infatti APT assegnerebbe automaticamente a tali candidati una priorità di 500 (500 > 44).
  2. Nessun candidato di "vattelapesca" è mai stato installato, infatti se così non fosse alla versione già installata di "vattelapesca" sarebbe assegnata in automatico una priorità di 100 (100 > 44), a prescindere dalla versione del pacchetto installato, ovvero anche quando la versione installata fosse inferiore a quella del nuovo candidato di stable disponibile.
  Nota
  • Gli intervalli sopra citati sono presi tali e quali dal manuale di apt_preferences, tuttavia a volte si è osservato che i limiti funzionano come dovrebbero se traslati in alto di una unità, ad esempio l'ultimo intervallo potrebbe partire da 1001 invece che da 1000.
  • APT può derogare alle regole generali sopra esposte in casi particolari per soddisfare le varie dipendenze dei pacchetti.


Priorità come punteggio in caso di aggiornamento

Se una versione di un pacchetto è già installata sul sistema, la lettura dei punteggi può portare a un'errata interpretazione delle priorità. In particolare:

  • il downgrade è possibile solo con una priorità a partire da 1000, il che significa che tutti i repository con priorità minore di 1000 sono ignorati, se la loro versione è inferiore a quella attualmente installata;
  • i pacchetti installati hanno priorità 100, il che significa che un pacchetto può essere aggiornato automaticamente se esiste almeno un repository con una versione più recente e priorità almeno 100.

Supponiamo che si assegni priorità 990 alla stable. I backports di default ne hanno una di 100. Ciò significa che non si può installare (automaticamente) una versione di un pacchetto che si trovi in entrambi i repository.
Ma se si è già installato un pacchetto dai backports, impostando manualmente la target release (che assegna priorità temporanea di 990), quel pacchetto verrà aggiornato automaticamente quando saranno disponibili nuovi aggiornamenti, perché la priorità della stable non è sufficiente al downgrade e pertanto il repository è ignorato, mentre d'altra parte la versione dei backports è più recente e la priorità (di default) è almeno pari a quella locale, che è sempre di 100.

/etc/apt/apt.conf

Questo file insieme ad altri permette di definire le opzioni di APT e relativi strumenti senza bisogno di digitarli sempre da riga di comando. Si vedano le guide dedicate ad Apt-Get e Aptitude per alcuni brevi esempi contenenti alcui dei parametri più comuni. Per quanto riguarda il pinning l'unico parametro strettamente di rilievo è:

APT::Default-Release "distribuzione_voluta";

che equivale alla dichiarazione in riga di comando dell'opzione -t distribuzione_voluta sia in Apt-Get che Aptitude. Tale dichiarazione attribuisce priorità 990 a tutti i pacchetti appartenenti alla distribuzione specificata.

  ATTENZIONE
  • Tale priorità si applica alla distribuzione e non alla fonte, quindi ad ottenere la suddetta priorità non saranno solo i pacchetti appartenenti al repository principale (o ai due repository principali), ma anche quelli provenienti da altre fonti se il gestore di tale repository usa lo stesso valore per i parametri suite e codename di quelli principali, ad esempio stable e wheezy. Per esempio backports non comporta problemi poiché i precedenti due parametri valgono nome_suite-backports e nome_codename-backports, viceversa quello di deb-multimedia usa gli stessi identici valori di quelli principali.
  • Per quanto riguarda tutti i pacchetti della release target questa dichiarazione ha la precedenza su qualsiasi altra generica priorità definita nel file preferences, ad eccezione di quei pacchetti per ciascuno dei quali sia stata definita una specifica priorità.
  • Questa direttiva influenza la priorità del repository principale di una release, nonché di quella relativa alla sua sicurezza, ad esempio


Si noti inoltre che:

  • Le dichiarazioni di parametri da riga di comando hanno sempre la precedenza su quelli definiti in un file di configurazione, quindi usare un comando del tipo apt-get install pacchetto -t distribuzione_taldeitali sorpassa qualunque distribuzione obiettivo (Default-Release) dichiarata nel file apt.conf. Quindi avere un pinning a 990 in preferences non è necessariamente equivalente a impostare una Default-Release.
  • Comandi del tipo apt-get install pacchetto/distribuzione_taldeitali non cambiano la target release, ma si limitano a dire di prelevare lo specifico pacchetto dalla distribuzione indicata invece che da quella predefinita. Questo implica che le dipendenze continueranno ad essere risolte in base alla distribuzione obiettivo eventualmente specificata in apt.conf e/o in base al file preferences e/o in accordo all'algoritmo predefinito.
  • Definire una distribuzione obiettivo in apt.conf è equivalente a dichiarare in preferences (si veda la prossima sezione) quanto segue
Package: *
Pin: release a=distribuzione_voluta
Pin-Priority: 990
  • Qualora si sia definita una distribuzione obiettivo in apt.conf allora quasiasi dichiarazione in preferences riguardante tutti i pacchetti di una certa distribuzione sarà ignorata, ad esempio definire
Package: *
Pin: release a=testing
Pin-Priority: 1000
è del tutto inutile se poi si usa l'opzione -t testing. Non è invece inutile una dichiarazione del seguente tipo:
Package: specifico pacchetto o espressione regolare
Pin: release a=testing
Pin-Priority: 1000
  File multipli
L'utente può, invece di creare un unico file di nome apt.conf, creare più file di nome arbitrario in /etc/apt/apt.conf.d/ (si veda il manuale)


/etc/apt/preferences

Questo è il file dove è possibile definire tutte le priorità che si vogliono, fermo restando quanto detto nella sezione dedicata ad apt.conf. La sintassi generale è la seguente:

Package: nome pacchetto o espressione regolare
Pin: parametro da usare per identificare la versione desiderata
Pin-Priority: numero

Un paio di esempi del tutto arbitrari:

Package: vlc
Pin: release a=testing
Pin-Priority: 991
 
Package: virtualbox4*
Pin: Release o=Oracle Corporation
Pin-Priority: 780

Nel primo esempio si è definito il pinning per il pacchetto di nome "vlc", richiedendo che le versioni appartenenti alla distribuzione testing abbiano priorità 991. Nel secondo invece sfruttando una semplicissima espressione regolare si impone che tutti i pacchetti il cui nome inizia per "virtualbox4" e appartenenti al repository la cui origine è definita come "Oracle Corporation" abbiano priorità 780.

Il pinning può essere orientato ai campi "Suite", "Origin", "Label" e "Codename" del file "Release" di un certo repository (si veda i repository ed il loro utilizzo), nonché all'indirizzo del repository stesso. Si noti che per archivi personali e/o non ufficiali può non essere presente (purtroppo) un file "Release". È utile infine evidenziare un paragrafo del manuale di apt_preferences:

  Importante
Se almeno un record in forma specifica corrisponde ad una versione di pacchetto disponibile, allora il primo di questi record determina la priorità della versione del pacchetto. In caso contrario, se almeno un record in forma generica corrisponde ad una versione di pacchetto disponibile, allora il primo di questi record determina la priorità della versione del pacchetto.


  Suggerimento
Specificare nel file sources.list sempre per primi il o i repository principali della distribuzione obiettivo.


  File multipli
È possibile creare più file di nome arbitrario in /etc/apt/apt.preferences.d/ invece di creare un unico file di nome preferences, (si veda il manuale).


Blocco/retrocessione di pacchetti

Il file preferences come già accennato può essere usato per bloccare e/o retrocedere (downgrade) uno o più pacchetti (al limite tutti); in entrambi i casi è necessario definire un pin maggiore di 1000 per il pacchetto desiderato. Se per esempio nel file preferences fosse presente un record come il seguente:

Package: nome_pacchetto
Pin: version 1.0.1
Pin-Priority: 1001

a seguito del comando apt-get install nome_pacchetto si avrebbero i seguenti due casi:

  1. Se nel sistema non esiste una versione del suddetto pacchetto oppure se già installato la sua versione è più vecchia di 1.0.1, allora il pacchetto viene aggiornato normalmente, ma una volta terminata l'installazione questo pacchetto non verrà mai più aggiornato.
  2. Se il pacchetto è già stato installato e la sua versione è più recente di 1.0.1 allora il pacchetto presente nel sistema viene disinstallato e sostituito con quello avente versione 1.0.1. Terminata l'installazione il pacchetto non verrà mai più aggiornato.

Per permettere nuovamente l'aggiornamento del pacchetto è necessario o ridurre il pin sotto 1000 o eliminare del tutto il record.

Retrocedere l'intero sistema

Nella maggior parte dei casi (o forse sempre) questa È UNA FOLLIA, tuttavia per motivazioni puramente didattiche si mostra come fare. In primis è necessario eliminare, se presente, dal file apt.conf il parametro default-release, dopo di che aggiungere al file preferences un record come il seguente (sostituire a "stable" la versione desiderata, ad esempio "testing" se si vuole retrocedere da "unstable").

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

A questo punto dovrebbe essere sufficiente digitare da terminale:

# apt-get dist-upgrade

oppure

# aptitude full-upgrade

Esempi

  Nota
Per il significato dei vari parametri dichiarati in apt.conf, nonché per la relativa sintassi, si vedano le guide dedicate ad apt-get, aptitude, ecc. Si ricordi inoltre che non sempre la definizione di tale file è necessaria ai fini del pinning.


Release pura

Sebbene non sia necessario definire il pinning nel caso ci si limiti ad usare i repository ufficiali della propria release di debian, può comunque essere prudente definire un file apt.conf. Se infatti si dovesse decidere di aggiungere altri repository in seguito non si rischierebbe il disastro nel caso in cui ci si dimenticasse di definire correttamente un pinning.

Ciò avrebbe effetto sia sul repository principale, sia su quello della sicurezza. Ma non sugli eventuali updates o proposed-updates, che non sarebbero più aggiornati automaticamente, salvo che per i pacchetti già installati da quei repository. Per riabilitare gli aggiornamenti automatici è necessario impostare un pinning a 990, pari a quello della Default-Release.

Allo stesso modo in una release pura i pacchetti dei backports continuano a restare disabilitati per la loro prima installazione, salvo presenti soltanto nei backports o li si scelga manualmente come target release, ma i pacchetti installati dai backports vengono aggiornati automaticamente senza bisogno di pinning. Il che corrisponde al loro comportamento di default anche in assenza di una Default-Release, per cui non c'è bisogno di cambiarlo.

sources.list

deb http://ftp.it.debian.org/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free

apt.conf

APT
{
        Default-Release "stable";
        Cache-Limit 24000000;
        Get
        {
                AutomaticRemove "true";
                Fix-Broken "true";
                Purge "true";
                Show-Upgraded "true";
        }
}
Aptitude
{
        Autoclean-After-Update "true";
        Auto-Fix-Broken "true";
        Purge-Unused "true";
}

Osservazioni

Se invece della stable si volesse usare una testing o unstable pura basterebbe correggere opportunamente la riga in cui è dichiarato il parametro Default-Release.

Stable con backports

Si supponga di voler usare tutti i pacchetti della stable, con l'eccezione di quelli relativi a libre office e iceweasel.

sources.list

deb http://ftp.it.debian.org/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free
deb http://ftp.it.debian.org/debian/ wheezy-backports main

apt.conf

APT
{
        Default-Release "stable";
        Cache-Limit 36000000;
        Get
        {
                AutomaticRemove "true";
                Fix-Broken "true";
                Purge "true";
                Show-Upgraded "true";
        }
}
Aptitude
{
        Autoclean-After-Update "true";
        Auto-Fix-Broken "true";
        Purge-Unused "true";
}

preferences


Package: iceweasel*
Pin: release n=wheezy-backports
Pin-Priority: 992

Package: libreoffice*
Pin: release n=wheezy-backports
Pin-Priority: 992

Osservazioni

Per come è definito preferences l'installazione della versione di libreoffice e iceweasel da repository non backports è impossibile, anche usando l'opzione -t da riga di comando.

Testing con unstable

La distribuzione principale sia testing, quella secondaria unstable. Lo scopo è far sì che in automatico vengano recuperati da unstable tutti i pacchetti che non sono disponibili in testing.

sources.list

deb http://ftp.it.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb http://ftp.de.debian.org/debian unstable main contrib non-free

apt.conf

APT
{
        Default-Release "testing";
        Cache-Limit 36000000;
        Get
        {
                AutomaticRemove "true";
                Fix-Broken "true";
                Purge "true";
                Show-Upgraded "true";
        }
}
Aptitude
{
        Autoclean-After-Update "true";
        Auto-Fix-Broken "true";
        Purge-Unused "true";
}

preferences


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

Package: *
Pin: release o=Debian
Pin-Priority: -10

Osservazioni

  1. Usando le azioni install e upgrade senza specificare l'opzione -t unstable si installano/aggiornano pacchetti prelevando le versioni da testing, a meno che un pacchetto sia presente solo in unstable, nel qual caso sarà prelevato da lì. Le dipendenze saranno risolte se possibile usando testing, altrimenti usando unstable.
  2. Digitando apt-get install vattelapesca -t unstable si installerà la versione "vattelapesca" appartenente ad unstable, così come le sue dipendenze. Si noti che in questo caso successivi aggiornamenti tramite comandi del tipo apt-get upgrade o apt-get dist-upgrade non produrranno alcun aggiornamento da unstable del pacchetto "vattelapesca" se questo è anche presente in testing; in tal caso l'unica possibilità di aggiornare "vattelapesca" è digitare nuovamente apt-get install vattelapesca -t unstable (o aspettare pazientemente che la versione di testing superi quella installata).
  3. L'installazione di tutti i pacchetti provenienti da distribuzioni differenti da testing o unstable è completamente impedita, anche nel caso si aggiungessero repository relativi ad altre distribuzioni (a meno ovviamente di non aggiungere opportuni record in preferences).

Testing con deb-multimedia

Sia testing l'unica distribuzione d'interesse, nonché quella obiettivo. Si supponga di voler usare anche la fonte www.deb-multimedia.org, ma con l'unico scopo di installare solo quei pacchetti che non sono presenti nel repository principale.

  Nota
Questo esempio non permette di retrocedere automaticamente pacchetti già installati da deb-multimedia.


sources.list

deb http://ftp.it.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb http://www.deb-multimedia.org testing main non-free

apt.conf

APT
{
        Cache-Limit 36000000;
        Get
        {
                AllowUnauthenticated 1;
                AutomaticRemove "true";
                Fix-Broken "true";
                Purge "true";
                Show-Upgraded "true";
        }
}
Aptitude
{
        Autoclean-After-Update "true";
        Auto-Fix-Broken "true";
        Purge-Unused "true";
}

preferences


Package: *
Pin: Release o=Unofficial Multimedia Packages
Pin-Priority: 101

Package: *
Pin: Release a=Testing
Pin-Priority: 990

Package: *
Pin: release o=Debian
Pin-Priority: -10

Osservazioni

  1. Poiché entrambe le fonti, principale e deb-multimedia, appartengono alla distribuzione testing in teoria questo caso non sarebbe gestibile tramite pinning, tuttavia sotto l'ipotesi di voler installare da deb-multimedia solo i pacchetti non presenti nella fonte principale il problema è risolvibile. Evitando di definire in apt.conf una distribuzione obiettivo e definendo in preferences prima il record relativo a deb-multimedia si ottiene di riuscire ad assegnare la priorità desiderata, nonostante il fatto che il secondo record si applichi in teoria anche a deb-multimedia. Si noti che stanti così le cose dovrebbe essere in realtà possibile attribuire pin superiori, fino a 989, a deb-multimedia, senza che per questo i suoi candidati ottengano la precedenza su quelli del repository principale. Qualora invece si desiderasse dare la precedenza ai pacchetti di deb-multimedia sarebbe sufficiente definire la distribuzione obiettivo in apt.conf risultando perfino inutile definire un file preferences, visto che come già detto di norma i candidati di deb-multimedia hanno numero di versione maggiore di queli del repository principale.
  2. L'utilizzo dell'opzione -t in questo caso è inutile, visto che si lavora per ipotesi con una sola distribuzione.
  3. L'installazione di tutti i pacchetti provenienti da distribuzioni differenti da testing è completamente impedita, anche nel caso si aggiungessero repository relativi ad altre distribuzioni (a meno ovviamente di non aggiungere opportuni record in preferences).
  4. La definizione di un file apt.conf in questo esempio non è necessaria ai fini del pinning.

Mix di varie release

In questo how-to mostrerò come utilizzare pacchetti Debian provenienti da Testing, Unstable, Experimental e deb-multimedia (audio/video) ma le istruzioni sono facilmente riportabili anche ad altre situazioni (unstable + experimental, stable + testing, stable + unstable, stable + testing + unstable, ecc.).

Impostare i repository

Assicuriamoci di essere l'utente root e procediamo.

Per prima cosa editiamo il file /etc/apt/sources.list ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo, per esempio:

### Debian Ufficiale -- Testing
deb http://ftp.it.debian.org/debian/ testing main contrib non-free

### Debian Ufficiale -- Testing Sicurezza
deb http://security.debian.org/ testing/updates main contrib non-free

### Debian Ufficiale -- Sid
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free

###  Debian Ufficiale -- Experimental
deb http://ftp.it.debian.org/debian/ experimental main contrib non-free

### deb-multimedia -- Audio/Video -- Marillat
deb http://www.deb-multimedia.org testing main non-free
deb http://www.deb-multimedia.org sid main non-free

Configurare apt

A questo punto dobbiamo preparare due file normalmente non presenti sulla nostra debianbox: si tratta dei file /etc/apt/preferences e /etc/apt/apt.conf. Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.

Il file apt.conf

Ora creiamo il file /etc/apt/apt-conf

# touch /etc/apt/apt.conf

ed editiamolo inserendo quanto segue:

APT::Cache-Limit 15000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";

Nota: la sintassi usata in quest'esempio, pur essendo differente da quella dei precedenti, è del tutto equivalente. Anche in questo caso è bene sottolineare che la definizione di un file apt.conf non è necessaria ai fini del pinning.

Il file preferences

Creiamo il file /etc/apt/preferences:

# touch /etc/apt/preferences

ed editiamolo col nostro editor di fiducia e inseriamo queste direttive:

Package: *
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 992

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

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

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

Facciamo l'update del database dei pacchetti:

# apt-get update

D'ora in avanti avremo due possibilità per installare un nuovo pacchetto: il metodo che usiamo di solito e cioè:

# apt-get install nome_pacchetto

che utilizzerà pacchetti proveniente dalla versione impostata come Default-Release in apt.conf, oppure il comando

# apt-get install -t versione_di_debian nome_pacchetto

che provvederà a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze.

Comandi utili

È possibile visualizzare l'elenco delle priorità relative a tutti i repository e pacchetti dichiarati col seguente comando:

# apt-cache policy

Se si volesse visualizzare solo la priorità per un singolo singolo pacchetto, ad esempio nano, si può digitare:

# apt-cache policy nano

Si vedano anche le guide di apt-get e aptitude.

Approfondimenti

Manpages

man apt.conf
man apt_preferences




Guida scritta da: Keltik   Debianized 60%
Estesa da:
Nest (versione preunione)
Ferdybassi (versione preunione)
Wtf
xtow (versione preunione)
Verificata da:
TheNoise (versione preunione)
Wtf

Verificare ed estendere la guida | Cos'è una guida Debianized