Apt-show-versions: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Nuova pagina: Per chi come me utilizza un sistema misto (testing/sid) è ogni tanto utile sapere quanti e quali pacchetti provengono da quale release. Proprio dopo il recente aggiornamento a squeeze...)
 
m (verificata)
 
(22 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
Per chi come me utilizza un sistema misto (testing/sid) è ogni tanto utile sapere quanti e quali pacchetti provengono da quale release. Proprio dopo il recente aggiornamento a squeeze/sid mi sono trovato con diversi pacchetti provenienti da sid. Non tutti sono forse però "basilari" per il sistema; intendo dire, alcuni sono magari "prelevabili" da squeeze, senza "scomodare" sid.
{{Versioni compatibili|Jessie|Stretch|Buster|Testing_2019|Unstable_2019}}
Cercando in lungo e in largo tutte le espressioni regolari possibili con aptitude, non sono riuscito a trovare un buon metodo per ottenere il risultato voluto. Infine sono incappato in apt-show-versions, capendo subito che le mie ricerche avevano dato buon frutto.<br />
==Introduzione==
Per chi utilizza un sistema misto (testing/Sid) è senz'altro utile sapere quanti e quali pacchetti provengono da quale [[release]].


===Sintassi e utilizzo===
A questo scopo esiste <code>apt-show-versions</code>, che permette di ottenere facilmente la lista di tutti i pacchetti di una data release, meglio di [[apt-cache]] e [[aptitude]], che funzionano meglio se invocati su singoli pacchetti.
 
==Installazione==
<code>apt-show-versions</code> è un pacchetto opzionale, per cui per prima cosa va installato l'omonimo pacchetto. Per cui per esempio, con [[privilegi di amministrazione]]:
<pre>
# apt install apt-show-versions
</pre>
 
==Sintassi e utilizzo==
Dando il comando:


<pre>$ apt-show-versions <nomepacchetto></pre>
<pre>$ apt-show-versions <nomepacchetto></pre>


Ottenendo:
si ottiene:


<pre><nomepacchetto>/<release> <aggiornabilità> (uptodate o upgradeable from xxx to yyy) <versione_attuale></pre>
<pre><nomepacchetto>/<release> <aggiornabilità> (uptodate o upgradeable from xxx to yyy) <versione_attuale></pre>
Riga 15: Riga 25:
aptitude/squeeze uptodate 0.4.11.11-1</pre>
aptitude/squeeze uptodate 0.4.11.11-1</pre>


Come sopra, otteniamo che il pacchetto aptitude deriva da squeeze, è aggiornato ed è alla versione 0.4.11.11-1.<br />
Come sopra, otteniamo che il pacchetto aptitude proviene da Squeeze, è aggiornato ed è alla versione 0.4.11.11-1.<br/>


Per ottenere una lista di tutti i pacchetti basterà digitare il comando:
Per ottenere una lista di tutti i pacchetti basterà digitare il comando:
Riga 21: Riga 31:
<pre>$ apt-show-versions</pre>
<pre>$ apt-show-versions</pre>


dunque senza nessun pacchetto specificato.<br />
dunque senza specificare nessun pacchetto.<br/>
 
==Alcuni esempi==
Grazie all'utilizzo di qualche pipe, ovvero la possibilità di eseguire un comando o un'applicazione all'interno di un altro, e  di grep, necessario per "filtrare" il risultato, potremmo ora scegliere, contare, rimuovere, tutti i pacchetti di una particolare [[release]].
 
===Visualizzare tutti i pacchetti provenienti da una release===
È sufficiente filtrare tutti i risultati per [[suite]] e [[codename]] di quella release:
<pre>$ apt-show-versions | grep -E "/(suite|codename)\b"</pre>
In questo modo si catturano entrambi i casi, senza dipendere dalle scelte effettuate nel file <code>/etc/apt/sources.list</code>.
 
{{Box | grep | L'opzione -E attiva le espressioni regolari estese, in questo caso permettendo l'uso di alternative senza bisogno di backslash.
 
Il pattern precedente cerca tutte le release nella forma "/suite\b" oppure "/codename\b", dato che nell'output di <code>apt-sho-versions</code> le release sono precedute dal carattere '''<code>/</code>''' e sono seguite da uno spazio.
 
'''\b''' indica la fine della parola. Per esempio se si cercasse '''/jessie''' sarebbero catturati anche ''jessie-updates'' e ''jessie-backports'', mentre con '''/jessie\b''' si trovano soltanto i repository principali di ''jessie''.}}
 
Per esempio per visualizzare tutti i pacchetti provenienti da [[Sid]]/[[unstable]]:
<pre>$ apt-show-versions | grep -E "/(unstable|sid)\b"</pre>
 
Per i [[backports]] ''suite'' e ''codename'' sono equivalenti, quindi è sufficiente:
<pre>$ apt-show-versions | grep "/codename-backports\b"</pre>
utilizzando il ''codename'' relativo alla release desiderata, oppure più semplicemente:
<pre>$ apt-show-versions | grep "/.*-backports\b"</pre>
 
===Contare tutti i pacchetti provenienti da Sid===
<pre>$ apt-show-versions | grep -E "/(unstable|sid)\b" | wc -l</pre>


===Alcuni esempi===
===Rimuovere tutti i pacchetti provenienti da Sid===
<pre># apt remove $(apt-show-versions | grep -E "/(unstable|sid)\b" | cut -d / -f1)</pre>


Grazie all'utilizzo di qualche pipe (=eseguire un comando/applicazione dentro un altro) e grep (per "filtrare" il risultato) potremmo ora scegliere, contare, rimuovere, ... tutti i pacchetti di una particolare release.
dove con <code>cut -d '/' -f1</code>, dividiamo la stringa dove c'è lo slash (/) e ne prendiamo solo il primo campo (<code>-f1</code>) per avere il nome del pacchetto senza le informazioni relative alla release, all'aggiornabilità e alla versione (che non sarebbero accettate da apt-get).


====Visualizzare tutti i pacchetti provenienti da sid====
===Pinning===
Dal momento che l'utilità del pacchetto si trova in un sistema misto, molto probabilmente anche se non necessariamente, utilizzerete il [[pinning]] per gestire i pacchetti provenienti da release diverse.


<pre>$ apt-show-versions | grep sid</pre>
==Approfondimenti==
Ulteriori risorse:
* manpage relative ai comandi citati in questa guida;
<!-- COMMENTATO - NON PIU' RAGGIUNGIBILE:
* la [http://www.debian.org/doc/manuals/quick-reference/ch-package.it.html guida ufficiale] Debian, nella sezione dedicata alla gestione dei pacchetti;
-->
* una interessante [http://forum.debianizzati.org/viewtopic.php?f=23&t=34728 discussione] sul forum di Debianizzati.


====Contare tutti i pacchetti provenienti da sid====
==Alternative simili==
Soprattutto in caso di un sistema con pinning dei pacchetti si suggerisce anche l'utilizzo del comando [[apt-cache]]:
<pre> $ apt-cache policy nomepacchetto </pre>
Questo, come <code>apt-show-versions</code> mostra la versione del pacchetto installata ed i possibili upgrade, inoltre indica per ogni possibile versione del medesimo sia il [[repository]] di provenienza sia il valore di pinning attribuito.


<pre>$ apt-show-versions | grep sid | wc -l</pre>
Ad esempio, sul mio sistema:
<pre> $ apt-cache policy aptitude
aptitude:
  Installed: 0.6.1.5-3
  Candidate: 0.6.1.5-3
  Version table:
    0.6.2.1-2 0
        600 http://ftp.it.debian.org unstable/main Packages
*** 0.6.1.5-3 0
        990 http://ftp.it.debian.org squeeze/main Packages
        100 /var/lib/dpkg/status
    0.4.11.11-1~lenny1 0
        10 http://ftp.it.debian.org stable/main Packages</pre>


====Rimuovere tutti i pacchetti provenienti da sid====
Un'ulteriore alternativa è l'utilizzo di [[aptitude]] con versions, che mostra sempre i risultati per [[suite]]. Ad esempio, per vedere i pacchetti provenienti da unstable (la ''suite'' di Sid) sul proprio sistema:


<pre># aptitude remove `apt-show-versions | grep sid | cut -d '/' -f1`</pre>
<pre>$ aptitude versions --group-by=none \~i | grep unstable</pre>


dove con "cut -d '/' -f1", dividiamo la stringa dove c'è lo slash (/) e prendiamo solo il primo campo (-f1) per avere solo il nome del pacchetto senza le informazioni relative alla release, all'aggiornabilità e alla versione (che non sarebbero "digerite" da aptitude).<br />
in questo modo cerchiamo le versioni di tutti i pacchetti installati (~i), visualizzando per ogni riga il nome del pacchetto con la versione e la provenienza (--group-by=none) e filtrando con un semplice "grep" le versioni che provengono da "unstable" appunto. Se si volesse passare il tutto ad esempio allo stesso aptitude per rimuovere tutti i pacchetti in unstable (v. esempio con <code>apt-show-versions</code>):


===Referenze===
<pre># aptitude remove $(aptitude versions --group-by=none \~i | grep unstable | awk '{if ($2=="A") print $3; else print $2}')</pre>


Per tutte la altre possibilità/informazioni vi rimando ai vari man dei comandi utilizzati in questo how-to, più a questa discussione nel forum della comunità: http://forum.debianizzati.org/aptget-friends/etch-da-aggiorna-pinning-backports-o-cosa-altro-t34728.0.html e alla guida ufficiale sulla gestione dei pacchetti: http://www.debian.org/doc/manuals/quick-reference/ch-package.it.html.<br /><br />
siamo "costretti" ad utilizzare awk (al posto di cut) in quanto i primi indici delle linee potrebbero essere "i" e poi <nome_pacchetto> oppure "i A" <nome_pacchetto> se quest'ultimo è stato installato automaticamente e dunque come dipendenza. awk ci permette dunque di inserire la "clausola" di verificare se è presente appunto il carattere "A" come secondo elemento (ricordo che awk utilizza di default gli spazi come delimitatori) e di stampare dunque il terzo elemento (dunque il nome del pacchetto, altrimenti quest'ultimo come secondo elemento).


Happy debian !
Happy debian !
----
 
[[Utente:Brunitika|Brunitika]]
{{Autori
|Autore=[[Utente:Brunitika|Brunitika]]
|Estesa_da=
|Verificata_da=
:[[Utente:HAL 9000|HAL 9000]] 15:24, 14 lug 2019 (CEST)
|Numero_revisori=1
}}
 
[[Categoria:Apt]]

Versione attuale delle 13:24, 14 lug 2019

Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

Introduzione

Per chi utilizza un sistema misto (testing/Sid) è senz'altro utile sapere quanti e quali pacchetti provengono da quale release.

A questo scopo esiste apt-show-versions, che permette di ottenere facilmente la lista di tutti i pacchetti di una data release, meglio di apt-cache e aptitude, che funzionano meglio se invocati su singoli pacchetti.

Installazione

apt-show-versions è un pacchetto opzionale, per cui per prima cosa va installato l'omonimo pacchetto. Per cui per esempio, con privilegi di amministrazione:

# apt install apt-show-versions

Sintassi e utilizzo

Dando il comando:

$ apt-show-versions <nomepacchetto>

si ottiene:

<nomepacchetto>/<release> <aggiornabilità> (uptodate o upgradeable from xxx to yyy) <versione_attuale>

Ad esempio:

$ apt-show-versions aptitude
aptitude/squeeze uptodate 0.4.11.11-1

Come sopra, otteniamo che il pacchetto aptitude proviene da Squeeze, è aggiornato ed è alla versione 0.4.11.11-1.

Per ottenere una lista di tutti i pacchetti basterà digitare il comando:

$ apt-show-versions

dunque senza specificare nessun pacchetto.

Alcuni esempi

Grazie all'utilizzo di qualche pipe, ovvero la possibilità di eseguire un comando o un'applicazione all'interno di un altro, e di grep, necessario per "filtrare" il risultato, potremmo ora scegliere, contare, rimuovere, tutti i pacchetti di una particolare release.

Visualizzare tutti i pacchetti provenienti da una release

È sufficiente filtrare tutti i risultati per suite e codename di quella release:

$ apt-show-versions | grep -E "/(suite|codename)\b"

In questo modo si catturano entrambi i casi, senza dipendere dalle scelte effettuate nel file /etc/apt/sources.list.

Info.png grep
L'opzione -E attiva le espressioni regolari estese, in questo caso permettendo l'uso di alternative senza bisogno di backslash.

Il pattern precedente cerca tutte le release nella forma "/suite\b" oppure "/codename\b", dato che nell'output di apt-sho-versions le release sono precedute dal carattere / e sono seguite da uno spazio.

\b indica la fine della parola. Per esempio se si cercasse /jessie sarebbero catturati anche jessie-updates e jessie-backports, mentre con /jessie\b si trovano soltanto i repository principali di jessie.


Per esempio per visualizzare tutti i pacchetti provenienti da Sid/unstable:

$ apt-show-versions | grep -E "/(unstable|sid)\b"

Per i backports suite e codename sono equivalenti, quindi è sufficiente:

$ apt-show-versions | grep "/codename-backports\b"

utilizzando il codename relativo alla release desiderata, oppure più semplicemente:

$ apt-show-versions | grep "/.*-backports\b"

Contare tutti i pacchetti provenienti da Sid

$ apt-show-versions | grep -E "/(unstable|sid)\b" | wc -l

Rimuovere tutti i pacchetti provenienti da Sid

# apt remove $(apt-show-versions | grep -E "/(unstable|sid)\b" | cut -d / -f1)

dove con cut -d '/' -f1, dividiamo la stringa dove c'è lo slash (/) e ne prendiamo solo il primo campo (-f1) per avere il nome del pacchetto senza le informazioni relative alla release, all'aggiornabilità e alla versione (che non sarebbero accettate da apt-get).

Pinning

Dal momento che l'utilità del pacchetto si trova in un sistema misto, molto probabilmente anche se non necessariamente, utilizzerete il pinning per gestire i pacchetti provenienti da release diverse.

Approfondimenti

Ulteriori risorse:

  • manpage relative ai comandi citati in questa guida;
  • una interessante discussione sul forum di Debianizzati.

Alternative simili

Soprattutto in caso di un sistema con pinning dei pacchetti si suggerisce anche l'utilizzo del comando apt-cache:

 $ apt-cache policy nomepacchetto 

Questo, come apt-show-versions mostra la versione del pacchetto installata ed i possibili upgrade, inoltre indica per ogni possibile versione del medesimo sia il repository di provenienza sia il valore di pinning attribuito.

Ad esempio, sul mio sistema:

 $ apt-cache policy aptitude
aptitude:
  Installed: 0.6.1.5-3
  Candidate: 0.6.1.5-3
  Version table:
     0.6.2.1-2 0
        600 http://ftp.it.debian.org unstable/main Packages
 *** 0.6.1.5-3 0
        990 http://ftp.it.debian.org squeeze/main Packages
        100 /var/lib/dpkg/status
     0.4.11.11-1~lenny1 0
         10 http://ftp.it.debian.org stable/main Packages

Un'ulteriore alternativa è l'utilizzo di aptitude con versions, che mostra sempre i risultati per suite. Ad esempio, per vedere i pacchetti provenienti da unstable (la suite di Sid) sul proprio sistema:

$ aptitude versions --group-by=none \~i | grep unstable

in questo modo cerchiamo le versioni di tutti i pacchetti installati (~i), visualizzando per ogni riga il nome del pacchetto con la versione e la provenienza (--group-by=none) e filtrando con un semplice "grep" le versioni che provengono da "unstable" appunto. Se si volesse passare il tutto ad esempio allo stesso aptitude per rimuovere tutti i pacchetti in unstable (v. esempio con apt-show-versions):

# aptitude remove $(aptitude versions --group-by=none \~i | grep unstable | awk '{if ($2=="A") print $3; else print $2}')

siamo "costretti" ad utilizzare awk (al posto di cut) in quanto i primi indici delle linee potrebbero essere "i" e poi <nome_pacchetto> oppure "i A" <nome_pacchetto> se quest'ultimo è stato installato automaticamente e dunque come dipendenza. awk ci permette dunque di inserire la "clausola" di verificare se è presente appunto il carattere "A" come secondo elemento (ricordo che awk utilizza di default gli spazi come delimitatori) e di stampare dunque il terzo elemento (dunque il nome del pacchetto, altrimenti quest'ultimo come secondo elemento).

Happy debian !




Guida scritta da: Brunitika Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 15:24, 14 lug 2019 (CEST)

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