Kapitel 8. Aktualisieren des Pakets

# Kapitel 8. Aktualisieren des Pakets

Die Überarbeitung dieser Anleitung mit aktualisierten Inhalten und weiteren praktischen Beispielen ist unter Guide for Debian Maintainers verfügbar. Bitte verwenden Sie diese neue Anleitung als primäre Anleitung.

Nachdem Sie ein Paket veröffentlichen, werden Sie es bald aktualisieren müssen.

## 8.1. Neue Debian-Revision

Nehmen wir an, dass ein Fehlerbericht für Ihr Paket unter `#654321` eingereicht wurde und er ein Problem beschreibt, das Sie lösen können. Sie können wie folgt eine neue Debian-Revision des Pakets erstellen:

- Falls dies als neuer Patch aufgezeichnet werden soll, führen Sie Folgendes aus:

  - `dquilt new `Fehlernummer.patch``, um den Patch-Namen zu setzen

  - `dquilt add `defekte_Datei``, um die zu korrigierende Datei anzugeben

  - Korrigieren Sie das Problem in den Paketquellen für den Fehler der Originalautoren

  - `dquilt refresh`, um es in ``Fehlernummer.patch`` aufzuzeichnen

  - `dquilt header -e`, um seine Beschreibung hinzuzufügen

- Falls hiermit ein existierender Patch aktualisiert wird, führen Sie Folgendes durch:

  - `dquilt pop `foo.patch``, um den existierenden ``foo.patch`` aufzurufen

  - Korrektur des Problems in der alten ``foo.patch``

  - `dquilt refresh`, um ``foo.patch`` zu aktualisieren

  - `dquilt header -e`, um seine Beschreibung zu aktualisieren

  - `while dquilt push; do dquilt refresh; done`, um alle Patches anzuwenden und dabei fuzz (Unschärfe) zu entfernen

- Fügen Sie eine neue Revision an den Anfang der Datei `changelog` hinzu, beispielsweise mit `dch -i` oder explizit mit `dch -v `Version`-`Revision`` und fügen Sie dann die Kommentare mit ihrem Lieblingseditor ein. [76]

- Fügen Sie eine kurze Beschreibung des Fehler und der Lösung in dem Changelog-Eintrag hinzu, gefolgt von `Closes: #654321`. Auf diese Art wird der Fehlerbericht automatisch geschlossen, sobald Ihre neue Paketversion im Archiv akzeptiert wird.

- Wiederholen Sie die obigen Schritte, um weitere Fehler zu beheben, und aktualisieren Sie dabei die Debian-Datei `changelog` mit `dch`.

- Wiederholen Sie die Tätigkeiten aus Abschnitt 6.1, „Kompletter (Neu-)Bau“ und Kapitel 7, Überprüfen des Pakets auf Fehler.

- Sobald Sie zufrieden sind, sollten Sie den Wert für die Distribution im `changelog` von `UNRELEASED` auf den Ziel-Distributionswert `unstable` (oder ggf. `experimental`) setzen.[77]

- Laden Sie Ihr Paket wie in Kapitel 9, Das Paket hochladen beschrieben hoch. Der Unterschied besteht darin, dass Sie diesmal das ursprüngliche Quellarchiv nicht beifügen, da es sich nicht geändert hat und im Debian-Archiv bereits existiert.

Ein schwieriger Fall kann auftreten, falls Sie ein lokales Paket erstellen, um mit dem Paketieren zu experimentieren, bevor Sie die normale Version in das offizielle Archiv hochladen, z.B. ``1.0.1`-`1``. Für reibungslosere Upgrades ist es eine gute Idee, einen `changelog`-Eintrag mit einer Versionszeichenkette wie ``1.0.1`-`1~rc1`` zu erstellen. Sie können `changelog` bereinigen, indem Sie Ihre lokalen Änderungseinträge in einen einzigen Eintrag für das offizielle Paket zusammenfassen. Lesen Sie Abschnitt 2.6, „Name und Version des Pakets“ für die Reihenfolge von Versionszeichenketten.

## 8.2. Überprüfung einer neuen Version der Originalautoren

Wenn Sie Pakete für eine neue Veröffentlichung der Originalautoren für das Debian-Archiv vorbereiten, müssen Sie zuerst die neue Veröffentlichung der Originalautoren prüfen.

Beginnen Sie damit, dass Sie `changelog`, `NEWS` und eventuell weitere mit der neuen Version veröffentlichte Dokumentation lesen.

Sie können dann Änderungen zwischen den alten und den neuen Quellen der Originalautoren wie folgt prüfen und dabei nach allem Verdächtigem Ausschau halten:

    $ diff -urN foo-alteVersion foo-neueVersion

Änderungen durch Autotools an einigen automatisch erstellten Dateien wie `missing`, `aclocal.m4`, `config.guess`, `config.h.in`, `config.sub`, `configure`, `depcomp`, `install-sh`, `ltmain.sh` und `Makefile.in` können ignoriert werden. Sie können sie vor der Ausführung von diff in den Quellen für die Prüfung löschen.

## 8.3. Neue Version der Originalautoren

Falls ein Paket ``foo`` korrekt im neueren Format `3.0 (native)` oder `3.0 (quilt)` paketiert ist, besteht das Paketieren einer neuen Version der Originalautoren im wesentlichen im Verschieben des alten Verzeichnisses `debian` in die neuen Quellen. Dies kann durch Ausführung von `tar xvzf /`Pfad`/`zu`/`foo`_`alteVersion`.debian.tar.gz` in den entpackten Quellen passieren. [78] Natürlich müssen Sie einige offensichtliche Hausaufgaben machen:

- Erstellen Sie eine Kopie der Quellen der Originalautoren als `foo_`neueVersion`.orig.tar.gz`-Datei.

- Aktualisieren Sie die Debian-Datei `changelog` mit `dch -v `neueVersion`-`1``.

  - Fügen Sie einen Eintrag mit `New upstream release` hinzu.

  - Beschreiben Sie genau die Änderungen in der neuen Veröffentlichung der Originalautoren, die berichtete Fehler schließen, und schließen Sie diese Fehler, indem Sie `Closes: #`Fehler_Nummer`` hinzufügen.

  - Beschreiben Sie genau die Änderungen an der neuen Veröffentlichung der Originalautoren durch den Betreuer, die berichtete Fehler schließen, und schließen Sie diese Fehler, indem Sie `Closes: #`Fehler_Nummer`` hinzufügen.

- `while dquilt push; do dquilt refresh; done`, um alle Patches anzuwenden und gleichzeitig fuzz (Unschärfe) zu entfernen.

Falls das Patchen/Zusammenfügen nicht reibungsfrei lief, prüfen Sie die Situation (Hinweise verbleiben in `.rej`-Dateien).

- Falls ein Patch, den Sie an den Quellen angewandt hatten, in die Quellen der Originalautoren integriert wurde,

  - führen Sie `dquilt delete` aus, um ihn zu entfernen.

- Falls ein Patch, den Sie auf die Quellen anwandten, mit den neuen Änderungen in den Quellen der Originalautoren in Konflikt steht,

  - wenden Sie `dquilt push -f` an, um die alten Patches anzuwenden und Rückweisungen als ``baz`.rej` zu erzwingen.

  - Bearbeiten Sie die Datei ``baz`` manuell, um den geplanten Effekt von ``baz`.rej` zu erreichen.

  - `dquilt refresh`, um den Patch zu aktualisieren

- Fahren Sie mit `while dquilt push; do dquilt refresh; done` wie gewohnt fort.

Dieser Prozess kann mit dem Befehl uupdate(1) wie folgt automatisiert werden:

    $ apt-get source foo
    ...
    dpkg-source: info: foo wird nach foo-AlteVersion extrahiert
    dpkg-source: info: foo_AlteVersion.orig.tar.gz wird entpackt
    dpkg-source: info: foo_AlteVersion-1.debian.tar.gz wird angewandt
    $ ls -F
    foo-AlteVersion/
    foo_AlteVersion-1.debian.tar.gz
    foo_AlteVersion-1.dsc
    foo_AlteVersion.orig.tar.gz
    $ wget http://example.org/foo/foo-NeueVersion.tar.gz
    $ cd foo-AlteVersion
    $ uupdate -v NeueVersion ../foo-NeueVersion.tar.gz
    $ cd ../foo-NeueVersion
    $ while dquilt push; do dquilt refresh; done
    $ dch
    … Änderungen dokumentieren

Falls Sie eine wie in Abschnitt 5.21, „`watch`“ beschriebene Datei `debian/watch` eingerichtet haben, könen Sie den Befehl wget überspringen. Sie führen einfach uscan(1) in dem Verzeichnis ``foo`-`alteVersion`` statt des Befehls uupdate aus. Damit werden automatisch die aktualisierten Quellen gesucht, heruntergeladen und der Befehl uupdate ausgeführt. [79]

Sie können diese aktualisierten Quellen veröffentlichen, indem Sie die Schritte aus Abschnitt 6.1, „Kompletter (Neu-)Bau“, Kapitel 7, Überprüfen des Pakets auf Fehler und Kapitel 9, Das Paket hochladen wiederholen.

## 8.4. Den Paketstil aktualisieren

Die Aktualisierung des Paketierungsstils ist keine notwendige Aktivität beim Aktualisieren eines Pakets. Allerdings erlaubt dies Ihnen, die gesamten Möglichkeiten des modernen `debhelper`-Systems und des Quellformats `3.0` auszunutzen. [80]

- Falls Sie aus irgend einem Grund gelöschte Schablonendateien erneut erstellen müssen, können Sie dh_make mit der Option `--addmissing` in dem gleichen Debian-Quellverzeichnis aufrufen. Danach bearbeiten Sie diese entsprechend.

- Falls das Paket noch nicht aktualisiert wurde, um die v7+-dh-Syntax von `debhelper` für die Datei `debian/rules` zu verwenden, aktualisieren Sie es, um dh zu verwenden. Aktualisieren Sie die Datei `debian/control` entsprechend.

- Falls Sie die mit dem `Makefile`-Einschlussmechanismus des Common Debian Build System (`cdbs`) erzeugte Datei `rules` in die dh-Syntax umwandeln wollen, schauen Sie sich die folgenden Informationen an, um seine `DEB_*`-Konfigurationsvariablen zu verstehen:

  - lokale Kopie von `/usr/share/doc/cdbs/cdbs-doc.pdf.gz`

  - The Common Debian Build System (CDBS), FOSDEM 2009

- Falls Sie ein `1.0`-Quellpaket ohne die Datei ``foo`.diff.gz` haben, können Sie sie auf das neuere Quellformat `3.0 (native)` umstellen, indem Sie `debian/source/format` mit `3.0 (native)` erstellen. Der Rest der Dateien `debian/*` kann einfach so kopiert werden.

- Falls Sie ein `1.0`-Quellpaket mit der Datei ``foo`.diff.gz` haben, können Sie es in das neuere Quellformat `3.0 (quilt)` umwandeln, indem Sie die Datei `debian/source/format` mit `3.0 (quilt)` erstellen. Der Rest der Dateien `debian/*` kann einfach so kopiert werden. Importieren Sie die Datei `gross.diff`, die vom Befehl `filterdiff -z -x '*/debian/*' `foo`.diff.gz > gross.diff` erstellt wurde, in Ihr quilt-System, falls notwendig. [81]

- Falls es mit einem anderen Patch-System wie `dpatch`, `dbs` oder `cdbs` mit `-p0`, `-p1` oder `-p2` paketiert war, wandeln Sie es unter Verwendung des `deb3`-Skripts aus http://bugs.debian.org/581186 in das `quilt`-Format um.

- Falls es mit dem Befehl dh mit der Option `--with quilt` oder mit den Befehlen dh_quilt_patch und dh_quilt_unpatch paketiert wurde, entfernen Sie diese und sorgen Sie dafür, dass das neuere Format `3.0 (quilt)` verwandt wird.

Sie sollten die DEP - Debian Enhancement Proposals prüfen und akzeptierte (ACCEPTED) Vorschläge umsetzen.

Sie müssen auch andere in Abschnitt 8.3, „Neue Version der Originalautoren“ beschriebene Aufgaben erledigen.

## 8.5. UTF-8-Umstellung

Falls die Dokumente der Originalautoren in alten Kodierungsschemata vorliegen, ist es eine gute Idee, sie in UTF-8 umzuwandeln.

- Verwenden Sie iconv(1) für die Konvertierung reiner Textdateien.

      iconv -f latin1 -t utf8 foo_in.txt > foo_out.txt

- Verwenden Sie w3m(1) zur Umwandlung von HTML-Dateien in reine UTF-8-Textdateien. Stellen Sie dabei sicher, dass sie es unter einer UTF-8-Locale ausführen.

      LC_ALL=en_US.UTF-8 w3m -o display_charset=UTF-8 \
              -cols 70 -dump -no-graph -T text/html \
              < foo_in.html > foo_out.txt

## 8.6. Erinnerungen für die Paketaktualisierung

Es folgen ein paar Erinnerungen für die Aktualisierung von Paketen:

- Erhalten Sie alte Einträge im `changelog` (klingt offensichtlich, aber es gab Fälle, in denen `dch` eingegeben wurde, wenn `dch -i` hätte verwandt werden sollen).

- Existierende Debian-Änderungen müssen neu geprüft werden; entfernen Sie Dinge, die die Originalautoren integriert haben (in einer oder der anderen Form) und denken Sie daran, Dinge zu behalten, die noch nicht integriert wurden, falls es nicht doch überzeugende Gründe für die Entfernung gibt.

- Falls Änderungen am Bausystem vorgenommen wurden (hoffentlich wissen Sie es bei der Prüfung der Änderungen der Originalautoren), aktualisieren Sie `debian/rules` und die Bauabhängigkeiten in `debian/control`, falls notwendig.

- Prüfen Sie in der Fehlerdatenbank (BTS), ob jemand Patches für derzeit offene Fehler bereitgestellt hat.

- Prüfen Sie den Inhalt der Datei `.changes`, um sicherzustellen, dass Sie in die korrekte Distribution hochladen, die richtigen Fehlerschließanweisungen im Feld `Closes` enthalten sind, die Felder `Maintainer` and `Changed-By` passen, die Datei GPG-signiert ist usw.

[76] Um das Datum in das benötigte Format zu bekommen, verwenden Sie `LANG=C date -R`.

[77] Falls Sie den Befehl `dch -r` zur Durchführung dieser letzten Änderung verwenden, stellen Sie sicher, dass Sie die Datei `changelog` explizit im Editor speichern.

[78] Falls ein Paket ``foo`` im alten Format `1.0` paketiert ist, kann dies stattdessen durch `zcat /`Pfad`/`nach`/`foo`_`alte_Version`.diff.gz|patch -p1` in der neuen entpackten Quelle durchgeführt werden.

[79] Falls der Befehl uscan die aktualisierten Quellen herunterlädt, aber nicht den Befehl uupdate ausführt, sollten Sie die Datei `debian/watch` korrigieren, um `debian uupdate` am Ende der URL zu haben.

[80] Falls Ihr Sponsor oder andere Betreuer dem Aktualisieren des Paketierungsstils widersprechen, argumentieren Sie nicht. Es gibt wichtigere Dinge zu erledigen.

[81] Mit dem Befehl splitdiff können Sie `gross.diff` in viele kleine, inkrementelle Patches zerteilen.

Kapitel 7. Überprüfen des Pakets auf Fehler |  | Kapitel 9. Das Paket hochladen