Old:Debuctio: differenze tra le versioni

m
ha spostato Debuctio a Old:Debuctio
Nessun oggetto della modifica
m (ha spostato Debuctio a Old:Debuctio)
 
(10 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
== Introduzione ==
{{Old}}== Introduzione ==


Come descritto in questo thread del forum (http://forum.debianizzati.org/viewtopic.php?f=20&t=41968) con questa pagina si vuole aprire un progetto per capire meglio come funziona il sistema operativo Debian ed in particolare il suo gestore dei pacchetti ([[http://wiki.debian.org/Apt | APT]], ''Advanced Packaging Tool'').
Come descritto in questo thread del forum (http://forum.debianizzati.org/viewtopic.php?f=20&t=41968) con questa pagina si vuole aprire un progetto per capire meglio come funziona il sistema operativo Debian ed in particolare il suo gestore dei pacchetti ([[http://wiki.debian.org/Apt | APT]], ''Advanced Packaging Tool'').
Riga 61: Riga 61:
</pre>
</pre>


per vedere dunque qual è la versione installata del pacchetto in causa.
per vedere dunque qual è la versione installata del pacchetto in causa. In una seconda fase (v. punto 2. della roadmap) bisognerà vedere se prelevare l'informazione della versione tramite dunque lo status del pacchetto definito da dpkg o usufruendo di uno strumento quale aptitude o apt-cache.
 
==== Nome release (versione) ====
 
Dando un'occhiata alla funzione "determine_releasenames()" e all'esempio quando viene utilizzata
 
<pre>
# Determine the release names currently used by this host.
# %releasenames structure example:
# ('ftp.de.debian.org_debian_dists_unstable' => {'Suite'    => 'unstable',
#                                                'Name'    => 'unstable',
#                                                'Codename' => 'sid'},
#  'debian.udsorg.ru_dists_unstable'        => {'Suite'    => 'unknown',
#                                                'Name'    => 'unknown',
#                                                'Codename' => 'unknown'},
#  ...)
</pre>
 
sembrerebbe che la versione del pacchetto (e il nome della versione) viene prelevata dai ''release files'' presenti in  "/var/lib/apt/lists"; la domanda è se non basterebbe prelevare il nome della versione direttamente da "/etc/apt/sources.list" che dovrebbe essere la stessa cosa. Forse il primo metodo è vantaggioso nel caso si cambi il "sources.list", mantenendo teoricamente i ''release files'' in relazione ai pacchetti installati. In ogni caso, queste liste si potranno poi utilizzare per verificare la provenienza di un pacchetto; ad esempio:
 
* Ottengo la lista dei pacchetti installati via dpkg
* Ottengo la versione dei pacchetti installati via lo status di dpkg (o ev. altri strumenti)
* Ottengo il nome delle versioni dei repository consultando le liste /var/lib/apt/lists (in questo caso si potrebbe già migliorare apt-show-versions eliminando "unknown" e dando invece il nome del repository "sconosciuto")
 
===> per ogni pacchetto installato alla versione X cerco la sua presenza nelle varie liste; quando trovo quella con il pacchetto in questione, la lista rappresenta la versione del pacchetto. Dando una breve occhiata alle liste, alcune di lunghezza infinita, ci si domanda però se la ricerca del pacchetto non sarebbe troppo dispendiosa in termine di tempo; bisognerebbe dunque filtrare la ricerca in lista, incominciando ad esempio dal fondo o da una determinata posizione a seconda ad esempio alle iniziali del  pacchetto  stesso.
 
=== NOTA INTERMEDIA ===
 
Dopo questa discussione sul forum (http://forum.debianizzati.org/viewtopic.php?f=42&t=42131) c'è da segnalare un ulteriore progresso nella comprensione della gestione dei pacchetti. Le liste presenti in ''/var/lib/apt/lists'' sono unicamente relative ai pacchetti presenti nei repository che si hanno nel ''sources.list''; anche senza ancora una certezza assoluta, questi pacchetti vengono aggiornati quando si fa il classico "update" con il gestore di pacchetti preferito e sono riferiti a tutto il repository. Facendo l'esempio con un pacchetto come "nano" troveremo i seguenti risultati:
 
<pre>
$ find /var/lib/apt/lists/ -iname "*Packages" | xargs grep -x "Package: nano"
/var/lib/apt/lists/ftp.ch.debian.org_debian_dists_squeeze_main_binary-amd64_Packages:Package: nano
/var/lib/apt/lists/ftp.ch.debian.org_debian_dists_sid_main_binary-amd64_Packages:Package: nano
</pre>
 
trovando appunto il pacchetto sia nel repository di squeeze e in quello di sid (entrambi i repository sono nel mio ''sources.list''); per capire da dove proviene il pacchetto installato sul nostro sistema bisogna sapere la sua versione. Quest'ultima la troviamo scrutando appunto lo status dei pacchetti (v. apt-show-versions) in ''/var/lib/dpkg/status''. Sempre riferito a nano, in questa discussione (http://forum.debianizzati.org/viewtopic.php?f=13&t=42135) abbiamo maturato le seguenti idee per ottenere la versione di un pacchetto installato. Facendo sempre un esempio con nano:
 
 
- Metodo 1
 
<pre>
$ sed -n -e '/nano$/,/^Version/{/nano$/p;/^Version/{p;q}}' /var/lib/dpkg/status
</pre>
 
- Metodo 2
 
<pre>
$ awk '/nano$/,/Version/' /var/lib/dpkg/status | awk '/nano/||/Version/'
</pre>
 
- Metodo 3 (script awk)
 
<pre>
BEGIN {
  RS="\n\n";
  FS="\n";
}
{
  split($1, data, ": ") ;
  if( data[2] == "nano" )
    print $1"\n"$8;
}
</pre>
 
da applicare poi al file ''/var/lib/dpkg/status''
 
{{ Warningbox | Questo terzo metodo non funziona, in quanto "Version" non si trova sempre sull'ottava linea del "blocco" dello status del pacchetto! }}
3 581

contributi