Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
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.
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.
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.
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.
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.
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.
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.
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.
In der Datei docs werden Dokumentationsdateien festgelegt, welche mit dh_installdocs unter /usr/share/doc/PAKET/ installiert werden.
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.
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.
Upstart-Job oder Init-Skript in PAKET.init wird mit dh_installinit eingerichtet. Nötige Verlinkungen in /etc/rc*.d/ werden vorgenommen und die Maintainer-Skripte postinst, postrm und prerm automatisch angepasst.
Ebenfalls mit dh_installinit wird die Konfiguration PAKET.default nach /etc/default/PAKET installiert.
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.
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
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.
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. .
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.
dh_installchangelogs installiert die Datei NEWS oder PAKET.NEWS nach /usr/share/doc/PAKET/NEWS.Debian. In dieser werden Neuigkeiten des Paketes vermerkt.
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 |
In der Datei TODO werden noch zu erledigende Aufgaben eingetragen. Diese wird von dh_installdocs nach /usr/share/doc/PAKET/TODO installiert.
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
In der Datei source/include-binaries werden Binärdateien aufgeführt, welche im Debianarchiv aufgenommen werden sollen.
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.
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.
Diese Revision wurde am 3. Oktober 2014 10:53 von Justin-Time erstellt.