FreeBSD Porter 手册
上一页 | 第7章 　高级 `pkg-plist` 用法 | 下一页

# 7.5 装箱单 (package list) 的自动化制作

首先， 请确认已经基本上完成了 port 的工作， 仅缺 `pkg-plist`。

接下来， 建立一个用于安装您的 port 的临时目录， 并在其中安装它所依赖的所有其他软件包：

    # mkdir /var/tmp/$(make -V PORTNAME)
    # mtree -U -f $(make -V MTREE_FILE) -d -e -p /var/tmp/$(make -V PORTNAME)
    # make depends PREFIX=/var/tmp/$(make -V PORTNAME)

将目录结构保存到一新文件中。

    # (cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort > OLD-DIRS

建立一空白 `pkg-plist` 文件：

    # :>pkg-plist

如果您的 port 遵循 `PREFIX` (应该如此) 则接下来应安装该 port 并创建装箱单。

    # make install PREFIX=/var/tmp/$(make -V PORTNAME)
    # (cd /var/tmp/$(make -V PORTNAME) && find -d * \! -type d) | sort > pkg-plist

此外还应把新建立的目录加入装箱单。

    # (cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plist

最后需要手工整理 packing list； 这一过程不是 完全 自动的。 联机手册应列入 port 的 `Makefile` 中的 `MAN`n``， 而不是装箱单。 用户配置文件应被删除， 或以 ``filename`.sample` 这样的名字来安装。 `info/dir` 文件， 也不应列入， 同时应按照 info 文件 的说明来增加一些 `install-info` 行。 所有由 port 安装的库， 应按照 动态连接库 小节中介绍的方法处理。

另外， 也可以使用 `/usr/ports/Tools/scripts/` 中的 `plist` 脚本来自动创建 package list。 `plist` 脚本是一个 Ruby 脚本， 它能够将前面介绍的手工操作自动化。

开始的步骤和上面的前三行一样， 也就是 `mkdir`， `mtree` 并 `make depends`。 然后联编和安装 port：

    # make install PREFIX=/var/tmp/$(make -V PORTNAME)

然后让 `plist` 生成 `pkg-plist` 文件：

    # /usr/ports/Tools/scripts/plist -Md -m $(make -V MTREE_FILE) /var/tmp/$(make -V PORTNAME) > pkg-plist

与前面类似， 如此生成的装箱单也需要手工进行一些清理工作。

另一个可以用来创建最初的 `pkg-plist` 的工具是 `ports-mgmt/genplist`。 和其他自动化工具类似， 您应对它生成的 `pkg-plist` 应手工检查并根据需要进行修改。

上一页 | 起始页 | 下一页
动态装箱单与静态装箱单的对比 | 上一级 | `pkg-`*`` 文件

若您有关于 FreeBSD ports 系统的问题， 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题， 请致函 <doc@FreeBSD.org>。