Grundlagen der Paketerstellung/Optionale Konfigurationsdateien

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Grundlagen der Paketerstellung

  2. Dateien editieren

Inhaltsverzeichnis
  1. README.Debian
  2. README.source
  3. conffiles
  4. PAKET.cron.*
  5. dirs
  6. PAKET.doc-base(.*)
  7. docs
  8. emacsen-*
  9. PAKET.examples
  10. PAKET.default
  11. install
  12. PAKET.info
  13. PAKET.links
  14. PAKET.lintian-overrides und source.lintian...
  15. PAKET.* und PAKET.sgml.* und PAKET.xml.*
  16. PAKET.manpages
  17. menu und menu-method
  18. NEWS
  19. preinst und postinst und prerm und postrm
  20. TODO
  21. watch
  22. source/include-binaries
  23. source/options und source/local-options
  24. patches/*
  25. Links

Dieser Artikel greift ergänzend zum Grundlagenartikel [1] die optionalen Konfigurationsdateien im Debian-Verzeichnis bei der Erstellung eines Debian-Quellpakets auf und stellt knapp ihre Funktion und das zugehörige debhelper-Skript dar.

Hinweis:

Im Folgenden wird nicht zwischen Paket- und Programmnamen unterschieden, sondern nur der Platzhalter des Paketnamens "PAKET" verwendet.

Des Weiteren ist fast immer eine Benennung PAKET.DATEI und DATEI möglich.

README.Debian

Die Datei README.Debian enthält Informationen zu den Besonderheiten des Debian-Pakets und wird von dh_installdocs nach /usr/share/doc/PAKET/ installiert. Wenn Veränderungen oder Ergänzungen gegenüber dem Quellpaket vorgenommen werden, so sollten diese hier vermerkt werden. Dabei ist zu beachten, in der letzten Zeile die E-Mail-Adresse anzupassen. Wenn ein offizielles Debian-Paket erstellt wird oder auch nur das Paket im Netz verfügbar gemacht werden soll, so sollte die komplette Dokumentation, also auch Kommentare, in englischer Sprache erstellt werden.

Wenn keine weiteren Veränderungen an den Quellen, der Dokumentation oder den Skripten des Programms notwendig waren, so kann diese Datei auch einfach gelöscht werden.

README.source

Benötigt das Quellpaket weitere Vorbereitungen, damit ein erfolgreicher Kompiliervorgang mit dpkg-buildpackage durchgeführt werden kann, so ist die entsprechende Vorgehensweise in der Datei README.source beschrieben.

conffiles

Damit bei einem Paketupgrade manuell angepasste, systemweite Konfigurationen nicht ohne Weiteres überschrieben werden, können in der Datei conffiles bestimmte Konfigurationsdateien festgelegt werden. Für diese wird bei einem Paketupgrade nachgefragt, welche Version, also Maintainerversion oder lokal modifizierte Version, genommen werden soll.

Wird das Paket mit debhelper-Skripten gebaut, werden alle Dateien unter /etc automatisch von dh_installdeb als Konfigurationsdateien markiert.

PAKET.cron.*

Soll das Programm mit Cron regelmäßige Aufgaben ausführen, können die PAKET.cron.*-Dateien dafür genutzt werden, solche Cronjob-Vorlagen mittels dh_installcron an die richtige Stelle z.B. unter /etc/cron.daily/PAKET einzurichten. Sollen Logs rotiert werden, ist dh_installlogrotate zu bevorzugen.

dirs

Falls bestimmte Verzeichnisse nicht bei dem normalen Installationsprozess erstellt werden, können in der Datei dirs mit dh_installdirs die angegebenen Verzeichnisse manuell erstellt werden.

PAKET.doc-base(.*)

Soll das Paket noch andere Dokumentation außer Manpages und oder Infopages, wie z.B. HTML, PS und PDF-Dateien anbieten, können diese in der Datei PAKET.doc-base festgelegt und mit dh_installdocs registriert werden.

docs

In der Datei docs werden Dokumentationsdateien festgelegt, welche mit dh_installdocs unter /usr/share/doc/PAKET/ installiert werden.

emacsen-*

Falls das Paket Emacs Byte-Code bereitstellt, welcher während der Paketinstallation kompiliert werden kann, wird dies in den Dateien emacsen-* festgelegt. Für weitere Informationen dient die Manpage des entsprechenden Debhelper-Skriptes dh_installemacsen.

PAKET.examples

Wenn Vorlagedateien für beispielsweise Konfigurationen bereitgestellt werden, können diese mit dh_installexamples aus der Datei PAKET.examples ausgelesen nach /usr/share/doc/PAKET/examples/ installiert werden.

PAKET.default

Ebenfalls mit dh_installinit wird die Konfiguration PAKET.default nach /etc/default/PAKET installiert.

install

Sollen Dateien installiert werden, die nicht durch den Make-Prozess in das Paket kommen, können diese in der Datei install festgelegt werden. Dadurch benötigte neue Ordner werden automatisch von dh_install angelegt und müssen deswegen nicht in der Datei dirs festgelegt werden.

PAKET.info

Infoseiten unter dem Namen PAKET.info werden mit dh_installinfo nach /usr/share/info installiert.

Ermöglicht das Erstellen von Symlinks bei der Paketinstallation. Dazu zeilenweise Quelle und Ziel angeben. Beispiel:

/usr/bin/foo /usr/bin/bar

PAKET.lintian-overrides und source.lintian-overrides

Von Lintian 🇬🇧 irrtümlicherweise gemeldete Fehler im gebauten Debianpaket können durch Einträge in PAKET.lintian-overrides als solche markiert werden. Der Hinweis wird von dh_lintian nach /usr/share/lintian/overrides/PAKET installiert.

Einträge in source.lintian-overrides werden nicht installiert, sondern nur bei der Quellprüfung beachtet.

PAKET.* und PAKET.sgml.* und PAKET.xml.*

Manpages geschrieben in nroff werden als Datei PROGRAMM.* von dh_installman an die entsprechende Stelle /usr/share/man/man*/PROGRAMM installiert, wobei "*" die Sektion angibt.

In SGML bzw. XML geschriebene Manpages werden als PROGRAMM.sgml.* respektive PROGRAMM.xml.* nach manuell festgelegter Konvertierung in der Datei rules installiert. Siehe dazu 5.14. manpage.* 🇬🇧 ff. .

PAKET.manpages

In PAKET.manpages festgelegte Manpages werden von dh_installman nach /usr/share/man/man*/PROGRAMM installiert.

Die Debianmenü- und Debianmenümethoden-Dateien menu und menu-method werden von dh_installmenu an die entsprechende Stelle /usr/share/menu/PAKET und /etc/menu-methods/PAKET installiert. Siehe auch Debian-Menüeintrag.

dh_installmenu erstellt automatisch die benötigten Befehle für die Maintainerskripte postinst und postrm.

NEWS

dh_installchangelogs installiert die Datei NEWS oder PAKET.NEWS nach /usr/share/doc/PAKET/NEWS.Debian. In dieser werden Neuigkeiten des Paketes vermerkt.

preinst und postinst und prerm und postrm

Die s.g. "Maintainerskripte" erlauben es den Paketbetreuern (Maintainern) spezielle Aufgaben vor oder nach Installation oder Entfernen eines Paketes durchzuführen. Dies kann vom Starten von Diensten bis zu einer Benutzerinteraktion über debconf reichen.

Die Shellskripte preinst und postinst werden vor und nach der Installation ausgeführt, die Skripte prerm und postrm entsprechend vor oder nach dem Entfernen. Diese letzten beiden Skripte werden insbesondere auch dann ausgeführt, wenn auf eine andere Paketversion (mittels Upgrade oder Downgrade) gewechselt wird. Es werden dabei die Entfernenskripte des alten Paketes und die Installationsskripte des neuen Paketes benutzt.

Um die Paketverwaltung so robust wie möglich zu halten, müssen alle les- und ausführbaren Skripte bei fehlerhaftem Ausführen einer Aufgabe mit einem Exitstatus ungleich 0 enden, sodass der Einrichtungsprozess sofort abgebrochen wird. Um diese Robustheit zu gewährleisten, muss bei allen Maintainerskripten die Option -e des set builtins aktiviert sein. Dies geschieht durch folgenden Standardbeginn:

1
2
#!/bin/sh
set -e

oder

1
#!/bin/sh -e

Einige debhelper-Skripte ergänzen automatisch in den Maintainerskripten bestimmte Funktionen (s.g. "Codesnippets"). dh_installmenu fügt z.B. einen Abschnitt zur Aktualisierung des Debian-Menüsystems bei. Um die Position für automatisch beigefügten Inhalt zu bestimmen, wird das s.g. "Debhelper-Token" ("#DEBHELPER#") gesetzt. Dieses wird von dh_installdeb mit den automatisch erstellten Codesnippets ersetzt.

Aus folgendem postinst-Skript, welches einen Eintrag in das Alternativen-System vornimmt,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/sh
set -e

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] ; then
  update-alternatives --install /usr/bin/testbrowser \
    x-wwww-browser /usr/bin/testbrowser 42 \
    --slave /usr/share/man/man1/x-www-browser.1.gz \
    x-www-browser.1.gz /usr/share/man/man1/testbrowser.1.gz
fi              

#DEBHELPER#

wird kombiniert mit dh_installmenu nach dem Paketbau mit dh_installdeb folgendes postinst-Skript im DEBIAN/-Verzeichnis des Paketes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/sh -e

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] ; then
  update-alternatives --install /usr/bin/testbrowser \
    x-wwww-browser /usr/bin/testbrowser 42 \
    --slave /usr/share/man/man1/x-www-browser.1.gz \
    x-www-browser.1.gz /usr/share/man/man1/testbrowser.1.gz
fi

# Automatically added by dh_installmenu
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
 update-menus
fi
# End automatically added section

TODO

In der Datei TODO werden noch zu erledigende Aufgaben eingetragen. Diese wird von dh_installdocs nach /usr/share/doc/PAKET/TODO installiert.

watch

In der Datei watch im Quellpaket wird mit regulären Ausdrücken gekennzeichnet, wo nach der neusten Quellversion zu suchen ist. Das Programm uscan (aus dem Paket devscripts) kann anhand dieser Syntax den aktuellen Quellcode herunterladen.

Folgendes Beispiel zeigt die watch-Datei des Paketes coreutils:

version=3                                                                                                                                                                                                                              
opts=uversionmangle=s/\.(gz|bz2|lzma)$// \
ftp://ftp.gnu.org/gnu/coreutils/coreutils-([\d+\.]+)\.tar\.(gz|bz2|lzma) debian uupdate

source/include-binaries

In der Datei source/include-binaries werden Binärdateien aufgeführt, welche im Debianarchiv aufgenommen werden sollen.

source/options und source/local-options

In der Datei source/options und source/local-options, werden die vom jeweiligen Quellformat unterstützten Optionen für ein Zusammenstellen des Quellpakets mit dpkg-source, eingetragen. Funktion können z.B. das Festlegen des Archivformats und der Kompressionsrate sein.

Die Datei source/local-options wird nicht dem erstellten Quellpaket hinzugefügt und wird idR. zum lokalen Arbeiten mit einem Versionsverwaltungssystem (kurz und engl. CVS) verwendet.

patches/*

Hier werden Anpassungen des originalen Quellcodes in Form von Patches gelagert. Das gebräuchliche Patchsystem ist quilt. Es bietet eine VCS-ähnliche Verwaltung für Patches an, was einen komfortablen Umgang mit Änderungen am Quellcode ermöglicht. Zum Teil wird noch das dpatch-System genutzt, welches jedoch nicht mehr in neuen Paketen verwendet werden soll, da es nicht mit der Funktionalität von quilt mithalten kann.

Im Abschnitt Patchen im Grundlagenartikel [1] wird ein Beispiel mit quilt vorgeführt.