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 中的 MANn, 而不是装箱单。 用户配置文件应被删除, 或以 filename.sample 这样的名字来安装。 info/dir 文件, 也不应列入, 同时应按照 info 文件 的说明来增加一些 install-info 行。 所有由 port 安装的库, 应按照 动态连接库 小节中介绍的方法处理。

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

  开始的步骤和上面的前三行一样, 也就是 mkdirmtreemake 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 应手工检查并根据需要进行修改。

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