[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Grundlagen_der_Paketerstellung: Grundlagen der Paketerstellung] [:Editor: Dateien editieren] }}} [[Inhaltsverzeichnis()]] 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. {{{#!vorlage 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. = PAKET.conffiles = Damit bei einem Paketupgrade manuell angepasste, systemweite Konfigurationen nicht ohne Weiteres überschrieben werden, können in der Datei '''PAKET.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 [:man:Manpages] und oder [:info: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 dirs] festgelegt werden. = PAKET.info = [:info:Infoseiten] unter dem Namen '''PAKET.info''' werden mit dh_installinfo nach '''/usr/share/info''' installiert. = PAKET.links = Ermöglicht das Erstellen von [:ln: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 [http://lintian.debian.org/ Lintian] {en} 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.*, PAKET.manpages = [:man: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. Für dieses Format gibt es auch eine [:man/Manpage_erstellen:Anleitung] im Wiki. In SGML, XML, AsciiDoc oder Markdown geschriebene Manpages werden als '''PROGRAMM.sgml.*''' respektive '''PROGRAMM.xml.*''' etc. nach manuell festgelegter Konvertierung in der Datei [:Grundlagen_der_Paketerstellung#rules: rules] installiert. Siehe dazu [http://www.debian.org/doc/manuals/maint-guide/dother.en.html#manpage 5.14. manpage.*] {en}. In der Datei '''PAKET.manpages''' werden die zu installierenden Manpages gelistet. = menu und menu-method = 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 [:Grundlagen_der_Paketerstellung/Menüeintrag#Debian-Menueeintrag:Debian-Menüeintrag]. dh_installmenu erstellt automatisch die benötigten Befehle für die [#preinst-und-postinst-und-prerm-und-postrm 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 [:Shell: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: {{{#!code bash #!/bin/sh set -e }}} oder {{{#!code bash #!/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, {{{#!code bash #!/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: {{{#!code bash #!/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.Debian''' installiert. = watch = Das Programm `uscan` ([packages:devscripts:]) ist ein nützliches Helferlein, um bei einer früher oder später anstehenden Neupaketierung für eine neuere Version des Programms den Quellcode ohne viel Federlesen aus dem Internet herunterzuladen. Das URL-Schema sowie etwaige Optionen werden dabei mittels regulärer Ausdrücke in der Datei '''watch''' festgelegt. Folgende drei Formate sind möglich (nach Version ''4'' des `uscan`-Formats): {{{ opts=" ... " http://regulaerer-Ausdruck-für-URL [Version [Skript]] http://regulaerer-Ausdruck-fuer-URL [Version [Skript]] opts=" ... " }}} In Fall von GNU `hello`, dem Beispielprogramm aus dem Hauptartikel, lässt sich das Schema mittels vorgefertigter Ausdrücke im zweiten Format angeben: {{{ version=4 opts="pgpsigurlmangle=s/$/.sig/" http://ftp.gnu.org/gnu/@PACKAGE@/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate }}} Die erste Zeile beschreibt die URL, unter der die Signatur des Quellcodearchives zu finden ist, `uscan` übernimmt dann die Verifikation, sofern der Signierschlüssel als '''debian/upstream/signing-key.asc''' abgelegt wurde. Die Version `debian` (älter als die Version in '''changelog''') ist Standardeinstellung, `uupdate` als Skript bewirkt, dass automagisch ein neuer Verzeichnisbaum mit den alten Steuerungsdateien erzeugt wird. Für eine Übersicht der Optionen und lehrreiche Beispiele konsultiere man die Manpage von `uscan`. Nun kann man bei einer neuen Version schlicht ausführen: {{{#!vorlage Befehl uscan }}} `uscan` lädt nun das Quellcodeverzeichnis nach erfolgreicher Verifikation der Signatur in das Elternverzeichnis herunter, anschließend legt es dort einen Symlink des Tarballs auf ''PAKET_VERSION.orig.tar.gz'' an, entpackt das Archiv und kopiert das Verzeichnis '''debian''' dort hinein. = 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 [:Versionsverwaltung:Versionsverwaltungssystem] (kurz und engl. VCS) 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 [:Grundlagen_der_Paketerstellung#Patchen: Patchen] im Grundlagenartikel [1] wird ein Beispiel mit quilt vorgeführt. = compat (historisch) = Die '''compat'''-Datei bestimmte den debhelper-Kompatibilitätsmodus, also bestimmte Funktionalitäten der [#rules `debhelper`-Skripte] beim Erstellen der Pakete. Zur Zeit liegt die neuste abgeschlossene Version bei v13. Diese ist allerdings nicht für alle Ubuntuversionen aufgrund einer niedrigeren Version von `debhelper` verfügbar. Als Vorlage wird von `debmake` jeweils die Version genommen, welche zum Erscheinungszeitpunkt der momentan genutzten Ubuntuversion die aktuellste Abgeschlossene war. Um den Kompatibilitätsmodus manuell festzulegen, wurde die jeweilige Versionsnummer früher als alleinstehende Zahl in die Datei '''compat''' geschrieben, mittlerweile aber (seit `debhelper` Version 12) als Bau-Abhängigkeit in die [:Grundlagen der Paketerstellung#control:'''control'''-Datei]: {{{#!code Build-Depends: debhelper-compat (= 13) }}} Informationen zu den verschiedenen auf dem aktuellen System verfügbaren Kompatibilitätsmodi finden sich in der Übersichts-[:man:Manpage] des Paketes '''debhelper'''. = Links = * [:Grundlagen_der_Paketerstellung:] * [https://www.debian.org/doc/manuals/debmake-doc/ Guide for Debian Maintainers] {en} {de} * [https://www.debian.org/doc/manuals/debmake-doc/ch06.en.html#debianconf Other debian/* files] {en} # tag: Paketverwaltung, Paketbau