首先, 请确认已经基本上完成了 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 脚本, 它能够将前面介绍的手工操作自动化。
开始的步骤和上面的前三行一样, 也就是 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 应手工检查并根据需要进行修改。