3 581
contributi
(estensione (TODO: da ridurre qualcosa per rientrare sotto 32KB...)) |
(riformulazioni delle frasi per rientrare sotto i 30 KB, tagliando il meno possibile) |
||
Riga 14: | Riga 14: | ||
# Debian testing, attualmente ''Jessie''; | # Debian testing, attualmente ''Jessie''; | ||
# Debian unstable, attualmente (e sempre, un nome fisso) ''Sid''. | # Debian unstable, attualmente (e sempre, un nome fisso) ''Sid''. | ||
Il software della stable non viene aggiornato, eccezion fatta per gli aggiornamenti | Il software della stable non viene aggiornato, eccezion fatta per gli aggiornamenti di sicurezza; contrariamente a quello della testing e ancor più della unstable. Oltre a queste tre, ci sono anche la ''oldstable'', la versione precedente della stable, e la ''experimental'', che non è una versione completa e funzionante di Debian, ma solo un repository contenente software in fase di progettazione, da sperimentare o altamente instabile. | ||
Se si vuole software più aggiornato, la via consigliata è l'uso dei ''backports'' ufficiali, ma può accadere che non tutti gli aggiornamenti siano presenti. Qui entra in gioco il pinning, che permette di installare software appartenente a più release. | |||
{{Warningbox|Installare pacchetti provenienti da distribuzioni e/o fonti differenti è sempre e comunque fonte di | {{Warningbox|Installare pacchetti provenienti da distribuzioni e/o fonti differenti è sempre e comunque fonte di rischi, ed è sconsigliato. Questa guida presuppone la comprensione dei concetti esposti nella guida [[I repository ed il loro utilizzo]], nonché la conoscenza di [[apt-get]] o [[aptitude]].}} | ||
Prima di procedere nella descrizione operativa del pinning è '''fondamentale''' capire come gestisce la priorità dei pacchetti APT e sapere che: | Prima di procedere nella descrizione operativa del pinning è '''fondamentale''' capire come gestisce la priorità dei pacchetti APT e sapere che: | ||
* | * Con "distribuzione" si intendono stable, testing e unstable. Ciascuna ha un singolo repository (fonte) principale (due con il repository dedicato agli aggiornamenti di sicurezza, mancante per la unstable) che è quello automaticamente dichiarato dall'installer di debian, ma ogni distribuzione può avere più fonti, ufficiali e non. | ||
* | * Con "fonti" si intendono i repository, ufficiali e non, che forniscono pacchetti relativi ad una o più distribuzioni. Ogni fonte può avere più copie di se stesso (mirrors). | ||
{{Box|Importante|Il pinning è uno strumento per regolare la priorità in base al numero di versione dei pacchetti, e non alla fonte di provenienza. | {{Box|Importante|Il pinning è uno strumento per regolare la priorità in base al numero di versione dei pacchetti, e non alla fonte di provenienza. Non è possibile discriminare tra pacchetti aventi la stessa versione e provenienti da più repository, ovvero ad essere installato sarà quello proveniente dal repository elencato per primo nel file <code>sources.list</code>.}} | ||
= Priorità come punteggio = | = Priorità come punteggio = | ||
La priorità viene gestita 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 | * priorità '''1''', caso particolare e poco comune. È quella di default per ''experimental'' ('''NotAutomatic: yes''' nel file ''Release'' del repository). Si veda il manuale 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à '''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". | * priorità '''500''' alle versioni che non appartengono alla distribuzione obiettivo, dove con quest'ultimo termine si deve intendere "Default Release", "Target Release". Di default non è impostata una "Default Release", e quindi ogni repository a parte ''backports'' ed ''experimental'' ha una priorità di 500. | ||
* priorità '''990''' alle versioni che | * priorità '''990''' alle versioni che appartengono alla distribuzione obiettivo, posto che sia definita. | ||
Piccolo esempio teorico. Si supponga quanto segue: | Piccolo esempio teorico. Si supponga quanto segue: | ||
* si desidera installare il pacchetto "vattelapesca" appartenente alla propria distribuzione | * si desidera installare il pacchetto "vattelapesca" appartenente alla propria distribuzione (si supponga testing); | ||
* il suddetto pacchetto è presente in tre fonti | * il suddetto pacchetto è presente in tre fonti: repoA, repoB, repoC; tutte correttamente specificante nel file <code>source.list</code>; | ||
* 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); | * 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; | * 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"; | * nel sistema è installata la versione 1.3 di "vattelapesca"; | ||
* non esiste un file <code>preferences</code> o comunque non è stata specificata una priorità per nessuna delle tre distribuzioni considerate; | * non esiste un file <code>preferences</code> o comunque non è stata specificata una priorità per nessuna delle tre distribuzioni considerate; | ||
* non è stato dichiarato il parametro ''Default Release'' in un eventuale file <code>apt.conf</code>, ovvero non è stata | * non è stato dichiarato il parametro ''Default Release'' in un eventuale file <code>apt.conf</code>, ovvero non è stata definita una distribuzione obiettivo. | ||
Nel momento in cui l'utente esegue il comando <code>apt-get install vattelapesca</code> | Nel momento in cui l'utente esegue il comando <code>apt-get install vattelapesca</code> sarà assegnata una priorità di 500 ai "vattelapesca" di repoA, repoB e repoC.<br/> | ||
Il pacchetto da repoC viene immediatamente scartato perché implicherebbe la retrocessione (downgrade) dello stesso. A questo punto APT sceglierà tra repoA e repoB in base alla versione, e quindi a essere installato sarà quello da repoB e non da repoA come desiderato. | |||
Il problema evidentemente non può che esplodere quando si tenta di aggiornare tutti i pacchetti di sistema. | |||
Il problema evidentemente non può che esplodere | |||
La soluzione è | La soluzione è 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 <code>sources.list</code>. | ||
* Pin '''minore di 0''' (negativo), l’installazione del candidato è impedita a priori | * Pin '''minore di 0''' (negativo), l’installazione automatica del candidato è impedita a priori. | ||
* Pin compreso tra '''1 e 99''', il candidato sarà installato solo se sono verificate entrambe | * Pin compreso tra '''1 e 99''', il candidato sarà installato solo se sono verificate entrambe queste condizioni: non esistono candidati appartenenti ad altre distribuzioni, e 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 | * 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. | ||
* 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 <code>apt.conf</code>). | * 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 <code>apt.conf</code>). | ||
* 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 | * 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. | ||
* Pin '''1000''' o superiore, il candidato sarà installato se non esistono altri candidati con pin maggiore, | * Pin '''1000''' o superiore, il candidato sarà installato se non esistono altri candidati con pin maggiore, anche se ciò comportasse la retrocessione di versione (downgrade) del candidato. | ||
{{Box|IMPORTANTE|Si noti che gli intervalli sopra specificati sono la diretta conseguenza della procedura di assegnamento automatico di APT.}} | {{Box|IMPORTANTE|Si noti che gli intervalli sopra specificati sono la diretta conseguenza della procedura di assegnamento automatico di APT.}} | ||
Posto | Posto 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 che i tre repository siano in <code>sources.list</code>), un candidato vattelapesca di stable potrà essere installato solo se: | ||
# Non esistono altri candidati dello stesso pacchetto provenienti dalle altre | # Non esistono altri candidati dello stesso pacchetto provenienti dalle altre fonti, infatti APT assegnerebbe a loro automaticamente una priorità di 500 (500 > 44). | ||
# Nessun candidato di "vattelapesca" è mai stato installato, infatti | # Nessun candidato di "vattelapesca" è mai stato installato, infatti alla versione installata di "vattelapesca" sarebbe assegnata una priorità di 100 (100 > 44), a prescindere dalla sua versione, ovvero anche quando questa fosse inferiore a quella del nuovo candidato di stable disponibile. | ||
{{Box|Nota| | {{Box|Nota|* APT può derogare alle regole generali sopra esposte in casi particolari per soddisfare le varie dipendenze dei pacchetti.}} | ||
* APT può derogare alle regole generali sopra esposte in casi particolari per soddisfare le varie dipendenze dei pacchetti.}} | |||
== Priorità | == Priorità in caso di aggiornamento == | ||
Se una versione di un pacchetto è già installata sul sistema, la lettura dei punteggi può | Se una versione di un pacchetto è già stata installata sul sistema, la lettura dei punteggi può generare confusione. In particolare si noti che: | ||
* il downgrade è possibile solo con una priorità a | * il downgrade è possibile solo con una priorità almeno pari a 1000, il che significa che tutti i repository con una versione inferiore e priorità minore di 1000 sono ignorati; | ||
* i pacchetti installati hanno priorità 100, | * i pacchetti installati hanno priorità 100, e quindi un pacchetto può essere aggiornato automaticamente se esiste un repository con una versione più recente con una priorità almeno uguale. | ||
Per esempio la stable di default ha priorità 500, mentre i backports ne hanno una di 100. Ciò significa che non si può installare (automaticamente) una versione di un pacchetto dai backports che si trovi in entrambi i repository.<br/> | |||
Ma se si è già installato un pacchetto dai backports, impostando manualmente la target release | Ma se si è già installato un pacchetto dai backports, impostando manualmente la target release, 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 loro priorità è almeno pari a quella locale. | ||
= /etc/apt/apt.conf = | = /etc/apt/apt.conf = | ||
Riga 95: | Riga 90: | ||
Si noti inoltre che: | 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 <code>apt-get install pacchetto -t distribuzione_taldeitali</code> sorpassa qualunque distribuzione obiettivo (''Default-Release'') dichiarata nel file <code>apt.conf</code>. | * 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 <code>apt-get install pacchetto -t distribuzione_taldeitali</code> sorpassa qualunque distribuzione obiettivo (''Default-Release'') dichiarata nel file <code>apt.conf</code>. Perciò avere un pinning a 990 in preferences non è necessariamente equivalente a impostare una ''Default-Release''. | ||
* Comandi del tipo <code>apt-get install pacchetto/distribuzione_taldeitali</code> 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 <code>apt.conf</code> e/o in base al file preferences e/o in accordo all'algoritmo predefinito. | * Comandi del tipo <code>apt-get install pacchetto/distribuzione_taldeitali</code> 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 <code>apt.conf</code> e/o in base al file preferences e/o in accordo all'algoritmo predefinito. | ||
* Definire una distribuzione obiettivo in <code>apt.conf</code> è equivalente a dichiarare in <code>preferences</code> (si veda la prossima sezione) quanto segue | * Definire una distribuzione obiettivo in <code>apt.conf</code> è equivalente a dichiarare in <code>preferences</code> (si veda la prossima sezione) quanto segue | ||
Riga 149: | Riga 144: | ||
== Blocco/retrocessione di pacchetti == | == Blocco/retrocessione di pacchetti == | ||
Il file <code>preferences</code> | Il file <code>preferences</code> 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 o uguale a 1000 per il pacchetto desiderato. Se per esempio nel file <code>preferences</code> fosse presente un record come il seguente: | ||
<pre> | <pre> | ||
Riga 160: | Riga 155: | ||
# 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. | # 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. | ||
# 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. | # 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 | Per permettere nuovamente l'aggiornamento del pacchetto è necessario eliminare il record. | ||
=== Retrocedere l'intero sistema === | === Retrocedere l'intero sistema === | ||
Nella maggior parte dei casi (o forse sempre) questa '''È UNA FOLLIA''', tuttavia per motivazioni | Nella maggior parte dei casi (o forse sempre) questa '''È UNA FOLLIA''', tuttavia per motivazioni didattiche si mostra come fare. In primis è necessario eliminare, se presente, dal file <code>apt.conf</code> il parametro ''default-release'', dopo di che aggiungere al file <code>preferences</code> un record come il seguente (sostituire a "stable" la versione desiderata, ad esempio "testing" se si vuole retrocedere da "unstable"). | ||
<pre> | <pre> | ||
Package: * | Package: * | ||
Riga 181: | Riga 176: | ||
== Release pura == | == Release pura == | ||
Non serve il pinning se si usano i repository ufficiali di una sola release di Debian, ma può essere prudente definire un file <code>apt.conf</code> se si dovessero aggiungere altri repository in seguito e ci si dimenticasse di definire correttamente un pinning. | |||
Ciò avrebbe effetto | Ciò avrebbe effetto sul repository principale e 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''. | ||
In una release pura i pacchetti dei ''backports'' continuano a restare disabilitati per la loro prima installazione, salvo presenti soltanto lì o li si scelga 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''. | |||
=== sources.list === | === sources.list === | ||
Riga 223: | Riga 218: | ||
== Stable con backports == | == Stable con backports == | ||
Si supponga di voler usare tutti i pacchetti della stable, con l'eccezione di quelli relativi a | Si supponga di voler usare tutti i pacchetti della stable, con l'eccezione di quelli relativi a libreoffice e iceweasel. | ||
=== sources.list === | === sources.list === |
contributi