8.6.用关键词扩展软件包列表
所有的关键词都可以在括号里使用可选的参数。这些参数是所有者、组和模式。这个参数用于被引用的文件或目录。要改变一个配置文件的所有者、组和模式,请使用。
参数是可选的。如果只需要改变组和模式,请使用。
警告
如果在可选条目上使用关键字,则必须在 helper 之后添加:
这是因为 options plist helper 是用来注释这一行的,所以需要放在前面。参见 OPTIONS_SUB 以了解更多信息。
8.6.1. @desktop-file-utils
@desktop-file-utils
将在安装和卸载后运行 update-desktop-database -q
。千万 不要 直接使用,应在 Makefile 中加入 USES=desktop-file-utils
。
8.6.2. @fc
目录
@fc
目录为作为参数传递的目录添加一个 @dir
条目,并在安装和卸载后在该目录上运行 fc-cache -fs
。
8.6.3. @fontsdir
目录
@fontsdir
目录为作为参数传递的目录添加一个 @dir
条目,并在安装和卸载后对该目录运行 mkfontscale
和 mkfontdir
。此外,在卸载时,如果 fonts.scale 和 fonts.dir 的缓存文件为空,它将删除这些文件。
8.6.4. @info
文件
@info
文件将作为参数传递的文件添加到 plist 中,并在安装和卸载时更新 info 文件的索引。此外,如果在卸载时是空的,它会删除索引。这绝不应该手动使用,而应该始终通过 INFO
使用。更多信息见信息文件。
8.6.5. @kld
目录
@kld
目录在安装和卸载时对该目录运行 kldxref
。此外,在卸载时,如果是空的,它将删除该目录。
8.6.6. @rmtry
文件
@rmtry
文件将在卸载时删除文件,如果文件不在那里,则不会给出错误。
8.6.7. @sample
文件 [file]
@sample
文件 [file]这是用来处理配置文件的安装,通过与软件包捆绑的示例文件。实际的“非样本文件”是第二个文件名,如果存在的话,或者是第一个没有 .sample 扩展名的文件名。
这做了三件事。首先,将作为参数传递的第一个文件,即样本文件,添加到 plist 中。然后,在安装时,如果没有找到实际的文件,就把样本文件复制到实际文件中。最后,在卸载时,如果实际文件没有被修改,则删除该文件。更多信息见配置文件。
8.6.8. @shared-mime-info
目录
@shared-mime-info
目录在安装和卸载时对该目录运行 update-mime-database
。
8.6.9. @shell
文件
@shell
文件将作为参数传递的文件添加到 plist 中。
在安装时,将 文件 的完整路径添加到 /etc/shells ,同时确保它不会被添加两次。在卸载时,从 /etc/shells 中删除它。
8.6.10. @terminfo
@terminfo
请不要单独使用。如果 port 安装了 *.terminfo 文件, 则应将其加入到 Makefile 中。
在安装和卸载时,如果存在 tic
,则应从 ${PREFIX}/shared/misc/terminfo.db 中刷新 ${PREFIX}/shared/misc 中的 *.terminfo 文件。
8.6.11. 基本关键词
有一些关键词是硬编码的, 并在 pkg-create(8) 中有所记录。为了完整起见,这里也对它们进行了记录。
8.6.11.1. @
[file]
@
[file]空关键字作为一个占位符在需要改变文件的所有者、组或模式时使用。例如,要将文件的组设置为 games
,并添加 setgid 位,请添加:
8.6.11.2. @preexec
命令 , @postexec
命令 , @preunexec
命令 , @postunexec
命令
@preexec
命令 , @postexec
命令 , @preunexec
命令 , @postunexec
命令执行 命令 作为软件包安装或卸载过程的一部分。
@preexec
命令
作为 pre-install 脚本的一部分执行 命令 。
@postexec
命令
作为 post-install 脚本的一部分执行 命令 。
@preunexec
命令
作为 pre-deinstall 的一部分执行 命令 。
@postunexec
命令
作为 post-deinstall 脚本的一部分执行 命令 。
如果 命令 中包含这些序列中的任何一个,它们会被内联展开。在这些例子中,假设 @cwd
被设置为 /usr/local ,最后解压的文件是 bin/emacs 。
%F
扩展到最后解压的文件名(如指定)。在例子中的 bin/emacs 。
%D
扩展到当前目录的前缀,如用 @cwd
设置的。在例子中, /usr/local 。
%B
扩展到完全合格的文件名的基名,也就是当前目录前缀加上最后一个文件名,减去尾部的文件名。在本例中,这将是 /usr/local/bin 。
%f
扩展到完全限定名称的文件名部分,或者与 %B
相反。在这个例子中,就是 emacs 。
重要
这些关键字在这里是为了帮助你设置软件包,使其尽可能随时可用。它们 不能 被滥用来启动服务、停止服务或运行任何其他会修改当前运行系统的命令。
8.6.11.3. @mode
模式
@mode
模式将所有随后解压的文件的模式设置为默认权限。格式与 chmod(1) 使用的相同。在不带参数的情况下设置回默认权限(文件在打包时的模式)。
重要
这必须是一个数字模式,如
644
、4755
或600
。它不能是相对模式,如u+s
。
8.6.11.4. @owner
用户
@owner
用户将所有后续文件的默认所有权设置为用户。使用不含参数的方法,可以设置回默认所有权(root
)。
8.6.11.5. @group
group
@group
group将所有后续文件的默认组所有权设置为组。使用不含参数的方法,可以将组的所有权设置为默认的(wheel
)。
8.6.11.6. @comment
string
@comment
string这一行在打包时被忽略。
8.6.11.7. @dir
目录
@dir
目录声明目录名称。默认情况下,由软件包安装在 PREFIX
下创建的目录会被自动删除。当需要在 PREFIX
下创建一个空的目录时,或者当这个目录需要有非默认的所有者、组或模式时,可以使用这个功能。PREFIX
之外的目录需要被注册。例如, /var/db/${PORTNAME} 需要有一个 @dir
条目,而 ${PREFIX}/shared/${PORTNAME} 如果包含文件或使用默认的所有者、组和模式,则不需要。
8.6.11.8. @exec
命令 , @unexec
命令 (已弃用)
@exec
命令 , @unexec
命令 (已弃用)执行 命令 作为安装或卸载过程的一部分。请使用 @preexec
命令 、@postexec
命令 、@preunexec
命令 、@postunexec
命令 代替。
8.6.11.9. @dirrm
目录 (已弃用)
@dirrm
目录 (已弃用)声明在卸载时要删除的目录名称。默认情况下, 由软件包安装在 PREFIX
下创建的目录会在卸载软件包时被删除。
8.6.11.10. @dirrmtry
目录 (已弃用)
@dirrmtry
目录 (已弃用)声明要删除的目录名称,和 @dirrm
一样,但如果目录不能被删除,则不会发出警告。
8.6.12. 创建新的关键字
软件包列表文件可以通过在 ${PORTSDIR}/Keywords 目录中定义的关键字来扩展。每个关键字的设置都存储在一个名为 keyword.ucl 的 UCL 文件中。该文件必须至少包含这些部分中的一个:
attributes
action
pre-install
post-install
pre-deinstall
post-deinstall
pre-upgrade
post-upgrade
8.6.12.1. 属性
改变关键字所使用的所有者、组或模式。包含一个关联数组,其中可能的键是 owner
、 group
和 mode
。其值分别是一个用户名、一个组名和一个文件模式。例如:
8.6.12.2. 行动
定义了对关键字的参数的处理方式。包含一个数组,其中可能的值是:
setprefix
设置下一个 plist 条目的前缀。
dir
注册一个目录,安装时创建,卸载时删除。
dirrm
注册一个要在卸载时删除的目录。已废弃。
dirrmtry
注册一个要尝试的目录,并在卸载时删除。已废弃。
file
注册一个文件。
Setmode
设置下一个 plist 条目的模式。
Setowner
为下一个 plist 条目设置所有者。
setgroup
为下一个 plist 条目设置组。
comment
不做任何事情,等同于不进入 action
部分。
ignore_next
忽略 plist 中的下一个条目。
8.6.12.3. arguments
如果设置为 true
,增加了参数处理,将整行的 %@
分割成编号的参数,%1
,%2
,等等。例如,对于这一行:
%1
和 %2
将包含:
它也会影响到 action 项的工作方式。当有一个以上的参数时,必须指定参数编号。比如说:
8.6.12.4. pre-install
, post-install
, pre-deinstall
, post-deinstall
, pre-upgrade
, post-upgrade
pre-install
, post-install
, pre-deinstall
, post-deinstall
, pre-upgrade
, post-upgrade
这些关键字包含了一个 sh(1) 脚本,将在安装、卸载或升级软件包之前或之后执行。除了 @preexec
command , @postexec
command , @preunexec
command , @postunexec
command 中描述的常见的 @exec *%foo*
占位符之外,还有一个新的占位符,即 %@
,它表示关键字的参数。
8.6.12.5. 自定义关键字的例子
例子2. 一个
@dirrmtryecho
关键字的例子这个关键字做了两件事,它在打包列表中添加了一个
@dirrmtry directory
行,并呼应在卸载软件包时该目录被删除的事实。
例子3. 现实生活中的例子,如何实现
@sample
这个关键字做了三件事。它将作为参数传递给
@sample
的第一个文件名添加到打包列表中,它在post-install
脚本中添加了指示,将样本复制到实际的配置文件中(如果它还不存在),它还在post-deinstall
中添加了指示,将配置文件删除(如果它没有被修改)。
最后更新于