5.3. 分类

5.3.1. CATEGORIES (所属分类)

在包制作完成之后, 它会被放在 /usr/ports/packages/All, 并建立一系列来自 /usr/ports/packages 下子目录的符号连接。 这些子目录的名称是由 CATEGORIES 指定的。 这将方便于那些用户在 FTP 站点或 CDROM 的一大堆包里面寻找自己想要的包。 请查看一下 目前的分类表, 并找出一个适合您 port 的分类。

此列表也会决定您的 port 在 port 目录中的位置。 如果您在这里设定了 1 个以上的分类, 则认为您 port 文件应放到以第一个分类命名的子目录中。 请参阅 后面 关于如何选择正确分类的更多讨论。

5.3.2. 目前的分类表

这是目前 port 中的分类。 那些用星号 (*) 标记的是 虚拟分类 — 它们在ports树里没有相应的子目录, 因而只用来做为次要的分类, 用以方便搜索。

注意:

对于非虚拟的分类来说, 您会看到在相对应子目录中的 Makefile 里有写在 COMMENT 里的单行描述。

分类描述注意事项
accessibility帮助残障人士的 port。 
afterstep*对于 AfterStep 窗口管理器的支持。 
arabic阿拉伯语言支持。 
archivers压缩与备份工具。 
astro有关天文学的 port。 
audio声音支持。 
benchmarks测评程序。 
biology生物学相关的软件。 
cad计算机辅助设计工具。 
chinese中文语言支持。 
comms通讯软件。大部分是用于串口通讯的。
converters字符编码转换。 
databases数据库。 
deskutils在发明计算机以前就已经在桌面上使用的东西。 
devel程序开发工具。不要把开发库放在这里 — 除非您再也找不到更合适的分类, 否则就不该放在这个分类里。
dnsDNS 相关的软件。 
docs*有关 FreeBSD 文档的 Meta-ports。 
editors通用编辑器。有特殊用途的编辑器应该被置于相应的分类中 (比如, 数学-方程式 编辑器应该放在 math 分类里。
elisp*Emacs-lisp相关的port。 
emulators其它操作系统的模拟器。终端模拟器 不应该 属于这个分类 — 基于 X 的应该放在 x11 而基于文本模式的应该放到 commsmisc 中去, 取决于具体的功能。
finance货币、 金融以及相关的应用程序。 
french法语语言支持。 
ftpFTP 客户端和服务器端的程序。如果您的 port 同时支持 FTP 和 HTTP 的话, 把它放进 ftp 并把 www 做为第二分类。
games游戏。 
geography*与地理学有关的软件。 
german德语语言支持。 
gnome*关于 GNOME 项目的支持。 
gnustep*与 GNUstep 桌面环境有关的软件。 
graphics图形图象程序。 
hamradio*业余无线电爱好者使用的软件。 
haskell*有关 Haskell 编程语言的软件。 
hebrew希伯来语语言支持。 
hungarian匈牙利语语言支持。 
ipv6*IPv6 相关软件。 
ircIRC 相关程序 
japanese日语语言支持。 
java与 Java™ 编程语言有关的软件。java 分类对 port 而言不应是其唯一的分类。 除了直接与 Java 语言相关的 port 之外, 开发人员应尽量避免使用 java 作为 port 的主分类。
kde*K 桌面环境 (KDE) 相关的软件。 
kld*可加载内核模块。 
korean韩语语言支持。 
lang编程语言。 
linux*Linux 相关的应用程序。 
lisp*和 Lisp 编程语言有关的软件。 
mail电子邮件软件。 
math数值计算和其它数学相关的软件。 
mbone*MBone 应用程序。 
misc各式各样的实用程序。通常不属于其它的任何分类, 如果可能的话, 尽量为您的 port 选择 misc 以外的分类, 因为在这里的 port 比较容易被人忽略。
multimedia多媒体软件。 
net各种网络相关的软件。 
net-im即时消息软件。 
net-mgmt网络管理软件。 
net-p2p对等网 (Peer to peer network) 应用程序。 
newsUSENET新闻组相关软件。 
palmPalm™ 系列相关软件。 
parallel*并行计算相关软件。 
pear*Pear PHP 架构相关软件。 
perl5*Perl5 相关的软件。 
plan9*Plan9 相关程序。 
polish波兰语语言语言支持。 
ports-mgmt用于管理、 安装和开发 FreeBSD ports 和预编译包的 port。 
portuguese葡萄牙语语言支持。 
print打印相关的软件。桌面出版工具 (打印预览工具等等) 也可以放在此分类里。
python*Python 编程语言相关的软件。 
ruby*Ruby 编程语言相关的软件。 
rubygems*移植版本的 RubyGems 软件包。 
russian俄语语言支持。 
scheme*与 Scheme 语言有关的 port。 
science科学相关但不适合放在 astrobiology, 以及 math 分类的 port。 
security安全相关的实用程序。 
shells命令行 shell。 
spanish*西班牙语支持 
sysutils系统相关的实用程序。 
tcl*依赖于 Tcl 运行的 port。 
textproc文本处理的实用程序。这个分类并不适合于那些应该放到 print 的桌面出版工具。
tk*依赖于 Tk 运行的 port。 
ukrainian乌克兰语语言支持。 
vietnamese越南语语言支持。 
windowmaker*WindowMaker 窗口管理器的相关支持。 
wwwWord Wide Web的相关软件。HTML语言相关的支持也可以放在这个分类里。
x11X Window System以及相关软件。这个分类是给那些直接支持X Window System 的软件的。 不要把常规的 X 应用程序也放进这里; 它们中的大多数都应被归类到 x11-* (参见下文)。 如果您的 port X 应用程序, 应定义 USE_XLIB (使用 USER_IMAKE 隐含包括它), 然后把它放到合适的分类里。
x11-clocksX11 下的时钟程序。 
x11-driversX11 驱动程序。 
x11-fmX11 下的文件管理器。 
x11-fontsX11 下的字体以及相关工具。 
x11-serversX11 服务器。 
x11-themesX11 主题。 
x11-toolkitsX11 工具包。 
x11-wmX11 窗口管理器。 
xfce*Xfce 桌面环境有关的 port。 
zope*Zope 相关的支持。 

5.3.3. 选择正确的分类

由于不少分类是重复的, 您通常在用哪个分类作为您 port 的主分类上做出选择。 下面有几条规则能帮您解决这个问题。 这是一个带优先级的表, 按优先级降序罗列:

  • 第一个分类必须是个物理的分类 (参阅 前面)。 这对于制作包是必要的。 虚拟分类和物理分类可能在包制作完成后混合在一起。

  • 对于特定语言的分类通常放在第一位。 例如, 如果您的 port 会安装一些 X11 的日文字体, 那么 CATEGORIES那行 就应该是 japanese x11-fonts

  • 有特定意义的分类应当被列在无特定意义的前面。 例如, HTML 编辑器应该是这样的 www editors, 而不是其它的什么。 同样地, 您不应该列出 net, 如果 port 属于 ircmailnewssecurity, 或是 www, 因为 net 可以表示它们的超集。

  • 只有当主要的分类是一门自然语言的时候, x11 能被做为第二分类。 需要特别指出的是, 您不应把 X 的应用程序也归类为 x11

  • Emacs 模式应当于相应的应用程序放在同一个分类里, 而不是 editors 分类。 举例来说, 一个用于编辑某种编程语言源代码的 Emacs 模式应该被归为 lang 一类。

  • 需要安装可加载内核模块的 port 应在其 CATEGORIES 中归入虚拟分类 kld

  • misc 分类的 port 不能有其它非虚拟的分类。 如果您在您的 CATEGORIES 里设了 misc 和另外的分类, 那意味着可以安全地删除 misc 并把 port 放到其它的子目录中了!

  • 如果您的 port 确实不属于现有的分类, 才把它放到 misc

如果您不能确定使用哪个分类, 请在您提交的 send-pr(1) 里加上一行注释, 这样我们就能在导入进 port 树之前讨论一下。 如果您是 committer, 发一份备忘到 FreeBSD ports 邮件列表 先讨论一下。 很多情况是新的 port 被加到错误的分类里, 然后又立即被移走。这会造成源代码库不必要和不良的膨胀。

5.3.4. 如何提议建立新的分类

由于 Ports Collection 在持续增长, 已经引入了许多新的分类。 新的分类既可以是 虚拟的 分类 — 这些分类在整个 ports 目录中没有属于自己的子目录 — 或 物理的 分类 — 它们有自己的子目录。 接下来我们将讨论与建立新的物理分类有关的事项, 以便帮助您理解如何提议建立新的分类。

我们目前的做法是避免建立新的物理分类, 除非有非常多的 port 应被归入这一分类, 或者 port 属于某一特定的小团体 (例如, 与某种人类语言相关), 或两者皆是。

这样做的原因是这类修改会让 committer 和用户都不得不进行 许多工作 来在 Ports Collection 进行或追踪修改。 此外, 提议新的分类通常都会引起争论。 (可能这是因为关于某个分类是否 太大 一直没有非常一致的意见的缘故, 另一方面, 分类是否能够能够有助于浏览 (以及多少个分类是合适的), 等等, 也都是问题。)

下面是具体的步骤:

  1. FreeBSD ports 邮件列表 提议新的分类。 您应提供建立新分类的详细依据, 包括为什么认为现有的分类不够, 以及希望移动位置的一系列 port 的名字。 (如果有尚在 GNATS 而未 commit 的 port, 也应一一列出。) 如果您是相关 port 的监护人或提交者, 说明这一情况可能有助于您的提议得到通过。

  2. 参与讨论。

  3. 如果有人支持您的建议, 应及时提交一个 PR, 其中包括提议 PR 的理由, 以及需要移动的 port 的列表。 理想情况下, 这个 PR 也应包含针对下列文件的补丁:

    • 进行 repocopy 之后对 Makefile 进行的修改

    • 新分类的 Makefile

    • 旧分类的 Makefile

    • 依赖于旧 port 的 port 的 Makefile

    • (此外, 作为一项加分因素, 您还可以按照 Committer 指南所介绍的流程, 提供一些其它需要修改的文件。)

  4. 由于这是一项影响 ports 基础设施的变动, 它不仅涉及 repo-copy 的使用, 而且也可能会影响联编集群的回归测试操作, 因此这类 PR 应分派给 Ports 管理团队

  5. 如果这一 PR 得到批准, 某个 committer 将按照在 Committer 指南 中所介绍的步骤来完成余下的工作。

提议新的虚拟分类和上述过程类似, 但会容易许多, 因为不需要实际地移动任何 port。 这种情况下, PR 应附带的补丁, 就只需要修改影响到的 port 的 Makefile, 以便在其中的 CATEGORIES 中加入新的分类了。

5.3.5. 如何提议对分类进行重新组织

有些时候会有一些人提议重新将分类组织为 2-层 或某种基于关键字的结构。 目前为止, 还没有进行任何相关的改变, 因为尽管这些修改比较容易完成, 但修改整个 Ports Collection 所需要进行的工作, 至少也是令人生畏的。 在发表您的观点之前, 请阅读在邮件列表存档中历史上所进行过的提议; 此外, 您也会被要求提供一个可用的原形。

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

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.