Repository & pinning: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Riga 161: Riga 161:


= Esempi =
= Esempi =
{{Box|Nota|Per il significato dei vari parametri dichiarati in <code>apt.conf</code> si vedano le guide dedicate ad [[apt-get]], [[aptitude]], ecc.}}


== 01 - Release pura ==
== 01 - Release pura ==
Riga 448: Riga 450:
<pre># apt-cache policy nano</pre>
<pre># apt-cache policy nano</pre>


 
{{Autori
_________________________________________________________________________________________________________________________________________________________
|Autore = [[User:Keltik|Keltik]]
 
|Estesa_da =
 
: [[Utente:Nest]] (versione preunione)
 
: [[Utente:Ferdybassi]] (versione preunione)
 
: [[Utente:Wtf]]
== PINNING ==
: [[Utente:xtow]] (versione preunione)
 
|Verificata_da =
Abbiamo visto come poter avere una Debian Stable, Testing o Unstable adattando i repository all'uopo. Però, usando una Stable o una Testing potrebbe nascere l'esigenza di bloccare un pacchetto o volerlo aggiornare ad una versione che si trova in un ramo superiore senza compromettere la stabilità e la funzionalità della versione che si sta utilizzando o addirittura fare un downgrade di un pacchetto o dell'intera versione (caso molto delicato). Per far ciò Debian utilizza un meccanismo molto sofisticato, chiamato ''pinning'', che permette di assegnare ai vari pacchetti una priorità per l'installazione indipendentemente dal ramo o versione di cui fanno parte (stable, testing, unstable, experimental).<br />
: [[Utente:TheNoise]] (versione preunione)
Per far ciò è possibile agire su uno o entrambi i seguenti due file testuali: <code>/etc/apt/apt.conf</code> e <code>/etc/apt/preferences</code>. Di norma questi due file non sono presenti dopo un'installazione, è pertanto l'utente a doverli creare ex-novo utilizzando un qualsiasi editor di testo.<br/>
: [[Utente:Wtf]]
Si noti che entrambi i file devono essere definiti secondo precise regole e direttive di cui si mostreranno solo alcuni elementi base, giusto per aver un minimo di funzionalità.
|Numero_revisori = 4
 
{{ Warningbox | Considerata la complessità dell'argomento, questo mini how-to ha il solo scopo all'introduzione di questa procedura, per un uso avanzato far riferimento a [http://manpages.debian.net/man/5/apt.conf man apt.conf] e [http://manpages.debian.net/man/5/apt_preferences man apt_preferences]}}
 
=== /etc/apt/apt.conf ===
 
Delle innumerevoli direttive che è possibile dichiarare solo la seguente interessa la procedura di pinning:
 
<pre>APT::Default-Release</pre>
 
ad esempio
 
<pre>APT::Default-Release "stable"; </pre>
 
impone ad apt di considerare la release stable come release di riferimento, attribuendogli un punteggio di 990 (si veda più avanti per una spiegazione del significato dei vari punteggi).
 
{{Box|Nota|
* 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
** <code>deb http://ftp.it.debian.org/debian/ wheezy main</code>
** <code>deb http://security.debian.org/ wheezy/updates main</code>
}}
}}


Premesso questo in <code>/etc/apt/apt.conf</code> si daranno le seguenti indicazioni:
[[Categoria:Apt]]
 
- della versione che si vuole utilizzare come default (stable)<br>
- della dimensione della cache<br>
- del purge dei pacchetti<br>
- della pulizia della cache<br>
- del fix dei pacchetti rotti (causa dipendenze non soddisfatte)<br>
- del fix dei pacchetti non possibili da installare<br>
- di mostrare gli upgrade dei pacchetti<br>
- di forzare il loop dei pacchetti rotti (causa dipendenze non soddisfatte)<br>
- di permettere l'installazione di pacchetti non autenticati (manca la chiave pubblica)<br>
 
quindi il file <code>preferences</code> apparirà come segue
 
<pre>
  APT::Default-Release "stable";
 
  APT::Cache-Limit 24000000;
 
  Apt::Get::Purge;
 
  APT::Clean-Installed;
 
  APT::Get::Fix-Broken;
 
  APT::Get::Fix-Missing;
 
  APT::Get::Show-Upgraded "true";
 
  APT::Force-LoopBreak=true;
 
  APT::Get::AllowUnauthenticated 1;
</pre>
 
{{Box|Nota|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 ===
 
Prima di vedere la sintassi per strutturare il file cerchiamo di capire il valore che la policy Debian assegna ad un singolo pacchetto o alla release (stable o testing) in generale:<br/>
<br/>
'''Valore del PIN:'''<br/>
- superiore a '''1000''' ha l'assoluta priorità nell'installazione può implicare il downgrade<br/>
- da '''991 a 1000''' il pacchetto verrà installato anche se non fa parte della release (specificata in apt.conf), a meno che la versione installata sia più recente<br/>
- da '''551 a 990''' il pacchetto verrà installato a meno che ci sia disponibile una versione che fa parte della release (specificata in apt.conf) o che la versione installata sia più recente<br/>
- da '''101 a 550''' il pacchetto verrà installato a meno che ci sia disponibile una versione appartenente a qualsiasi release o che la versione installata sia più recente<br/>
- da '''0 a 100''' il pacchetto viene installato solo se non è installata nessuna versione del pacchetto<br/>
- minore di '''0''' previene l'installazione del pacchetto, qualsiasi sia l'origine<br/>
<br/>
Avendo visto il valore del PIN possiamo adattare il nostro file ''/etc/apt/preferences'' ai nostri bisogni, bloccando o retrocedendo oppure aggiornando i vari pacchetti. Da tenere in considerazione che se usiamo una stable ed installiamo un pacchetto da testing o unstable non avremo più la garanzia che essa ci offre.<br/><br/>
 
{{Box|Nota|Similmente al caso precedente è 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).}}
 
Qualche esempio pratico.<br/>
<br/>
Fondamentale aver creato il file '''/etc/apt/apt.conf''' (dove avremo specificato la nostra release preferita: stable o testing) e aver abilitato tutti i repository delle diverse release in '''/etc/apt/sources.list'''
 
<pre>
deb http://ftp.it.debian.org/debian/ stable main contrib non-free
 
deb http://www.deb-multimedia.org stable main non-free
 
deb http://ftp.it.debian.org/debian/ stable-backports main contrib non-free
 
deb http://security.debian.org/ stable/updates main contrib non-free
 
deb http://ftp.it.debian.org/debian/ stable-updates main contrib non-free
 
deb http://ftp.it.debian.org/debian/ testing main contrib non-free
 
deb http://www.deb-multimedia.org stable main non-free
 
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free
 
deb http://www.deb-multimedia.org unstable main non-free
</pre>
 
 
Ovviamente chi usa Testing può omettere i repository della Stable.<br/>
<br/>
Ora possiamo vedere la policy Debian riguardo alle release:
 
<pre>apt-cache policy</pre>
 
ci restituirà il PIN delle release, giusto per farci un'idea.<br />
Lo stesso per vedere la policy di un singolo pacchetto  es:
 
<pre>apt-cache policy nano</pre>
 
=== STABLE ===
 
 
Prendiamo in considerazione di lavorare con una Stable e il file preferences nel seguente modo
 
<pre>
Package: *
Pin: release a=stable
Pin-Priority: 900
 
Package: *
Pin: release o=Debian
Pin-Priority: -10
</pre>
 
Cerchiamo di capire il significato delle tre righe:
 
'''Package: *'''  vuol dire tutti i pacchetti<br>
'''Pin: release a=stable''' tutti i pacchetti della Suite (a) stable<br>
'''Pin-Priority: 900''' verranno installati solo pacchetti più aggiornati della stessa release (se ce ne sono)<br>
<br>     
mentre<br>
 
'''Package: *'''  vuol dire tutti i pacchetti<br>
'''Pin: release o=Debian''' pacchetti di Origin (o) Debian<br>
'''Pin-Priority: -10''' nessuna priorità<br>
<br>
In questo caso verranno installati solo pacchetti più aggiornati della stessa release (se ce ne sono) e nessun altro pacchetto di release diverse verrà installato.<br/>
Se si vuole installare un pacchetto proveniente dalla release Testing si possono usare due comandi:
 
<pre>apt-get install nome_pacchetto/testing</pre>
 
(''installerà il pacchetto con le dipendenze della stable'')
 
<pre>apt-get install -t testing nome_pacchetto</pre>
 
''(installerà il pacchetto con le dipendenze della release testing. Il pacchetto non verrà più aggiornato fino a quando non ridaremo lo stesso comando)''<br/>
<br/>
{{ Warningbox | Considerata la stabilità della release Stable, usare pacchetti di altre release potrebbe comprometterne la stabilità. Per avere una perfetta integrazione con Stable meglio usare il pinning con i pacchetti provenienti dai backports }}
 
Se, ad esempio, volessimo installare la versione più recente di ''libreoffice'' dai ''backports'':
 
<pre>apt-get -t stable-backports install libreoffice</pre>
 
per evitare che nei prossimi upgrades il pacchetto venga retrocesso alla versione della ''Stable'' nel file preferences aggiungere:
 
<pre>Package: libreoffice
Pin: release a=stable-backports
Pin-Priority: 999</pre>
 
In questo modo rimarrà installata la versione del Backports.<br/>
<br/>
Come detto precedentemente in questa maniera possiamo fare il downgrade sia di un pacchetto o dell'intera release, basta agire sul file preferences indicando il pacchetto o la release modificando il Pin-Priority.<br/>
Vediamo qualche esmpio concreto.<br/>
<br/>
''ES. n° 1''  voglio il ''pacchetto-1.0.1''  indipendentemente dalla release che utilizzo
 
<pre>
Package: pacchetto
Pin: version 1.0.1
Pin-Priority: 1001
</pre>
 
in questo modo  ''pacchetto'' versione ''1.0.1'' non verrà mai scalzato né da una versione più recente né da una più vecchia (in caso di downgrade).<br/>
<br/>
''ES. n° 2''  fare il downgrade di una release (questo passaggio è molto delicato, usatelo con cautela):
 
<pre>
Package: *
Pin: release a=stable
Pin-Priority: 1001
 
Package: *
Pin: release o=Debian
Pin-Priority: -10
</pre>
 
in questo modo basta
 
<pre>aptitude update
aptitude safe-upgrade
aptitude full-upgrade</pre>
 
similmente con apt:
 
<pre>apt-get update
apt-get upgrade
apt-get dist-upgrade</pre>
 
=== TESTING ===
 
Se si sta utilizzando Testing e si ha l'esigenza di installare un pacchetto da Unstable o Experimental (usare con molta cautela), come visto sopra creiamo i due files '''/etc/apt/apt.conf''' e '''/etc/apt/preferences''' come segue:<br/>
<br/>
'''/etc/apt/apt.conf'''
<pre>
  APT::Default-Release "testing";
 
  APT::Cache-Limit 24000000;
 
  Apt::Get::Purge;
 
  APT::Clean-Installed;
 
  APT::Get::Fix-Broken;
 
  APT::Get::Fix-Missing;
 
  APT::Get::Show-Upgraded "true";
 
  APT::Force-LoopBreak=true;
 
  APT::Get::AllowUnauthenticated 1;</pre>
 
 
 
'''/etc/apt/preferences'''
<pre>
Package: *
Pin: release a=testing
Pin-Priority: 800
 
Package: *
Pin: release a=unstable
Pin-Priority: 600
 
Package: *
Pin: release a=experimental
Pin-Priority: 50
 
Package: *
Pin: release o=Debian
Pin-Priority: -10
</pre>
 
Questo farà in modo che apt installi di default i pacchetti provenienti dalla release ''Testing''.<br/>
Se si vogliono installare pacchetti provenienti da ''Unstable'' o ''Experimental'':
 
<pre>apt-get install nome_pacchetto/unstable</pre>
 
''questo installerà il pacchetto con le dipendenze della testing''
 
<pre>apt-get install -t unstable nome_pacchetto</pre>
 
''questo installerà il pacchetto con le dipendenze della release unstable''<br />
<br/>
Per quanto riguarda il mantenimento o il downgrade di un pacchetto specifico operare come indicato sopra nella sezione STABLE.
 
[[Categoria:E-zine]]
[[Categoria:E-zine]]
2 906

contributi