[[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. = 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 [: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. = PAKET.* und PAKET.sgml.* und PAKET.xml.* = [: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. In SGML bzw. XML geschriebene Manpages werden als '''PROGRAMM.sgml.*''' respektive '''PROGRAMM.xml.*''' 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} ff. . = PAKET.manpages = In '''PAKET.manpages''' festgelegte Manpages werden von dh_installman nach '''/usr/share/man/man*/PROGRAMM''' installiert. = 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''' 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 [:Versionsverwaltung: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 [:Grundlagen_der_Paketerstellung#Patchen: Patchen] im Grundlagenartikel [1] wird ein Beispiel mit quilt vorgeführt. = Links = * [:Grundlagen_der_Paketerstellung:] * [http://www.debian.org/doc/maint-guide/ Debian Packaging Guide] {en} {de} * [http://www.debian.org/doc/manuals/maint-guide/dother.de.html Kapitel 5. Andere Dateien im Verzeichnis debian] {de} # tag: Paketverwaltung, Paketbau