// Datei: ./werkzeuge/paketoperationen/paketaenderungen-nachlesen.adoc

// Baustelle: Fertig

[[paketaenderungen-nachlesen]]

=== Paketänderungen nachlesen ===

==== Das Änderungsprotokoll beziehen ====

// Stichworte für den Index
(((apt-get, changelog)))
(((Paket, Änderungen nachlesen)))
(((Paket, Änderungsprotokoll)))
(((Paket, Changelog anzeigen)))
Für jedes Debianpaket existiert im entsprechenden Quellpaket (siehe
<<sourcepakete>>) ein Protokoll mit den erfolgten Änderungen im Paket,
ein sogenanntes 'Changelog' (Datei `debian/changelog`). Das ist eine
Textdatei mit einzelnen Einträgen (siehe unten). Daraus ersehen Sie
überblicksweise, was die Entwickler im Vergleich zur vorherigen
Veröffentlichung des Paketes verändert haben und welche Änderungen oder
Debian-spezifischen Anpassungen der Maintainer im Vergleich zum
Originalquellcode zusätzlich vorgenommen hat. 

Die nachfolgenden Ausgaben zeigen den Vorgang für die beiden Werkzeuge 
`apt-get` und `aptitude` mit einem Ausschnitt des Changelogs zum Paket 
'smartpm'. Beide Programme kennen für den Aufruf das Unterkommando 
`changelog` und benötigen zusätzlich den Namen des Debianpakets. Das 
angefragte Paket muss dazu nicht auf Ihrem Debiansystem installiert sein.

.Beziehen der Changelog-Informationen zum Paket 'smartpm' mittels `apt-get`
----
$ apt-get changelog smartpm
Holen:1 http://metadata.ftp-master.debian.org smart 1.4-2 Changelog [8.573 B]
Es wurden 8.573 B in 1 s geholt (4.754 B/s).

...

smart (1.4-2) unstable; urgency=low

  * Switch to dh_python2 (Thanks to Barry Warsaw)

 -- Free Ekanayaka <freee@debian.org>  Fri, 12 Aug 2011 17:27:20 +0100

smart (1.4-1) unstable; urgency=low

  * New upstream release
  * Drop several patches (02_fix_fetcher_test, 03_setup,
    06_CVE-2009-3560.patch and 06_CVE-2009-3720.patch) as they were
    all merged upstream

 -- Free Ekanayaka <freee@debian.org>  Tue, 31 May 2011 16:04:52 +0200

...
$
----

// Stichworte für den Index
(((aptitude, changelog)))
Bei `aptitude` sieht das wie folgt aus:

.Die Paketänderungen zum Paket 'smartpm' mit Hilfe von `aptitude` ausgeben
----
$ aptitude changelog smartpm

smart (1.4-2) unstable; urgency=low

  * Switch to dh_python2 (Thanks to Barry Warsaw)

 -- Free Ekanayaka <freee@debian.org>  Fri, 12 Aug 2011 17:27:20 +0100

smart (1.4-1) unstable; urgency=low

  * New upstream release
  * Drop several patches (02_fix_fetcher_test, 03_setup,
    06_CVE-2009-3560.patch and 06_CVE-2009-3720.patch) as they were
    all merged upstream

 -- Free Ekanayaka <freee@debian.org>  Tue, 31 May 2011 16:04:52 +0200

...

$
----

Die Beschreibung der vorgenommenen Änderungen folgt dabei einem festgelegten 
Schema. Dieses Schema ist im 'Debian Policy Manual' <<Debian-Policy-Manual>> 
im Abschnitt 'Source packages/Debian changelog' genau erklärt. Kurz 
zusammengefasst, ist jeder Version eines Paketes ein separater Block 
gewidment:

.Format der erfolgten Änderungen
----
package (version) distribution(s); urgency=urgency
  [optional blank line(s), stripped]
  * change details
  more change details
  [blank line(s), included in output of dpkg-parsechangelog]
  * even more change details
  [optional blank line(s), stripped]
-- maintainer name <email address>[two spaces]  date
----

Jeder dieser Blöcke beginnt stets mit dem Namen des Quellpakets, gefolgt von 
der Versionsnummer des Pakets, der Veröffentlichung (zumeist `unstable`) 
(siehe <<veroeffentlichungen>>), sowie der Dringlichkeit oder dem Schweregrad 
der vorgenommenen Änderungen. Dieser Wert ist einer aus `low`, `medium`, 
`high`, `emergency` und `critical`. Darunter stehen die jeweiligen Änderungen 
als einfache Aufzählung.

==== Zwei Paketversionen miteinander vergleichen ====

// Stichworte für den Index
(((Debianpaket, devscripts)))
(((Debianpaket, diffoscope)))
(((Paket, Änderungen nachlesen)))
(((Paket, Zwei Paketversionen miteinander vergleichen)))
(((Debian, Reproducible Builds)))
Wie oben bereits genannt, beschreibt das Änderungsprotokoll lediglich in 
groben Zügen, welche Korrekturen ein Paket erfahren hat. Um die
detaillierten Änderungen zwischen zwei (aufeinanderfolgenden)
Paketversionen zu erfahren, bedarf es einer genaueren Inspektion.

Zwei Werkzeuge sind uns bislang bekannt -- `debdiff` und `diffoscope`
<<Debian-Paket-diffoscope>>. Das Erstgenannte satmmt aus dem Paket
`devscripts` <<Debian-Paket-devscripts>> stammt, das zweite gehört
hingegen zu dem Projekt 'Reproducible Builds' <<ReproducibleBuilds>>.
Während das Paket 'devscripts' für `debdiff` eine recht überschaubare
Paketgröße besitzt (derzeit etwa 1 MB), ist 'diffoscope' zwar nur rund
60 KB groß, zieht aber die gesamte Entwicklungsumgebung für
'Reproducible Builds' als Paketabhängigkeit mit -- das kann dann
durchaus 2 GB Platz beanspruchen.

Mit beiden Werkzeugen erhalten Sie eine Auswertung darüber, welche
Dateien oder Verzeichnisse aus einem Paket im Vergleich zur vorherigen
Version entfernt wurden sowie welche hinzugekommen, umbenannt oder auch
verschoben wurden und welche Besitz- und Ausführungsrechte sich ggf.
noch geändert haben. Der nachfolgende Aufruf zeigt `debdiff` mit zwei
Versionen des Pakets 'xpenguins' über den folgenden Aufruf:

.Aufruf von `debdiff` für zwei Pakete
----
$ debdiff xpenguins*
[The following lists of changes regard files as different if they have
different names, permissions or owners.]

Files in second .deb but not in first
- ------------------------------------
-rw-r--r--  root/root   /usr/share/doc/xpenguins/changelog.Debian.amd64.gz

Control files: lines which differ (wdiff format)
- -----------------------------------------------
Installed-Size: [-1119-] {+1114+}
{+Source: xpenguins (2.2-10)+}
Version: [-2.2-10-] {+2.2-10+b1+}
----

Der Aufruf von `diffoscope` ist ähnlich, hier am Beispiel für zwei
Pakete von 'cheese':

.Aufruf von `diffoscope` für zwei Pakete
----
$ diffoscope cheese_3.14.1-1_amd64.deb cheese_3.14.1-2_amd64.deb
----

Nachfolgend sehen Sie die Ausgabe der entdeckten Änderungen. Es ist eine
Art Baumstruktur, die durchaus länger werden kann. Daher zeigt das
nachfolgende Bild nur einen Ausschnitt.

.Von `diffoscope` gefundene Änderungen (Ausschnitt)
image::werkzeuge/paketoperationen/diffoscope-debian-package.png[id="fig.diffoscope", width="30%"]

Die Farbgebung der Ausgabe folgt den üblichen Gepflogenheiten -- rot für 
Entfernungen und grün für Zeilen, die hinzugefügt wurden. Die Angaben in 
hellblau benennen die Position in der jeweiligen Datei.

// Datei (Ende): ./werkzeuge/paketoperationen/paketaenderungen-nachlesen.adoc
