diff --git a/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc index e5ec5b10af..8ba50d28c3 100644 --- a/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc +++ b/documentation/content/de/books/porters-handbook/pkg-files/_index.adoc @@ -1,156 +1,164 @@ --- title: Kapitel 8. Die pkg-* Dateien prev: books/porters-handbook/plist next: books/porters-handbook/testing showBookMenu: true weight: 8 path: "/books/porters-handbook/" --- [[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. .... diff --git a/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc b/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc index 413637c4af..a595c94ba2 100644 --- a/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc +++ b/documentation/content/en/books/porters-handbook/pkg-files/_index.adoc @@ -1,354 +1,357 @@ --- title: Chapter 9. pkg-* prev: books/porters-handbook/plist next: books/porters-handbook/testing description: Tricks about the pkg-* files tags: ["pkg", "pkg-message", "UCL", "pkg-install", "pkg-deinstall"] showBookMenu: true weight: 9 path: "/books/porters-handbook/" --- [[pkg-files]] = pkg-* :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 9 :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::[] There are some tricks we have not mentioned yet about the [.filename]#pkg-*# files that come in handy sometimes. [[porting-message]] == pkg-message To display a message when the package is installed, place the message in [.filename]#pkg-message#. This capability is often useful to display additional installation steps to be taken after a `pkg install` or `pkg upgrade`. [IMPORTANT] ==== * [.filename]#pkg-message# must contain only information that is _vital_ to setup and operation on FreeBSD, and that is unique to the port in question. * Setup information should only be shown on initial install. Upgrade instructions should be shown only when upgrading from the relevant version. * Do not surround the messages with either whitespace or lines of symbols (like `----------`, `**********`, or `==========`). Leave the formatting to man:pkg[8]. * Committers have blanket approval to constrain existing messages to install or upgrade ranges using the UCL format specifications. +* Please be sure to refer to the proper tools for handling services. +** Use `service name start` to start a service rather than using `/usr/local/etc/rc.d/name start` +** Use `sysrc name_enable=YES` to change options in rc.conf ==== pkg-message supports two formats: raw:: A regular plain text file. Its message is only displayed on install. UCL:: If the file starts with "`[`" then it is considered to be a UCL file. The UCL format is described on https://github.com/vstakhov/libucl[libucl's GitHub page]. [NOTE] ==== Do not add an entry for [.filename]#pkg-message# in [.filename]#pkg-plist#. ==== [[porting-message-ucl]] === UCL in pkg-message The format is the following. It should be an array of objects. The objects themselves can have these keywords: `message`:: The actual message to be displayed. This keyword is mandatory. `type`:: When the message should be displayed. `maximum_version`:: Only if `type` is `upgrade`. Display if upgrading from a version strictly lower than the version specified. `minimum_version`:: Only if `type` is `upgrade`. Display if upgrading from a version strictly greater than the version specified. The `maximum_version` and `minimum_version` keywords can be combined. The `type` keyword can have three values: `install`:: The message should only be displayed when the package is installed. `remove`:: The message should only be displayed when the package is removed. `upgrade`:: the message should only be displayed during an upgrade of the package.. [IMPORTANT] ==== To preserve the compatibility with non UCL [.filename]#pkg-message# files, the first line of a UCL [.filename]#pkg-message# _MUST be_ a single "`[`", and the last line _MUST be_ a single "`]`". ==== [[porting-message-ucl-short-ex]] .UCL Short Strings [example] ==== The message is delimited by double quotes `"`, this is used for simple single line strings: [.programlisting] .... [ { type: install message: "Simple message" } ] .... ==== [[porting-message-ucl-multiline-ex]] .UCL Multiline Strings [example] ==== Multiline strings use the standard here document notation. The multiline delimiter _must_ start just after `<<` symbols without any whitespace and it _must_ consist of capital letters only. To finish a multiline string, add the delimiter string on a line of its own without any whitespace. The message from <> can be written as: [.programlisting] .... [ { type: install message: < 1.0 and < 3.0 remove that file." } ] .... [IMPORTANT] **** When displaying a message on upgrade, it is important to limit when it is being shown to the user. Most of the time it is by using `maximum_version` to limit its usage to upgrades from before a certain version when something specific needs to be done. **** ==== [[pkg-install]] == pkg-install, pkg-pre-install, and pkg-post-install If the port needs to execute commands when the binary package is installed with `pkg add` or `pkg install`, use [.filename]#pkg-install#. It is run twice by `pkg`, the first time as `${SH} pkg-install ${PKGNAME} PRE-INSTALL` before the package is installed, and the second time as `${SH} pkg-install ${PKGNAME} POST-INSTALL` after it has been installed. `$2` can be tested to determine which mode the script is being run in. The `PKG_PREFIX` environment variable is set to the package installation directory. If using [.filename]#pkg-pre-install# or [.filename]#pkg-post-install# instead, the script is run only once (before or after installing the package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-install.lua# or [.filename]#pkg-post-install.lua# will run a lua script instead of a shell script. Lua scripts run by `pkg` provide some extensions and a few restrictions, both explained in man:pkg-lua-script[5]. [NOTE] ==== Using [.filename]#pkg-pre-install# (or [.filename]#pkg-pre-install.lua#) and [.filename]#pkg-post-install# (or [.filename]#pkg-post-install.lua#) is preferred to using [.filename]#pkg-install#. ==== These scripts are automatically added to the packing list. [IMPORTANT] ==== These scripts are here to simplify package configuration after installation. They _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system. ==== [[pkg-deinstall]] == pkg-deinstall, pkg-pre-deinstall, and pkg-post-deinstall These scripts execute when a package is removed. The [.filename]#pkg-deinstall# script is run twice by `pkg delete`. The first time as `${SH} pkg-deinstall ${PKGNAME} DEINSTALL` before the port is de-installed and the second time as `${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL` after the port has been de-installed. `$2` can be tested to determine which mode the script is being run in. The `PKG_PREFIX` environment variable is set to the package installation directory. If using [.filename]#pkg-pre-deinstall# or [.filename]#pkg-post-deinstall# instead, the script is run only once (before or after deinstalling the package), with the single argument `${PKGNAME}`. Using [.filename]#pkg-pre-deinstall.lua# or [.filename]#pkg-post-deinstall.lua# will run a lua script instead of a shell script. Lua scripts run by `pkg` provide some extensions and a few restrictions, both explained in man:pkg-lua-script[5]. [NOTE] ==== Using [.filename]#pkg-pre-deinstall# (or [.filename]#pkg-pre-deinstall.lua#) and [.filename]#pkg-post-deinstall# (or [.filename]#pkg-post-deinstall.lua#) is preferred to using [.filename]#pkg-deinstall#. ==== These scripts are automatically added to the packing list. [IMPORTANT] ==== These scripts are here to simplify cleanup after package deinstallation. They _must not_ be abused to start services, stop services, or run any other commands that will modify the currently running system. ==== [[pkg-names]] == Changing the Names of pkg-* All the names of [.filename]#pkg-\*# are defined using variables that can be changed in the [.filename]#Makefile# if needed. This is especially useful when sharing the same [.filename]#pkg-*# files among several ports or when it is necessary to write to one of these files. See crossref:porting-dads[porting-wrkdir,writing to places other than `WRKDIR`] for why it is a bad idea to write directly into the directory containing the [.filename]#pkg-*# files. Here is a list of variable names and their default values. (`PKGDIR` defaults to `${MASTERDIR}`.) [.informaltable] [cols="1,1", frame="none", options="header"] |=== | Variable | Default value |`DESCR` |`${PKGDIR}/pkg-descr` |`PLIST` |`${PKGDIR}/pkg-plist` |`PKGINSTALL` |`${PKGDIR}/pkg-install` |`PKGPREINSTALL` |`${PKGDIR}/pkg-pre-install` |`PKGPOSTINSTALL` |`${PKGDIR}/pkg-post-install` |`PKGDEINSTALL` |`${PKGDIR}/pkg-deinstall` |`PKGPREDEINSTALL` |`${PKGDIR}/pkg-pre-deinstall` |`PKGPOSTDEINSTALL` |`${PKGDIR}/pkg-post-deinstall` |`PKGMESSAGE` |`${PKGDIR}/pkg-message` |=== [[using-sub-files]] == Making Use of `SUB_FILES` and `SUB_LIST` `SUB_FILES` and `SUB_LIST` are useful for dynamic values in port files, such as the installation `PREFIX` in [.filename]#pkg-message#. `SUB_FILES` specifies a list of files to be automatically modified. Each [.filename]#file# in the `SUB_FILES` list must have a corresponding [.filename]#file.in# present in `FILESDIR`. A modified version will be created as [.filename]#${WRKDIR}/file#. Files defined as a value of `USE_RC_SUBR` are automatically added to `SUB_FILES`. For the files [.filename]#pkg-message#, [.filename]#pkg-install#, and [.filename]#pkg-deinstall#, the corresponding Makefile variable is automatically set to point to the processed version. `SUB_LIST` is a list of `VAR=VALUE` pairs. For each pair, `%%VAR%%` will be replaced with `VALUE` in each file listed in `SUB_FILES`. Several common pairs are automatically defined: `PREFIX`, `LOCALBASE`, `DATADIR`, `DOCSDIR`, `EXAMPLESDIR`, `WWWDIR`, and `ETCDIR`. Any line beginning with `@comment` followed by a space, will be deleted from resulting files after a variable substitution. This example replaces `%%ARCH%%` with the system architecture in a [.filename]#pkg-message#: [.programlisting] .... SUB_FILES= pkg-message SUB_LIST= ARCH=${ARCH} .... Note that for this example, [.filename]#pkg-message.in# must exist in `FILESDIR`. Example of a good [.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. ....