Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

Patchverwaltung mit Quilt

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
1
2
3
4
5
6
7
8
9
10
11
# Quellen zum Ubuntu-Paket runterladen
apt-get source nginx
# Aktuelle Nginx-Quellen runterladen
wget -c http://nginx.org/download/nginx-1.2.7.tar.gz
# Paket aktualisieren
cd nginx-1.1.19
uupdate -u ../nginx-1.2.7.tar.gz
cd ..
# Paket neu erzeugen
cd 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
1
2
3
4
5
6
7
8
9
10
11
12
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
1
2
3
4
5
6
7
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.

Notizen

Diverse Befehle

  • sudo apt-get install devscripts
  • sudo apt-get build-dep nginx

Protokoll

Protokoll: Fehler und Korrektur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
uli@ubuntu1204:/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-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): -Wl,-Bsymbolic-functions -Wl,-z,relro
dpkg-buildpackage: source package nginx
dpkg-buildpackage: source version 1.2.7-0dp01~precise1
dpkg-buildpackage: source changed by Uli Heller <uli.heller@daemons-point.com>
dpkg-buildpackage: host architecture i386
 dpkg-source --before-build nginx-1.2.7
 fakeroot debian/rules clean
dh_testdir
dh_testroot
rm -f build-stamp
rm -f config.sub config.guess
dh_clean
rm -rf /build/nginx/nginx-1.2.7/debian/modules/naxsi
rm -rf /build/nginx/nginx-1.2.7/debian/build-*
 dpkg-source -b nginx-1.2.7
dpkg-source: info: using source format `3.0 (quilt)'
dpkg-source: info: building nginx using existing ./nginx_1.2.7.orig.tar.gz
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: error: 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.G94ZuW/debian/patches/perl-use-dpkg-buildflags.patch gave error exit status 1
dpkg-buildpackage: error: dpkg-source -b nginx-1.2.7 gave error exit status 2
uli@ubuntu1204:/build/nginx/nginx-1.2.7$ export QUILT_PATCHES=debian/patches
uli@ubuntu1204:/build/nginx/nginx-1.2.7$ quilt push -f
Applying patch perl-use-dpkg-buildflags.patch
patching file src/http/modules/perl/Makefile.PL
Hunk #2 succeeded at 14 with fuzz 1.

Now at patch perl-use-dpkg-buildflags.patch
uli@ubuntu1204:/build/nginx/nginx-1.2.7$ quilt refresh
Refreshed patch perl-use-dpkg-buildflags.patch
uli@ubuntu1204:/build/nginx/nginx-1.2.7$ quilt pop -a
Removing patch perl-use-dpkg-buildflags.patch
Restoring src/http/modules/perl/Makefile.PL

No patches applied

Comments