Repository & pinning: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
(passaggio di versione, cambio esempi, rimozione configurazioni non legate al pinning)
 
(24 versioni intermedie di 2 utenti non mostrate)
Riga 12: Riga 12:
Esistono diverse [[release]] di Debian, e si rimanda per maggiori dettagli a [[La struttura della Distribuzione]]. E in una configurazione normale, e consigliata, di Debian non è necessario configurare il [[pinning]] per nessuna.
Esistono diverse [[release]] di Debian, e si rimanda per maggiori dettagli a [[La struttura della Distribuzione]]. E in una configurazione normale, e consigliata, di Debian non è necessario configurare il [[pinning]] per nessuna.


Il pinning entra in gioco qualora si desiderino delle regole personalizzate per determinati pacchetti o [[repository]], o se si vogliono utilizzare i repository di più release di Debian contemporaneamente. Inizialmente era necessario anche per utilizzare altri repository, quali i ''backports'' o gli ''experimental'', ma attualmente la necessità di configurarlo è venuta meno in molte situazioni, e pertanto si raccomanda agli utenti non esperti nell'uso di [[APT]] di non ricorrervi a meno che sia strettamente necessario.
Il pinning entra in gioco qualora si desiderino delle regole personalizzate per determinati pacchetti o [[repository]], o se si vogliono utilizzare i repository di più release di Debian contemporaneamente. Inizialmente era necessario anche per utilizzare altri repository, quali i [[backports]] o gli [[experimental]], ma attualmente la necessità di configurarlo è venuta meno in molte situazioni, e pertanto si raccomanda agli utenti non esperti nell'uso di [[APT]] di non ricorrervi a meno che sia strettamente necessario.
 
{{Warningbox|Installare pacchetti provenienti da release 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]].}}


{{Cautionbox|Installare pacchetti provenienti da release 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]] o [[apt-get]].}}
{{Box|Importante|Il pinning è uno strumento per regolare la priorità in base al numero di versione dei pacchetti, e non alla 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>/etc/apt/sources.list</code>.}}
{{Box|Importante|Il pinning è uno strumento per regolare la priorità in base al numero di versione dei pacchetti, e non alla 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>/etc/apt/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:
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 per maggiori informazioni.
* 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 release 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à '''500''' alle versioni che non appartengono alla release 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 appartengono alla release obiettivo, posto che sia definita.
* priorità '''990''' alle versioni che appartengono alla release 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 [[release]] (si supponga testing);
* si desidera installare il pacchetto "vattelapesca" appartenente alla propria [[release]] (si supponga [[testing]]);
* il suddetto pacchetto è presente in tre fonti: repoA, repoB, repoC; tutte correttamente specificante nel file <code>sources.list</code>;
* il suddetto pacchetto è presente in tre fonti: repoA, repoB, repoC; tutte correttamente specificante nel file <code>sources.list</code>;
* tutti i pacchetti presenti in repoA appartengono alla release installata, in repoB e repoC sono contenuti pacchetti appartenenti ad un'altra release (ad esempio unstable e stable rispettivamente);
* tutti i pacchetti presenti in repoA appartengono alla release installata, in repoB e repoC sono contenuti pacchetti appartenenti ad un'altra release (ad esempio [[unstable]]/[[Sid]] 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";
Riga 34: Riga 33:
* non è stato dichiarato il parametro ''Default Release'' in un eventuale file <code>apt.conf</code>, ovvero non è stata definita una release obiettivo.
* non è stato dichiarato il parametro ''Default Release'' in un eventuale file <code>apt.conf</code>, ovvero non è stata definita una release obiettivo.


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/>
Nel momento in cui l'utente esegue il comando <code>apt 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 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 quando si tenta di aggiornare tutti i pacchetti di sistema.
Riga 60: Riga 59:
* i pacchetti installati hanno priorità 100, e quindi un pacchetto può essere aggiornato automaticamente se esiste un repository con una priorità di almeno 100 che contenga una versione più recente di quella installata.
* i pacchetti installati hanno priorità 100, e quindi un pacchetto può essere aggiornato automaticamente se esiste un repository con una priorità di almeno 100 che contenga una versione più recente di quella installata.


Per esempio la stable di default ha priorità 500 (ma quanto scritto varrebbe anche con una priorità fino a 990), 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/>
Per esempio la [[stable]] di default ha priorità 500 (ma quanto scritto varrebbe anche con una priorità fino a 990), 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, quel pacchetto verrà aggiornato automaticamente quando saranno disponibili nuovi aggiornamenti, perché:
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]], dato che servirebbe una priorità di almeno 1000, e pertanto il repository è ignorato;
* la priorità della stable non è sufficiente al [[downgrade]], dato che servirebbe una priorità di almeno 1000, e pertanto il repository è ignorato;
Riga 67: Riga 66:
Si noti che con una priorità superiore a 990 per la stable sarebbe impossibile installare i backports, anche manualmente. Tale priorità potrebbe essere assegnata dopo la loro installazione, ma sempre senza superare 1000 per evitare il [[downgrade]].
Si noti che con una priorità superiore a 990 per la stable sarebbe impossibile installare i backports, anche manualmente. Tale priorità potrebbe essere assegnata dopo la loro installazione, ma sempre senza superare 1000 per evitare il [[downgrade]].


= Priorità a singoli pacchetti =
== Priorità a singoli pacchetti ==
Se anziché attribuire un valore di ''Pin-Priority'' a tutti i pacchetti di un dato repository, lo si assegna soltanto a un insieme specifico di pacchetti, le loro dipendenze '''non''' ne saranno soggette.
Se anziché attribuire un valore di ''Pin-Priority'' a tutti i pacchetti di un dato repository, lo si assegna soltanto a un insieme specifico di pacchetti, le loro dipendenze '''non''' ne saranno soggette.


Riga 75: Riga 74:


= /etc/apt/apt.conf =
= /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 dei brevi esempi contenenti alcuni dei parametri più comuni.<br/>
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 dei brevi esempi contenenti alcuni dei parametri più comuni.<br/>
Per quanto riguarda il pinning l'unico parametro strettamente di rilievo è:
Per quanto riguarda il pinning l'unico parametro strettamente di rilievo è:


<pre>APT::Default-Release "release_voluta";</pre>
<pre>APT::Default-Release "release_voluta";</pre>


che equivale alla dichiarazione in riga di comando dell'opzione '''-t release_voluta''' in [[apt-get]], [[apt]] e [[aptitude]]. Tale dichiarazione attribuisce priorità 990 a tutti i pacchetti appartenenti alla [[release]] specificata.
che equivale alla dichiarazione in riga di comando dell'opzione '''<code>-t release_voluta</code>''' (anche nella forma <code>--target-release release_voluta</code>) in [[apt]], [[apt-get]] e [[aptitude]].


{{Warningbox|
Tale dichiarazione:
* Tale priorità si applica alla release 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 ''jessie''. 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.
* attribuisce priorità 990 a tutti i pacchetti appartenenti alla [[release]] specificata;
* Per quanto riguarda tutti i pacchetti della target release 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à.
* ignora tutte le impostazioni di pinning in <code>/etc/apt/preferences</code> riguardanti la stessa release e relative a tutti i pacchetti (anziché a un singolo pacchetto o a un gruppo di pacchetti).
* Questa direttiva influenza la priorità del repository principale di una release, nonché di quella relativa alla sua sicurezza, per esempio:
** <code>deb http://ftp.it.debian.org/debian/ jessie main</code>
** <code>deb http://security.debian.org/ jessie/updates main</code>
}}


Pertanto si raccomanda di '''non''' impostare una <code>Default-Release</code> se si vuole utilizzare anche il file <code>/etc/apt/preferences</code>, per non creare conflitti tra le due configurazioni. In questa guida ora '''si sconsiglia sempre''' l'uso di una <code>Default-Release</code>, per via dei cambiamenti introdotti a ''codename'' e ''suite'' di un repository di sicurezza a partire da Debian 11 ([[Bullseye]]).
{{Cautionbox|
* Tale priorità si applica alla release 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 ''{{Codename|stable}}''.
* Questa direttiva fino a Debian 10 ([[Buster]]) ha influenzato la priorità del repository principale di una release, nonché di quella relativa alla sua sicurezza, motivo per cui era abbastanza utile in alcune situazioni, per esempio nel caso di '''buster''' avrebbe influenzato entrambi i repository: <br/> <code>deb {{APT-mirror}} buster main</code> <br/> <code>deb {{APT-mirror|security}} buster/updates main</code>
* A partire da Debian 11 ([[Bullseye]]) però il repository di sicurezza ha ''codename'' e ''suite'' propri: ''codename'''''-security''' e ''suite'''''-security''' rispettivamente; ossia nel caso di '''bullseye''': <br/> <code>deb {{APT-mirror|security}} bullseye'''-security''' main</code> <br/> E pertanto l'uso di una <code>Default-Release</code> '''non''' influenzerà più il repository di sicurezza, di fatto disabilitandolo!}}
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 release_taldeitali</code> sorpassa qualunque release 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 install pacchetto/release_taldeitali</code> '''non''' cambiano la ''target release'', ma si limitano a dire di prelevare lo specifico pacchetto dalla release indicata invece che da quella predefinita. Questo implica che le dipendenze continueranno ad essere risolte in base alla release obiettivo eventualmente specificata in <code>apt.conf</code> e/o in base al file <code>preferences</code> e/o in accordo all'algoritmo predefinito.
* Comandi del tipo <code>apt-get install pacchetto/release_taldeitali</code> non cambiano la ''target release'', ma si limitano a dire di prelevare lo specifico pacchetto dalla release indicata invece che da quella predefinita. Questo implica che le dipendenze continueranno ad essere risolte in base alla release obiettivo eventualmente specificata in <code>apt.conf</code> e/o in base al file <code>preferences</code> e/o in accordo all'algoritmo predefinito.
* Le dichiarazioni di parametri da riga di comando hanno sempre la precedenza su quelli definiti in un file di configurazione, che di conseguenza verranno ignorati, quindi usare un comando del tipo <code>apt -t release_taldeitali install pacchetto</code> disabilita durante l'esecuzione qualunque release obiettivo (<code>Default-Release</code>) dichiarata nel file <code>apt.conf</code>. Perciò avere un pinning a 990 in <code>preferences</code> non è necessariamente equivalente a impostare una <code>Default-Release</code>, anche in assenza di conflitti tra i due file di configurazione.
* Definire una release obiettivo in <code>apt.conf</code> è equivalente a dichiarare in <code>preferences</code> (si veda la prossima sezione) quanto segue:
<pre>
Package: *
Pin: release a=release_voluta
Pin-Priority: 990
</pre>


{{Box|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)}}
{{Box|File multipli|L'utente può, invece di creare un unico file di nome <code>apt.conf</code>, creare più file di nome arbitrario in <code>/etc/apt/apt.conf.d/</code> (si veda il manuale)}}


= /etc/apt/preferences =
= /etc/apt/preferences =
Questo è il file dove è possibile definire tutte le priorità che si vogliono, fermo restando quanto detto nella sezione dedicata ad <code>apt.conf</code>. La sintassi generale è la seguente:
Questo è il file dove è possibile definire tutte le priorità che si vogliono, fermo restando quanto detto nella sezione dedicata ad <code>apt.conf</code> di utilizzare soltanto uno dei file per il pinning. La sintassi generale è la seguente:
<pre>
<pre>
Package: nome pacchetto o espressione regolare
Package: nome pacchetto o espressione regolare
Riga 109: Riga 104:
Pin-Priority: numero
Pin-Priority: numero
</pre>
</pre>
Un paio di esempi del tutto arbitrari:
 
<pre>
Un po' di esempi del tutto arbitrari:
Package: vlc
 
Pin: release a=testing
Package: vlc
Pin-Priority: 991
Pin: release a=testing
   
Pin-Priority: 991
Package: virtualbox4*
 
Pin: Release o=Oracle Corporation
Package: vlc
Pin-Priority: 780
Pin: release n={{Codename|testing}}
</pre>
  Pin-Priority: 991
Nel primo esempio si è definito il pinning per il pacchetto di nome "vlc", richiedendo che le versioni appartenenti alla release 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.
 
Package: virtualbox4*
Pin: Release o=Oracle Corporation
Pin-Priority: 780
 
Il primo e il secondo esempio sono equivalenti, il primo fa riferimento alla [[suite]] (detta anche '''''a'''rchive'') mentre il secondo al [[codename]] ('''''n'''ome in codice''). In entrambi si è definito il pinning per il pacchetto di nome "vlc", richiedendo che le versioni appartenenti alla release testing, attualmente [[{{Codename|Testing}}]], abbiano priorità 991. Attenzione però che quando {{Codename|Testing}} diverrà la nuova [[stable]], il primo si applicherà alla nuova testing mentre il secondo continuerà a far riferimento a {{Codename|Testing}}. Solitamente è consigliabile il secondo (con ''codename''), se si utilizza una stable e si vogliono prelevare pacchetti da testing, mentre il primo (con ''suite'') se si utilizza una testing e si vuole restare sempre con quella. La scelta dovrebbe inoltre riflettere quella adottata per tutti i repository in <code>/etc/apt/sources.list</code>, tenendo presente anche che i [[backports]] contengono sempre il ''codename''.
 
Nel terzo esempio invece, sfruttando un semplicissimo pattern, 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".
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".
Riga 150: Riga 152:
Non è un'operazione minimamente supportata né testata, in quanto è opposta a quella che avviene con l'aggiornamento tramite APT e ha grandi probabilità di rendere l'intero sistema inusabile. Si raccomanda caldamente invece di effettuare una nuova installazione della [[release]] desiderata.}}
Non è un'operazione minimamente supportata né testata, in quanto è opposta a quella che avviene con l'aggiornamento tramite APT e ha grandi probabilità di rendere l'intero sistema inusabile. Si raccomanda caldamente invece di effettuare una nuova installazione della [[release]] desiderata.}}


= Esempi =
= Esempi senza bisogno di pinning =
{{Box|Nota|Per il significato dei vari parametri dichiarati in <code>apt.conf</code>, nonché per la relativa sintassi, si vedano le guide dedicate ad [[apt-get]], ecc. Si ricordi inoltre che non sempre la definizione di tale file è necessaria ai fini del pinning.}}


== Release pura ==
== Release pura ==
Non serve il pinning se si usano i repository ufficiali di una sola release di Debian, ed è '''sconsigliato''' anche impostare una ''Default-Release'' in <code>apt.conf</code>.
Non serve il pinning se si usano i [[repository ufficiali]] o quelli [[repository speciali|speciali]] di una sola release di Debian, ed è '''sconsigliato''' anche impostare una <code>Default-Release</code> in <code>apt.conf</code>.
 
Infatti 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 sarebbe necessario impostare un pinning a 990, pari a quello della ''Default-Release''.


Si ricorda nuovamente che in una release pura non serve il pinning nemmeno per i [[backports]], perché i pacchetti contenuti non sono mai installati automaticamente senza specificare una release obiettivo (opzione <code>-t</code>/<code>--target-releae</code> con [[apt-get]]), salvo presenti soltanto lì, ma una volta che i pacchetti sono installati dai ''backports'' verranno aggiornati automaticamente.
Infatti ciò avrebbe effetto sul repository principale e su quello della sicurezza (solo fino a Debian 10 [[Buster]]), 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 sarebbe necessario impostare un pinning a 990, pari a quello della <code>Default-Release</code>.
E a partire da Debian 11 ([[Bullseye]]) perfino gli aggiornamenti di sicurezza sarebbero bloccati!


Inoltre anche nel caso che si utilizzino soltanto i repository [[sid]] ed [[experimental]] non sarebbe necessario alcun pinning, dato che gli ''experimental'' di default hanno una ''Pin-Priority'' di 1, che impedisce sia l'installazione sia l'aggiornamento automatico dei pacchetti contenuti.
== Stable con backports ==
Non è necessario alcun pinning nemmeno aggiungendo i [[backports]] ai repository della [[stable]] (attualmente [[{{Codename|Stable}}]]), in quanto di default sono disattivati, a eccezione dei pacchetti presenti soltanto lì, e consentono solo l'aggiornamento automatico dei pacchetti installati manualmente dai backports.


== Stable con backports obbligati ==
Per installare un pacchetto dai backports la prima volta, basta utilizzare [[apt]] (o equivalentemente [[apt-get]]):
Si supponga di voler usare tutti i pacchetti della stable, con l'eccezione di quelli relativi a libreoffice che si vuole siano prelevati dai ''backports'' (si legga [[backports|qui]] come attivarli).
# apt -t {{Codename|stable}}-backports install nomepacchetto


Si ricorda però che i backports non sono sottoposti agli stessi controlli dei repository principali della stable, per cui è sconsigliato l'uso indiscriminato di tutti i pacchetti contenuti, in particolare per macchine di produzione. È consigliabile utilizzarli soltanto per i pacchetti di cui si ha una reale necessità.
Per esempio per installare <code>libreoffice</code>:
# apt -t {{Codename|stable}}-backports install libreoffice


=== sources.list ===
Dopo di che sarà aggiornato automaticamente assieme agli altri pacchetti di {{Codename|Stable}} con:
<pre>
<pre>
deb http://ftp.it.debian.org/debian/ jessie main
# apt update
deb-src http://ftp.it.debian.org/debian/ jessie main
# apt upgrade
</pre>
Si noti invece che potrebbe essere necessario un <code>dist-upgrade</code> se si utilizza [[apt-get]].


# Aggiornamenti di sicurezza
=== Backports automatici ===
deb http://security.debian.org/ jessie/updates main
{{Cautionbox | Questo esempio '''non''' è consigliato, ma intende soltanto mostrare alcune delle problematiche nella configurazione del pinning.
deb-src http://security.debian.org/ jessie/updates main


# Aggiornamenti raccomandati
Si ricorda infatti che i backports non sono sottoposti agli stessi controlli dei repository principali della stable, per cui è sconsigliato l'uso indiscriminato di tutti i pacchetti contenuti, in particolare per macchine di produzione. È invece consigliabile utilizzarli soltanto per i pacchetti di cui si ha una reale necessità, come visto nella sezione precedente.}}
deb http://ftp.it.debian.org/debian/ jessie-updates main
Si supponga di voler usare tutti i pacchetti della [[stable]], con l'eccezione di quelli relativi a <code>libreoffice</code> che si vuole siano prelevati esclusivamente dai [[backports]]. È bene chiarire subito che '''non esiste alcun modo di garantire ciò''' tramite il pinning, poiché le [[dipendenze]] di un pacchetto non sono influenzate dalla sua ''Pin-Priority''. Quello che si può fare è trovare una soluzione di compromesso, che è quasi sempre più svantaggiosa di quella proposta nella sezione precedente, ossia non utilizzando alcun pinning.
deb-src http://ftp.it.debian.org/debian/ jessie-updates main


# Backports
Infatti è possibile soltanto impedire l'installazione dei pacchetti dalla stable quando presenti anche nei backports. Questo perché, per soddisfare tutte le possibili dipendenze dei pacchetti installati, l'unico modo sarebbe assegnare una ''Pin-Priority'' di almeno 500 a tutti i pacchetti provenienti dai backports, che di default ne hanno una di 100.
deb http://ftp.it.debian.org/debian/ jessie-backports main
deb-src http://ftp.it.debian.org/debian/ jessie-backports main
</pre>


Quello mostrato è solo un esempio con: i due repository principali di [[Jessie]], quello normale e di sicurezza; gli aggiornamenti raccomandati, che non sono strettamente necessari; e i backports.
Le principali alternative, presentate a solo scopo didattico:
* nessuna <code>Default-Release</code> in <code>apt.conf</code> e file <code>/etc/apt/preferences</code> come segue
Package: libreoffice
Pin: release n={{Codename|stable}}-backports
Pin-Priority: 500
* nessuna <code>Default-Release</code> in <code>apt.conf</code> e file <code>/etc/apt/preferences</code> come segue
Package: libreoffice*
Pin: release n={{Codename|stable}}-backports
Pin-Priority: 500
* nessuna impostazione in <code>/etc/apt/preferences</code> e file <code>/etc/apt/apt.conf</code> come segue
APT::Default-Release "{{Codename|stable}}-backports";


Di default si ricordi che tutti i repository hanno una priorità di 500, a eccezione di '''jessie-backports''' che ne hanno una di 100.
La prima possibilità restituisce errore quando si cerca di installare il pacchetto, costringendo a ricorrere all'opzione <code>-t</code> oppure lasciando ad [[aptitude]] il compito di risolvere i conflitti. In modo analogo può restituire errore durante un aggiornamento, se richiede anche l'aggiornamento delle sue [[dipendenze]], costringendo a ripetere il comando di installazione con <code>-t</code>.


=== apt.conf ===
La seconda possibilità riesce più spesso, in quanto quasi tutte le dipendenze cominciano con la stringa ''libreoffice'' e sono quindi catturate dal pattern ''libreoffice'''*''''', tuttavia nemmeno ciò garantisce il funzionamento automatico in ogni circostanza, per via di possibili altre dipendenze con altri nomi. E anche se aggiungessimo pure tali pacchetti, si aumenterebbe soltanto la frequenza di successo, senza però mai avere una garanzia nella totalità dei casi, visto che nuove dipendenze potrebbero essere aggiunte in successivi aggiornamenti.
Non serve modificarlo, né crearlo se non esiste, ed è anzi consigliabile non impostare la ''Default-Release''. Si noti infatti che il suo utilizzo per '''jessie''' non avrebbe effetto sugli aggiornamenti raccomandati ('''jessie-updates'''), che verrebbero quindi disabilitati come i backports.


=== preferences ===
La terza alternativa è l'unica che funziona sempre in automatico, ma si applica indiscriminatamente a tutti i pacchetti contenuti nei ''backports'', che è proprio quello che si voleva evitare per una [[stable]].
<br/>
<pre>
Package: libreoffice*
Pin: release n=jessie-backports
Pin-Priority: 990
</pre>


=== Osservazioni ===
{{Box | Backports obbligatori | Specificando una priorità di 990 anziché 500 nel file <code>/etc/apt/preferences</code>, come visto in questa sezione, l'installazione di <code>libreoffice</code> dai repository non backports fallirebbe anche utilizzando l'opzione <code>-t {{Codename|stable}}</code>, rendendo l'installazione da ''{{Codename|stable}}-backports'' l'unica possibile (anche se non garantita senza l'uso dell'opzione <code>-t {{Codename|stable}}-backports</code>).
Per come è definito <code>preferences</code> l'installazione della versione di libreoffice da repository non ''backports'' è impossibile, una volta che i pacchetti entrano in tale [[repository]], anche usando l'opzione <code>-t</code> da riga di comando.


== Stable con testing ==
Si noti invece che l'uso dei backports non è obbligatorio specificando la <code>Default-Release</code> a ''{{Codename|stable}}-backports'', per le ragioni già esposte nella sezione su <code>apt.conf</code> di questa guida, anche se lo sarebbero gli aggiornamenti (in assenza di conflitti con le dipendenze).}}
{{Warningbox | Senza pinning ci si troverebbe con una testing effettuando gli aggiornamenti del sistema.


Ma anche con il pinning c'è il pericolo che a ogni aggiornamento aumenti la possibilità che nuove dipendenze da ''testing'' siano necessarie, rendendo la provenienza dei pacchetti della propria distribuzione sempre più mista, senza i benefici di nessuna delle due e quindi in una situazione meno desiderabile di un passaggio diretto a ''testing''.}}
== Unstable/Sid ed experimental ==
Se si utilizzino soltanto i repository [[sid]] ed [[experimental]] non è necessario alcun pinning, dato che gli experimental di default hanno una ''Pin-Priority'' di 1, che impedisce sia l'installazione sia l'aggiornamento automatico dei pacchetti contenuti.


Per prima cosa si devono aggiungere i [[Repository ufficiali|repository di testing]]. Di seguito sono esaminate diverse possibilità di pinning, in base alla configurazione desiderata.
Per installare o aggiornare un pacchetto da experimental, basta eseguire:
<pre># apt -t experimental install nomepacchetto</pre>


=== sources.list ===
= Esempi con pinning =
<pre>
deb http://ftp.it.debian.org/debian/ jessie main
deb-src http://ftp.it.debian.org/debian/ jessie main


# Aggiornamenti di sicurezza
== Stable con testing ==
deb http://security.debian.org/ jessie/updates main
{{Cautionbox | Senza pinning ci si troverebbe con una testing effettuando gli aggiornamenti del sistema.
deb-src http://security.debian.org/ jessie/updates main


# Aggiornamenti raccomandati
Ma anche con il pinning c'è il pericolo che a ogni aggiornamento aumenti la possibilità che nuove dipendenze da testing siano necessarie, rendendo la provenienza dei pacchetti della propria distribuzione sempre più mista, senza i benefici di nessuna delle due e quindi in una situazione meno desiderabile di un passaggio diretto a testing.}}
deb http://ftp.it.debian.org/debian/ jessie-updates main
Per prima cosa si devono aggiungere i [[Repository ufficiali|repository di testing]]. Di seguito sono esaminate diverse possibilità di pinning, in base alla configurazione desiderata.
deb-src http://ftp.it.debian.org/debian/ jessie-updates main


# Backports
=== sources.list ===
deb http://ftp.it.debian.org/debian/ jessie-backports main
{{Cautionbox | Si ricorda che a partire da Debian 11 ([[Bullseye]]) i repository di sicurezza andranno scritti con la dicitura ''release'''''-security''' (anziché ''release'''''/updates'''); per esempio nel caso di bullseye:
deb-src http://ftp.it.debian.org/debian/ jessie-backports main
deb {{APT-mirror|security}} bullseye'''-security''' main }}
# Stable
deb {{APT-mirror}} {{Codename|stable}} main
deb-src {{APT-mirror}} {{Codename|stable}} main
# Aggiornamenti di sicurezza
deb {{APT-mirror|security}} {{Codename|stable}}{{#ifeq: {{Codename|stable}} | buster | /updates | -security }} main
deb-src {{APT-mirror|security}} {{Codename|stable}}{{#ifeq: {{Codename|stable}} | buster | /updates | -security }} main
# Aggiornamenti raccomandati
deb {{APT-mirror}} {{Codename|stable}}-updates main
deb-src {{APT-mirror}} {{Codename|stable}}-updates main
# Backports
deb {{APT-mirror}} {{Codename|stable}}-backports main
deb-src {{APT-mirror}} {{Codename|stable}}-backports main
# Testing
deb {{APT-mirror}} {{Codename|testing}} main
deb-src {{APT-mirror}} {{Codename|testing}} main
# Aggiornamenti di sicurezza di testing
deb {{APT-mirror|security}} {{Codename|testing}}-security main
deb-src {{APT-mirror|security}} {{Codename|testing}}-security main


# Testing
Quello mostrato è solo un esempio con i due repository principali di [[{{Codename|Stable}}]], quello normale e di sicurezza, gli aggiornamenti raccomandati e i backports, che non sono strettamente necessari per questo esempio (ma è sempre preferibile cercare prima in questi repository che in testing), e i due repository di [[{{Codename|Testing}}]] ([[testing]]).
deb http://ftp.it.debian.org/debian/ stretch main
deb-src http://ftp.it.debian.org/debian/ stretch main


# Aggiornamenti di sicurezza di testing
Questo file è valido per tutti gli esempi di questa sezione, mentre gli altri dipendono dalla configurazione del pinning desiderata. Si noti in particolare la scelta del [[codename]] (''{{Codename|testing}}'') al posto della [[suite]] (''testing''), che è la configurazione consigliata in presenza di una [[stable]] e verrà quindi mantenuta anche per il pinning.
deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main
</pre>


Quello mostrato è solo un esempio con i due repository principali di [[Jessie]], quello normale e di sicurezza, gli aggiornamenti raccomandati e i backports, che non sono strettamente necessari per questo esempio (ma è sempre preferibile cercare prima in questi repository che in ''testing''), e i due repository di [[Stretch]] ([[testing]]).
=== apt.conf ===
 
Non si utilizza in questo caso, per non creare conflitti con il file <code>/etc/apt/preferences</code>. Assicurarsi perciò che <code>/etc/apt/apt.conf</code> non contenga una riga su <code>Default-Release</code>, che se presente va cancellata.
Questo file è valido per tutti gli esempi di questa sezione, mentre gli altri dipendono dalla configurazione del pinning desiderata.


=== Pinning per un singolo pacchetto ===
=== Pinning per un singolo pacchetto ===
Creare il file <code>/etc/apt/preferences.d/miopinning</code> con questo contenuto:
Creare il file <code>/etc/apt/preferences</code> con questo contenuto:
<pre>
Package: nomepacchetto
Package: nomepacchetto
Pin: release n={{Codename|testing}}
Pin: release a=testing
Pin-Priority: 990
Pin-Priority: 990
Package: *
Pin: release n={{Codename|testing}}
Pin-Priority: -1


Package: *
Questa configurazione si consiglia soltanto per pacchetti che non richiedono l'installazione di altri da testing.
Pin: release a=testing
Pin-Priority: -1
</pre>


Adesso è possibile installare il pacchetto "nomepacchetto" da ''testing'' con:
Si può controllarne il funzionamento con:
<pre>
<pre>
# apt-get install nomepacchetto
$ apt-get --simulate install nomepacchetto
</pre>
</pre>
oppure in caso di dipendenze con:
(e si può usare la forma abbreviata <code>-s</code> al posto di <code>--simulate</code>)
<pre>
# apt-get -t testing install nomepacchetto
</pre>
Con questo secondo comando è superfluo l'uso del pinning per "nomepacchetto", se non per ricordarsi la configurazione desiderata.


{{Box | Aptitude | È possibile anche installare il pacchetto tramite [[aptitude]]:
In assenza di problemi, sarà possibile installare il pacchetto "nomepacchetto" da testing semplicemente con:
<pre>
<pre>
# aptitude install nomepaccheto
# apt install nomepacchetto
</pre>
</pre>
facendo risolvere a questo comando il conflitto causato dal pinning del pacchetto e le sue dipendenze, fino ad ottenere la soluzione desiderata.
Si presti però attenzione alle soluzioni proposte, prima di accettarle. Questo metodo '''non''' è consigliato, ma è presentato per completezza per chiarire come in alcuni casi è possibile l'installazione di un pacchetto senza specificare manualmente l'opzione <code>-t</code>.}}


Si noti anche che non si avranno aggiornamenti automatici per i pacchetti che vengono installati con questo metodo, a meno che riguardino soltanto quel singolo pacchetto e nessun altro. In caso contrario bisogna rieseguire il precedente comando, avvalersi di <code>aptitude</code> per risolvere i conflitti, oppure impostare il pinning con la configurazione trattata in seguito.
In presenza di dipendenze, o si aggiungono al file <code>preferences</code> se non sono molte, oppure si consiglia la configurazione presentata nella sezione successiva.


{{Cautionbox | Infatti mentre sarebbe possibile forzarne l'installazione con:
# apt -t {{Codename|testing}} install nomepacchetto
c'è da considerare che l'uso dell'opzione <code>-t</code> renderebbe il pinning per "nomepacchetto" superfluo; e inoltre la configurazione attuale impedirebbe gli aggiornamenti automatici delle dipendenze appena installate, costringendo a ripetere il comando precedente in caso di conflitti oppure ad avvelersi di [[aptitude]] per risolverli (prestando '''molta attenzione''' alle soluzioni proposte).}}
=== Pinning per tutti i pacchetti di testing e backports ===
=== Pinning per tutti i pacchetti di testing e backports ===
Questa possibilità consente gli aggiornamenti automatici dei pacchetti installati manualmente da testing, permettendone l'installazione anche in assenza di altre versioni disponibili. È sufficiente scrivere il file <code>/etc/apt/preferences.d/miopinning</code> come segue:
Questa possibilità consente gli aggiornamenti automatici dei pacchetti installati manualmente da testing, permettendone l'installazione anche in assenza di altre versioni disponibili. È sufficiente scrivere il file <code>/etc/apt/preferences</code> come segue:
<pre>
Package: *
Package: *
Pin: release a={{Codename|stable}}-backports
Pin: release a=jessie-backports
Pin-Priority: 300
Pin-Priority: 300
 
Package: *
Package: *
Pin: release n={{Codename|testing}}
Pin: release a=testing
Pin-Priority: 200
Pin-Priority: 200
Dove ''{{Codename|stable}}-backports'' è il nome della [[suite]] (e il [[codename]], che sono uguali per i [[backports]]) dei repository backports di [[{{Codename|Stable}}]]. È consigliabile specificare la nuova priorità a prescindere dalla loro presenza, altrimenti se attivati saranno sempre nascosti da [[{{Codename|Testing}}]], avendo di default una priorità di 100 e contenendo versioni non più aggiornate.
</pre>
Dove ''jessie-backports'' è il nome della [[suite]] (e il [[codename]], che sono uguali per i [[backports]]) dei repository backports di [[Jessie]]. È consigliabile specificare la nuova priorità a prescindere dalla loro presenza, altrimenti se attivati saranno sempre nascosti da ''testing'', avendo di default una priorità di 100 e contenendo versioni non più aggiornate.


Si noti che i valori scelti non sono gli unici possibili. L'importante è che siano soddisfatte le seguenti condizioni:
Si noti che i valori scelti non sono gli unici possibili. L'importante è che siano soddisfatte le seguenti condizioni:
* ''jessie-backports'' deve avere una priorità inferiore a quella di default (500), utilizzata per ''jessie'' e ''jessie-updates'';
* ''{{Codename|stable}}-backports'' deve avere una priorità inferiore a quella di default (500), utilizzata per ''{{Codename|stable}}'' e ''{{Codename|stable}}-updates'';
* ''testing'' deve avere una priorità inferiore a quella scelta per ''jessie-backports'';
* ''{{Codename|testing}}'' deve avere una priorità inferiore a quella scelta per ''{{Codename|stable}}-backports'';
* ''testing'' e ''jessie-backports'' devono avere una priorità almeno pari a 100, per consentire gli aggiornamenti automatici una volta che un pacchetto è installato da tali repository.
* ''{{Codename|testing}}'' e ''{{Codename|stable}}-backports'' devono avere una priorità almeno pari a 100, per consentire gli aggiornamenti automatici una volta che un pacchetto è installato da tali repository.


Ora basterà:
Ora basterà:
<pre>
# apt -t {{Codename|testing}} install nomepacchetto
# apt-get -t testing install nomepacchetto
per installare nuovi pacchetti da {{Codename|Testing}}, che saranno poi aggiornati in automatico. Si noti però che perfino in questo caso gli aggiornamenti potrebbero comunque richiedere l'uso dell'opzione <code>-t</code> oppure il meccanismo di risoluzione dei conflitti di [[aptitude]], se nuove dipendenze fossero aggiunte nello stesso ramo.
</pre>
per installare nuovi pacchetti da ''testing'', che saranno poi aggiornati in automatico. Si noti però che perfino in questo caso gli aggiornamenti potrebbero comunque richiedere l'uso dell'opzione <code>-t</code>, se nuove dipendenze fossero aggiunte in ''testing'', oppure il meccanismo di risoluzione automatica dei conflitti di [[aptitude]].


== Testing con unstable ==
== Testing con unstable ed experimental ==
La release principale sia [[testing]], quella secondaria [[Sid]]/[[unstable]]. Si legga [[Repository ufficiali|questa guida]] per impostare i repository di entrambe nel file <code>/etc/apt/sources.list</code>.
<!--
  NOTA: *NON* cambiare il nome della sezione "Testing con unstable ed experimental", perché è utilizzata da altre guide.
-->
La release principale sia [[testing]], quella secondaria [[Sid]]/[[unstable]] e si utilizzino anche i repository [[experimental]].  


=== sources.list ===
=== sources.list ===
<pre>
deb {{APT-mirror}} testing main
deb http://ftp.it.debian.org/debian/ testing main
deb-src {{APT-mirror}} testing main
deb-src http://ftp.it.debian.org/debian/ testing main
# Aggiornamenti di sicurezza
deb {{APT-mirror|security}} testing-security main
deb-src {{APT-mirror|security}} testing-security main
# Unstable
deb {{APT-mirror}} sid main
deb-src {{APT-mirror}} sid main
# Experimental
deb {{APT-mirror}} experimental main
deb-src {{APT-mirror}} experimental main
 
Si noti che i repository sono indicati per [[suite]] anziché per [[codename]], in questo modo la propria release rimarrà sempre [[testing]] senza mai divenire la nuova [[stable]].


# Aggiornamenti di sicurezza
Di default tutti hanno priorità 500, a eccezione di experimental che ha una priorità di 1. È il motivo per cui, se si utilizzassero soltanto sid ed experimental non sarebbe necessario alcun pinning, avendo già priorità differente.
deb http://security.debian.org/ testing/updates main
deb-src http://security.debian.org/ testing/updates main


# Unstable
La configurazione inoltre sarebbe equivalente anche se non si utilizzasse il repository experimental, ma soltanto testing e sid, e sarebbe sufficiente rimuovere experimental dal file <code>/etc/apt/sources.list</code> .
deb http://ftp.it.debian.org/debian/ sid main
deb-src http://ftp.it.debian.org/debian/ sid main
</pre>
Si noti che i repository sono indicati per [[suite]] anziché per [[codename]], in questo modo la propria release rimarrà sempre [[testing]] senza mai divenire la nuova [[stable]].


=== apt.conf ===
=== apt.conf ===
<pre>
Assicurarsi che '''non''' sia impostata una <code>Default-Release</code> per non disabilitare gli aggiornamenti di sicurezza ('''testing-security''').
APT::Default-Release "testing";
</pre>


Questa configurazione assegna al repository principale e a quello di sicurezza di testing un pinning di 990.
[[Testing]] tipicamente non riceve comunque aggiornamenti di sicurezza da questo repository, se non quando non è possibile il porting da [[Sid]], ma è sempre meglio tenerlo abilitato.


=== preferences ===
=== preferences ===
Non è necessario configurare alcun pinning, perché è sufficiente l'uso di <code>Default-Release</code> nel file <code>apt.conf</code>.
In questo modo entrambi i repository '''testing''' e '''testing-security''' avranno priorità maggiore di '''sid''':


=== Osservazioni ===
Package: *
# 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.
Pin: release a=testing-security
# Digitando <code>apt-get -t unstable install vattelapesca</code> si installerà la versione "vattelapesca" appartenente ad unstable, così come le sue dipendenze. Si noti che dopo l'avvenuta installazione, successivi aggiornamenti tramite comandi del tipo <code>apt-get upgrade</code> o <code>apt-get dist-upgrade</code> continueranno a installare la versione più recente, anche prelevandola automaticamente da ''unstable'', almeno finché la versione in testing non diverrà equivalente a quella in unstable.
Pin-Priority: 990
# Una volta che la versione in testing divenisse uguale a quella presente in unstable, successive versioni presenti soltanto in unstable non sarebbero aggiornate automaticamente, ma servirebbe specificare nuovamente l'opzione '''-t'''/'''--target-release'''.
Package: *
Pin: release a=testing
Pin-Priority: 990


== Testing con unstable ed experimental ==
Si noti che questa configurazione era equivalente a impostare la <code>Default-Release</code> a '''testing''' nel file <code>/etc/apt/apt.conf</code>, prima dei cambiamenti a [[codename]] e [[suite]] dei repository di sicurezza introdotti con Debian 11 ([[Bullseye]]).
La release principale sia [[testing]], quella secondaria [[Sid]]/[[unstable]] e si utilizzino anche i repository [[experimental]].


=== sources.list ===
Alternativamente sarebbe possibile anche impostare una priorità inferiore per '''sid''', purché almeno uguale a '''100'''. Per esempio:
Il file <code>/etc/apt/sources.list</code> sarà simile al precedente, con aggiunti i soli repository [[experimental]].
Package: *
<pre>
Pin: release n=sid
deb http://ftp.it.debian.org/debian/ testing main
Pin-Priority: 100
deb-src http://ftp.it.debian.org/debian/ testing main
 
# Aggiornamenti di sicurezza
deb http://security.debian.org/ testing/updates main
deb-src http://security.debian.org/ testing/updates main
 
# Unstable
deb http://ftp.it.debian.org/debian/ sid main
deb-src http://ftp.it.debian.org/debian/ sid main
 
# Experimental
deb http://ftp.it.debian.org/debian/ experimental main
deb-src http://ftp.it.debian.org/debian/ experimental main
</pre>
Come nell'esempio precedente i repository sono indicati per [[suite]] anziché per [[codename]], in questo modo la propria release rimarrà sempre [[testing]] senza mai divenire la nuova [[stable]].
 
Di default tutti hanno priorità 500, a eccezione di ''experimental'' che ha una priorità di 1, per cui è sufficiente ripetere la configurazione vista nell'esempio precedente.  È il motivo per cui, se si utilizzassero soltanto ''sid'' ed ''experimental'' non sarebbe necessario alcun pinning, avendo già priorità differente.
 
=== apt.conf ===
<pre>
APT::Default-Release "testing";
</pre>
 
Questa configurazione assegna al repository principale e a quello di sicurezza di testing un pinning di 990. Di conseguenza ''sid'' resta a 500 ed ''experimental'' a 1.


=== preferences ===
Con entrambe le configurazioni il repository di '''sid''' sarebbe equivalente a quello dei [[Il repository Backports|backports]]; ossia verrebbe consentito l'aggiornamento automatico dei pacchetti installati, ma non l'installazione automatica di nuovi pacchetti (se presenti anche in '''testing''').
Non è necessario configurare alcun pinning, perché è sufficiente l'uso di <code>Default-Release</code> nel file <code>apt.conf</code>.


=== Osservazioni ===
=== Osservazioni ===
Il funzionamento è simile a quello dell'esempio precedente, in quanto per installare da ''sid'' o ''experimental'' è necessario specificarlo con l'opzione '''-t'''/'''--target-release''', ma i pacchetti installati da ''experimental'' non saranno mai aggiornati in automatico.
# Usando le azioni ''install'' e ''upgrade'' senza specificare l'opzione '''<code>-t sid</code>''' si installano/aggiornano pacchetti prelevando le versioni da testing, a meno che un pacchetto sia presente solo in sid, nel qual caso sarà prelevato da lì. Le dipendenze saranno risolte se possibile usando testing, altrimenti usando sid.
 
# Digitando <code>apt -t sid install vattelapesca</code> si installerà la versione "vattelapesca" appartenente ad sid, così come le sue dipendenze. Si noti che dopo l'avvenuta installazione, successivi aggiornamenti tramite comandi del tipo <code>apt upgrade</code> o <code>apt full-upgrade</code> continueranno a installare la versione più recente, anche prelevandola automaticamente da sid, almeno finché la versione in testing non diverrà equivalente.
Questo comportamento è del tutto voluto, perché sarebbe troppo pericoloso aggiornare senza supervisione ciò che proviene da quel repository, essendo quello meno testato e con maggiori bug. Per effettuare l'aggiornamento è sufficiente ripetere il comando di installazione:
# Una volta che la versione in testing divenisse uguale a quella presente in sid, successive versioni presenti soltanto in sid non sarebbero aggiornate automaticamente, ma servirebbe specificare nuovamente l'opzione <code>-t</code>/<code>--target-release</code>.
<pre>
# I pacchetti contenuti in experimental sono installabili unicamente se non sono già installati e se non sono presenti in nessun altro repository. Altrimenti è necessario ricorrere all'opzione <code>-t</code>.
# apt-get -t experimental install nomepacchetto
# Tutto quello che è installato da experimental non sarà mai aggiornato in automatico. Questo comportamento è del tutto voluto, perché sarebbe troppo pericoloso aggiornare senza supervisione ciò che proviene da questo repository, essendo quello meno testato e potenzialmente con maggiori bug. Per effettuare l'aggiornamento è sufficiente ripetere il comando di installazione: <br/><code># apt -t experimental install nomepacchetto</code>
</pre>


== Testing con pacchetti non-free e repository deb-multimedia ==
== Testing con pacchetti non-free e repository deb-multimedia ==
Riga 379: Riga 369:
=== sources.list ===
=== sources.list ===
Abilitiamo anche le sezioni ''contrib'' e ''non-free'':
Abilitiamo anche le sezioni ''contrib'' e ''non-free'':
<pre>
### Debian testing
deb http://ftp.it.debian.org/debian/ testing main contrib non-free


### Debian testing - sicurezza
# Debian testing
deb http://security.debian.org/ testing/updates main contrib non-free
deb {{APT-mirror}} testing main contrib non-free
# Debian testing - sicurezza
deb {{APT-mirror|security}} testing-security main contrib non-free
# repository NON ufficiali - multimedia
deb http://www.deb-multimedia.org testing main non-free


### repository NON ufficiali - multimedia
Senza altre impostazioni, tutti i repository avrebbero una priorità di 500, e pertanto di default verrebbero sempre installati quelli solitamente più aggiornati di ''deb-multimedia'', ogni volta che è possibile. Questo comportamento non è affatto desiderabile, e anzi può compromettere la stabilità del sistema.
deb http://www.deb-multimedia.org testing main non-free
</pre>
 
Senza altre impostazioni, tutti i repository avrebbero una priorità di 500, e pertanto di default verrebbero sempre installati quelli solitamente più aggiornati di deb-multimedia, ogni volta che è possibile. Questo comportamento non è affatto desiderabile, e anzi può compromettere la stabilità del sistema.


=== apt.conf ===
=== apt.conf ===
Non è necessaria nessuna modifica. Sarebbe inoltre del tutto inutile impostare una ''Default-Release'', poiché sia i repository ufficiali sia quelli di deb-multimedia sono considerati '''testing'''.
Non è necessaria nessuna modifica. Sarebbe inoltre del tutto inutile impostare una <code>Default-Release</code>, poiché sia i repository ufficiali sia quelli di ''deb-multimedia'' sono considerati testing.


=== preferences ===
=== preferences ===
Riga 402: Riga 391:
</pre>
</pre>


Con questa impostazione il repository deb-multimedia si comporta in maniera analoga ai repository backports ufficiali, consentendo l'installazione automatica dei soli pacchetti non presenti in altri repository e anche l'aggiornamento automatico di tutti i pacchetti precedentemente installati dallo stesso.
Con questa impostazione il repository ''deb-multimedia'' si comporta in maniera analoga ai repository backports ufficiali, consentendo l'installazione automatica dei soli pacchetti non presenti in altri repository e anche l'aggiornamento automatico di tutti i pacchetti precedentemente installati dallo stesso.


=== Osservazioni ===
=== Osservazioni ===
* Poiché entrambe le fonti, ''principale'' e ''deb-multimedia'', appartengono alla release 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 <code>apt.conf</code> una release obiettivo e definendo in <code>preferences</code> 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 499, a deb-multimedia, senza che per questo i suoi candidati ottengano la precedenza su quelli del repository principale.
* Poiché entrambe le fonti, ''principale'' e ''deb-multimedia'', appartengono alla release 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 <code>apt.conf</code> una release obiettivo e definendo in <code>preferences</code> 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 499, a ''deb-multimedia'', senza che per questo i suoi candidati ottengano la precedenza su quelli del repository principale.
* L'utilizzo dell'opzione '''-t''' in questo caso è inutile, visto che si lavora per ipotesi con una sola release.
* L'utilizzo dell'opzione <code>-t</code>/<code>--target-release</code> in questo caso è inutile, visto che si lavora per ipotesi con una sola release.


= Comandi utili =
= Comandi utili =
Riga 414: Riga 403:
Se si volesse visualizzare solo la priorità per un singolo singolo pacchetto, ad esempio nano, si può digitare:
Se si volesse visualizzare solo la priorità per un singolo singolo pacchetto, ad esempio nano, si può digitare:
<pre>$ apt-cache policy nano</pre>
<pre>$ apt-cache policy nano</pre>
Si consiglia anche l'installazione di [[apt-show-versions]], per poter controllare velocemente da quali repository provengono i pacchetti installati sul sistema.
E per controllare se è stata impostata una <code>Default-Release</code> basta:
<pre>$ apt-config dump | grep -i default-release</pre>
che visualizza la riga relativa solo se presente.


= Approfondimenti =
= Approfondimenti =
Riga 427: Riga 422:
|Verificata_da =
|Verificata_da =
: [[Utente:Wtf|Wtf]]
: [[Utente:Wtf|Wtf]]
: [[Utente:HAL 9000|HAL 9000]] 16:01, 9 mag 2015 (CEST)
: [[Utente:HAL 9000|HAL 9000]] 15:58, 3 ago 2019 (CEST)
|Numero_revisori = 2
|Numero_revisori = 2
}}
}}


[[Categoria:Apt]][[Categoria:E-zine]][[Categoria:Repository ufficiali]]
[[Categoria:Apt]][[Categoria:E-zine]][[Categoria:Repository ufficiali]]
3 581

contributi

Menu di navigazione