12.14. 使用 `BROKEN`、 `FORBIDDEN` 或 `IGNORE` 阻止用户安装 port
上一页 | 第 12 章 该做什么和不该做什么 | 下一页

## 12.14. 使用 `BROKEN`、 `FORBIDDEN` 或 `IGNORE` 阻止用户安装 port

某些时候会需要阻止用户安装某个 port。 想要告诉用户某个 port 不应被安装， 有许多可以在 port 的 `Makefile` 中使用的 `make` 变量。 下列 `make` 的值， 将是在用户试图安装时得到的提示信息。 务请使用正确的 `make` 变量， 因为每一个都表达了截然不同的意义， 而且许多自动化系统， 例如 port 联编集群、 FreshPorts， 以及 portsmon， 都依赖于 `Makefile` 的正确性。

### 12.14.1. 变量

- `BROKEN` 专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题， 则可以使用它。

  如果进行了相关的配置， 则联编集群仍将尝试联编它， 以确认导致问题的深层问题是否已被解决。 (不过， 一般情况下， 联编集群并不会这样做。)

  举例来说， 当 port 发生下述情况时， 应使用 `BROKEN`：

  - 无法编译 (does not compile)

  - 无法正确进行配置或安装操作

  - 在 `${LOCALBASE}` 以外的地方安装文件

  - 卸载时无法删除所安装的全部文件 (不过， 留下用户改过的文件可接受的， 因为可能希望这样作)

- `FORBIDDEN` 用于表示 ports 中包含安全漏洞， 或者可能会给安装了这个 port 的 FreeBSD 系统带来严重的安全隐患 (例如： 一个很不安全的程序， 或包含了能够被轻易攻陷的服务的软件)。 如果发现了安全漏洞， 而其作者没有发布升级版本， 则应立即把那个 port 标记为 `FORBIDDEN`。 理想情况下， 包含安全漏洞的 port 应被尽快升级， 以便减少包含漏洞的 FreeBSD 主机的数量 (我们希望保持良好的安全记录)， 然而， 有时在安全漏洞的披露和软件更新之间可能会有一个间隔， 此时应予以说明。 除了安全之外， 请不要以任何其它理由将 port 标记为 `FORBIDDEN`。

- `IGNORE` 用来表示 port 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题， 则应使用它。 任何情况下， 联编集群都不会联编标记为 `IGNORE` 的 port。 以下是使用 `IGNORE` 的一些例子：

  - 能够编译但无法正常运行

  - 无法与运行的 FreeBSD 版本一同工作

  - 联编时需要 FreeBSD 内核的源代码， 但用户没有安装它们

  - 由于授权原因， 必须手工下载 distfile

  - 无法与的某个已安装的 port 一同工作 (例如， port 依赖于 `www/apache21` 而安装的则是 `www/apache13`)

  ### 注意:

  如果 port 与某个已经安装的 port 冲突 (例如， 它们在同一位置安装同名但功能不同的文件)， 则应 使用 `CONFLICTS` 来标记它。 `CONFLICTS` 将自动地设置 `IGNORE`。

- 如果 port 只应在某些平台上标记为 `IGNORE`， 还有另外两个方便使用的 `IGNORE` 变量可供选择： `ONLY_FOR_ARCHS` 和 `NOT_FOR_ARCHS`。 例如：

  ONLY_FOR_ARCHS= i386 amd64
  NOT_FOR_ARCHS= alpha ia64 sparc64

  可以使用 `ONLY_FOR_ARCHS_REASON` 和 `NOT_FOR_ARCHS_REASON` 来配置定制的 `IGNORE` 消息。 此外， 还可以使用 `ONLY_FOR_ARCHS_REASON_`ARCH`` 和 `NOT_FOR_ARCHS_REASON_`ARCH`` 来分别指定与具体平台有关的信息。

- 如果 port 会下载并安装用于 i386 的预编译二进制文件， 则应设置 `IA32_BINARY_PORT`。 如果设置了这个变量， 则系统会检查是否已经在 `/usr/lib32` 目录中安装了 IA32 版本的函数库， 以及内核是否提供了 IA32 兼容支持。 如果这些依赖条件不满足， 则会自动设置 `IGNORE`。

### 12.14.2. 实现说明

这些字串不应使用引号括起来。 此外， 由于显示给用户的方式不同， 这些字串的措辞也应有所不同。 例如：

BROKEN= this port is unsupported on FreeBSD 5.x
IGNORE= is unsupported on FreeBSD 5.x

它们分别会在 `make describe` 时产生下面的输出：

===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.
===> foobar-0.1 is unsupported on FreeBSD 5.x.

上一页 | 上一级 | 下一页
12.13. `README.html` | 起始页 | 12.15. 使用 `DEPRECATED` 或 `EXPIRATION_DATE` 表示某个 port 将被删除

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.