# FreeBSD 2020 年第二季度状态报告

* 原文链接：<https://www.freebsd.org/status/report-2020-04-2020-06.html>

## 简介

本报告将涵盖 4 月至 6 月之间与 FreeBSD 相关的项目，涉及的主题多种多样，从内核更新到用户空间和 Ports，以及第三方工作。

通过掷骰子选出的亮点包括但不限于：当底层介质变得不可访问时，强制卸载 UFS 的功能、增加对蓝牙低功耗的初步支持、FreeBSD 办公时间的介绍、以及名为 potluck 的软件集合仓库，用户可以通过 pot 工具安装该仓库，还有许多其他内容。

作为一点小福利，读者还可以获得罕见的季度团队的报告。

最后，我代表季度团队，向 salvadore@ 表达我们最深的感激之情，他决定退出并结束他的工作。他不仅对季度报告本身做出了贡献，还为许多工具的周边工作提供了极大便利，这些贡献是无法估量的。

我们希望你会像我们一样对本报告感兴趣，\
Daniel Ebdrup Jensen（debdrup@），代表季度团队。

## [FreeBSD 团队报告](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Team-Reports)

来自各种官方和半官方团队的报告，详见 [管理页面](https://www.freebsd.org/administration.html)。

### [FreeBSD 基金会](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Foundation)

联系：Deb Goodkin <<deb@FreeBSDFoundation.org>>

FreeBSD 基金会是一家 501(c)(3) 非营利组织，致力于支持和推广全球的 FreeBSD 项目和社区。资金来自个人和企业捐款，用于赞助和管理软件开发项目、会议和开发者峰会，并为 FreeBSD 贡献者提供差旅赞助。基金会购买并支持硬件以改进和维护 FreeBSD 基础设施，提供资源以改进安全性、质量保证和发布工程工作；发布市场推广材料以推广、教育和宣传 FreeBSD 项目；促进商业厂商与 FreeBSD 开发者之间的合作；最终，代表 FreeBSD 项目执行合同、许可协议和其他需要公认法律实体的法律安排。

以下是我们上个季度为支持 FreeBSD 所做的工作亮点：

#### 疫情对基金会的影响

像其他组织一样，我们为所有员工制定了远程办公政策，并对员工的差旅进行了临时禁令。我们继续支持社区和项目的工作，但由于一些优先事项的变化以及部分员工有限的育儿支持，我们的一些工作和响应可能会有所延迟。

#### 合作伙伴关系与商业用户支持

我们帮助促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司会面，讨论他们的需求，并将这些信息反馈给项目。不出所料，随着居家令的发布，以及第二季度我们公司差旅禁令的实施，面对面的会议几乎不存在。然而，团队还是能够与我们的合作伙伴和商业用户继续进行虚拟会议。这些会议帮助我们了解 FreeBSD 的一些应用场景。

#### 筹款工作

上个季度我们筹集了 $268,400！感谢那些支持我们工作的个人和组织。我们要特别感谢奈飞、Nginx 员工、倍福自动化和 Mozilla 基金会在上个季度的巨大贡献，这些帮助使我们的 2020 年筹款目标达到了 $ 339,000。我们希望其他组织能够效仿并回馈，帮助我们继续支持 FreeBSD。

这是一个艰难的时期，我们深切感激每一笔捐款，从 $5 到 $ 150,000 的捐款都让我们感受到莫大的支持。我们依然全力以赴，支持 FreeBSD！

我们完全依赖捐款赞助，这些资金将用于改善 FreeBSD 的软件开发工作、全球范围内的 FreeBSD 推广工作、保持 FreeBSD 的安全、持续集成的改进、赞助 BSD 相关及计算机会议（即使是虚拟活动！）、为项目提供法律支持以及许多其他领域。

请考虑进行 [捐赠，帮助我们继续并扩大对 FreeBSD 的支持](https://www.freebsdfoundation.org/donate/)。

我们还有合作伙伴计划，为我们的商业大捐赠者提供更多的福利。了解更多关于 [合作伙伴计划](https://www.freebsdfoundation.org/FreeBSD-foundation-partnership-program/) 的信息，并与你的公司分享！

#### 操作系统改进

在第二季度，多个 FreeBSD 基金会赞助的项目开始了、继续进行了或完成了。这些项目包括：

* 改进 WiFi
* Linux 兼容层应用兼容性
* 更新 DRM / 显卡驱动
* OpenZFS 的 Zstd 压缩
* 在线 RAID-Z 扩展
* 改进 if\_bridge 性能

你可以在其他季度报告中找到大多数项目的更多细节。

基金会的工作人员还参与了一些更大规模的项目，包括：

* 改进运行时动态链接器 (rtld)
* 提升 FreeBSD 在微软 HyperV 和 Azure 上的支持
* 为 amd64 pmap 提供精细化锁定
* amd64 的 5 级分页结构
* 非透明大页
* 迁移到 Git 仓库
* 工具链现代化

这些项目中的许多也在其他季度报告中有详细的条目。

工作人员还在许多其他方面投入了大量精力，除了较大的单独项目。这些包括协助代码审查、漏洞报告分类、处理安全报告和建议、处理 syzkaller 报告以及在功能领域的持续维护和漏洞修复，例如工具链、开发者工具、虚拟内存内核子系统、低级 x86 基础设施、套接字和协议等。

#### 滑铁卢大学合作项目

基金会的合作学生 Colin、Tiger 和 Yang 在第二季度完成了他们的 2020 年冬季工作期，并继续在各自的项目中进入下一学期。尽管疫情造成了独特的挑战，并促使工作期过半时迅速转为远程工作，但三位学生都学到了很多，并为 FreeBSD 项目和基金会做出了积极贡献。

在工作期内进行的部分项目在第二季度被提交到了 FreeBSD 树中。

#### 持续集成与质量保证

基金会提供了一名全职员工，专门从事 FreeBSD 项目的持续集成、自动化测试和整体质量保证工作。

在 2020 年第二季度，基金会工作人员继续改进项目的 CI 基础设施，监控回归问题，并与贡献者合作修复构建和测试用例失败的情况。CI 作业和暂存环境的虚拟机物理机设置正在进行中。我们还与项目中的其他团队合作，满足他们的测试需求。例如，我们为非 x86 架构添加了完整测试作业。我们还与许多外部项目和公司合作，以提高它们对 FreeBSD 的支持。

请参阅本报告中的 FreeBSD CI 部分，以了解已完成的工作项目和详细信息。

#### 支持 FreeBSD 基础设施

基金会提供硬件和支持以改善 FreeBSD 基础设施。上个季度，我们继续支持全球各地的 FreeBSD 硬件。我们开始着手准备新的 NYI 芝加哥共置设施，以容纳我们计划购买的一些新 FreeBSD 硬件。NYI 慷慨地为该项目免费提供这项服务。

#### FreeBSD 宣传和教育

我们的努力中有很大一部分致力于为项目进行宣传。这包括推广其他人使用 FreeBSD 的工作；制作宣传资料，帮助人们了解 FreeBSD，并使其更容易开始使用 FreeBSD 或参与项目；以及参加和邀请其他 FreeBSD 贡献者志愿组织 FreeBSD 相关活动、管理 FreeBSD 展台并进行 FreeBSD 演讲。

FreeBSD 基金会赞助了全球范围内的许多会议、活动和峰会。这些活动可以是与 BSD 相关的、开源的或面向代表性不足群体的技术活动。我们支持以 FreeBSD 为重点的活动，帮助提供一个分享知识的场所，促成项目合作，并促进开发者与商业用户之间的合作。所有这些都有助于提供一个健康的生态系统。我们支持非 FreeBSD 活动，以促进和提高 FreeBSD 的知名度，增加 FreeBSD 在不同应用中的使用，并吸引更多的贡献者加入项目。正如我们大多数人在这一行业中的情况一样，COVID-19 使我们的线下活动暂时搁置。除了参加虚拟活动，我们还在不断开展新的培训计划，并更新我们的一系列操作指南，以帮助更多的人尝试使用 FreeBSD。

查看我们上个季度做的一些宣传和教育工作：

* BSDCan 2020 的银牌赞助商。该活动于 2020 年 6 月 2-6 日虚拟举行
* Rootconf 2020 的社区赞助商。该活动于 2020 年 6 月 19-20 日虚拟举行
* 每年一次的 FreeBSD Day，6 月 19 日。今年的庆祝活动因支持 Juneteenth 而被推迟。然而，围绕 FreeBSD 日的活动已经转变为一系列持续的在线会议。有关更多信息，请参见下方的 *FreeBSD 日*。
* 在 2020 年 6 月 24 日作为 Linux Professional Institute 网络研讨会系列的一部分，展示了 [27 年的 FreeBSD 以及为什么你应该参与](https://www.youtube.com/watch?v=Wi5yMvavhQM)。
* 参加并展示了虚拟的 Open Source Summit 2020。
* 宣布了 *FreeBSD 日*：一系列旨在帮助你入门 FreeBSD 的 101 课程。有关更多信息，请查看 [公告](https://www.freebsdfoundation.org/blog/announcing-freebsd-fridays-a-series-of-101-classes/)。
* 作为谷歌编程之夏 2020 的管理员参与。
* 参与了新的 FreeBSD Office Hours 系列，其中包括举办我们基金会主办的办公时间。会议视频可以在 [项目的 YouTube 频道](https://www.youtube.com/channel/UCxLxR_oW-NAmChIcSkAyZGQ) 上找到。你可以在这里观看我们的视频 [这里](https://www.youtube.com/watch?v=Ji4ux4FWpRU)。

除了本报告中开发项目更新部分提供的信息外，请花一分钟查看最新的更新博客：

* [5 倍 if\_bridge 性能提升](https://www.freebsdfoundation.org/blog/500-if_bridge-performance-improvement/)
* [作为 FreeBSD 基金会合作生的经历](https://www.freebsdfoundation.org/blog/my-experience-as-a-freebsd-foundation-co-op-student/)

通过我们的 [双月通讯](https://www.freebsdfoundation.org/news-and-events/newsletter/) 跟进我们最新的工作。

Mellanox 提供了有关它们如何以及为何使用 FreeBSD 的最新 [贡献者案例研究](https://www.freebsdfoundation.org/freebsd-case-study-mellanox/)。

我们通过出版专业制作的 FreeBSD 期刊来帮助教育全球人们了解 FreeBSD。如前所述，FreeBSD Journal 现在是一本免费的出版物。了解更多并 [访问最新期刊](https://www.freebsdfoundation.org/journal/) 通过期刊网站。

你可以了解更多有关 [我们参加的活动和即将举行的活动](https://www.freebsdfoundation.org/news-and-events/)。

我们与新的网站开发者继续合作，帮助我们改进网站。工作接近完成，目标是让社区成员更容易找到信息，并提高网站的效率。我们期待在第三季度推出更新后的网站。

#### 基金会董事会会议

我们的年度董事会会议于 2020 年 6 月 2 日星期二举行。我们通常会在 BSDCan 之前的星期二，在加拿大安大略省渥太华举行这次会议，但由于公司旅行禁令以及会议转为虚拟形式，我们的会议首次也转为虚拟举行。年度董事会会议的目的是进行董事和官员的选举，回顾过去一年取得的工作成果，并为即将到来的 12 个月制定战略目标。

董事会通常每年召开两次全天的会议，这次是正式的会议，另一场则通常在 1 月份在伯克利举行，形式更为非正式。两场会议都让我们有机会联系、重新评估和讨论新想法，并评估我们应采取哪些措施来帮助项目。

我们的一些长期目标包括：发展用户和开发者社区，开发培训和操作系统课程内容，改善桌面/笔记本电脑体验，推广 FreeBSD（如上面列出的所有宣传工作所示），以及提高测试能力。

董事和官员选举结果如下：

* Justin Gibbs（主席）
* Benedict Reuschling（副主席）
* Kirk McKusick（财务主管）
* Philip Paeps（秘书）
* Deb Goodkin（助理秘书）
* Robert Watson（董事）
* 佐藤広生（董事）
* George Neville-Neil（董事）

了解更多关于 [FreeBSD 基金会董事会](https://www.freebsdfoundation.org/about/board-of-directors/) 的信息，敬请访问我们的网站。

#### 法律/FreeBSD 知识产权

基金会持有 FreeBSD 的商标，保护这些商标是我们的责任。我们还为核心团队提供法律支持，帮助调查出现的问题。

请访问 [FreeBSD 基金会网站](http://www.freebsdfoundation.org/)，了解我们如何支持 FreeBSD 以及我们如何帮助你！

### [FreeBSD 核心团队](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Core-Team)

联系人：FreeBSD 核心团队 <<core@FreeBSD.org>>

FreeBSD 核心团队是 FreeBSD 的管理机构。

核心团队在 2020 年第二季度举行了 10 次会议，其中包括 2020 年 5 月 21 日与 FreeBSD 基金会成员的联合会议。以下是该会议的一些亮点：

* Deb 请求关于基金会如何支持社区的指导。核心团队和基金会成员认为，需要更多的开发者支持，以弥补商业客户未提供支持的领域。最明显的例子是桌面体验，包括图形和无线支持。与以往的请求不同的是，这次请求并非针对一次性项目，而是需要持续的职位，以保证桌面体验的一贯高质量。 “FreeBSD 没法运行在你的笔记本电脑上，是走向不相干的第一步。” — Ed Maste
* 双方讨论了即将到来的 FreeBSD 办公时间（FreeBSD Office Hours）的议题，这是一个任何人都可以参加的非正式 FreeBSD 视频会议。大家一致认为，办公时间为项目的不同部分提供了与彼此及更广泛社区互动的有用方式。感谢 Allan Jude 发起了办公时间，并感谢所有通过主持或参加会议帮助使其取得成功的人。
* 双方一致认为，应该每季度举行一次会议。

第二次年度社区调查于 2020 年 6 月 16 日关闭。调查的目的是收集公众的数据，以帮助指导项目的工作和优先事项。例如，去年的调查结果帮助启动了项目的 Git 转换工作。感谢所有参与回答的人员，调查结果将很快发布。

核心发起的 Git 工作组继续取得进展，但从 Subversion 转换过来的问题仍需解决。希望新的 Git 源代码仓库将在今年夏天准备好供使用。一个 [beta 版本](https://cgit-beta.freebsd.org/) 已经发布，供人们测试，并且《使用 Git 进行 FreeBSD 开发》的初步版本也将很快准备好分享。核心团队、Git 工作组和发布工程团队正朝着从新的 Git 仓库发布 12.2 版本的目标努力。

根据核心发起的开发者调查结果，FreeBSD 项目采用了新的 LLVM 衍生的 [行为规范](https://www.freebsd.org/internal/code-of-conduct.html)。

第十一届 FreeBSD 核心团队由活跃开发者选举产生。经过 23 名候选人选举，9 人成功当选为第十一届核心团队成员：

* Sean Chittenden (seanc, 现任)
* Baptiste Daroussin (bapt)
* Kyle Evans (kevans)
* Mark Johnston (markj)
* Scott Long (scottl)
* Warner Losh (imp, 现任)
* Ed Maste (emaste)
* George V. Neville-Neil (gnn)
* 佐藤広生 (hrs, 现任)

新的核心团队秘书 Muhammad Moinur Rahman (bofh) 已由第十一届核心团队一致批准。离任的核心团队与新核心团队举行了三次会议，帮助完成过渡工作。第十届核心团队祝愿第十一届核心团队任期成功。

### [FreeBSD 发布工程团队](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Release-Engineering-Team)

| 链接                                                                               |
| -------------------------------------------------------------------------------- |
| [FreeBSD 11.4-RELEASE 公告](https://www.freebsd.org/releases/11.4R/announce.html)  |
| [FreeBSD 11.4-RELEASE 时间表](https://www.freebsd.org/releases/11.4R/schedule.html) |
| [FreeBSD 开发快照](https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/)           |

联系人：FreeBSD 发布工程团队 <<re@FreeBSD.org>>

FreeBSD 发布工程团队负责设置和发布 FreeBSD 官方项目发布的发布计划、公告代码冻结（slush）以及维护相关分支等工作。

在 2020 年第二季度，发布工程团队开始着手 11.4-RELEASE 的周期，这是来自 stable/11 分支的第五个版本。发布周期进展顺利，BETA3 和 RC3 从计划中移除，这使得最终版本比原定计划提前一周发布，公告日期为 6 月 16 日。FreeBSD 11.4-RELEASE 预计将是 11.x 系列的最后一个版本。

FreeBSD 发布工程团队感谢所有参与此次周期的工作人员的辛勤工作。

此外，在整个季度期间，发布了多个开发快照构建版本，涉及 *head*、*stable/12* 和 *stable/11* 分支。

这项工作大部分由 Rubicon Communications, LLC (netgate.com) 和 FreeBSD 基金会赞助。

### [集群管理团队](https://www.freebsd.org/status/report-2020-04-2020-06.html#Cluster-Administration-Team)

| 链接                                                                   |
| -------------------------------------------------------------------- |
| [集群管理团队成员](https://www.freebsd.org/administration.html#t-clusteradm) |

联系人：集群管理团队 <<clusteradm@FreeBSD.org>>

FreeBSD 集群管理团队由负责管理项目所依赖的机器的人员组成，这些机器用于同步项目的分布式工作和通信。在本季度，团队完成了以下工作：

* 升级所有 x86 架构的参考机和通用机（universe-machines）
* 设置阿姆斯特丹（PKT）镜像
* 解决 Bugzilla 和 svnweb 后端的硬件问题
* 设置公共 [beta git 服务器](https://cgit-beta.freebsd.org/)
* 停用 CyberOne 数据（CYB）镜像
* 持续的系统管理工作：
  * 提交者账户管理。
  * 关键基础设施的备份。
  * 跟进第三方软件的安全更新。

正在进行的工作：

* 设置马来西亚（KUL）镜像
* 设置巴西（BRA）镜像
* 审查服务 Jail（jails）和服务管理员操作。
* 构建 aarch64 和 powerpc64 包的基础设施
  * PowerPC64 Power9 上的 NVME 问题，阻止双插槽机器作为 pkg 构建器使用。
  * 由 FreeBSD 基金会提供的 SSD 驱动升级测试，适用于 pkg 构建器。
  * Aarch64 参考机器的启动问题。
* 新的 NYI.net 提供赞助的位于芝加哥地区的机架空间。
* 与 Git 工作组合作
* 检查其他团队的新硬件需求
* 寻找更多能够满足 [通用镜像布局](https://wiki.freebsd.org/Teams/clusteradm/generic-mirror-layout) 或 [小型镜像](https://wiki.freebsd.org/Teams/clusteradm/tiny-mirror) 需求的服务提供商

### [持续集成](https://www.freebsd.org/status/report-2020-04-2020-06.html#Continuous-Integration)

| 链接                                                               |
| ---------------------------------------------------------------- |
| [FreeBSD Jenkins 实例](https://ci.freebsd.org/)                    |
| [FreeBSD 硬件测试实验室](https://ci.freebsd.org/hwlab)                  |
| [FreeBSD CI 产物档案](https://artifact.ci.freebsd.org/)              |
| [FreeBSD CI 每周报告](https://hackmd.io/@FreeBSD-CI)                 |
| [FreeBSD Jenkins 维基](https://wiki.freebsd.org/Jenkins)           |
| [托管 CI 维基](https://wiki.freebsd.org/HostedCI)                    |
| [第三方软件 CI](https://wiki.freebsd.org/3rdPartySoftwareCI)          |
| [与 freebsd-testing@ 相关的工单](https://preview.tinyurl.com/y9maauwg) |
| [FreeBSD CI 仓库](https://github.com/freebsd/freebsd-ci)           |

联系人：Jenkins 管理员 <<jenkins-admin@FreeBSD.org>> 联系人：許立文 <<lwhsu@FreeBSD.org>>

联系人：[freebsd-testing 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-testing) 联系人：EFNet 上的 IRC #freebsd-ci 频道

FreeBSD CI 团队负责维护 FreeBSD 项目的持续集成系统。CI 系统首先检查提交的更改是否能够成功构建，然后对新构建的结果进行各种测试和分析。构建作业的产物会被存档在产物服务器中，以便进一步的测试和调试。CI 团队成员检查失败的构建和不稳定的测试，并与该领域的专家合作修复代码或调整测试基础设施。这些工作的详细信息可以在 [每周 CI 报告](https://hackmd.io/@FreeBSD-CI) 中找到。

在 2020 年第二季度，我们继续与项目中的贡献者和开发者合作，满足他们的测试需求，并继续与外部项目和公司合作，改善对 FreeBSD 的支持。

重要变更：

* 所有 -test 作业将运行 `/usr/tests` 下的测试，之前只有 x86 架构会这样做。有关更多信息，请参见本报告中的非 x86 持续集成部分。
* 在 [产物服务器](https://artifacts.ci.freebsd.org/) 上，磁盘镜像的压缩算法已更改为 zstd，以加快压缩和解压缩速度。
* 构建和测试结果将很快发送到 [dev-ci 邮件列表](https://lists.freebsd.org/mailman/listinfo/dev-ci)。非常感谢大家的反馈和分析帮助！

新增作业：

* <https://ci.freebsd.org/job/FreeBSD-head-armv7-test/>
* <https://ci.freebsd.org/job/FreeBSD-head-aarch64-test/>
* <https://ci.freebsd.org/job/FreeBSD-head-mips64-test/>
* <https://ci.freebsd.org/job/FreeBSD-head-powerpc64-test/>

正在进行的工作：

* 收集和整理 CI 任务和想法 [这里](https://hackmd.io/@FreeBSD-CI/freebsd-ci-todo)
* 测试和合并 [FreeBSD-ci 仓库](https://github.com/freebsd/freebsd-ci/pulls) 中的拉取请求
* 设置专门的构建器，运行使用预配置虚拟机的作业。
* 设置 CI 阶段环境，并将实验性作业放入其中
* 在裸机硬件上实施自动化测试
* 添加 drm Port 构建测试，针对 -CURRENT 进行测试
* 计划运行 ztest 和网络堆栈测试
* 添加与外部工具链相关的作业
* 改进硬件实验室，使其更加成熟并增加更多硬件
* 帮助更多的第三方软件通过托管 CI 解决方案在 FreeBSD 上进行 CI
* 与托管 CI 提供商合作，提供更好的 FreeBSD 支持

请查看与 freebsd-testing@ 相关的工单，了解更多 WIP 信息，欢迎加入我们的努力！\
赞助商：FreeBSD 基金会

### [Ports](https://www.freebsd.org/status/report-2020-04-2020-06.html#Ports-Collection)

| 链接                                                                                                      |
| ------------------------------------------------------------------------------------------------------- |
| [关于 FreeBSD Ports](https://www.freebsd.org/ports/)                                                      |
| [如何贡献 Ports](https://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributing/ports-contributing.html) |
| [FreeBSD Ports 监控](http://portsmon.freebsd.org/index.html)                                              |
| [Ports 管理团队](https://www.freebsd.org/portmgr/index.html)                                                |

联系人：René Ladan <<portmgr-secretary@FreeBSD.org>>\
联系人：FreeBSD Ports 管理团队 <<portmgr@FreeBSD.org>>

Ports 管理团队负责监督 Ports 的整体方向、构建软件包以及人员事务。以下是上个季度的工作总结。

目前共有 2,373 个开放的 Port PR，其中 526 个未分配，总 Port 数为 39,628 个。在上个季度，HEAD 分支提交了 10,315 次，季度分支提交了 476 次，分别由 178 位和 65 位提交者完成。与上个季度相比，这意味着提交次数显著增加，同时开放的 PR 数量略有减少。

在上个季度，我们欢迎了 Hiroki Tagato (tagattie@)，并向 seanc@、zleslie@、gnn@ 和 salvadore@ 告别。

以下是一些默认版本的更新：

* Java (新) 版本为 8
* Lazarus 更新到 2.0.8

现在可以使用 Lua 而不是 sh 编写 pkg 脚本。与 sh 脚本相比，它们有两个优点：

* 它们在 Capsicum 沙箱中运行
* 它们遵循 rootdir，即 pkg 用作安装所有包的起始点的目录

一些面向用户的包也已更新：

* pkg 更新到 1.14.6
* Firefox 更新到 78.0.1
* Thunderbird 更新到 68.10.0
* Chromium 更新到 83.0.4103.116
* Ruby 更新到 2.5.8、2.6.6 和 2.7.1
* Qt5 更新到 5.14.2

在上个季度，antoine@ 进行了 55 次 exp-runs 测试，测试了 Port 版本更新、使 liblzma 使用 libmd、开发 Port devel/scons 和 Lua、在基本系统中添加和更新库函数、使 `malloc.h` 再次可用、从基本系统中移除 as(1) 、增强了 sed(1) 的选项 `-f` 。

### [FreeBSD 办公时间](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Office-Hours)

| 链接                                                       |
| -------------------------------------------------------- |
| [FreeBSD 维基上的办公时间](https://wiki.freebsd.org/OfficeHours) |
| [投票：你希望办公时间定在什么时候](https://forms.gle/3HjjRx9KMcM3SL4H7)  |
| [live.FreeBSD.org：直播聚合](https://live.freebsd.org/)       |

联系人：Allan Jude <<allanjude@freebsd.org>>

自 2020 年 4 月 1 日起，FreeBSD 项目开始举办定期的视频直播，以促进更广泛的 FreeBSD 社区沟通。第一次会议是公开的问答环节，吸引了超过 60 名参与者。第二次会议在两周后举行，时间更适合亚洲地区的参与者，但仅吸引了 20 名参与者。借助 FreeBSD 基金会的帮助，我们进行了投票，以了解最适合大多数人的时间。

在 5 月 13 日，FreeBSD 基金会举办了一个会议，社区成员可以向基金会提问。5 月 27 日，许多新一届 FreeBSD 核心团队候选人参加了办公时间会议，回答了社区的问题。最后，在 6 月 24 日，举行了另一次公开问答办公时间。

每次办公时间会议包括一些 FreeBSD 开发者或其他主题专家的视频会议，直播过程中设有 IRC 聊天室，供观众向小组提问。会议视频会被录制并发布到官方 FreeBSD YouTube 频道。

如果你想举办办公时间会议，请联系：

* [Allan Jude](mailto:allanjude@freebsd.org)
* [Anne Dickison](mailto:anne@freebsdfoundation.org)

赞助商：ScaleEngine Inc.（视频直播）

### [季度状态报告团队](https://www.freebsd.org/status/report-2020-04-2020-06.html#Quarterly-Status-Reports-Team)

| 链接                                                     |
| ------------------------------------------------------ |
| [季度状态报告](https://www.freebsd.org/news/status/)         |
| [Git 仓库](https://github.com/freebsd/freebsd-quarterly) |

联系人：季度状态报告 <[quarterly@FreBSD.org](mailto:quarterly@FreeBSD.org)>\
联系人：Daniel Ebdrup Jensen <<debdrup@FreeBSD.org>>

季度状态报告团队负责收集和发布你当前正在阅读的报告。

最近进行了一些改进，因此我们认为季度状态报告团队提交报告是有意义的。以下列出的一些变更并非完全针对上个季度，但我们还是列出了这些改动，因为我们没有为之前的报告撰写条目。

* 现在报告是使用 Makefile 构建的。这样做的优点之一是可以轻松地对报告进行逻辑排序。从 2019Q4 开始，所有报告都按逻辑排序，而之前是按字母顺序排序的。
* 使用 Python 脚本将 markdown 转换为 docbook，虽然存在一些已知的 bug。Salvadore 已经用 Perl 重写了该脚本，修复了大部分 bug。虽然一些功能仍缺失且可能有更多改进空间，但由于转换为 Hugo/AsciiDoctor 后该脚本将不再需要，因此不太可能继续修改。
* 编写了另一个 Perl 脚本来简化报告邮件版本的准备工作。
* 编写了另一个 Perl 脚本，能让季度团队使用定时任务自动发送季度报告召集。我们在本季度首次使用了这个功能。
* 如你所注意到的，最后一次的季度报告召集已发送到 freebsd-quarterly-calls@，这是一个新的邮件列表，你可以 [订阅](https://lists.freebsd.org/mailman/listinfo/freebsd-quarterly-calls) 以接收季度报告召集。请注意，这是一个经过审阅的邮件列表，流量非常低，信号与噪声比很高。
* 如果你仔细阅读了上次的季度报告召集，你应该注意到，我们现在要求你将报告发送到 quarterly-submissions@ 而不是 quarterly@。这样做是为了帮助季度团队区分内部讨论和提交内容。请记住，季度团队更喜欢通过拉取请求来接收报告，因为这能简化行政工作。

我们要感谢来自 postmaster 团队的 philip@，为我们创建了 freebsd-quarterly-calls@ 邮件列表以及 quarterly-submissions@ 地址。

## [项目](https://www.freebsd.org/status/report-2020-04-2020-06.html#Projects)

跨多个类别的项目，从内核和用户空间到 Ports 或外部项目。

### [FreeBSD 在微软 HyperV 和 Azure 上](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-on-Microsoft-HyperV-and-Azure)

| 链接                                                               |
| ---------------------------------------------------------------- |
| [FreeBSD 在微软 tAzure 维基](https://wiki.freebsd.org/MicrosoftAzure) |
| [FreeBSD 在微软 HyperV 上](https://wiki.freebsd.org/HyperV)          |

联系人：FreeBSD 集成服务团队 <<bsdic@microsoft.com>>\
联系人：Wei Hu <<whu@FreeBSD.org>>\
联系人：許立文 <<lwhsu@FreeBSD.org>>

Wei 实现的 FreeBSD HyperV 套接字已于 5 月 20 日提交到 FreeBSD 主分支 [r361275](https://svnweb.freebsd.org/changeset/base/r361275)。它支持来宾/物理机之间的通信，无需网络。某些 HyperV 和 Azure 功能依赖于此功能在来宾中的可用性。

HyperV 套接字的详细信息请见 [这里](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service)。

此项目由微软赞助。

Li-Wen 正在处理与 Azure 相关的 FreeBSD 发布代码，涉及 -CURRENT、12-STABLE 和 11-STABLE 分支。工作进度请见 [这里](https://reviews.freebsd.org/D23804)。[12.1-RELEASE 镜像已发布到 Azure Marketplace](https://azuremarketplace.microsoft.com/marketplace/apps/thefreebsdfoundation.freebsd-12_1)。11.4-RELEASE 镜像在 Azure Marketplace 上的工作正在进行中。

此项目由 FreeBSD 基金会赞助。

### [Git 迁移工作组](https://www.freebsd.org/status/report-2020-04-2020-06.html#Git-Migration-Working-Group)

| 链接                                                                         |
| -------------------------------------------------------------------------- |
| [Git 转换工具仓库](https://github.com/freebsd/git_conv)                          |
| [FreeBSD-git 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-git) |
| [Beta 文档 Git 仓库](https://cgit-beta.freebsd.org/doc)                        |
| [Beta Port Git 仓库](https://cgit-beta.freebsd.org/ports)                    |
| [Beta 源代码 Git 仓库](https://cgit-beta.freebsd.org/src)                       |

联系人：Ed Maste <<emaste@FreeBSD.org>>\
联系人：Warner Losh <<imp@FreeBSD.org>>\
联系人：Ulrich Spörlein <<uqs@FreeBSD.org>>

FreeBSD 正在从 Subversion 迁移到 Git。Ulrich 对 svn2git 工具进行了多次迭代，以提高转换的准确性，特别是关于供应商（contrib）代码的更新。我们认为现在转换已经达到了一个可接受的状态，但如果发现其他问题，可能会进行一些小调整。我们预计每两周（每月的第一个和第三个星期天）向转换工具推送更新。这意味着 Beta 仓库中的提交哈希将在至少两周内保持稳定，以便其他人可以测试和实验 Beta 仓库。

我们现在正在更新 FreeBSD 的流程和文档，具体包括：

* 编写类似现有 Subversion 入门指南的 Git 入门指南
* 更新安全团队的工具和流程
* 发布工程更新
* Ports 和包的流程更新

有兴趣参与 Git 迁移的人，欢迎订阅 [FreeBSD-git 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-git)，并测试 Beta 源代码、Ports/文档仓库。

你还可以查看 [Git 转换工具仓库](https://github.com/freebsd/git_conv) 中的 wiki、问题、README 和其他文档。

我们预计在下个季度准备好进行迁移。

赞助商：FreeBSD 基金会（部分赞助）

### [FreeBSD 中使用 Lua](https://www.freebsd.org/status/report-2020-04-2020-06.html#Lua-Usage-in-FreeBSD)

联系人：Ed Maste <<emaste@FreeBSD.org>>\
联系人：Kyle Evans <<kevans@FreeBSD.org>>\
联系人：Ryan Moeller <<freqlabs@FreeBSD.org>>

Lua 是一种小型、高效的脚本语言，FreeBSD 在 12.0 版本之前已将其导入用于启动加载程序。从那时起，多个项目开始在启动加载程序之外使用 Lua：

* /usr/libexec/flua 现在已安装供内部使用
* makesyscalls.sh 已用 Lua 重写
* pkg 增加了对 Lua 脚本的支持
* 基本系统中的 lldb 现在支持 Lua 脚本

FreeBSD Lua（`flua`）是 Lua 解释器的一个版本，内置了多个模块，便于在基本系统中使用。flua 以非标准名称安装，并且位于不包含在 $PATH 中的位置，以防被第三方软件或配置脚本意外发现。FreeBSD 项目不对其升级节奏或模块稳定性作出任何保证。尽管如此，它仍然可以供下游项目和 FreeBSD 用户在了解这些限制的情况下使用。

之前关于 flua 的工作包括，例如，增加了对 libucl 的支持，未来的工作计划包括为脚本使用增加对 libifconfig 的支持。

有兴趣在 FreeBSD 中使用 Lua 的人，欢迎联系讨论其他项目想法。以下是一些有潜力的项目（无特定排序）：

* libcrypt
* libexpat
* libjail
* libnv
* libxo

### [更新 Linux 兼容层](https://www.freebsd.org/status/report-2020-04-2020-06.html#Linux-compatibility-layer-update)

联系人：Edward Tomasz Napierala <<trasz@FreeBSD.org>>

早期的 Linux 兼容层工作主要集中在代码清理和改进诊断工具。现在工作重点已转移到修复实际应用程序。目前的状态在 [Linux 应用程序状态 Wiki 页面](https://wiki.freebsd.org/LinuxApps) 上进行跟踪。当前的重点是那些不涉及 X11 的应用程序，主要因为它们通常更易于测试和调试，且修复的 bug 不依赖于特定应用程序。

修复的典型问题包括：修复了 buggy madvise(2) 的处理，避免破坏链接到 jemalloc 的应用程序；修复了 uname(2) 对 32 位应用程序返回错误结果，解决了 Steam 的问题；修复了 recvmsg(2) 和 accept(2) 在某些情况下出现问题，导致 Redis 崩溃；以及增加了对 `SO_REUSEPORT`、`SO_SNDBUFFORCE`、`SO_RCVBUFFORCE` 和 `SO_PROTOCOL` 的支持，解决了运行 Python 回归测试时日志文件被大量输出的问题。现在默认的软打开文件限制已自动调整为 1024，因为一些 Linux 应用程序会迭代所有文件描述符直到此限制，而不是使用 closefrom(2)。

Linux 兼容层的清理工作和调试框架仍在进行中，例如，对于无法识别的系统调用参数会记录警告，或增加 `compat.linux.debug` sysctl 以关闭警告。

Linux 测试项目（LTP）的测试已经作为 FreeBSD 持续集成基础设施的一部分进行了升级，版本更新至 20200605 快照。此更新将测试用例数量从 3670 增加到了 3749，并且，正如预期的那样，失败的测试用例数量也从 583 增加到了 647。

仍有很多工作要做：

* 有待审核的补丁包括 [扩展属性支持](https://reviews.freebsd.org/D13209) 和 [fexecve(2) 系统调用](https://reviews.freebsd.org/D10275)，需要完成并提交。
* 目前有超过 [500 个失败的 LTP 测试](https://ci.freebsd.org/job/FreeBSD-head-amd64-test_ltp/)，其中一些是误报，一些是容易修复的 bug，还有一些需要添加新的系统调用。任何帮助都非常欢迎。

赞助商：FreeBSD 基金会

### [NFS over TLS 实现](https://www.freebsd.org/status/report-2020-04-2020-06.html#NFS-over-TLS-implementation)

联系人：Rick Macklem <<rmacklem@freebsd.org>>

为了提高 NFS 的安全性，我预计很快将成为 RFC 的互联网草案规定了使用 TLS 1.3 来加密用于 NFS 的 Sun RPC 连接上的所有数据流量。

尽管 NFS 一直能够使用 sec=krb5p 来加密传输中的数据，但这需要一个 Kerberos 环境，因此并未广泛采用。它还要求加密/解密在软件中进行，因为只有 RPC 消息中的 NFS 参数被加密。由于内核 TLS 可以使用硬件加速来提高性能，并且不需要 Kerberos，因此待有实现，NFS over TLS 可能会得到更广泛的采用。

该项目的实现工作已基本完成。代码将逐步合并到 head/current 中，至少内核部分应该会在 FreeBSD-13 中。

为了支持诸如笔记本电脑等客户端，执行 TLS 握手的守护进程可以选择性地处理来自站点本地 CA 的客户端 X.509 证书。现在，exports(5) 选项中可以要求客户端提供有效的 X.509 证书。

该代码现已可供测试。请参阅：<https://people.freebsd.org/\\~rmacklem/nfs-over-tls-setup.txt。正如上述粗略文档所示，设置系统进行测试仍然有些不便。>

当前实现的主要限制是它使用的是 TLS1.2，而不是 TLS1.3。待 KERN\_TLS rx 补丁包含 TLS1.3 支持，情况应该会改变。此外，pNFS 配置的测试尚未完成，但很快会进行测试。

第三方测试将不胜感激。

## [内核](https://www.freebsd.org/status/report-2020-04-2020-06.html#Kernel)

对内核子系统/功能、驱动程序支持、文件系统等的更新。

### [SoC 音频框架和更多音频驱动程序](https://www.freebsd.org/status/report-2020-04-2020-06.html#SoC-audio-framework-and-more-audio-drivers)

| 链接                                                                    |
| --------------------------------------------------------------------- |
| [rk3399\_audio](https://github.com/gonzoua/freebsd/tree/rk3399_audio) |

联系人：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

自上次报告以来，SoC 音频框架取得了良好进展。\
已添加对 AUX 设备的支持（如辅助放大器等设备，这些设备不是主 CODEC 芯片的一部分）。\
为了验证框架设计，已添加以下音频驱动程序：RT5640 CODEC（Firefly-RK3399）的录音支持、Allwinner I2S、Alwinner 的 sun8i 和 A64 CODEC（Pine A64+），包括录音和播放功能。\
当前的工作进展包括 RK3328 CODEC（Rock64）和 ES8316 CODEC（RockPro64 和 Pinebook Pro）。

### [bhyve - NVMe 仿真改进](https://www.freebsd.org/status/report-2020-04-2020-06.html#bhyveNVMe-emulation-improvements)

| 链接                                                                        |
| ------------------------------------------------------------------------- |
| [bhyve NVMe 代码审查](https://reviews.freebsd.org/search/query/xvbcF20W__Km/) |

联系人：Chuck Tuffli <<chuck@freebsd.org>>

新罕布什尔大学互操作实验室（University of New Hampshire InterOperability Laboratory，简称 UNH IOL）开发了一套测试，用于确定一个 NVMe 设备是否符合规范并且能够与其他 NVMe 产品互操作。本季度，我着手使 bhyve 的仿真 NVMe 设备通过强制性测试。所做的更改包括：

* 实现 Flush 命令
* 实现 Format NVM 命令
* 实现 AER 支持
* 实现命名空间标识符描述符
* 修复活动命名空间列表
* 修复队列创建和删除
* 验证去分配范围值
* 处理零长度 DSM 范围
* 修复 Get Log Page 命令
* 实现 SMART 数据 I/O 统计信息
* 验证 LBA 启始和计数
* 增加基础的固件提交支持
* 添加更多兼容的 Get/Set 特性
* 添加特性、Interrupt Vector 配置
* 修复 Get Features 和可预测延迟

这也是一个重构代码部分结构的好机会，使其更加模块化并易于扩展。包括：

* 将日志语句转换为参数化宏
* 重构 I/O 命令处理
* 在队列访问周围添加锁
* 合并 CQ 更新
* 基于广告的 MDTS 调整 pci\_nvme\_ioreq 大小

你可以通过测试/评论代码审查来提供帮助。

### [蓝牙支持](https://www.freebsd.org/status/report-2020-04-2020-06.html#Bluetooth-Support)

联系人：Marc Veldman <<marc@bumblingdork.com>>

蓝牙是一种无线技术，用于创建个人网络，连接键盘、鼠标、扬声器和心率监测仪等外设。

FreeBSD 提供了有限的蓝牙基础速率（BR）支持，但没有功能完整的蓝牙低功耗（LE）支持。

在本季度，已经做出许多小的改进，以帮助蓝牙 LE 支持的开发。已向 hccontrol(8) 添加了若干命令，主要用于执行 LE 功能。现在可以使用 hccontrol 扫描范围内的 LE 设备。此外，还修复了启用 LE 支持时发生的 panic 问题。

仍需进行工作以添加属性协议（ATT）和通用属性配置文件（GATT）支持。

### [更新 DRM 驱动](https://www.freebsd.org/status/report-2020-04-2020-06.html#DRM-Drivers-Update)

| 链接                                               |
| ------------------------------------------------ |
| [drm-kmod](https://github.com/freebsd/drm-kmod/) |

联系人：Emmanuel Vadot <<manu@FreeBSD.Org>>

FreeBSD 13-CURRENT 的 drm 驱动已更新至与 Linux 5.3 相匹配。这使我们更加接近 Linux 的最后一个长期支持版本（5.4）。

当前计划是首先将驱动程序更新为与 5.4 匹配，然后着手在 FreeBSD-12-STABLE 上使其工作，以便为 12.2 版本做好准备。

赞助商：FreeBSD 基金会

### [DTS 更新](https://www.freebsd.org/status/report-2020-04-2020-06.html#DTS-Update)

联系人：Emmanuel Vadot <<manu@FreeBSD.org>>

DTS 文件（设备树源文件）已更新，以使 HEAD 分支与 Linux 5.7 对齐，12-STABLE 分支与 5.6 对齐。

### [更新 FreeBSD ENA 驱动](https://www.freebsd.org/status/report-2020-04-2020-06.html#ENA-FreeBSD-Driver-Update)

| 链接                                                                                    |
| ------------------------------------------------------------------------------------- |
| [ENA README](https://github.com/amzn/amzn-drivers/blob/master/kernel/fbsd/ena/README) |

联系人：Michal Krawczyk <<mk@semihalf.com>>\
联系人：Artur Rojek <<ar@semihalf.com>>\
联系人：Marcin Wojtas <<mw@semihalf.com>>

ENA（Elastic Network Adapter）是亚马逊网络服务（AWS）虚拟化环境中的智能网卡。ENA 驱动支持多个发送和接收队列，并且可以处理最多 100 Gb/s 的网络流量，具体取决于所使用的实例类型。

自上次更新以来已完成的工作：

* 修复 Rx 充填问题，改善低内存条件下的稳定性（也已作为 FreeBSD-12.1 的 errata 通知发布）
* 将 v2.2.0 驱动程序上游合并，新增功能包括：
  * 为即将到来的硬件特性增加驱动支持（报告 Tx 丢包、禁用元数据缓存）
  * 增加 sysctl 可调参数，调整 I/O 队列数量
  * 创建具有可选大小回退的 I/O 队列
  * 重新设计 drbr 和 Rx 环大小的配置方式，使其更加稳健和稳定
  * 新版 HAL
  * 驱动现已标记为支持 epoch
  * 默认的 RSS 密钥通过 RNG 生成，以提高安全性
  * 其他小修复和改进
* 将 ENA v2.2.0 驱动程序 MFC 到 FreeBSD 11.4

赞助商：亚马逊公司

### [在磁盘故障时强制卸载 UFS/FFS 文件系统](https://www.freebsd.org/status/report-2020-04-2020-06.html#Forcible-Unmount-of-UFS/FFS-Filesystems-on-Disk-Failure)

| 链接                                                   |
| ---------------------------------------------------- |
| [Phabricator 详情](https://reviews.freebsd.org/D24088) |

联系人：Chuck Silvers <<chs@freebsd.org>>\
联系人：Kirk McKusick <<mckusick@mckusick.com>>

2020 年 5 月 25 日的提交 -r361491 启用了 UFS 文件系统，在底层介质故障或变得不可访问时执行强制卸载。例如，当托管 UFS 文件系统的 USB 闪存卡被拔出时。

本报告的其余部分详细描述了如何执行强制卸载。令人惊讶的是，文件系统代码的新增或更改不到 500 行。

当启用软更新时，处理磁盘 I/O 错误的策略是停止写入受影响文件系统的磁盘，但继续接受 I/O 请求，并报告文件系统对该磁盘的所有未来写操作实际上成功。然后，启动受影响文件系统的异步强制卸载。

磁盘 I/O 错误有两种情况：

* ENXIO，意味着该磁盘已丢失，存储堆栈的下层已经保证该磁盘上的所有未来 I/O 将无法成功。
* EIO（或大多数其他错误），意味着特定的 I/O 请求失败，但对该磁盘的后续 I/O 请求可能仍会成功。

对于 ENXIO，我们可以直接清除错误并继续，因为我们知道在看到此错误后，文件系统无法影响磁盘上的状态。对于 EIO 或其他错误，我们安排 geom\_vfs 层拒绝所有未来的 I/O 请求，并返回 ENXIO，就像 geom\_vfs 被孤立时的处理方式一样。在这两种情况下，文件系统代码可以清除错误并继续进行强制卸载。

这种新的 I/O 错误处理方式对于涉及依赖关系的任何缓冲区写入是必要的。大多数依赖关系是通过附加到缓冲区 b\_dep 字段的结构描述的，但一些依赖关系是在缓冲区附加的依赖关系完成后创建和处理的。

清除某些依赖关系需要读取。例如，如果有一个依赖关系要求写入一个 inode，则必须读取包含该 inode 的磁盘块，将更新后的 inode 复制到该缓冲区，然后将缓冲区写回磁盘。

通常，所需的缓冲区已经在内存中并可以直接使用。但如果需要从磁盘读取，读取将失败，因此我们会伪造一个充满零的缓冲区，假装读取成功。这个填充零的缓冲区可以被更新并“写”回磁盘。

唯一的例外是，当读取一个包含 inode 的 inode 缓冲区时，如果该 inode 在内存中仍有依赖关系，将重新初始化有效的链接计数（i\_effnlink），基于我们读取的实际链接计数（i\_nlink）。为了处理这种情况，我们现在将我们写入的 i\_nlink 值存储在 inode 依赖关系中，以便它可以恢复到填充零的缓冲区中，从而保持 inode 链接计数的一致性。

由于应用程序依赖于知道何时写入数据到稳定存储失败，fsync(2) 和 msync(2) 系统调用需要在数据未能写入稳定存储时返回错误。因此，这些操作在文件系统中每次调用时都会返回 ENXIO，即使我们在其他情况下忽略 I/O 错误。

赞助商：Netflix

### [i.MX 8M 支持](https://www.freebsd.org/status/report-2020-04-2020-06.html#i.MX-8M-support)

| 链接                                           |
| -------------------------------------------- |
| [D25274](https://reviews.freebsd.org/D25274) |

联系人：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

i.MX 8M 是 NXP 基于 Arm Cortex-A53 和 Cortex-M4 核心的应用处理器系列。该平台支持的初始代码包括 CCM 驱动和时钟实现、GPC 驱动、i.MX 8M Quad 的时钟树。i.MX 6 系列的大多数驱动可以在 i.MX 8M 系统中复用，所需的修改较小。常见的修改包括增加时钟支持和扩展 FDT 兼容字符串列表。

通过所链接的补丁，FreeBSD 成功引导到多用户模式，并通过 NFS 根文件系统启动到 Nitrogen8M SBC。

### [更新英特尔无线和 11ac](https://www.freebsd.org/status/report-2020-04-2020-06.html#Intel-wireless-and-11ac-update)

| 链接                                                                                    |
| ------------------------------------------------------------------------------------- |
| [项目初步公告](https://lists.freebsd.org/pipermail/freebsd-wireless/2020-April/009055.html) |
| [freebsd-wireless 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-wireless)  |

联系人：Bjoern A. Zeeb <<bz@FreeBSD.org>>

Intel 无线卡是 FreeBSD 笔记本电脑中最常用和最常要求的硬件之一。

此项目有三个主要目标：

* 支持更新的英特尔无线设备，
* 为英特尔无线设备提供更新的 WiFi 标准支持，
* 在 FreeBSD 中集成 802.11ac 客户端支持和基础设施。

第一个目标是因为 iwm(4) 当前完全不支持最新一代的 Intel 无线卡。第二个目标是因为在 FreeBSD 中，iwm(4) 甚至不支持 802.11n。第三个目标是赶上并使用新 WiFi 标准提供的改进，例如更高的速度。

做出的决定之一是：与其改进 iwm(4)，不如使用双许可证的原生 Linux 驱动（采用 BSD 许可证）和 linuxkpi 框架，尽可能贴近上游作为第一步。这将为我们带来几个优势，例如对所有卡片的完整支持、快速支持新芯片组、厂商 bug 修复以及能进行反向贡献的能力。

目前，较低级别的硬件连接、固件加载和初始化已能正常工作。我计划在 7 月中旬之前发布一个测试补丁集，你可以查看当前支持或不支持的硬件是否被识别。这个初步版本还不支持任何无线操作，稍后会在年内发布。

如果你想帮助测试，请关注 freebsd-wireless 邮件列表。

赞助商：FreeBSD 基金会

### [amd64 5 级分页结构支持](https://www.freebsd.org/status/report-2020-04-2020-06.html#amd64-5-Level-Paging-Structures-support)

| 链接                                                                                                                         |
| -------------------------------------------------------------------------------------------------------------------------- |
| [补丁](https://reviews.freebsd.org/D25273)                                                                                   |
| [Intel SDM](https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html)                                  |
| [Intel 白皮书](https://software.intel.com/content/www/us/en/develop/download/5-level-paging-and-5-level-ept-white-paper.html) |

联系人：Konstantin Belousov <<kib@FreeBSD.org>>

自从引入以来，x86 长模式（又称 64 位执行模式，在 FreeBSD 中称为 amd64）使用了 4 级分页结构，提供 48 位虚拟地址空间（LA48）。FreeBSD 将该空间均分给用户空间和内核空间，分别提供 47 位虚拟地址。

在不久的将来，Intel CPU 将开始提供 5 级分页结构，即提供 57 位虚拟地址（LA57）。这意味着，在保持 KVA 和 UVA 之间现有划分的情况下，UVA 将有 56 位，或者 2^9 = 512 倍的更多虚拟内存。

amd64 pmap 已修改为支持 LA48 和 LA57，如果硬件支持，将默认使用 LA57。还提供了一个可调参数，可以强制使用 LA48，即使硬件支持 LA57。

补丁的最有趣部分是从启动分页模式切换到 LA57。加载程序，无论是传统的还是 UEFI，都在长模式下将控制权交给内核，这意味着分页已启用。由于这一点，分页模式必然是 LA48 模式。SDM 表示，在长模式激活时不能切换分页模式，因此内核必须创建新的页面表结构，关闭长模式，加载新的 %cr3 寄存器，最后重新启用长模式。

我决定在初步阶段仅为用户模式提供更大的虚拟地址空间，保留 KVA 布局不变。主要原因是，改变 KVA 布局需要更改自动调优设置，而这些工作需要单独处理。另一个理由是，大多数内核内存是不可交换的，因此无法过度提交。我们拥有 2:1 的有用 KVA 与物理内存的比率（由于直接映射），直到机器增加更多物理地址线，增加 KVA 没有太大意义。

做出此决定后，从现有的 4 级分页结构创建一个适用于内核 pmap 的 5 级分页结构相对简单；我们只需要为顶级添加一个页面，创建一个 PML5 条目指向现有的 PML4 页面，并为 vtopte()/vtopde() 创建著名的自引用条目。

在此过程中，我们特别注意了为无法在更大的地址空间中正确执行的二进制文件提供与二进制兼容的 UVA。例如，程序可能知道地址中使用的位，并使用上位位存储其他数据，或者实现了压缩指针。即使系统运行在 LA57 模式下，特定的二进制文件也可以通过 procctl(2) 或 FreeBSD 特性 ELF 注释中的标志请求兼容 LA48 的 UVA。

由于我没有访问具有 LA57 的机器，因此开发是在 QEMU 上进行的。将其应用于真实硬件将会很有趣。

赞助商：FreeBSD 基金会

### [非透明超级页面](https://www.freebsd.org/status/report-2020-04-2020-06.html#Not-transparent-superpages)

| 链接                                       |
| ---------------------------------------- |
| [补丁](https://reviews.freebsd.org/D24652) |

联系人：Konstantin Belousov <<kib@FreeBSD.org>>

FreeBSD 已经提供了对超级页面的优秀支持，且对应用程序完全透明。它尝试主动防止碎片化，为受管对象的线性分配保留物理页面的连续运行，并在小页面形成完整的超级页面时自动提升这些小页面。

这种方法的不足直接来自于其优点：一些应用程序希望获得保证的超级页面映射，通常是因为底层物理内存也被卸载到具有内存映射单元的硬件中。例如，Infiniband RDMA 适配器执行内存注册和重映射，使用大页面会更加高效。在这种情况下，透明的（非保证的）支持无法使用。

该扩展已为 POSIX 共享内存子系统开发，允许创建者请求共享内存对象由物理连续的页面支持，并具有指定大小的连续块。mmap(2) 系统调用会识别这些对象，如果请求的映射正确对齐，它将由超级页面提供服务。

新类型的共享内存对象由一个修改后的物理分页器支持，该分页器仅分配连续的物理内存。虚拟内存（VM）确保这些对象的映射永远不会在非超级页面边界上拆分（剪切）。故障处理程序经过专门优化，能够快速安装超级页面页表项（PTE），并避免访问构成该超级页面的所有小页面。

目前，所需的 pmap 支持已为 amd64 提供，支持 2M 和 1G 的超级页面大小。

赞助商：FreeBSD 基金会

### [NXP ARM64 SoC 支持](https://www.freebsd.org/status/report-2020-04-2020-06.html#NXP-ARM64-SoC-support)

联系人：Marcin Wojtas <<mw@semihalf.com>>\
联系人：Artur Rojek <<ar@semihalf.com>>\
联系人：Dawid Gorecki <<dgr@semihalf.com>>

Semihalf 团队开始为 [NXP LS1046A SoC](https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/qoriq-layerscape-arm-processors/qoriq-layerscape-1046a-and-1026a-multicore-communications-processors:LS1046A) 提供 FreeBSD 支持。

LS1046A 是四核 64 位 ARMv8 Cortex-A72 处理器，具有集成的数据包处理加速和高速外设，包括 10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0，适用于广泛的网络、存储、安全和工业应用。

自上次更新以来已完成的工作：

* 在多个评审周期中改进代码，并将以下新特性合并到 FreeBSD-HEAD（r361458 - r361464）：
  * QorIQ 平台时钟生成驱动程序
  * LS1046A 时钟生成驱动程序
  * QorIQ 板的 GPIO 支持
  * QorIQ LS10xx AHCI 驱动程序
  * VF610 I2C 控制器支持
  * TCA6416 GPIO 扩展器
  * Epson RX-8803 RTC

待办事项

* 将 QorIQ SDHCI 驱动程序上游提交 - 预计将在 2020 年第三季度提交并合并到 HEAD。

赞助商：Alstom Group

### [amd64 pmap 细粒度 pv 列表锁定](https://www.freebsd.org/status/report-2020-04-2020-06.html#amd64-pmap-Fine-grained-pv-lists-locking)

| 链接                                       |
| ---------------------------------------- |
| [补丁](https://reviews.freebsd.org/D24217) |

联系人：Konstantin Belousov <<kib@FreeBSD.org>>

FreeBSD 内核虚拟内存子系统处理“普通”应用程序内存，即匿名内存或文件支持的共享和私有映射，使用所谓的托管页面。托管页面完全由 VM 控制，VM 跟踪其状态。特别是，托管页面可以设置为只读以便写回文件，或者取消映射以便重新使用（分页）。

与机器相关的 VM 层，即 pmap，必须支持托管页面。例如，它必须提供操作，如 pmap\_remove\_write() 将所有映射降级为只读，或 pmap\_remove\_all() 从所有地址空间中取消映射页面。为了实现这些操作，同时避免扫描所有页表的开销，pmap 必须跟踪页面的现有映射。跟踪是通过为每个映射分配一个小数据结构“pv 入口”并将所有 pv 入口链接到给定页面的 pv 列表中来完成的。

由于 pv 入口来自不同地址空间的上下文，pmap 必须提供同步机制以保证列表结构的正确性。当前的 pmap 在 NUMA 配置中为每个 2M 物理超页分配一个互斥锁，而在非 NUMA 配置中为最大 256 锁（由页面物理地址哈希）分配互斥锁。最终结果是，常常出现不必要的锁别名，导致 pv 列表锁的争用，因为 2M 超页中的所有 4k 页面共享相同的锁，并且预留的页面通常会来自同一超页。

所提议的补丁创建了一种新的内核同步原语，称为“一字节互斥锁”，该锁嵌入到结构体 vm\_page 的机器相关部分当前未使用的填充区中。通过这种方式，每个页面都会获得专用的 pv 列表锁，而不会占用更多内存。在非 NUMA 配置的构建内核基准测试中，此更改将系统时间减少了 2 倍。

一个复杂之处在于，旧的锁分配方案非常适合超页的提升和降级，因为所有嵌入的小页面共享相同的 pv 列表锁，操作基本上是折叠/展开相应的 pv 入口。现在，提升和降级操作需要为组成的小页面获取所有锁，这对它们产生了小但可测量的影响。可以通过为超页运行中的第一个页面提供“超锁”来进一步优化，但受影响的操作相对较少，因此即使实现此优化，也不一定会减缓其他路径。

pv 入口处理的另一个重要细节是，有时 pv 入口分配器不能失败。通常，当内核调用 pmap\_enter() 时，这要求建立新的映射，对于托管页面，这包括在现有 pv 入口无法重用时分配一个新的 pv 入口。如果分配器无法从 vm\_page\_alloc(9) 获取新的页面，它会选择销毁其他托管映射，以便从当前 pmap 获取可重用的 pv 入口，或从其他 pmap 销毁足够的托管映射以释放整个页面。

为了进行回收，当前所有分配了 pv 入口的页面都链接到全局 pv 块列表中，该列表由全局（每 NUMA 域）互斥锁保护。任何 pv 入口的分配或释放都必须锁定互斥锁，这显然是大型机器上的争用点。

补丁移除了全局块列表，而是像在 i386 上一样将所有 pmap 链接到全局列表中（但原因不同）。现在，全局锁仅在 pmap 创建和释放时被获取，这与进程的 fork/exec 和退出相关，当 pv 分配器开始从其他 pmap 回收时（通常不会发生）。

赞助商：FreeBSD 基金会

### [无锁路由查找和可扩展的多路径](https://www.freebsd.org/status/report-2020-04-2020-06.html#Lockless-routing-lookups-and-scalable-multipath)

| 链接                                                                  |
| ------------------------------------------------------------------- |
| [可扩展多路径的实现](https://reviews.freebsd.org/D24141#change-ZOjdMqgDgUr7) |

联系人：Alexander Chernikov <<melifaro@FreeBSD.org>>

这项工作的主要目标是实现可扩展的路由多路径功能，默认启用。另一个目标是启用高性能的路由查找。

多路径将弥补现代网络操作系统中长期存在的功能空白。无锁路由查找将消除查找瓶颈，提高具有大量路由的设置中数据平面和控制平面的性能。

#### 背景

最初的路由 kpi（关键性能指标）在 1980 年代引入。那时它是一个很好的通用方法，因为没人知道协议会如何发展。它取得了巨大的成功，因为它能够维持超过 20 年。

不幸的是，这个 kpi 并没有尝试保护子系统内部不被外部用户访问，导致了与其他子系统的紧密耦合。因此，进行更改变得困难，导致了妥协并积累了技术债务。

#### 实现概述

大多数更改基于引入“下一跳”（nexthop）的概念。下一跳是独立的数据结构，包含执行数据包转发所需的所有信息，如网关、接口和 mtu。它们在路由之间共享，提供更多的预计算缓存效率数据，同时需要更少的内存。感兴趣的读者可以在 [D24141](https://reviews.freebsd.org/D24141) 中找到更详细的描述。另一个概述可以在 Nexthop 对象 [讲座](https://linuxplumbersconf.org/event/4/contributions/434/attachments/251/436/nexthop-objects-talk.pdf) 中找到，描述了 Linux 的实现。

多路径实现通过引入下一跳组（nexthop groups）进一步扩展了下一跳概念。

每个路由都有一个指向下一跳或下一跳组的指针，从而将查找算法与路由栈的内部实现解耦。下一跳和下一跳组都是不可变的，并使用 epoch(9) 支持的回收机制。

无锁路由查找的前提是引入模块化查找框架，允许将任何最长前缀匹配算法实现附加到任何 IPv4/IPv6 FIB（前向信息库）。

目前，计划使用从 DPDK 修改过的 DIR-24-8 算法作为基础无锁实现，应用于 IPv4 和 IPv6 两个家族。

#### 状态

* 下一跳对象 \[已完成]
  * 引入下一跳对象 \[已完成]
  * 将旧的 KPI 用户转换为新的 KPI \[已完成]
  * 将路由缓存转换为下一跳缓存 \[已完成]
  * 将 `rtentry` 结构体字段访问转换为 nhop 字段访问 \[已完成]
  * 消除旧的查找 KPI 并隐藏 `struct rtentry` \[已完成]
* 多路径 \[进行中]
  * 将控制平面消费者切换为使用 (rtentry, nhop) 对，而不是仅使用 rtentry，以便多路径更改能够透明发生 \[90% 完成]
  * 引入下一跳组对象
  * 为路由信息库（RIB）操作函数添加多路径支持
  * 为出站流量添加 flowid 生成以启用负载均衡
* 模块化最长前缀匹配查找算法 \[进行中]
  * 设计控制平面框架以附加算法 \[90% 完成]
  * 移植 IPv6 无锁查找算法 \[已完成]
  * 移植 IPv4 无锁查找算法

### [ZSTD 压缩在 ZFS 中的应用](https://www.freebsd.org/status/report-2020-04-2020-06.html#ZSTD-Compression-in-ZFS)

联系人：Allan Jude <<allanjude@freebsd.org>>

Zstandard（ZSTD）是一种现代的高性能压缩算法，旨在提供与 gzip 相当的压缩比，同时提供更好的性能。ZSTD 已被 FreeBSD 在多个领域应用，包括压缩内核崩溃转储、替代 gzip 或 bzip 压缩日志文件，以及后续版本的 pkg(8)。

这项工作旨在完成 ZSTD 在 ZFS 中的集成，由 FreeBSD 基金会赞助。

将 ZSTD 集成到 ZFS 中，将进一步扩展 ZFS 的透明压缩功能，通过提供更高的压缩比而不会带来与 gzip 相关的性能损失。ZSTD 提供的压缩级别范围从 1（低压缩）到 22（最大压缩），此外还有 ZSTD-Fast 级别，提供较低的压缩比但更高的速度。这将允许存储管理员根据需求选择最佳的性能与压缩之间的折衷。

待完成的任务：

* 扩展 ZFS 以支持具有大量级别的压缩算法
* 解决压缩设置继承相关问题
* 在从磁盘读取块时恢复压缩级别
* 创建一个未来-proofing 方案来处理 ZSTD 版本变化
* 扩展 ZFS 复制以支持与尚不支持 ZSTD 的池的向后兼容性
* 解决当 ZSTD 被配置但未使用时的向后兼容性问题

赞助商：FreeBSD 基金会

### [CheriBSD 2020 第二季度](https://www.freebsd.org/status/report-2020-04-2020-06.html#CheriBSD-2020-Q2)

| 链接                                           |
| -------------------------------------------- |
| [CHERI-CPU](http://www.cheri-cpu.org/)       |
| [DARPA FETT 漏洞赏金计划](https://fett.darpa.mil/) |

联系人：Alex Richardson <<arichardson@FreeBSD.org>>\
联系人：Andrew Turner <<andrew@FreeBSD.org>>\
联系人：Brooks Davis <<brooks@FreeBSD.org>>\
联系人：Edward Tomasz Napierala <<trasz@FreeBSD.org>>\
联系人：Jessica Clarke <<jrtc27@FreeBSD.org>>\
联系人：John Baldwin <<jhb@FreeBSD.org>>\
联系人：Robert Watson <<rwatson@FreeBSD.org>>\
联系人：Ruslan Bukin <<br@FreeBSD.org>>

CheriBSD 扩展了 FreeBSD，以实现由 CHERI 指令集扩展支持的内存保护和软件隔离功能。

本季度，CheriBSD 对 CHERI-RISC-V 的支持继续成熟，并与 CHERI-RISC-V 架构的改进同步。我们最近将 CheriBSD 的“纯能力”（CheriABI）进程环境设置为默认 ABI，而不是作为兼容层。它已经支持：

* 动态链接的二进制文件（之前仅支持静态链接的二进制文件）
* C++，包括异常处理
* 密封的返回地址和函数指针能力（“sentries”），提供额外的控制流完整性（CFI）保护
* 初步的 MMU 保护，用于加载和存储标签

目前，CheriBSD 中的 CHERI-RISC-V 支持基本上与 CHERI-MIPS 的支持相当。

这项工作的大部分集中在为 CHERI-RISC-V 上的 CheriBSD 做准备，以便将其作为展示系统纳入 DARPA 的发现漏洞以阻止篡改（[FETT](https://fett.darpa.mil/)）漏洞赏金计划。

此外，本季度已经开始了将 CheriBSD 移植到 ARM 的 Morello SoC 的工作。Morello 是一块原型展示板，它为 ARMv8-A 添加了 CHERI 扩展。

我们最近切换到开发分支模型，其中积极的工作在 `dev` 分支进行，并定期合并到 `master`，以确保 CheriBSD 与依赖项（如 CHERI-LLVM）之间的同步。

对于那些对 CHERI 编程感兴趣的人，我们最近发布了 [CHERI C/C++ 编程指南](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-947.pdf)。

## [架构](https://www.freebsd.org/status/report-2020-04-2020-06.html#Architectures)

更新平台特定功能并引入对新硬件平台的支持。

### [非 x86 平台的持续集成](https://www.freebsd.org/status/report-2020-04-2020-06.html#Continuous-Integration-on-!x86)

联系人：Edward Tomasz Napierala <<trasz@FreeBSD.org>>

FreeBSD 的 [CI 基础设施](https://ci.freebsd.org/) 已经运行了 FreeBSD 构建和回归测试，使得能够轻松地发现回归问题。虽然 CI 构建了所有架构的镜像，但回归测试仅在 amd64 和 i386 上运行，这意味着它们无法检测非 x86 架构上架构特定的运行时故障。这不仅对 FreeBSD 本身构成问题，还对从事非 x86 FreeBSD 分支（例如剑桥大学的 CHERI 项目和 SRI 国际的项目）的人们造成了挑战。

该项目的目标是在 FreeBSD 支持的其他架构上运行回归测试，包括 ARM、ARM64、MIPS、POWER 和 RISC-V。这些测试使用通用的、主要与机器无关的脚本运行。为了使 QEMU 也能作为 Bhyve（用于 x86 测试的虚拟机监控器）之外的另一种选择，做了一些必要的修改。此外，针对每种架构都需要一些调整，以满足不同的配置需求——例如 MIPS 内核不支持 VirtIO 磁盘，甚至不支持 AHCI，而在 ARM64 上，U-Boot 对多个 VirtIO 磁盘的处理会出现混乱。

在 ARM 上，当前有 52 个失败和 590 个跳过的测试，共运行了 5925 个测试（[测试报告](https://ci.freebsd.org/job/FreeBSD-head-armv7-test/lastCompletedBuild/testReport/)）。在 ARM64 上，失败 19 个，跳过 160 个（[测试报告](https://ci.freebsd.org/job/FreeBSD-head-aarch64-test/lastCompletedBuild/testReport/)）。在 MIPS 上，失败 172 个，跳过 734 个（[测试报告](https://ci.freebsd.org/job/FreeBSD-head-mips64-test/lastCompletedBuild/testReport/)）。POWER 和 RISC-V 的结果尚未发布。

剩余工作：

* 修复失败的回归测试。
* 在 QEMU 上，测试运行速度较慢，例如 ARM64 运行大约需要五个小时。每次提交后自动运行这些测试会迅速超载 CI 集群。解决方案可能是例如每天运行一次。
* 一些作业仍然无法生成结果：powerpc64 在回归测试套件结束时由于无法杀死的进程发生死锁，riscv64 随机 panic，mips64 上 kyua(1) 在 jemalloc 断言时经常崩溃。那些问题可能会通过即将发布的 QEMU Port 更新得到解决。

赞助商：DARPA

### [FreeBSD/RISC-V 项目](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD/RISC-V-Project)

| 链接                                     |
| -------------------------------------- |
| [Wiki](https://wiki.freebsd.org/riscv) |

联系人：Mitchell Horne <<mhorne@FreeBSD.org>>

联系人：[freebsd-riscv 邮件列表](https://lists.freebsd.org/mailman/listinfo/freebsd-riscv)\
联系人：IRC #freebsd-riscv 频道，Freenode

*FreeBSD/RISC-V* 项目为在 [RISC-V 指令集架构](https://riscv.org/) 上运行 FreeBSD 提供支持。由于 RISC-V 仍然是一个年轻且不断发展的平台，我们的目标之一是使 FreeBSD 成为 RISC-V 硬件逐渐增多时，为用户提供一个得到良好支持的选项。

本季度，启动过程有所改进。

用于 ARM 和 ARM64 枚举物理内存资源的 `physmem` 接口被移到了与机器无关的代码中，并在 RISC-V 上采用。因此，内核现在能够检测并排除由设备或固件保留的物理内存。一个 bug 被修复，它曾阻止内核使用低于加载地址的物理内存。通常这并未造成太大浪费，因为默认情况下，内核会在物理内存起始位置 2MB 后加载。但在未来的启动配置中，影响可能会更大。

我们对 OpenSBI 的 Port 更新到了 v0.8，带来了若干新功能和修复。特别是它带来了硬件状态管理（HSM）扩展，可以用来启动和停止 CPU。FreeBSD 现在会在检测到此扩展可用时使用它。

另外，还进行了大量工作以将 FreeBSD 的标准引导加载器 `loader(8)` 移植到 RISC-V。这在启动灵活性方面具有重要优势，并且使我们更接近于生产官方的 FreeBSD/RISC-V 发布镜像所需的条件。通过利用 [u-boot](https://www.denx.de/wiki/U-Boot/) 提供的 UEFI 支持，`loader.efi` 可以像 ARM 和 ARM64 一样使用。下个季度可能会带来针对 RISC-V 目标的 Port u-boot，等待 v2020.07 版本发布。直接通过 SBI 固件启动内核将继续得到支持。

## [用户态程序](https://www.freebsd.org/status/report-2020-04-2020-06.html#Userland-Programs)

影响基本系统及其中程序的更改。

### [导入 bc 和 dc 的新实现](https://www.freebsd.org/status/report-2020-04-2020-06.html#Import-of-new-implementation-of-bc-and-dc)

| 链接                                                  |
| --------------------------------------------------- |
| [官方仓库](https://git.yzena.com/gavin/bc)              |
| [GitHub 上的仓库镜像](https://github.com/gavinhoward/bc/) |

联系人：Stefan Esser <<se@FreeBSD.org>>\
联系人：Gavin D. Howard <<yzena.tech@gmail.com>>

FreeBSD-CURRENT 中导入了 bc 和 dc 的新版本，并已默认启用。计划在 7 月底之前将其导入 12-STABLE，但该版本默认不会启用（需要在 `/etc/src.conf` 中设置 `WITH_GH_BC=yes`）。

该版本由 Gavin D. Howard 开发，旨在提供一个高度可移植且兼容 POSIX 的实现。它提供了与 GNU bc 的兼容性，应当能够完全替代 FreeBSD 中的 bc，除了当前 FreeBSD 中 bc 的标准违规行为（例如，取模运算符）。

额外功能：

* 高性能（在一些测试中比当前 FreeBSD 实现快多达 100 倍以上）
* 支持包含多种语言的大型消息目录（当前发布支持的语言欢迎提供更多翻译）
* 额外的内置函数和运算符
* 扩展的高级数学函数库
* 详细的手册页，解释符合标准和扩展功能
* 一个共享的二进制文件用于 bc 和 dc（bc 不仅仅是依赖 dc 进行实际计算的预处理器）

唯一不支持的 dc 特性是执行子进程，因为作者认为让计算器执行子进程存在安全隐患。

该代码还可作为 Port 和软件包（math/gh-bc 或 gh-bc）提供，供 FreeBSD 二进制发行版使用。

### [Binutils 停用](https://www.freebsd.org/status/report-2020-04-2020-06.html#Binutils-Retirement)

| 链接                                                        |
| --------------------------------------------------------- |
| [GPL in Base wiki 页面](https://wiki.freebsd.org/GPLinBase) |

联系人：Ed Maste <<emaste@FreeBSD.org>>

我们已经在迁移到现代的、无版权或许可友好的工具链上工作了一段时间。在上个季度，我们停用了两个过时的 GNU binutils 工具：objdump 和 as。

objdump 的许多用途可以被 readelf 替代，llvm-objdump 也可以在基本系统中使用。依赖 objdump 的 Port 已经更新为依赖 Port 或软件包 GNU binutils。

GNU as 工具曾被基本系统和 Ports 共同使用。与 objdump 一样，依赖 GNU as 的 Port 一般已更新为依赖 binutils。在迁移到使用 Clang 集成汇编器（IAS）的过程中，基本系统中的一个文件（skein\_block\_asm.s）曾遇到问题。然而，在更新到 Clang 10 后（并对源代码进行了一些微小修改），IAS 可以成功地汇编该文件。

已从 FreeBSD-CURRENT 中移除 GNU as 和 GNU objdump，且将不再出现在 FreeBSD 13.0 中。

#### 待办事项

binutils 停用项目的最后一项任务是移除 GNU GDB 6.1。该版本目前仍为 crashinfo(8) 所保留。

赞助商：FreeBSD 基金会

### [运行时动态链接器改进](https://www.freebsd.org/status/report-2020-04-2020-06.html#Run-Time-Dynamic-Linker-improvements)

联系人：Konstantin Belousov <<kib@FreeBSD.org>>

Rtld 进行了一些小的错误修复和改进。

为了与 glibc 兼容，实现了 dlopen(3) 参数 RTLD\_DEEPBIND，尽管它是一个奇怪甚至不安全的想法。

对直接执行模式做了几项改进。最有趣的改进可能是选项 `-v` ，用于报告 rtld 的一些配置参数，能够指定与执行的二进制文件不同的 argv0，以及修复了正确设置直接执行二进制文件的 osrel/ABI。

用于需要知道已加载共享对象列表的工具（如 gdb 和 wine）的 link\_map 结构变得更加兼容 glibc，同时保持现有的 FreeBSD ABI 不变。

在 link\_map 的工作过程中，显然 rtld 有时需要报告一些无法仅通过运行时符号存在或函数行为测试来推断的功能。为此，设计了一个通过统一命名的符号报告特性方案——详见 rtld(1) 手册页（在 CURRENT 中）进行说明。

FreeBSD 上的独立位置（PIE）二进制文件现在标记为 DF\_1\_PIE DT\_FLAG1 标志。否则，这些二进制文件只是 ET\_DYN 对象，并且很难区分适当的动态共享对象（DSO）与 PIE 二进制文件。问题在于，对于二进制文件，静态链接器会剥离一些信息，这些信息是正确加载为 DSO 所必需的；此外，二进制文件包含像 copy-relocations 这样的重定位，这些重定位对于非主二进制文件无法处理。

通过添加该标志，rtld 正确地检测二进制文件并拒绝使用 dlopen() 或作为 DT\_NEEDED 依赖加载它们。ldd(1) 也错误地检测 PIE 与 DSO，且需要修复解析动态段，以避免尝试 dlopen() 它们。

赞助商：FreeBSD 基金会

### [mkimg(1) 中的 VHDX 支持](https://www.freebsd.org/status/report-2020-04-2020-06.html#VHDX-support-in-mkimg\(1\))

联系人：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

VHDX 是微软 VHD 虚拟硬盘文件格式的继任者。它将虚拟硬盘的最大容量提高到 64TB，并引入了更好处理电源/系统故障的功能。

VHDX 是第二代 Hyper-V 虚拟机所需的格式。

## [Ports](https://www.freebsd.org/status/report-2020-04-2020-06.html#Ports)

影响 Ports 的更改，无论是涉及大多数树木的广泛更改，还是单个 Port 本身的更改。

### [Bastille](https://www.freebsd.org/status/report-2020-04-2020-06.html#Bastille)

| 链接                                                         |
| ---------------------------------------------------------- |
| [Bastille GitHub](https://github.com/bastillebsd/bastille) |
| [Bastille 模板](https://gitlab.com/bastillebsd-templates)    |
| [Bastille 网站](https://bastillebsd.org/)                    |

联系人：Christer Edwards <<christer.edwards@gmail.com>>

Bastille 是一个开源系统，用于自动化在 FreeBSD 上部署和管理容器化应用程序。

Bastille 模板自动化容器设置，使你能够轻松根据需要复制容器。

Bastille 可在 Port `sysutils/bastille` 中使用。

#### 2020 年第二季度状态

在 2020 年第二季度，Bastille 向 GitHub 合并了一些令人兴奋的新功能。更改包括：

* 对新 `Bastillefile` 模板语法的实验性支持
* 添加了 `mount` 和 `umount` 子命令
* 添加了默认的 `Vagrantfile` 用于简单测试
* 对空容器的实验性支持
* 改进了 VNET DHCP 支持
* 错误输出的美化 bug 修复
* 扩展了配置文件文档
* 更新了 `bastille help` 输出
* 增加了 `(-f)` 强制销毁容器选项

`sysutils/bastille` 更新到 `0.6.20200414`（最新版本）。本季度新增的 Bastille 模板包括：

* Percona 数据库服务器
* Asterisk SIP 服务器
* dnsmasq DNS/DHCP 服务器（需要 VNET）
* 用于 poudriere 的 nginx pkg 服务器

所有这些工作都是在 COVID-19 隔离期间完成的。特别感谢在此期间做出贡献的所有人。

### [KDE 在 FreeBSD 上](https://www.freebsd.org/status/report-2020-04-2020-06.html#KDE-on-FreeBSD)

| 链接                                                         |
| ---------------------------------------------------------- |
| [KDE FreeBSD](https://freebsd.kde.org/)                    |
| [KDE Community FreeBSD](https://community.kde.org/FreeBSD) |

联系人：Adriaan de Groot <<kde@FreeBSD.org>>

*KDE 在 FreeBSD 上* 项目为 FreeBSD 打包了 KDE Community 生产的软件。这些软件包括完整的桌面环境 KDE Plasma、IDE [KDevelop](https://www.kdevelop.org/)、PIM 套件 [Kontact](https://kontact.kde.org/) 以及数百个可以在任何 FreeBSD 桌面计算机上使用的其他应用程序。

本季度情况非常特殊。虽然我们习惯了远程工作，通过互联网协作更新 Ports，但当整个世界封锁时，这种情况变得 *质* 上不同。与此同时，软件继续发布，因此本季度 kde@ 团队做了以下工作：

* 恢复了一个修复补丁，关闭了 X11 应用程序使用 ICE 库时保持的远程 TCP 连接。感谢 Colin Percival 报告此问题。这个补丁在某次 Port 更新中丢失。为了防止未来再次发生，该补丁已提交上游。PR 229772。
* 跟进 KDE 相邻软件，如 CMake、Cutelyst、Latte-dock 和 Nheko 的新版本。特别是 CMake，每次更新都需要大量工作，因为它是超过 2000 个 Port 的构建时依赖。
* 更新了 graphics/poppler 到最新的上游版本。Poppler 是许多文档查看应用程序的底层依赖，像 CMake 一样，需要追踪很多其他软件。Poppler 是共享在桌面@组中的多个软件堆栈（和“桌面环境”）之间的组件，kde@ 也参与其中。
* KDE Frameworks 按时发布，5.70 版本于 5 月中旬发布。
* KDE 应用程序 -- KDE 发布服务，提供库、应用程序和插件 -- 进行了一次大型发布，20.04.1 版本于 5 月中旬进入 Ports，20.04.2 的月度更新则在 6 月中旬发布。
* 为 KDE Plasma 增加了一些新的 Wayland 支持 -- 我们还未在 FreeBSD 上进行测试 -- 已经进行了适当的打包。
* 为 Qt 5.15 做了大量准备工作。许多 Port 已预先为这个新的、也是最后一个 LTS 版本的 Qt 5 打了补丁。更新本身尚未发布，仍在等待最后几项后续工作。

kde@ 团队特别感谢 Antoine 为许多 exp-runs 提供支持，感谢 mikael@ 的有用建议，swills@ 的耐心支持，以及 kai@ 处理 WebEngine 的工作。

接下来的 KDE 堆栈更新计划包括：CMake 3.18、Qt 5.15 LTS 和 KDE Frameworks 5.71。

### [在 FreeBSD 上的 Haskell](https://www.freebsd.org/status/report-2020-04-2020-06.html#Haskell-on-FreeBSD)

| 链接                                                            |
| ------------------------------------------------------------- |
| [Haskell 语言主页](http://www.haskell.org/)                       |
| [Port 开发仓库](https://github.com/freebsd/freebsd-ports-haskell) |

联系人：Gleb Popov <<haskell@FreeBSD.org>>

Haskell 是一种通用的严格类型的纯函数式语言。Haskell 在 FreeBSD 上的项目致力于提供最新的 Haskell 工具链以及用该语言编写的各种应用程序。

本季度带来了期待已久的 GHC 更新，现在版本为 8.8.3。随着编译器的更新，Haskell 构建系统前端 cabal-install 也升级到了 3.0.2.0。在此更新过程中，许多 Haskell Port 也进行了更新。

所有现有的 Haskell 应用程序 Port 都迁移到了 `USES=cabal`，它实现了类似 Go 的构建过程 - 所有依赖项都在构建过程中编译。因此，Haskell 库的 Port 已被弃用并删除。

升级 GHC 对一个人来说变得十分繁琐，因此在 FreeBSD 组织下创建了一个新的 GitHub 仓库 - [freebsd-ports-haskell](https://github.com/freebsd/freebsd-ports-haskell)。目前，正在为 `ghc-upgrade-810` 分支准备另一次 GHC 升级。欢迎任何贡献。

### [rtsx - 从 OpenBSD 移植 Realtek SD 卡读卡器驱动](https://www.freebsd.org/status/report-2020-04-2020-06.html#rtsxPorting-driver-for-Realtek-SD-card-reader-from-OpenBSD)

| 链接                                                                   |
| -------------------------------------------------------------------- |
| [rtsx](https://github.com/hlh-restart/rtsx)                          |
| [PR204521](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=204521) |

联系人：Henri Hennebert <<hlh@restart.be>>

已经从 OpenBSD 移植过来了 Realtek SD 卡读卡器的 rtsx 驱动。可以通过 Port [sysutils/rtsx-kmod](http://freshports.org/sysutils/rtsx-kmod/) 获取其开发快照。

从 2020 年 3 月到 5 月，在 Gary Jennejohn (gj@) 和 Jesper Schmitz Mouridsen (jsm@) 的帮助下，代码已经完成。一些修改也从 Linux 对应驱动中导入。

该驱动已在以下设备上成功测试：

* RTS5209 在 head 上（联想 ThinkPad L520）
* RTS5227 在 stable/11 和 releng/12.1 上（惠普 ProBook 430 g2, 联想 ThinkPad T450/T450s）
* RTS5229 在 releng/12.1 上（联想 IdeaPad 120S-14IAP）
* RTS522A 在 releng/12.1 和 head 上（英特尔 NUC8i5BE, 联想 ThinkPad P50s）
* RTS525A 在 releng/12.1 上（戴尔 Latitude E5570）
* RTL8411B 在 stable/12 上（宏碁 Aspire E 15 E5-576-77W6）

该驱动也应该适用于 Realtek RTS5249、RTL8402 和 RTL8411。欢迎对尚未测试的设备进行更多测试，这些设备可能需要更多调整。

PR204521 包含了完成代码的主要交流内容。

### [更新 Valgrind](https://www.freebsd.org/status/report-2020-04-2020-06.html#Valgrind-updates)

| 链接                                                |
| ------------------------------------------------- |
| [Valgrind 补丁](https://reviews.freebsd.org/D25452) |

联系人：Paul Floyd <<paulf@free.fr>>\
联系人：Kyle Evans <<kevans@FreeBSD.org>>

已经完成了大量工作，将 FreeBSD 支持移植到 Valgrind 3.17.0，并解决了许多测试套件失败的问题。目前，几乎所有的回归测试都在 amd64 上通过。这相比于当前状态是一次重大改进，因为现有的 Valgrind 版本已经过时，缺少重要的功能。后续工作旨在使 FreeBSD 成为 Valgrind 官方支持的目标平台。

Port devel/valgrind-devel 正在更新，以指向新的工作成果。

## [文档](https://www.freebsd.org/status/report-2020-04-2020-06.html#Documentation)

文档树、手册页或外部书籍/文档中的重要变更。

### [在 Weblate 上翻译 FreeBSD](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreeBSD-Translations-on-Weblate)

| 链接                                                                               |
| -------------------------------------------------------------------------------- |
| [在 Weblate 上翻译 FreeBSD 的 wiki](https://wiki.freebsd.org/DocTranslationOnWeblate) |
| [FreeBSD Weblate 实例](https://translate-dev.freebsd.org/)                         |

联系人：Danilo G. Baio <<dbaio@FreeBSD.org>>\
联系人：Edson Brandi <<ebrandi@FreeBSD.org>>

本季度改善了 FreeBSD 文档中的 RTL（从右到左）语言渲染问题。我们在第一个 RTL 语言（fa\_IR）加入翻译工作后遇到了这个问题。

我们期待着更多的语言和翻译者加入该项目。

#### 2020 第二季度状态

* **10** 种语言（无新语言）
* **80** 名注册用户（自上季度以来新增 33 名用户）

**语言**

* 简体中文 (zh\_CN)
* 繁体中文 (zh\_TW)
* 法语 (fr\_FR)
* 德语 (de\_DE)
* 意大利语 (it\_IT)
* 挪威语 (nb\_NO)
* 波斯语 (fa\_IR)
* 葡萄牙语 (pt\_BR)
* 西班牙语 (es\_ES)
* 土耳其语 (tr-TR)

感谢所有贡献者，无论是翻译还是审校文档。请大家帮助在本地用户组中推广这一努力，我们总是需要更多志愿者。

## [杂项](https://www.freebsd.org/status/report-2020-04-2020-06.html#Miscellaneous)

无法分类的项目。

### [FreshPorts](https://www.freebsd.org/status/report-2020-04-2020-06.html#FreshPorts)

| 链接                                           |
| -------------------------------------------- |
| [FreshPorts](http://freshports.org/)         |
| [FreshPorts 博客](http://news.freshports.org/) |

联系人：Dan Langille <<dan@langille.org>>

FreshPorts 及其姊妹站点 FreshSource 已经报告了 FreeBSD 的提交工作 20 年。他们覆盖了所有的提交，而不仅仅是 Port。

FreshPorts 跟踪提交并从 Port Makefile 中提取数据，创建一个对 Ports 开发者和 Ports 用户都很有用的信息数据库。

例如，<https://www.freshports.org/security/acme.sh/> 显示了该 Port 的历史记录，从 2017 年 5 月开始。

#### git

git 项目的工作从 [九月](https://news.freshports.org/?s=git\&searchsubmit=) 开始。由于一段时间的忽视，工作从 6 月中旬开始，创建了新的专用于 git 的 Jail，用于提交进入（gitdev 提交处理）和网站。

Serhii (Sergey) Kozlov [创建了一个脚本](https://github.com/FreshPorts/git_proc_commit/blob/master/git-to-freshports/git-to-freshports.py)，将 GIT 提交记录转换为 FreshPorts 可以处理的 XML 格式。这是该项目的一大进步。

接下来的步骤包括：

* 将该脚本整合进 FreshPorts 的自动化处理流程
* 迁移到 FreshPorts 的新测试和阶段版本
* 进行测试
* 为生产环境做准备

**需要帮助**

git 项目离完成不远了，我需要帮助来：

* 审核代码
* 监控 devgit 网站上的提交
* 捕捉遗漏的内容

感谢大家的支持。

#### 软件包

FreshPorts 现在显示来自仓库源的可用软件包版本。这涉及了所有主要层（例如 FreeBSD:12:amd64）和所有次要层（例如 FreeBSD:13:powerpc64）。这帮助用户了解他们可以期待哪些版本以及仓库最后一次构建的时间。

#### 依赖行

有些事情通过复制/粘贴做起来最方便。如果你正在处理 Port 的 Makefile 并需要添加新的依赖项，FreshPorts 会显示该 Port 的依赖行。例如：

```sh
acme.sh>0:security/acme.sh
```

该功能同样适用于库。

最近，Python Port 已调整为显示：

```sh
${PYTHON_PKGNAMEPREFIX}virtualenv>0:devel/py-virtualenv
```

而不是：

```sh
py37-virtualenv>0:devel/py-virtualenv
```

你可以在 [问题 #73](https://github.com/FreshPorts/freshports/issues/73) 中阅读更多关于此更改的内容。

#### 监视我维护的 Port

[搜索页面](https://www.freshports.org/search.php) 长期以来就有一个“Ports I Maintain”按钮（如果你已登录）。最近，这一功能扩展为一个新的自动化监视列表选项：“Watch ports I maintain”。

这个 [报告订阅](https://www.freshports.org/report-subscriptions.php) 将会通知你所维护的 Port 的任何提交。你在 FreshPorts 上的电子邮件地址必须与该 Port 的 MAINTAINER 字段中的值匹配。这将始终是每日报告。

不时地，会发生一些影响你 Port 的基础设施变更。此功能确保你能及时了解这些变更。

#### Repology 链接

用户请求了 Repology 链接。这使你可以查看该 Port 在其他系统的仓库中的版本。每个 Port 页面上都会显示一个指向 repology.org 的链接。

#### 进一步阅读

基于 [你不知道的 FreshPorts 功能](https://news.freshports.org/2019/09/03/things-you-didnt-know-freshports-can-do/)

FreshPorts 有许多功能，包括搜索 Makefile 和 `pkg-plist`。以下是最近的一篇博客文章中的一些内容：

* 提供依赖行示例。例如：p5-XML-RSS>0:textproc/p5-XML-RSS
* 显示 Port 的依赖列表
* 显示依赖该 Port 的 Port 列表
* 查看默认配置选项
* 显示安装特定文件的包（例如 bin/unzip）
* 查找某人维护的 Port
* 查找包含 bunzip 引用的 Makefile
* 搜索结果可以是包含 Port foo/bar 的纯文本列表
* 搜索页面上的最大努力复选框无效
* 提交者可以在提交后收到正常性测试失败的通知
* 基于 SVN 修订号查找提交，举例：<https://www.freshports.org/commit.php?revision=352332>

#### 需要 JavaScript 帮助

我们 [最近更新](https://github.com/FreshPorts/freshports/commit/f620270161dd7818272dfebacacaaf26df5f37e6) 了一些过时的 JavaScript 模块。此更新破坏了我们基于 JavaScript 的图表功能 [JavaScript 基于的图表](https://www.freshports.org/graphs2.php)。我们需要一些帮助来修复它。起点列表已列出在该 URL 中。如果你需要一个可操作的网站来玩耍，请通过 SSH 公钥与我联系。

赞助商：由 iXsystems 提供硬件

### [在 Intel 上使用 bhyve 进行 PCI 直通，并支持 OpenBSD 虚拟机](https://www.freebsd.org/status/report-2020-04-2020-06.html#PCI-passthrough-with-bhyve-on-Intel-and-for-OpenBSD-guests)

| 链接                                                                             |
| ------------------------------------------------------------------------------ |
| [bhyve Intel 错误报告](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=229852)   |
| [bhyve OpenBSD 错误报告](https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=245392) |
| [bhyve PCI 直通（FreeBSD wiki 文章）](https://wiki.freebsd.org/bhyve/pci_passthru)   |

联系人：Anatoli <<me@anatoli.ws>>\
联系人：Callum <<callum@aitchison.org>>\
联系人：Peter Grehan <<grehan@freebsd.org>>

bhyve(8) 是一款虚拟机监控程序，支持在虚拟机中运行多种虚拟机操作系统。bhyve(8) 包括对 PCI 设备直通的支持，这是一种将物理机的 PCI 设备传递给虚拟机以供其独占控制和使用的技术。

多年来，bhyve 中的 PCI 直通（ppt）在某些 Intel 系统和 OpenBSD 虚拟机上无法正常工作，原因是存在两个错误。第一个错误是在使用 PPT 时，FreeBSD 物理机在启动 bhyve 时崩溃，特别是当 Intel 处理器（包括大多数 Skylake 及更新的 Intel 处理器）具有两个 VT-d 转换单元（IOMMU）时。

第二个错误是导致 OpenBSD 虚拟机无法正确处理中断。结果，运行在 bhyve 上的 OpenBSD 虚拟机无法使用从物理机传递给它们的任何 PCI 设备。

在过去的两个月中，第二个错误被识别并修复，并且两者都被回溯到 12.1-RELEASE（p7）。因此，现在可以在生产就绪的 RELEASE 版本中完全利用 bhyve 的 PCI 直通（ppt）功能。

ppt 的最常见用例是将网络适配器传递给虚拟机，以便虚拟机能够完全控制它，但你也可以传递 USB 设备（包括外部硬盘）。不过，请注意，VGA 和 GPU 设备的直通仍不受支持（更多细节请参见第三个链接）。

ppt 的一个特别有趣的用例是将 OpenBSD 虚拟机用作防火墙和路由器，提供 FreeBSD 服务器的网络连接。

使用 ppt，你可以在单台服务器内部实现这一目标。你可以将连接到互联网的网络适配器传递给 OpenBSD 虚拟机，让它完全控制该适配器。经过流量过滤后，它可以通过虚拟网络接口将数据包传递给其他虚拟机和物理机。

待网络适配器被传递，FreeBSD 物理机不仅看不到它，因此不会处理网络流量，它甚至不需要初始化该适配器（例如，对于 WiFi 卡，由虚拟机加载固件）。

简单来说，物理机只会将设备中断传递给虚拟机，原样从硬件中来。所有与设备管理相关的操作都发生在虚拟机内部，因此不会存在网络流量利用物理机网络栈中的问题，从而导致物理机崩溃或以其他方式异常的风险。

### [SageMath](https://www.freebsd.org/status/report-2020-04-2020-06.html#SageMath)

| 链接                                       |
| ---------------------------------------- |
| [SageMath 官网](https://www.sagemath.org/) |

联系人：Thierry Thomas <<thierry@FreeBSD.org>>

SageMath 是一个免费的开源数学软件系统，采用 GPL 许可。它建立在许多现有的开源包之上：NumPy、SciPy、matplotlib、Sympy、Maxima、GAP、FLINT、R 等。通过 SageMath，你可以通过统一的基于 Python 的语言或直接通过接口或包装器来访问这些工具的强大功能。

其目标是创建一个可行的、免费的开源替代品，用于替代 Magma、Maple、Mathematica 和 Matlab。

这是一个复杂的 Port，具有许多依赖项，且已经中断了一段时间。上游正在努力简化其打包过程，许多先前捆绑的应用程序现在可以通过外部包进行替换。

如果你感兴趣，欢迎创建一个维护团队来：

* 维护一些依赖项；
* 维护 SageMath 本身，并准备下一个版本（9.2 即将发布！）。

## [第三方项目](https://www.freebsd.org/status/report-2020-04-2020-06.html#Third-Party-Projects)

许多项目建立在 FreeBSD 基础上，或将 FreeBSD 的组件融入到他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣，我们有时会在我们的季度报告中包含这些项目提交的简短更新。FreeBSD 项目对于这些提交中的任何声明的准确性或真实性不做任何陈述。

### [chaifi - 简化连接公共 WiFi 网络的工具](https://www.freebsd.org/status/report-2020-04-2020-06.html#chaifia-tool-to-simplify-joining-public-WiFi-networks)

| 链接                                          |
| ------------------------------------------- |
| [chaifi](https://github.com/gonzoua/chaifi) |

联系人：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

chaifi 是一款 TUI（文本用户界面）工具，旨在简化在咖啡店或图书馆等地方连接公共 WiFi 网络的过程。它通过交互式对话框替代了扫描和手动编辑 `wpa_supplicant.conf` 的过程。该工具绝不是主要桌面环境中功能齐全的网络管理器的替代品。不过，如果你在控制台工作或使用平铺窗口管理器，它可能会为你节省一些时间（在最坏的情况下可能节省几分钟）。

### [MixerTUI](https://www.freebsd.org/status/report-2020-04-2020-06.html#MixerTUI)

| 链接                                            |
| --------------------------------------------- |
| [mixertui](https://gitlab.com/alfix/mixertui) |

联系人：Alfonso Sabato Siciliano <<alfonso.siciliano@email.com>>

MixerTUI 是一个音量混音器，具有终端用户界面，构建于 FreeBSD 声音系统之上。它可以显示当前的声音驱动程序配置，并选择音频设备：获取设备信息、调整音量或将其设置为默认设备。最后一个功能可以轻松切换音频设备，比如从笔记本电脑和 HDMI、耳机和扬声器之间切换等。 MixerTUI 可以通过 Port audio/mixertui 安装。

感谢 FreeBSD 社区提供的建议、反馈和修补程序，帮助改进此项目。

### [Potluck - pot 的 flavor 和镜像库](https://www.freebsd.org/status/report-2020-04-2020-06.html#PotluckFlavour-&-Image-Repository-for-pot)

| 链接                                                      |
| ------------------------------------------------------- |
| [Potluck 仓库与项目](https://potluck.honeyguide.net/)        |
| [Potluck 在 GitHub 上](https://github.com/hny-gd/potluck) |
| [pot 项目](https://pot.pizzamig.dev/)                     |

联系人：Stephan Lichtenauer <<sl@honeyguide.eu>>

pot 是一款 Jail 管理工具，[也支持通过 nomad 进行编排](https://www.freebsd.org/news/status/report-2020-01-2020-03.html#pot-and-the-nomad-pot-driver)。

Potluck 旨在成为 FreeBSD 和 pot 的 Dockerhub：一个 pot flavor 和完整镜像的库，可供 pot 使用。

与手动配置相比，这应简化许多包含多个包和 Port 的复杂软件的设置：Potluck 旨在提供一个内容库，作为现有基础设施（如 pkg）之上的额外抽象层，而这些正是 pot 所能提供的。

“pot flavor”文件存储在 [Github](https://github.com/hny-gd/potluck) 上，并被传送到 Jenkins 实例中。在 [Potluck 仓库](https://potluck.honeyguide.net/) 中，针对每个 flavor 提供了详细描述以及可以由 pot 导入的现成镜像。

初步项目已搭建完成，并创建了三个简单的 flavor，以及 [一个完整的 Jitsi Meet 实例在 Jail 中运行](https://potluck.honeyguide.net/blog/jitsi-meet-nomad/)，作为概念验证，旨在通过几个简单的命令在几分钟内启动一个完全功能的视频会议系统。

由于目前仅设置和实现了初始版本，因此非常欢迎提供反馈、测试，以及额外有用的 flavor！
