Diffondere versioni diverse dello stesso pacchetto debian


11

Esiste un modo per ottenere differenze di origine tra un pacchetto installato localmente e quello aggiornato? Ciò sarà utile per verificare esattamente quali parti sono state riparate, modificate o aggiunte.

Ad esempio, supponiamo che tu abbia il pacchetto linux-libc-dev installato sul tuo sistema e

sudo apt-get update && sudo apt-get upgrade

Spettacoli

The following packages will be upgraded:
  linux-libc-dev 

ma si desidera verificare, prima di aggiornarlo, le esatte modifiche apportate rispetto alla versione locale dello stesso pacchetto.

Come possiamo farlo?

Risposte:


5

Ecco un'altra soluzione che ho hackerato insieme: ciò che è cambiato .

Prende il nome del pacchetto binario a cui sei interessato come unico argomento. Per utilizzare una SRU recente come esempio:

./whatchanged python_papyon

Questo è ciò che fa:

  1. Controlla se c'è un candidato all'aggiornamento; uscire se non ce n'è
  2. Se esiste un candidato, creare directory temporanee e recuperare i pacchetti di origine sia per la versione installata che per il candidato
  3. Confronta i due con debdiffe l'output con stdout (probabilmente vorrai reindirizzare per una lettura più semplice)
  4. Pulisci le directory temporanee.

Probabilmente deve gestire meglio alcune cose che potrebbero andare storte durante il recupero del codice sorgente, il controllo del flusso è probabilmente un po 'spento e ci devono essere modi più eleganti per il controllo della versione, ma finora ha funzionato bene nei miei test limitati. Per ora, consideralo un trucco rapido che funziona e i miglioramenti sono i benvenuti. Lo spingerò in un repository bzr e / o creerò un progetto Launchpad se è utile per alcune persone.

Modifica : piuttosto che lasciarlo marcire su pastebin, ho avviato un progetto Launchpad per questo; puoi ottenere l'ultima revisione del trunk con bzr branch lp:whatchanged. Sentiti libero di segnalare bug, diramarlo, riscriverlo in Perl, ecc.


Che carino! Sviluppare strumenti come risposte;) Come il tuo stile di programmazione, ma lo avresti codificato correttamente in perl ..
LassePoulsen,

Grazie; spero sia utile. Il modo in cui gli aspetti tecnici del packaging e del rilascio a volte fanno sembrare il codice aperto opaco è qualcosa che mi è venuto in mente, e non ho trovato alcun semplice strumento per superarlo, quindi qualcuno che esprimesse il bisogno della stessa identica cosa era una buona motivazione per finalmente crearne uno primitivo.
mgunes,

7

Afaik l'unico modo per farlo è quello di ottenere la fonte e rendere te stesso il diff. È possibile ottenere l'origine effettiva utilizzata per compilare i pacchetti con apt-get. fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

Questo stamperà tutte le differenze tra tutti i file in un formato patch standard.


1
Questo è abbastanza buono. L'unica cosa che cambierei nell'esempio è usare "debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc" piuttosto che diff diff.
RAOF,

1
Bene praticamente praticamente la stessa cosa, ma puoi usare diff su ogni pacchetto / tarball là fuori. Forse qualcuno vuole vedere il diff tra un svn-trunk e l'attuale pkg.
LassePoulsen,

La mia seconda risposta (ciò che è cambiato) essenzialmente automatizza questo.
mgunes,

2

Ecco un modo UDD (probabilmente non ottimale) per farlo:

Estrarre il ramo di aggiornamento per la versione (presupponendo Lucid) che (presupposto segue) dovrebbe contenere la SRU più recente:

bzr branch lp:ubuntu/lucid-updates/package_name

Ottieni le modifiche introdotte dall'ultima revisione, che (presupposto segue) dovrebbe corrispondere all'ultima SRU:

bzr diff -c`bzr revno`

2
Hmm. È un approccio interessante, sebbene sia probabilmente meno completo di quello di Source Lab, nel senso che i nomi dei pacchetti potrebbero non corrispondere o esistere nell'albero dei sorgenti di bzr.
Gödel,

Fintanto che conosci il nome del pacchetto sorgente, corrisponderà. Puoi trovare con quale pacchetto sorgente viene prodotto un pacchetto binario apt-cache show package_name | grep Source:.
mgunes,

@Murat Bene, <package_name>così ottenuto non funziona su alcuni pacchetti: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERRORE: URL non valido fornito per il trasporto: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : nessuno schema supportato
Gödel

Questo perché non ci sono affatto rami Ubuntu per il kernel, temo. Potrebbe essere un'eccezione specifica a causa del fatto che il kernel è mantenuto in git (kernel.ubuntu.com) ma non sono sicuro dell'esatto ambito dei rami del pacchetto bzr in questo momento. Puoi chiedere su # ubuntu-devel.
mgunes,

@Murale lo so. Ecco perché il metodo è meno completo di quello di Source Lab. Ma ancora una volta, è una scelta interessante.
Gödel,

0

Se vuoi vedere le differenze tra i file negli archivi dei pacchetti, estrai i loro file md5sums, ordina e diffli quelli, quindi puoi restringere l'elenco dei file effettivi per confrontarli in modo drammatico.


-1

Potrebbe non essere le modifiche "esatte", ma apt-listchangeselenca le voci del log delle modifiche apportate dalla versione installata.

Funziona aggiungendo un passaggio al termine del download dei nuovi pacchetti, ma prima dell'inizio dell'installazione, in cui viene mostrata la voce del registro delle modifiche per ciascun pacchetto che sta per essere aggiornato. È quindi possibile continuare o annullare. Puoi installarlo con

sudo apt-get install apt-listchanges

quindi installarlo con

sudo dpkg-reconfigure apt-listchanges

Ancora una volta, la domanda non riguarda la visualizzazione delle modifiche a ChangeLog.
Gödel,

D'oh, ho perso la prima riga in cui hai detto "diff diffs".
Ken Simon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.