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
This translation may be out of date. To help with the translations please access the FreeBSD translations instance .
前面有一些没有提及的关于 pkg-* 文件的技巧, 它们可以方便地完成许多任务。
如果您需要在安装时显示一条消息给用户, 可以把这消息放在 pkg-message 中。 这一特性通常可以用于在 pkg_add(1) 之后显示一些附加的安装步骤, 或显示关于授权的信息。
当需要显示一些编译开关或警告时, 请使用
ECHO_MSG
。
pkg-message
文件只是为显示安装后的执行操作指导使用的。 类似地, 还需要留意
ECHO_MSG
和
ECHO_CMD
之间的区别。 前一个是在屏幕上显示消息性的文字, 而后一个则用于在执行命令时使用管道。
下面是用到了这两个宏的例子 shells/bash2/Makefile :
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
|
pkg-message
文件, 并不需要明确地加到
pkg-plist
中。 此外, 在用户使用 port 而不是 package 来安装软件时, 它并不会被显示出来。 因此如果需要的话, 您应该在
|
如果您的 port 需要在预编译的安装包通过
pkg_add(1)
安装时执行一些命令, 则应通过
pkg-install
脚本来完成。 这个脚本会自动地加入 package, 并被
pkg_add(1)
执行两次: 第一次是
${SH} pkg-install ${PKGNAME} PRE-INSTALL
而第二次是
${SH} pkg-install ${PKGNAME} POST-INSTALL
。
$2
可被用来检测脚本运行的模式。 环境变量
PKG_PREFIX
将设置为 package 的安装目录。 请参见
pkg_add(1)
以了解更进一步的细节。
|
在使用
|
这一脚本将在 package 被卸载时执行。
此脚本会被
pkg_delete(1)
执行两次。 第一次是
${SH} pkg-deinstall ${PKGNAME} DEINSTALL
而第二次则是
${SH} pkg-deinstall ${PKGNAME} POST-DEINSTALL
。
如果您的 port 需要确定它是否应被安装, 可以创建 pkg-req "requirements" 脚本。 它会在安装/卸载时自动运行, 以决定操作是否应被实施。
这个脚本会在使用
pkg_add(1)
安装时以
pkg-req ${PKGNAME} INSTALL
的命令行执行。 卸载时, 它将由
pkg_delete(1)
以
pkg-req ${PKGNAME} DEINSTALL
的命令行执行。
所有
pkg-
文件的名字, 皆系采用变量予以定义, 因此在需要时可以在您的
Makefile
中加以改变。 当您需要在多个 port 之间共享某些
pkg-
文件, 或需要写入某些文件时就非常有用了。 (参见 在
WRKDIR
以外的地方写文件, 以了解为什么直接将变更写入
pkg-*
子目录是个糟糕的主意)
下面是一组变量以及它们的默认值 (
PKGDIR
默认情况下是
${MASTERDIR}
。)
| 变量 | 默认值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
请修改这些变量, 而不是直接覆盖
PKG_ARGS
的值。 如果您改变了
PKG_ARGS
, 这些文件将无法在安装 port 时正确地复制到
/var/db/pkg
目录。
SUB_FILES
和
SUB_LIST
SUB_FILES
和
SUB_LIST
这两个变量可以用来在 port 文件中使用某些动态的值, 例如
pkg-message
中的 installation
PREFIX
。
用
SUB_FILES
变量, 可以指定需要自动进行修改的文件列表。 在
SUB_FILES
中的每一个
文件
, 在
FILESDIR
目录中都必须有一个对应的
文件.in
。 修改后的版本将保存在
WRKDIR
。 在
USE_RC_SUBR
(或已经过时的
USE_RCORDER
) 中定义的文件会自动加入到
SUB_FILES
中。 对于
pkg-message
、
pkg-install
、
pkg-deinstall
and
pkg-req
, 对应的 Makefile 变量会被自动设置, 以指向处理过的版本。
SUB_LIST
这个变量的内容是一系列
VAR=VALUE
对。
SUB_FILES
所列出的文件中所有的
%%VAR%%
都将被替换为
VALUE
。 系统自动定义了一些常用的替换对, 包括:
PREFIX
、
LOCALBASE
、
DATADIR
、
DOCSDIR
, 以及
EXAMPLESDIR
。 替换结果中所有以
@comment
开头的行, 都将在变量替换之后被删去。
下面的例子中, 将把
pkg-message
中的
%%ARCH%%
替换为系统所运行的架构名称:
SUB_FILES= pkg-message
SUB_LIST= ARCH=${ARCH}
注意, 在上述例子中,
FILESDIR
里必须有
pkg-message.in
这个文件。
下面是一个正确的 pkg-message.in 例子:
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.
Last modified on : February 18, 2025 by Fernando Apesteguía