Debian-Paket compilieren und patchen

Submitted by Stefan Sedelmaier on Tue, 11/22/2016 - 08:58

Debian ist ein freies Betriebssystem, frei auch im Sinne der Freiheit alles zu ändern, um die größtmögliche Freiheit zu gewährleisten steht die komplette Software von Debian als Source-Code bereit, und kann den eigenen Bedürfnissen angepasst werden.
Damit ein existierendes Debian-Paket (*.deb) gebuildetet werden kann muss
das Source-Repository konfiguriert werden. Die Source-Repository werden in /apt/sources/list konfiguriert und beginnen mit deb-src

deb-src http://ftp.at.debian.org/debian/ stable main contrib non-free

sudo aptitude update aktualisiert die geänderten Paktelisten und die Source-Pakete stehen zur Verfügung. Das System zum kompilieren vorbereiten

sudo aptitude install build-essential fakeroot devscripts

Arbeitsverzeichnis

Damit mit den Sources gearbeitet werden kann empfiehlt es sich ein eigenes Verzeichnis dafür zu erstellen.

mkdir -p ~/src/debian; cd ~/src/debian

In diesem Beispiel wird das Paket "cvs" verwendet.
Zuerst das Paket installieren sudo aptitude install cvs
Das Source Paket mit

sudo apt-get source cvs

in das aktuelle Verzeichnis herunterladen. Es wurden 3 Dateien (.dsc, .tar.gz, .diff.gz) heruntergeladen und in den Ordner cvs-1.12.13+real entpackt. Debian-Source-Pakages können manuell mit dpkg-source -x .dsc entpackt werden.
Jedes Debian-Paket (und auch die Pakete der Debian Devirate) enthält einen Ordner debian, in diesem sind alle Debian-spezifischen Dateien, wie Patches, Manpages und Dokumentation enthalten. Wichtig sind debian/rules, das Executable zum builden und debian/patches welches die Maintainer Patches enthält.

Build-Abhängigkeiten

Damit eine Programm kompiliert kann sind werden Entwicklungsdateien benötigt, diese sind üblicherweise in den -dev Paketen enthalten. Die benötigten Build-Abhängigkeiten werden mit

sudo apt-get build-dep cvs

installiert.

Das Paket ohne Änderungen bauen

In den Source Ordner wechseln

cd ~/src/debian/cvs-1.12.13+real

Das Paket wird mit debuild erzeugt

 debuild -b -uc -us

das fertige *.deb kann dann mit sudo dpkg -i ../cvs_1.12.13+real-15_*.deb installiert werden

Das Paket mit Änderungen und bauen

Für Debian sind verschiedene Patch-Systeme vorhanden, die Vor- und Nachteile sind unter debian/patches beschrieben, im Nachfoglenden wird quilt verwendet.

quilt konfigurieren

Im Home-Verzeichnis die quilt Konfiguration ~/.quiltrc mit folgenden Inhalt erstellen

QUILT_PATCHES=debian/patches
QUILT_NO_DIFF_INDEX=1
QUILT_NO_DIFF_TIMESTAMPS=1
QUILT_REFRESH_ARGS="-p ab"
QUILT_DIFF_ARGS="--color=auto" # If you want some color when using `quilt diff`.

existierende Patches anwenden

In das zu bauende Source-Verzeichnis wechseln (cd ~/src/debian/cvs-1.12.13+real).

quilt push -a

"push" wendet alle existierende Patches auf dem Source-Tree an.

einen neuen Patches erstellen

In diesem Beispiel wird PAM aktiviert.
mit "new" wird ein neuer Patch erstellt

quilt new enable-pam.diff

mit "add" werden die zu ändernden Dateien zum Patch hinzugefügt

quilt add debian/rules
quilt add debian/control

Die Änderungen in debian/rules vornehmen:

CONFIGURE_ARGS:=	--prefix=/usr \
			--infodir=/usr/share/info \
			--mandir=/usr/share/man \
			--sysconfdir=/etc \
			--disable-dependency-tracking \
			--disable-maintainer-mode \
			--enable-pam \

Dadurch entsteht eine neue Abhängigkeit, also debian/control anpassen, libpam0g-dev hinzufügen

Build-Depends: debhelper (>= 5), autopoint, autotools-dev,
 bsdmainutils, dh-autoreconf, groff, libbsd-dev,
 libkrb5-dev | heimdal-dev, procps, texinfo,
 texlive-latex-base, texlive-fonts-recommended,
 texlive-latex-recommended, zlib1g-dev, libpam0g-dev

Den Patch mit den Änderungen aktualisieren.

quilt refresh

Ein Beschreibung zum Patch hinzufügen

quilt header -e

Nachdem alle Änderungen abgeschlossen sind den Source auf den Originalzustand zurücksetzen

quilt pop -a

einen Patche editieren

quilt unterstüzt mehrere Patches, es kann aber nur ein aktuelle Patch ediert werden.

quilt push enable-pam.diff 

Jetzt kann der Patch editiert werden, mit

quilt refresh enable-pam.diff 

aktualisieren und noch ein

quilt pop -a

einen externen Patches importieren

In diesem Beispiel wird zusätzlich noch bug #35432 korrigiert.
Es gibt für diesen Bug bereits ein Patch (für den upstream source).
Den externen Patch herunterladen

wget -o ../cvs-1.12.13.1-fix-gnulib-SEGV-vasnprintf.patch
 http://git.savannah.gnu.org/cgit/gnulib.git/patch/lib/vasnprintf.c?id=913c09becd9df89dbd9b9f386e7f35c240d5efe8

quilt import importiert den Patch

quilt import ../cvs-1.12.13.1-fix-gnulib-SEGV-vasnprintf.patch

einen Patch löschen

ein Patch wird mit quilt delete aus der series-Datei gelöscht. -r entfernt den Patch komplett

quilt delete -r 

Das Paket bauen

Bevor das Paket mit den Patches gebaut wird muss das Paket noch als Unterschiedlich vom Original markiert werden.

dch -n

Damit wird ein neuer Eintrag in changelog hinzugefügt.

Das Paket wird debuild gebaut, mit der Option -tc wird ein clean build erstellt.

 debuild -b -uc -us

Das fertige Paket kann mit dpkg instlaliert werden.

sudo dpk -i ../cvs_1.12.13+real-15.1_amd64.deb

installiert werden.

Add new comment