---
title: 第 14 章 保持同步
prev: books/porters-handbook/porting-samplem
showBookMenu: true
weight: 14
params:
  path: "/books/porters-handbook/keeping-up/"
---

[[keeping-up]]
= 保持同步
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 14
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

FreeBSD 的 Ports Collection 在持续地进行修改。 这里提供了一些关于如何保持同步的信息。

[[freshports]]
== FreshPorts

最简单的了解已经被 commit 到 ports 中的更新的方法， 是订阅 http://www.FreshPorts.org/[FreshPorts]。 您可以选择多个 ports 并对其进行监视。 强烈建议维护人员订阅它， 这样就不仅能接收到他们自己所做的修改， 而且能看到其它 FreeBSD committer 所做的改动。 (保持与所依赖的 ports 框架同步是必要的-虽然一般来说您会在这样的 commit 之前收到一个礼貌性的通知， 但有时可能会有人没有注意到需要这样做， 或者这样做很困难。 另外， 有些时候通知的修改也可能是微不足道的。 我们希望每一个人能够正确地进行判断。)

如果想使用 FreshPorts， 之需要建立一个账号。 如果您注册的邮件地址是 `@FreeBSD.org`， 您会看到 web 页面右侧的 opt-in 连接。 如果您已经注册了 FreshPorts 账号， 但没有使用 `@FreeBSD.org` 邮件地址， 则只需把邮件地址改为 `@FreeBSD.org`， 重新订阅， 并将其改回。

FreshPorts 也会对每一个 FreeBSD ports tree 上的 commit 进行自动的合法性检查。 如果您订阅了这项服务， 则如果发现了错误， 就会收到来自 FreshPorts 的检测报告。

[[cvsweb]]
== 代码库的 Web 访问界面

可以通过 web 界面来浏览源代码库中的文件。 影响整个 ports 系统的修改， 现在都会在 http://cvsweb.FreeBSD.org/ports/CHANGES[ CHANGES] 文件中说明。 影响某一个 port 的变动， 则在 http://cvsweb.FreeBSD.org/ports/UPDATING[ UPDATING] 文件中说明。 尽管如此， 所有问题最为权威的答案， 毫无疑问应该是 http://cvsweb.FreeBSD.org/ports/Mk/bsd.port.mk[ bsd.port.mk] 的源代码， 以及相关的文件。

[[ports-mailling-list]]
== FreeBSD Ports 邮件列表

如果您维护了某个或某一些 ports， 则应该考虑订阅 {freebsd-ports}。 对于 ports 工作方式的重要修改都会在此宣示， 并提交到 [.filename]#CHANGES#。

[[build-cluster]]
== 位于 `pointyhat.FreeBSD.org` 的 FreeBSD Port 联编集群

FreeBSD 的一个最不为人所知的强项是， 它拥有一个专用于持续联编 Ports Collection 的集群， 这个集群会联编所有主要的 OS 版本在每一个 Tier-1 架构上的 package。 您可以在 http://pointyhat.FreeBSD.org/[package 联编和错误日志] 找到其结果。

每一个 port 都会被联编， 除非标记为 `IGNORE`。 标记了 `BROKEN` 的 port 仍然会被继续尝试， 以了解是否某些依赖关系的变动解决了其问题 (这是通过给 port 的 [.filename]#Makefile# 传 `TRYBROKEN` 参数来完成的)。

[[distfile-survey]]
== FreeBSD 的 Ports Distfile 扫描器

联编集群是一组专门用于联编所有 port 最新版本的机器， 其上已经下载了所有的 distfiles。 然而， 由于 Internet 在持续地发生变化， distfile 可能很快就消失了。 https://portscout.freebsd.org[FreeBSD Ports distfile 扫描器] 试图查询每一个 port 的所有下载站点， 以期找出这些文件是否依然存在。 维护者应规律性地检查这些报告， 这不仅会提高用户联编的速度， 同时也避免了浪费那些镜像了全部 distfile 的志愿者的带宽。

[[portsmon]]
== FreeBSD 的 Ports 追踪系统

另一个非常方便的资源， 就是 http://portsmon.FreeBSD.org[ FreeBSD Ports 追踪系统] (也被称作 `portsmon`)。 这个系统包含了一个处理若干信息来源的数据库， 并提供了一个可以通过 web 方式浏览的界面。 目前， 它利用到了和 ports 有关的问题报告 (PR)、 来自联编集群的错误日志， 以及来自 Ports Collection 的文件所提供的信息。 未来， 还会对它进行进一步的扩展， 从而提供包括 distfile 普查， 以及其它来源在内的更多信息。

要使用这个工具， 可以从查看关于某一个 port 的全部资料的 http://portsmon.FreeBSD.org/portoverview.py[ Port 的纵览] 开始。

本文撰写时, 这是唯一一个能够将 GNATS PR 项， 同对应的 port 名字映射起来的资源。 (提交 PR 的用户， 有时并不在 Synopsis (概要) 中指明 port 的名字， 尽管我们希望他们这样做)。 因此， `portsmon` 在您想要查找是否有人提交某个现存的 port 的 PR， 以及它的联编是否出现了错误； 或在您创建新的 port 之前想要查找一下是否已经有人提交过时， 就非常有用了。
