Unterschiedliche Versionen desselben Debian-Pakets

11

Gibt es eine Möglichkeit, Quellunterschiede zwischen einem lokal installierten und einem aktualisierten Paket zu ermitteln? Dies ist nützlich, um genau zu überprüfen, welche Teile repariert, geändert oder hinzugefügt wurden.

Angenommen, Sie haben das Paket linux-libc-dev auf Ihrem System installiert und

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

zeigt an

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

Sie möchten jedoch vor dem Upgrade die genauen Änderungen überprüfen, die im Vergleich zu Ihrer lokalen Version desselben Pakets vorgenommen wurden.

Wie können wir das machen?

Gödel
quelle

Antworten:

5

Hier ist eine andere Lösung , die ich zusammen gehackt: Whatchanged .

Als einziges Argument wird der Name des Binärpakets verwendet, an dem Sie interessiert sind. So verwenden Sie eine aktuelle SRU als Beispiel:

./whatchanged python_papyon

Das macht es:

  1. Überprüfen Sie, ob es einen Aktualisierungskandidaten gibt. Beenden Sie, wenn es keine gibt
  2. Wenn ein Kandidat vorhanden ist, erstellen Sie temporäre Verzeichnisse und rufen Sie die Quellpakete sowohl für die installierte Version als auch für den Kandidaten ab
  3. Vergleichen Sie die beiden mit debdiffund geben Sie sie mit stdout aus (Sie möchten sie wahrscheinlich umleiten, um das Lesen zu erleichtern).
  4. Bereinigen Sie die temporären Verzeichnisse.

Es muss wahrscheinlich bestimmte Dinge besser handhaben, die beim Abrufen der Quelle schief gehen können, die Flusskontrolle ist wahrscheinlich ein bisschen aus und es muss elegantere Möglichkeiten für die Versionsprüfung geben, aber es hat in meinen bisher eingeschränkten Tests gut funktioniert. Betrachten Sie es vorerst als einen schnellen Hack, der funktioniert, und Verbesserungen sind sehr willkommen. Ich werde es in ein bzr-Repository verschieben und / oder ein Launchpad-Projekt erstellen, wenn es für einige Leute nützlich ist.

Bearbeiten : Anstatt es auf dem Pastebin verrotten zu lassen, habe ich ein Launchpad-Projekt dafür gestartet . Sie können die neueste Kofferraumversion mit erhalten bzr branch lp:whatchanged. Fühlen Sie sich frei, Fehler zu melden , zu verzweigen, in Perl neu zu schreiben usw.

mgunes
quelle
Wie schön! Entwickeln von Werkzeugen als Antworten;) Wie Sie Codierungsstil, aber hätte es richtig in Perl codiert ..
LassePoulsen
Vielen Dank; hoffe, es ist von Nutzen. Die Art und Weise, wie Verpackungs- und Release-Techniken offenen Code manchmal undurchsichtig erscheinen lassen, hat mich beschäftigt, und ich habe keine einfachen Tools gefunden, mit denen ich das überwinden kann. Daher war es eine gute Motivation, endlich jemanden zu finden, der genau dasselbe benötigt mache selbst einen primitiven.
mgunes
7

Afaik der einzige Weg, dies zu tun, besteht darin, die Quelle zu finden und den Diff selbst zu machen. Mit apt-get können Sie die tatsächliche Quelle abrufen, die zum Kompilieren der Pakete verwendet wird. 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/

Dadurch werden alle Unterschiede zwischen allen Dateien in einem Standard-Patch-Format ausgedruckt.

LassePoulsen
quelle
1
Das ist ziemlich gut. Das einzige, was ich im Beispiel ändern würde, ist die Verwendung von "debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc" anstelle von raw diff.
RAOF
1
Nun, es macht praktisch das Gleiche, aber Sie können diff für jedes Paket / jeden Tarball da draußen verwenden. Vielleicht möchte jemand den Unterschied zwischen einem SVN-Trunk und dem aktuellen Paket sehen.
LassePoulsen
Meine zweite Antwort (was geändert wurde) automatisiert dies im Wesentlichen.
mgunes
2

Hier ist eine (wahrscheinlich nicht optimale) UDD- Methode:

Pull-updates-Zweig für Ihre Veröffentlichung (unter der Annahme von Lucid), dass (Annahme folgt) die neueste SRU enthalten sollte:

bzr branch lp:ubuntu/lucid-updates/package_name

Holen Sie sich die Änderungen, die durch die letzte Revision eingeführt wurden, die (Annahme folgt) der neuesten SRU entsprechen sollte:

bzr diff -c`bzr revno`
mgunes
quelle
2
Hmm. Es ist eine interessante Einstellung, obwohl sie wahrscheinlich weniger umfassend ist als die von Source Lab, da die Paketnamen möglicherweise nicht mit dem bzr-Quellbaum übereinstimmen oder in diesem vorhanden sind.
Gödel
Solange Sie den Namen des Quellpakets kennen, stimmt dieser überein. Sie können herausfinden, mit welchem ​​Quellpaket ein Binärpaket erstellt wird apt-cache show package_name | grep Source:.
mgunes
@Murat Nun, <package_name>so funktioniert funktioniert bei einigen Paketen nicht: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERROR: Ungültige URL für den Transport: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : keine unterstützten Programme
Gödel
Das liegt daran, dass es leider überhaupt keine Ubuntu-Zweige für den Kernel gibt. Es könnte eine spezielle Ausnahme sein, da der Kernel in git (kernel.ubuntu.com) verwaltet wird, aber ich bin mir nicht sicher, welchen genauen Umfang die bzr-Paketzweige derzeit haben. Vielleicht möchten Sie auf # ubuntu-devel fragen.
mgunes
@ Wandbild ich weiß. Aus diesem Grund ist die Methode weniger umfassend als die von Source Lab. Aber auch hier ist es eine interessante Einstellung.
Gödel
0

Wenn Sie Dateiunterschiede in den Paketarchiven sehen möchten, extrahieren Sie deren md5sums-Dateien, sortieren und unterscheiden Sie diese. Anschließend können Sie die Liste der tatsächlichen Dateien eingrenzen, um sie dramatisch zu vergleichen.

Phil Miller
quelle
-1

Möglicherweise handelt es sich nicht um die "genauen" Änderungen, sondern um eine apt-listchangesListe der Änderungsprotokolleinträge für die Änderungen, die seit der installierten Version vorgenommen wurden.

Nach dem Herunterladen der neuen Pakete, jedoch vor Beginn der Installation, wird ein Schritt hinzugefügt, in dem der Änderungsprotokolleintrag für jedes zu aktualisierende Paket angezeigt wird. Sie können dann fortfahren oder abbrechen. Sie können es mit installieren

sudo apt-get install apt-listchanges

dann richten Sie es mit ein

sudo dpkg-reconfigure apt-listchanges
Ken Simon
quelle
Auch hier geht es nicht darum, die ChangeLog-Änderungen anzuzeigen.
Gödel
D'oh, ich habe die erste Zeile verpasst, in der Sie "Quellendifferenzen" gesagt haben.
Ken Simon