5.4 Debian Pakete anpassen

Das Anpassen von vorhandenen Debian Paketen kann aus verschiedenen Gründen sinnvoll sein. Es kann vorkommen, dass ein Paket für die verwendete Release-Version von Debian (noch) nicht verfügbar ist, dass andere Optionen zur Übersetzung mit dem Compiler verwendet werden sollen oder dass das Paket auf einer anderen Hardware-Architektur benutzt werden soll. Auch Anpassungen an den Init-Skripten sind unter Umständen sinnvoll.

Quellpakete sollten bei aktuellen Debian-Versionen mit APT bezogen werden. Aktivieren Sie dafür in einer passenden Deb822-Datei unter /etc/apt/sources.list.d/ auch einen Eintrag mit Types: deb-src, der dieselben Suites und Komponenten wie die zugehörigen Binärpaketquellen verwendet. Aktualisieren Sie anschließend die Paketindizes und laden Sie das Quellpaket herunter:

sudo apt update
apt source PAKETNAME

APT lädt die zum konfigurierten Release gehörenden Quelldateien herunter und entpackt sie in der Regel in ein neues Arbeitsverzeichnis. Debian-Quellpakete verwenden je nach Quellpaketformat unter anderem eine .dsc-Datei, ein Originalarchiv wie .orig.tar.xz und bei Format 3.0 (quilt) ein Debian-Archiv wie .debian.tar.xz. Ältere Pakete mit .diff.gz sind ein historisches Format; ein bestimmter Paketname oder eine konkrete Paketversion kann aus aktuellen Spiegeln verschwunden sein.

Im nächsten Schritt sind die Sourcen des Pakets zu entpacken. Dies geschieht nicht (wie sonst bei Source-Paketen üblich) mit dem Kommando tar (dieses würde lediglich die Original-Sourcen entpacken), sondern mit dem Kommando dpkg-source -x *.dsc. Hierbei werden zusätzlich die für das Debian Paket vorgenommenen Veränderungen (Patches) und alle Dateien, die sich im Verzeichnis debian/ befinden, entpackt. Die Sourcen befinden sich in einem neuen Verzeichnis, das sich aus dem Paketnamen und der Programmversion zusammensetzt. Wechseln Sie in dieses Verzeichnis.

Nun können die gewünschten Veränderungen an den Sourcen vorgenommen werden. Wenn Sie Veränderungen oder Ergänzungen an Dateien im Verzeichnis debian/ vornehmen, so ist darauf zu achten, dass unter Umständen auch Veränderungen oder Anpassungen in der Datei debian/rules notwendig sind. Mehr zu den Funktionen der einzelnen Dateien erfahren Sie im nächsten Abschnitt. Abschließend kann das Paket mit dpkg-buildpackage -us -uc erstellt werden. Weitere Optionen von dpkg-buildpackage sind ebenfalls im nächsten Abschnitt beschrieben.

5.4.1 apt-build (historisch)

apt-build ist kein allgemeiner Ersatz für die Debian-Paketquellen. Erstellen Sie lokale Pakete nur bei Bedarf und bevorzugen Sie die aktuellen Debian-Paketbauwerkzeuge in einer sauberen Build-Umgebung.

Aktuelle Alternative: Für den Bau eines Debian-Quellpakets verwenden Sie dpkg-buildpackage in einer sauberen Build-Umgebung, beispielsweise mit sbuild oder pbuilder. Installieren Sie die Build-Abhängigkeiten aus dem Quellpaket und dokumentieren Sie lokale Änderungen als Debian-Patches. Das bloße Kompilieren mit CPU-spezifischen Optionen ist kein allgemeiner Ersatz für die offiziellen Debian-Pakete.

Der im vorigen Abschnitt beschriebene Weg, ein einzelnes Paket zu entpacken, anzupassen und zu übersetzen, ist sicherlich sinnvoll, wenn nur wenige Pakete so optimiert werden sollen. Bei der Gentoo Linux Distribution ist es üblich, jedes Software-Paket selbst zu übersetzen. Dort wird bereits von Anfang an festgelegt, auf welchem Prozessor das zukünftige System laufen soll, und alle Pakete werden mit den entsprechenden Optimierungen übersetzt.

Kritiker führen immer wieder gerne an, dass eine solche Optimierung auf einem Debian System mit einem hohen Aufwand verbunden ist. Schauen wir uns doch einmal an, wie hoch dieser Aufwand tatsächlich ist.

Um bereits für Debian bereitgestellte Software-Pakete erneut auf einem System zu übersetzen, dient das Programm apt-build aus dem gleichnamigen Paket. Dieses sollte spätestens jetzt installiert werden. apt-build nutzt die Konfigurationsdatei /etc/apt/apt-build.conf. Diese hat folgenden Inhalt, die Werte werden während der Installation des Paketes abgefragt:

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
march = -march=pentium2
mcpu = -mcpu=pentium2
options =

Die in der Konfigurationsdatei enthaltenen Parameter gliedern sich in die von apt-build verwendeten Verzeichnisse und die Optionen, die dem GNU C Compiler übergeben werden. Hier sind die für den eingesetzten Prozessortyp passenden Optionen anzugeben, diese werden für alle Pakete, die mittels apt-build erzeugt werden, eingesetzt.

Des Weiteren wird ein Eintrag in der Datei /etc/apt/sources.list benötigt, welcher auf ein entsprechendes Repository zeigt, aus dem die Quellen der Debian Pakete bezogen werden können. Ein solcher Eintrag kann beispielhaft wie folgt aussehen:

deb-src https://deb.debian.org/debian/ stable main contrib non-free non-free-firmware

Ein Eintrag für das apt-build Repository mit den optimierten Paketen auf dem lokalen System ist während der Installation des Paketes apt-build auf Wunsch bereits der Datei /etc/apt/sources.list hinzugefügt worden. Diese sieht folgendermaßen aus:

deb file:/var/cache/apt-build/repository apt-build main

Damit ist die Konfiguration von apt-build abgeschlossen. Der Aufruf von apt-build muss mit Administratorrechten erfolgen. apt-build verwendet die folgenden Optionen:

Optionen

update

Aktualisiert die Liste der installierbaren Pakete.

upgrade

Aktualisiert die bereits installierten Pakete.

install

Holt die Debian Quellcode-Pakete zu dem gewünschten Paket, übersetzt die Software mit den eingestellten Optionen, erzeugt ein Debian Paket und installiert das erzeugte Paket. Ein Beispiel:

apt-build install memstat
-----> Installing build dependencies (for memstat) <-----
Reading Package Lists... Done
Building Dependency Tree... Done
0 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.
-----> Downloading memstat source (memstat) <-----
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 22.4kB of source archives.
Get:1 ftp://ftp.debian.org/main memstat 0.4-1 (dsc) [482B]
Get:2 ftp://ftp.debian.org/main memstat 0.4-1 (tar) [21.9kB]
Fetched 22.4kB in 0s (322kB/s)
dpkg-source: extracting memstat in memstat-0.4
-----> Building memstat <-----
...
dpkg-genchanges: binary-only upload - not including any source code
dpkg-buildpackage: binary only upload (no source included)
-----> Moving packages to repository <-----
-----> Updating repository <-----
Using: -O3 -mcpu=pentium2 -march=pentium2
...
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  memstat
...

source

Holt und entpackt die Quellcode-Dateien zu einem Paket.

apt-build wird also eingesetzt, um eigene, angepasste Pakete aus bestehenden Debian Paketen zu erzeugen. Wird jedoch ein Upgrade des Systems durchgeführt (apt-get dist-upgrade), so wird das mittels apt-build erzeugte, angepasste Paket durch das offizielle Debian Paket ersetzt. Dies kann verhindert werden, indem die Priorität von Paketen, die mit apt-build erzeugt wurden, erhöht wird.

Um die Priorität solcher mittels apt-build erzeugter Pakete zu erhöhen, muss die Datei /etc/apt/preferences wie folgt angepasst werden:

Package: *
   Pin: release o=apt-build
      Pin-Priority: 990 

Durch diese Änderung werden selbst erzeugte Pakete bei einem Upgrade nicht mehr durch neuere, offizielle Debian Pakete überschrieben. Mit dem Kommando apt-cache policy lässt sich dies überprüfen.

fr@wasabi]~ $ apt-cache policy 
Package Files:
 100 /var/lib/dpkg/status
     release a=now
 500 http://ftp2.de.debian.org sid/non-free Packages
     release o=Debian,a=unstable,l=Debian,c=non-free
     origin ftp2.de.debian.org
 500 http://ftp2.de.debian.org sid/contrib Packages
     release o=Debian,a=unstable,l=Debian,c=contrib
     origin ftp2.de.debian.org
 500 http://ftp2.de.debian.org sid/main Packages
     release o=Debian,a=unstable,l=Debian,c=main
     origin ftp2.de.debian.org
 990 file: apt-build/main Packages 
     release o=apt-build,a=apt-build,l=apt-build,c=main
Pinned Packages:

Dies ist eine einfache und mit dem Debian Paketmanagement kompatible Methode, eigene Pakete zu verwalten. Zu beachten ist dabei, dass Updates solcher Pakete auf neue Versionen oder auf Versionen, in denen Sicherheitslücken beseitigt wurden, selbst durchzuführen sind. Werden Bibliotheken auf diese Weise selbst verwaltet, so kann dies dazuführen, dass Pakete, die auf diesen Bibliotheken aufsetzen, eventuell nicht aktualisiert werden können. In diesem Fall sind die Bibliotheken auf den neuesten Versionsstand nachzuziehen.

Stand: 21.10.2026 22:27

 Impressum  Datenschutzerklärung