Ubuntu-Pakete aktualisieren – Patchverwaltung mit Quilt
Heute hatte ich die Idee, eine neue Version von NGINX zu erzeugen.
Grob sollte es nach diesem Muster klappen:
Paket aktualisieren
1234567891011
# Quellen zum Ubuntu-Paket runterladenapt-get source nginx
# Aktuelle Nginx-Quellen runterladenwget -c http://nginx.org/download/nginx-1.2.7.tar.gz
# Paket aktualisierencd nginx-1.1.19
uupdate -u ../nginx-1.2.7.tar.gz
cd ..
# Paket neu erzeugencd nginx-1.2.7
dpkg-buildpackage
Danach sollten die neuen Paketdateien bereit zur Installation sein.
Fatales Problem
Leider klappt’s nicht, es gibt fatale Fehlermeldungen:
Fatale Fehler bei der Paketerzeugung
123456789101112
uli@ubuntu-120464:/build/nginx/nginx-1.2.7$ dpkg-buildpackage
dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): -D_FORTIFY_SOURCE=2
...
dpkg-source -b nginx-1.2.7
dpkg-source: Information: Quellformat »3.0 (quilt)« wird verwendet
dpkg-source: Information: nginx wird unter Benutzung des existierenden ./nginx_1.2.7.orig.tar.gz gebaut
patching file src/http/modules/perl/Makefile.PL
Hunk #2 FAILED at 14.1 out of 2 hunks FAILED -- saving rejects to file src/http/modules/perl/Makefile.PL.rej
dpkg-source: Fehler: Fehler-Exitstatus von LC_ALL=C patch -t -F 0 -N -p1 -u -V never -g0 -E -b -B .pc/perl-use-dpkg-buildflags.patch/ < nginx-1.2.7.orig.OjasVr/debian/patches/perl-use-dpkg-buildflags.patch war 1
dpkg-buildpackage: Fehler: Fehler-Exitstatus von dpkg-source -b nginx-1.2.7 war 2
Korrektur
In der Fehlermeldung erkennt man den Hinweis auf das Werkzeug QUILT.
Dieses verwaltet die Anpassungsdateien (patches) und kann auch zur Korrektur
der fehlerhaften Anpassungen verwendet werden.
Hier der Korrekturablauf:
Patch aktualisieren
1234567
export QUILT_PATCHES=debian/patches
quilt push -f # ... eigentlich hätte ich hier einen Fehler erwartet,# stattdessen erscheint eine Meldung mit "succeeded with fuzz..."# Glück gehabt!quilt refresh
quilt pop -a
dpkg-buildpackage
Nun läuft die Erzeugung durch, DEB-Dateien werden erstellt.