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