Kapitel 6. Debian-Pakete im Detail
Zurück | 6.3 Debian-Pakete anpassen | Weiter

## 6.3 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.

Zunächst sind von dem gewünschten Paket die entsprechenden Dateien mit den Endungen `.dsc` (Description/Beschreibung), `.diff.gz` (die für Debian vorgenommenen Änderungen) und `.tar.gz` (die eigentlichen Sourcen des Programms) vom Debian-FTP-Server zu holen. Für das Paket `gato` „gato“ finden Sie auf dem Debian-FTP-Server im Verzeichnis `/debian/dists/woody/main/source/admin` die Dateien `gato_0.6.4-2.diff.gz`, `gato_0.6.4-2.dsc` und `gato_0.6.4.orig.tar.gz`.

Im nächsten Schritt sind die Sourcen des Pakets zu entpacken. Dies geschieht nicht (wie sonst bei Sourcepaketen ü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 -rfakeroot` erstellt werden. Weitere Optionen von `dpkg-buildpackage` sind ebenfalls im nächsten Abschnitt beschrieben.

### 6.3.1 `apt-build`

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 Softwarepaket selbst zu übersetzen. Dort wird bereits von Anfang ein 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 das eine solche Optimierung auf einem Debian System mit einem hohen Aufwand verbunden ist, schauen wir uns doch einmal wie hoch dieser Aufwand tatsächlich ist.

Um bereits für Debian bereitgestellte Softwarepakete erneut auf einem System zu übersetzten 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 ftp://ftp.debian.org/debian/ stable main contrib

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 wie folgt 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 für das mittels `apt-build` erzeugte, angepasste Paket durch das offizielle Debian Paket ersetzt. Dies kann verhindert werden in dem die Priorität von Paketen die mittels `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 das Updates solcher Pakete auf neue Versionen oder auf Versionen in denen Sicherheitslücken beseitigt wurden, selbst durchzuführen sind. Werden Biblotheken auf diese Weise selbst verwaltet, so kann dies dazuführen das Pakete die auf diesen Bibliotheken aufsetzen eventuell nicht aktualisiert werden können. In diesem Fall sind die Bibliotheken auf den neuesten Versionsstand nachzuziehen.

Zurück | Nach oben | Weiter
6.2 Debian-Kernel-Pakete erzeugen | Zum Anfang | 6.4 Debian-Pakete - Aufbau der Sourcen

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).