---
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 <<porting-wrkdir, Schreiben ausserhalb von `WRKDIR`>>.

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.
....
