--- title: Kapitel 8. Die pkg-* Dateien prev: books/porters-handbook/plist next: books/porters-handbook/testing showBookMenu: true weight: 8 params: path: "/books/porters-handbook/pkg-files/" --- [[pkg-files]] = Die [.filename]#pkg-*# Dateien :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 8 :partnums: :source-highlighter: rouge :experimental: :images-path: books/porters-handbook/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[porting-message]] == [.filename]#pkg-message# Wenn Sie dem Anwender bei der Installation weitere Informationen anzeigen wollen, so können Sie diese Nachricht in [.filename]#pkg-message# speichern. Diese Vorgehensweise ist oft nützlich, um zusätzliche Schritte anzuzeigen, die nach man:pkg_add[1] durchgeführt werden müssen. Dadurch können Sie auch Lizenzinformationen darstellen. Wollen Sie nur ein paar Zeilen über die Einstellungen zum Erstellen des Ports oder Warnungen ausgeben, benutzen Sie `ECHO_MSG`. [.filename]#pkg-message# ist nur für Schritte nach der Installation vorgesehen. Sie sollten den Unterschied zwischen `ECHO_MSG` und `ECHO_CMD` beachten: Ersteres wird benutzt, um Informationen auf dem Bildschirm auszugeben, während Letzteres für Kommando-Pipelining bestimmt ist. Ein gutes Beispiel für die Benutzung der beiden Befehle ist in [.filename]#shells/bash2/Makefile# zu finden: [.programlisting] .... update-etc-shells: @${ECHO_MSG} "updating /etc/shells" @${CP} /etc/shells /etc/shells.bak @( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \ ${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells @${RM} /etc/shells.bak .... [NOTE] ==== Stellen Sie sicher, dass sie auf die korrekten Tools zum Verwalten von Diensten verweisen. * Verwenden Sie `service name start`, um einen Dienst zu starten, anstatt `/usr/local/etc/rc.d/name start` zu verwenden. * Verwenden Sie `sysrc name_enable=YES`, um Optionen in rc.conf zu ändern. ==== [NOTE] ==== Die [.filename]#pkg-message# wird nicht zur [.filename]#pkg-plist# hinzugefügt. Sie wird auch nicht automatisch angezeigt, falls ein Anwender den Port installiert. Sie müssen also die Ausgabe selbst im `post-install`-Ziel des Make-Vorgangs veranlassen. ==== [[pkg-install]] == [.filename]#pkg-install# Sollte es nötig sein, dass Ihr Port bei der Installation des Binärpakets mit man:pkg_add[1] Befehle ausführt, können Sie das Skript [.filename]#pkg-install# benutzen. Dieses Skript wird automatisch dem Paket hinzugefügt und zweimal von man:pkg_add[1] ausgeführt: Zuerst als `${SH} pkg-install ${PKGNAME} PRE-INSTALL` und beim zweiten Mal als `${SH} pkg-install ${PKGNAME} POST-INSTALL`. `$2` kann also getestet werden, um festzustellen, in welchem Modus das Skript ausgeführt wird. Die Umgebungsvariable `PKG_PREFIX` wird auf das Verzeichnis gesetzt, in welches das Paket installiert wird. Siehe man:pkg_add[1] für weiterführende Informationen. [NOTE] ==== Das Skript wird nicht automatisch ausgeführt, wenn Sie den Port mit `make install` installieren. Wenn Sie es ausführen lassen wollen, dann müssen Sie es im Makefile aufrufen: `PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL.` ==== [[pkg-deinstall]] == [.filename]#pkg-deinstall# Dieses Skript wird ausgeführt, wenn ein Paket deinstalliert wird. Es wird zweimal von man:pkg_delete[1] aufgerufen. Das erste Mal als `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` und dann als `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL.` [[pkg-req]] == [.filename]#pkg-req# Muss Ihr Port entscheiden, ob er installiert werden soll oder nicht, können Sie ein [.filename]#pkg-req#-"Bedingungsskript" verwenden. Dieses wird automatisch bei der Installation/ Deinstallation aufgerufen, um zu entscheiden, ob die Installation/ Deinstallation fortgesetzt werden soll. Das Skript wird während der Installation von man:pkg_add[1] als `pkg-req ${PKGNAME} INSTALL` aufgerufen. Bei der Deinstallation wird es von man:pkg_delete[1] als `pkg-req ${PKGNAME} DEINSTALL` ausgeführt. [[pkg-names]] == Ändern der Namen der [.filename]#pkg-*# Dateien Alle Namen der [.filename]#pkg-*# Dateien werden durch Variablen festgelegt. Sie können sie bei Bedarf also im [.filename]#Makefile# des Ports ändern. Das ist besonders nützlich, wenn Sie die gleichen [.filename]#pkg-*# Dateien in mehreren Ports nutzen oder in eine der oben genannten Dateien schreiben wollen. Schreiben Sie niemals außerhalb des Unterverzeichnisses `WRKDIR`[.filename]#pkg-*#, eine Erklärung hierzu finden Sie in <>. Hier ist eine Liste von Variablennamen und ihren Standardwerten (`PKGDIR` ist standardmäßig `${MASTERDIR}`). [.informaltable] [cols="1,1", frame="none", options="header"] |=== | Variable | Standardwert |`DESCR` |`${PKGDIR}/pkg-descr` |`PLIST` |`${PKGDIR}/pkg-plist` |`PKGINSTALL` |`${PKGDIR}/pkg-install` |`PKGDEINSTALL` |`${PKGDIR}/pkg-deinstall` |`PKGREQ` |`${PKGDIR}/pkg-req` |`PKGMESSAGE` |`${PKGDIR}/pkg-message` |=== Bitte benutzen Sie diese Variablen anstatt `PKG_ARGS` zu ändern. Wenn Sie `PKG_ARGS` modifizieren, werden diese Dateien bei der Installation des Ports nicht korrekt in [.filename]#/var/db/pkg# installiert. [[using-sub-files]] == Nutzung von `SUB_FILES` und `SUB_LIST` Die Variablen `SUB_FILES` und `SUB_LIST` sind nützlich, um dynamische Werte in Port-Dateien zu verwenden, wie beispielsweise der Installations-`PREFIX` in [.filename]#pkg-message#. Die Variable `SUB_FILES` enthält eine Liste von Dateien, die automatisch verändert werden. Jede _Datei_ in `SUB_FILES` muss ein entsprechendes Pendant _datei.in_ im Verzeichnis `FILESDIR` haben. Die modifizierte Version wird in `WRKDIR` angelegt. Dateien, die als Werte von `USE_RC_SUBR` (oder veraltet in `USE_RCORDER`) gespeichert werden, werden automatisch zu `SUB_FILES` hinzugefügt. Für die Dateien [.filename]#pkg-message#, [.filename]#pkg-install#, [.filename]#pkg-deinstall# und [.filename]#pkg-req# werden die jeweiligen Makefile-Variablen selbsttätig auf die geänderte Version der Datei gesetzt. Die Variable `SUB_LIST` ist eine Liste von `VAR=WERT`-Paaren. Jedes Paar `%%VAR%%` in den Dateien von `SUB_FILES` wird mit `WERT` ersetzt. Einige gebräuchliche Paare werden automatisch definiert: `PREFIX`, `LOCALBASE`, `DATADIR`, `DOCSDIR`, `EXAMPLESDIR`. Jede Zeile, die mit `@comment` beginnt, wird nach der Variablen-Ersetzung aus der neu erstellten Datei gelöscht. Im folgenden Beispiel wird `%%ARCH%%` mit der Systemarchitektur in [.filename]#pkg-message# ersetzt: [.programlisting] .... SUB_FILES= pkg-message SUB_LIST= ARCH=${ARCH} .... Beachten Sie bitte, dass in diesem Beispiel die Datei [.filename]#pkg-message.in# im Verzeichnis `FILESDIR` vorhanden sein muss. Hier ein Beispiel für eine gute [.filename]#pkg-message.in#: [.programlisting] .... Now it is time to configure this package. Copy %%PREFIX%%/shared/examples/putsy/%%ARCH%%.conf into your home directory as .putsy.conf and edit it. ....