6.1.Staging
本节解释了创建 Port 时最常考虑的事情。
6.1.Staging
bsd.port.mk 希望 ports 能够在 "stage directory" 中工作。这意味着 port 不能直接将文件安装到常规的目标目录中 (例如, 在 PREFIX
下), 而应安装到一个单独的目录中, 然后从这个目录中联编软件包。在许多情况下, 这不需要 root 权限, 这使得以非特权用户的身份构建软件包成为可能。在 staging 中, port 被构建并安装到舞台目录 STAGEDIR
中。从舞台目录中创建一个包, 然后安装到系统中。Automake 工具将这个概念称为 DESTDIR
, 但在 FreeBSD 中, DESTDIR
有不同的含义 (参见 PREFIX
和 DESTDIR
)。
注意
没有一个 Port 真的需要成为 root。通过使用
USES=uidfix
可以避免这种情况。如果 port 仍然在运行 chown(8)、 chgrp(1) 等命令, 或用 install(1) 强制使用所有者或组, 则可以使用USES=fakeroot
来伪造这些调用。需要对 port 的 Makefile 进行一些修补。
Meta port, 或那些本身不安装文件而只依赖其他 port 的 port, 必须避免不必要地将 mtree(8) 解压到 stage 目录中。这是软件包的基本目录布局, 这些空目录会被视为孤儿。要防止 mtree(8) 的解压, 请加入这一行:
技巧
Metaports 应该使用
USES=metaport
。它为那些不获取、构建或安装任何东西的 Port 设置了默认值。
通过在 pre-install
、do-install
和 post-install
目标中使用的路径前缀 STAGEDIR
来启用暂存功能 (参见书中的例子)。通常, 这包括 PREFIX
、 ETCDIR
、 DATADIR
、 EXAMPLESDIR
、 MANPREFIX
、 DOCSDIR
, 等等。目录应该作为安装后目标的一部分来创建。尽可能地避免使用绝对路径。
技巧
安装内核模块的 port 必须在其目的地前加上
STAGEDIR
, 默认是 /boot/modules。
6.1.1. 处理符号性链接
创建符号链接时,强烈建议使用相对链接。使用 ${RLN}
来创建相对符号链接。它在后台使用 install(1) 来自动计算出要创建的相对链接。
例54. 自动创建相对的符号链接
${RLN}
使用了 install(1) 的相对符号特性, 使得搬运工无需计算相对路径。将产生:
最后更新于