FreeBSD 2021 年第三季度状态报告
本报告涉及了 2021 年 7 月至 9 月期间与 FreeBSD 相关的项目,并且是 2021 年计划的四份报告中的第三份,共包含 42 项条目。
2021 年第三季度在许多不同领域都非常活跃,因此报告涉及了一些有趣的工作,包括但不限于启动性能、编译时分析、洞穿支持、各种驱动程序、ZFS raidz 扩展、音频混音器更新等。
遗憾的是,状态报告稍有延迟,但我们希望“迟到总比不到好”这一格言在这里也能适用。
此致, Daniel Ebdrup Jensen,代表状态团队。
FreeBSD 团队报告
来自各个官方和半官方团队的条目,详情请见 管理页面。
FreeBSD 基金会
链接:FreeBSD 基金会 链接: https://www.FreeBSDfoundation.org
技术路线图 链接: https://freebsdfoundation.org/blog/technology-roadmap/
捐赠 链接: https://www.FreeBSDfoundation.org/donate/
基金会合作伙伴计划 链接: https://www.FreeBSDfoundation.org/FreeBSD-foundation-partnership-program
FreeBSD Journal 链接: https://www.FreeBSDfoundation.org/journal/
基金会新闻和事件 链接: https://www.FreeBSDfoundation.org/news-and-events/
联系人:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球 FreeBSD 项目和社区。来自个人和企业的捐赠被用于赞助和管理软件开发项目、会议和开发者峰会。我们还为 FreeBSD 贡献者提供差旅补助,购买和支持硬件以改进和维护 FreeBSD 基础设施,并提供资源以增强安全性、质量保证和发布工程工作。我们出版宣传材料以推广、教育和宣传 FreeBSD 项目,促进商业供应商与 FreeBSD 开发者之间的合作,最后,在执行合同、许可协议和其他法律安排时代表 FreeBSD 项目,这些安排需要一个被认可的法律实体。
以下是我们上个季度为 FreeBSD 提供支持的亮点:
筹款工作
上个季度的筹款工作并不像我们希望的那样显著。不过,夏季月份大家普遍度假,这使得我们的筹款请求在管理链中的审批变得更加困难。
到目前为止,我们已经为我们的 200 万美元支出预算筹集了 18 万美元。为什么我们需要这么多钱呢?嗯,去年我们决定对 FreeBSD 做出更重要的软件贡献。为此,我们必须扩展我们的团队。我们基于从商业用户和市场趋势中获得的输入,制定了 技术路线图。根据路线图,我们确定了需要填补的职位。
今年,我们已经聘请了三名全职软件开发人员、一名全职 ARM 内核开发人员和一名项目经理。我们还全职赞助 WiFi 工作和其他一些帮助 FreeBSD 在桌面端发展的项目。你可以在本报告中的其他条目中阅读到我们如何吸引新用户和贡献者加入项目的努力。
我们的增长不仅体现在技术团队中,还体现在我们的宣传团队。我们聘请了一名市场协调员和技术作家,以提供更多教育和信息内容。你将在下面的宣传与教育部分看到我们为推广 FreeBSD、提供社区参与、教育机会以及帮助入门的有用内容所做的所有工作。
你将通过本报告中的各个条目了解到我们如何使用你的捐赠。
我们热衷于支持你们,FreeBSD 社区,但没有你们的财务支持,我们无法做到这一点。
请考虑捐赠,帮助我们在 2021 年继续和增加对 FreeBSD 的支持:https://www.FreeBSDfoundation.org/donate/。
我们还有合作伙伴计划,旨在为我们的大型商业捐赠者提供更多福利。请访问 https://www.FreeBSDfoundation.org/FreeBSD-foundation-partnership-program/ 获取更多信息,并与你的公司分享!
改进操作系统
在第三季度,基金会工作人员和赞助项目的接受者提交了 420 个源代码树(src tree)更改、24 个 Ports(ports tree)更改和 11 个文档树(doc tree)更改。这些更改分别占源代码、Port 和文档提交的 38%、48% 和 16%,并且这些提交都标识了赞助者。
你可以在每季度报告的独立条目中阅读有关基金会赞助项目的详细信息:
基本系统 OpenSSH 更新
msdosfs_rename VOP 修复
打洞(Hole Punching)
改进的 amd64 UEFI 启动
英特尔无线驱动程序支持
LLDB 调试器改进
Microchip LAN743x mgb(4) 设备驱动程序
OpenZFS RAIDZ 扩展更新
在 WireGuard 中使用 OCF
FreeBSD 上的 syzkaller
基金会赞助的 arm64 工作:
支持在 Arm Armv8-A AEM 模拟器上启动 FreeBSD
在 arm64 上向 libmd(4) 添加 sha256 指令支持
支持 arm64 上的 RAS、PAC 和 BTI 的初步工作
持续集成与质量保证
基金会提供了一名全职工作人员,并赞助项目以改善 FreeBSD 项目的持续集成、自动化测试和整体质量保证工作。
有关详细信息,请参见独立的持续集成条目。
支持 FreeBSD 基础设施
基金会为项目提供硬件和支持。在上个季度,我们继续支持 Sentex 的测试集群,购买了一些需要的硬盘和项目邮件的垃圾邮件过滤软件。我们还为 clusteradm 设置了一个新的、更高效的硬件请求/购买流程。
合作伙伴关系和商业用户支持
我们与企业用户进行了虚拟会议,并在第三季度末开始再次进行一些面对面的会议。会议的目标是促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司进行了会谈,讨论他们的需求,并将这些信息与项目分享。
FreeBSD 宣传与教育
我们的许多工作都专注于项目的宣传。这可能涉及突出展示有趣的 FreeBSD 工作、制作宣传资料、参加活动或进行演讲。我们制作的宣传资料旨在教授 FreeBSD 基础知识,帮助用户更轻松地走上采用或贡献的道路。除了参加和演讲活动,我们还鼓励并帮助社区成员组织自己的 FreeBSD 活动、进行演讲或在 FreeBSD 展台上担任工作人员。
FreeBSD 基金会赞助了全球范围内的许多会议、活动和峰会。这些活动可以是 BSD 相关的、开源的,或是面向弱势群体的技术活动。我们支持 FreeBSD 相关的活动,为分享知识、合作开展项目、促进开发者和商业用户之间的合作提供了一个平台。这一切都有助于提供一个健康的生态系统。我们还支持非 FreeBSD 活动,旨在推广和提高 FreeBSD 的知名度,增加其在不同应用中的使用,并招募更多的贡献者加入项目。我们终于在 9 月底参加了首次的面对面会议——开源峰会。同时,我们继续参加虚拟活动。除了参与和规划虚拟活动,我们还在不断开展新的培训项目,并更新我们的 操作指南,以促进更多人尝试 FreeBSD。
以下是我们上个季度的一些宣传与教育工作:
作为行业合作伙伴参加了 2021 年 7 月 14-16 日的 USENIX ATC 和 OSD
作为行业合作伙伴参加了 2021 年 8 月 11-13 日的 USENIX 安全大会
举办了 FreeBSD 日:如何使用 Git 跟踪 FreeBSD
赞助并在 2021 年 8 月 14-15 日的保加利亚索非亚 OpenFest 2020 上进行演讲
开始规划 2021 年 11 月 18-19 日在线举办的 FreeBSD 供应商峰会
在 2021 年 8 月 13-16 日于 APNIC 举行的会议上进行了演讲
作为非营利组织为 OSI 的 POSI 2021 提供了实物赞助,日期为 2021 年 9 月 16 日
以银级赞助商身份赞助了 EuroBSDcon,活动于 2021 年 9 月 17-19 日举行
在 2021 年 9 月 27-30 日于华盛顿州西雅图举行的开源峰会作报告
承诺为 OpenZFS 峰会提供铜级赞助
新的视频操作指南:安装 HelloSystem 和 安装 GhostBSD
新的快速入门指南:在 FreeBSD 上打印
承诺成为 All Things Open 的媒体赞助商
我们通过出版专业制作的《FreeBSD Journal》帮助全球宣传 FreeBSD。如前所述,FreeBSD Journal 现在是免费的出版物。了解更多并访问最新的期刊,见 https://www.FreeBSDfoundation.org/journal/。
你可以在 https://www.FreeBSDfoundation.org/news-and-events/ 查找更多关于我们参加的活动和即将举行的活动的信息。
法律事务/FreeBSD 知识产权
基金会持有 FreeBSD 商标,我们有责任保护这些商标。我们还为核心团队提供法律支持,调查可能出现的问题。
访问 https://www.FreeBSDfoundation.org 了解更多关于我们如何支持 FreeBSD 以及我们如何为你提供帮助的信息!
FreeBSD 发布工程团队
链接:FreeBSD 12.3-RELEASE 时间表 链接: https://www.freebsd.org/releases/12.3R/schedule/
FreeBSD 发布版 链接: https://download.freebsd.org/ftp/releases/ISO-IMAGES/
FreeBSD 开发快照 链接: https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/
联系方式:FreeBSD 发布工程团队, <re@FreeBSD.org>
FreeBSD 发布工程团队负责设定和发布 FreeBSD 官方项目版本的发布计划,宣布代码冻结并维护相应的分支等任务。
在第三季度,团队发布了多个开发快照版本,涉及了 main、stable/13 和 stable/12 分支。自从从 Subversion 转换到 Git 之后,团队还对各种与发布相关的工具进行了更多改进。此外,团队还草拟了即将发布的 12.3-RELEASE 版本的计划。
赞助商:Rubicon Communications, LLC(“Netgate”)
赞助商:FreeBSD 基金会
集群管理团队
链接:集群管理团队成员 链接: https://www.freebsd.org/administration/#t-clusteradm
联系方式:集群管理团队 <clusteradm@FreeBSD.org>
FreeBSD 集群管理团队成员负责管理项目依赖的机器,以同步其分布式工作和通信。在本季度,团队完成了以下工作:
修复了 www.FreeBSD.org 镜像同步源
改进了 {download,ftp,pkg}.FreeBSD.org 的 GeoDNS
增加了 IPv6 支持
优化了亚洲地区的镜像选择
完成了位于日本的新镜像站点的安装,赞助商为 Broadband Tower, Inc.
完整的镜像站点(ftp、pkg、git、doc、dns 等)
该镜像站点的网络和机器资源由位于日本东京的 Broadband Tower, Inc. 的云计算和 SDN 实验室慷慨赞助,提供 300+ Gbps 的国际 IP 传输带宽
改进了用于 CI 集群的工件服务器的保留脚本,提供最新的工件以及用于比较的部分旧工件(空间允许的情况下)
日常集群管理工作持续进行
更换故障磁盘
监控 pkgsync
进行中的工作:
将 pkg-master.nyi 转移到新硬件
改进包构建基础设施
审查服务 jail 和服务管理员的操作
设置 powerpc pkgbuilder/ref/universal 机器
将公共集群服务从 12.2-STABLE 升级到 13.0-STABLE
与 doceng@ 合作,改进 https://www.freebsd.org 和 https://docs.freebsd.org
改进 web 服务架构
改进集群备份计划
持续集成
链接:FreeBSD Jenkins 实例 链接: https://ci.FreeBSD.org
FreeBSD CI 工件档案 链接: https://artifact.ci.FreeBSD.org
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 + dev-ci 邮件列表 链接:https://lists.freebsd.org/subscription/dev-ci
联系方式:Jenkins 管理员 <jenkins-admin@FreeBSD.org>
联系方式:許立文 <lwhsu@FreeBSD.org>
联系方式:freebsd-testing 邮件列表
联系方式:EFNet 上的 IRC #freebsd-ci 频道
FreeBSD CI 团队负责维护 FreeBSD 项目的持续集成系统。CI 系统检查已提交的更改是否可以成功构建,然后对新构建的结果进行各种测试和分析。来自这些构建的工件被存档在 工件服务器 中,以便进一步的测试和调试需求。CI 团队成员会检查失败的构建和不稳定的测试,并与该领域的专家合作修复代码或调整测试基础设施。
在 2021 年第三季度,我们继续与项目中的贡献者和开发者合作,满足他们的测试需求,并与外部项目和公司持续合作,以改进他们的产品和 FreeBSD。
重要更改:
新作业:
已退役作业:
根据 FreeBSD 11.4 生命周期结束,stable/11 分支的作业已于 9 月 30 日后被移除
进行中的工作和待办事项
设计并实现提交前 CI 构建和测试(支持 工作流工作组)
设计并实现使用 CI 集群构建发布工件,类似发布工程的做法
在 这里 收集并整理 CI 任务和想法
在 FreeBSD-ci 仓库 中测试并合并拉取请求
简化 CI/测试环境设置程序,便于贡献者和开发者使用
设置 CI 阶段环境并将实验性作业放置其中
设置虚拟机来宾的公共网络访问,用于运行测试
实施使用裸机硬件运行测试套件
添加针对 -CURRENT 构建的 drm Port 测试
计划运行 ztest 测试
添加更多与外部工具链相关的作业
改进硬件实验室的成熟度并添加更多待测试硬件
帮助更多软件在其 CI 流水线中获得 FreeBSD 支持(Wiki 页面:3rdPartySoftwareCI, HostedCI)
与托管 CI 提供商合作,提升 FreeBSD 支持
请查看与 freebsd-testing@ 相关的票据,了解更多的工作进展信息,并欢迎加入我们的工作!
赞助商:FreeBSD 基金会
Ports
链接:
关于 FreeBSD Ports 链接: https://www.FreeBSD.org/ports/
贡献 Ports 链接: https://docs.freebsd.org/en/articles/contributing/ports-contributing/
FreeBSD Ports 监控 链接: http://portsmon.freebsd.org/
Ports 管理团队 链接: https://www.freebsd.org/portmgr/
Ports Tarball 链接: http://ftp.freebsd.org/pub/FreeBSD/ports/ports/
联系方式:René Ladan <portmgr-secretary@FreeBSD.org>
联系方式:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
Ports 管理团队负责监督 Ports 的整体方向、构建软件包以及人员事务。以下是上个季度的工作进展。
根据 FreshPorts,目前 Ports 中共有 46,500 个 Port。当前 Ports 的开放 PR 数量为 2,588,其中 608 个未分配。上个季度,“main”分支有 148 名提交者进行了 9,833 次提交,而季度分支则有 54 名提交者进行了 743 次提交。与 2021 年第二季度相比,活动基本保持不变,PR 数量略有增加,但季度分支的提交次数有所增加。
在 2021 年第三季度,我们欢迎了 Daniel Engberg (diizzy@) 和 Yasuhiro Kimura (yasu@),同时也告别了 culot@ 和 grog@,他们的提交权限已被保管。
引入了两个新的使用案例:angr 用于帮助测试与 Python 相关的 Port,mlt 用于依赖 mlt,一个电视广播的多媒体框架。Ruby 版本更新包括 2.6、2.7 和 3.0 系列的次要更新。
“大”软件包也进行了更新:pkg 更新到 1.17.2,Firefox 更新到 93.0,Chromium 更新到 92.0.4515.159。
与往常一样,antoine@ 执行了 exp-runs,但仅记录了 7 月的。共进行了 5 次 exp-runs,测试了为 Linux 添加 CLOCK_*_COARSE 兼容性定义,并测试了 Port 更新。
此外,rene@ 在 EuroBSDCon 2021 上进行了名为“portmgr: behind the scenes”的演讲,介绍了 portmgr 的形成过程及其日常活动。
文档工程团队
链接:FreeBSD 文档项目 链接: https://www.freebsd.org/docproj/
FreeBSD 文档项目新贡献者指南 链接: https://docs.freebsd.org/en/books/fdp-primer/
文档工程团队 链接: https://www.freebsd.org/administration/#t-doceng
联系方式:FreeBSD Doceng 团队 <doceng@FreeBSD.org>
doceng@ 团队负责处理与 FreeBSD 文档项目相关的一些元项目问题;更多信息请参阅 FreeBSD Doceng 团队章程。
在上季度,Philip Paeps (philip@) 和許立文 (lwhsu@) 获得了文档提交权限,他们现在持有全部类型的提交权限。Ed Maste (emaste@),作为一位已具备源代码提交权限的成员,也获得了文档提交权限。我们还告别了 Murray Stokely (murray@)、Gábor Kövesdán (gabor@)、Warren Block (wblock@) 和 Sevan Janiyan (sevan@)。Gábor Kövesdán (gabor@) 和 Warren Block (wblock@) 现在是 doceng@ 团队的前成员,我们感谢他们多年来的奉献。
隐性(普遍)批准已在 提交者指南 中记录。虽然这并不涵盖所有情况,但 doceng@ 鼓励所有 FreeBSD 提交者(来自 ports 和 src)为文档做出贡献。
所有 ports/packages 中的 misc/freebsd-doc-* 均已更新,包含了 FreeBSD 文档项目的完整文档集,如手册、FAQ、文章等。
FreeBSD 网站改版 - WebApps 工作组
联系方式:Sergio Carlavilla <carlavilla@FreeBSD.org>
工作组负责创建新的 FreeBSD 文档门户,并重新设计 FreeBSD 主网站及其组件。FreeBSD 开发者可以在 FreeBSD Slack 渠道 #wg-www21 跟进并加入该工作组。该工作将分为四个阶段:
文档门户的重新设计 创建新的设计,响应式并带有全局搜索功能。(进行中,几乎完成)
网站上的手册页面重新设计 使用 mandoc 生成 HTML 页面脚本。(进行中)
网站上的 Ports 页面重新设计 使用 Port 脚本创建应用程序门户。(尚未开始)
FreeBSD 主网站的重新设计 新设计,响应式,暗黑主题。(尚未开始)
项目
跨多个类别的项目,从内核和用户空间到 Ports 或外部项目。
启动性能改进
链接:Wiki 页面 链接: https://wiki.freebsd.org/BootTime
操作系统启动时间对比 链接: https://www.daemonology.net/blog/2021-08-12-EC2-boot-time-benchmarking.html
联系方式:Colin Percival <cperciva@FreeBSD.org>
Colin Percival 正在协调一项加速 FreeBSD 启动过程的工作。为了进行基准测试,他使用 EC2 c5.xlarge 实例作为参考平台,并测量虚拟机从进入 EC2“运行”状态到可以 SSH 进入实例的时间。
该工作始于 2017 年,带来了名为“FreeBSD 内核启动性能分析”的会议报告,并迅速取得了约 4850 毫秒的改进(以大约 30 秒为起点)。
自 6 月以来,启动过程又减少了大约 9790 毫秒,将启动时间缩短到约 15 秒。虽然取得了一些进展,但仍有许多工作要做;特别是,尽管加载程序和内核已被分析,但 Colin 使用的 TSLOG 系统当前不支持用户空间的性能分析。
问题将在 wiki 页面上列出并进行更新;该页面还提供了性能分析的操作说明。用户被鼓励在自己的系统上进行启动过程分析,以便他们可以发现一些在 Colin 测试的系统上无法显示的延迟。
这项工作得到了 Colin 的 FreeBSD/EC2 Patreon 支持。
赞助商:https://www.patreon.com/cperciva
Git 迁移工作组
链接:FreeBSD 开发 Git Wiki 链接: https://wiki.freebsd.org/Git
Git 迁移 Wiki 链接: https://wiki.freebsd.org/GitTransition
文档 Git 仓库 链接: https://cgit.FreeBSD.org/doc
Ports Git 仓库 链接: https://cgit.FreeBSD.org/ports
源代码 Git 仓库 链接: https://cgit.FreeBSD.org/src
提交者指南 Git 入门 链接: https://docs.freebsd.org/en/articles/committers-guide/#git-primer
手册使用 Git 附录 链接: https://docs.freebsd.org/en/books/handbook/mirrors/#git
树之游戏 链接: http://gameoftrees.org/
gitup 链接: https://github.com/johnmehr/gitup
联系方式:許立文 <lwhsu@FreeBSD.org>
联系方式:Warner Losh <imp@FreeBSD.org>
联系方式:Ed Maste <emaste@FreeBSD.org>
联系方式:FreeBSD-git 邮件列表
联系方式:EFnet 上的 #gitcvt 频道
随着 2021 年三季度的结束,我们即将迎来 doc 和 src 仓库从 Subversion 迁移到 Git 的一周年纪念。2021Q4 分支的 Ports 已创建,这是使用 Git 创建的第三个季度分支。
在 2021 年第三季度,随着问题的发现,仓库钩子进行了优化,并且在提交者指南中更新了若干仍然涉及 Subversion 的参考。工作组继续跟踪两个许可兼容的 Git 工具:Gitup 和 Game of Trees。Gitup 是一个小巧、无依赖的工具,用于克隆和更新 Git 仓库。它仅用于保持本地树的最新状态,不支持本地提交。Game of Trees 是一个与 Git 仓库兼容的版本控制客户端,提供与 Git 不同的用户界面和工作流。它并不是 Git 的替代品,而是可以用于开发在 Git 仓库中维护的软件。
Gitup 和 Game of Trees 目前作为 Ports 和软件包提供。未来的工作将评估它们是否适合成为基本系统的一部分。
剩余的工作包括继续优化手册中的 Git 文档,提交新的和更新的仓库钩子以管理分支内容和提交邮件,并调查使用 CI 集群构建发布工件的预提交钩子。接下来的工作组将专注于优化 Git 工作流,并计划于 10 月中旬举行第一次会议。
赞助商:FreeBSD 基金会(部分赞助)
改进 LLDB 调试器
链接:
Moritz 系统项目概述 链接: https://www.moritz.systems/blog/freebsd-kgdb-support-in-lldb/
进展报告 1 链接: https://www.moritz.systems/blog/improving-gdb-protocol-compatibility-in-lldb/
进展报告 2 链接: https://www.moritz.systems/blog/improving-gdb-register-model-compatibility-in-lldb/
Git 仓库 链接: https://github.com/moritz-systems/llvm-project
联系方式:Kamil Rytarowski kamil@moritz.systems
联系方式:Michał Górny mgorny@moritz.systems
根据上游所述,“LLDB 是下一代高性能调试器。它作为一组可重用组件构建,充分利用了 LLVM 项目中的现有库,如 Clang 表达式解析器和 LLVM 反汇编器。”
FreeBSD 将 LLDB 内置在基本系统中。目前,与 GNU GDB 调试器相比,它存在一些限制,还不能完全替代 GDB。该项目从 2021 年 7 月至 2022 年 1 月,旨在使 LLDB 适用于调试 FreeBSD 内核。
目前的工作集中在改善 LLDB 与其他实现 GDB 远程协议的服务器之间的兼容性。修复了多个 bug,解决了 LLDB 在与 GNU GDB 的 gdbserver 和 QEMU 的 gdbserver 实现进行交互时的功能限制。修复了对在非 amd64 架构上运行的 gdbserver 可执行文件的调试支持,并且在 arm64 和 i386 上进行了显式测试。
此项工作还导致调整了 lldb-server 的实现,使其更好地符合 GDB 所设定的标准。得益于这些改进,LLDB 客户端不再需要根据使用的服务器提供不同的代码路径,且使用的单一路径经过了更彻底的测试。
该工作还涉及对 LLDB API 和代码去重的改进,从而减少了维护工作量,并降低了未来贡献的门槛。测试覆盖率也得到了提高,增加了未来问题在影响用户之前被发现的可能性。
这些更改预计将随 LLDB 14.0 一同发布。
赞助商:FreeBSD 基金会
更新 Linux 兼容层
联系方式:Dmitry Chagin <dchagin@FreeBSD.org>
联系方式:Edward Tomasz Napierala <trasz@FreeBSD.org>
该项目的目标是提高 FreeBSD 执行未经修改的 Linux 二进制文件的能力。具体 Linux 应用程序的支持状态正在 Linux 应用程序状态 Wiki 页面 上进行追踪。
vdso(7)
实现已被重构。futex(2)
支持已进行大幅改进,现已使用 FreeBSD 原生的 umtx
机制,除了修复若干 bug,还新增了优先级继承 futex 支持。
rt_sigsuspend(2)
和 sigaltstack(2)
系统调用现在已在 ARM64 上得到支持。
faccessat2(2)
、clone3(2)
系统调用已实现。CLONE_CLEAR_RESETHAND
选项现已得到支持。
prctl(2)
系统调用现支持 PR_SET_NO_NEW_PRIVS
。
ptrace(2)
系统调用现支持 PTRACE_GET_SYSCALL_INFO
,这是支持较新版 strace(1)
所必需的。
目前,Linuxulator 在 arm64 上的工作仍在进行中,力求与 amd64 版本持平;目前,它已足够用于开发工作。
赞助商:EPSRC(Edward 的工作赞助)
改进声音混音器
链接:谷歌编程之夏 2021 项目文章 链接: https://wiki.freebsd.org/SummerOfCode2021Projects/SoundMixerImprovements
联系方式:Christos Margiolis <christos@FreeBSD.org>
联系方式:Hans Petter Selasky <hselasky@FreeBSD.org>
该项目旨在提升 FreeBSD 上 OSS 声音混音器的功能。这意味着开发一个新的 mixer(3) 库,全面重写 mixer(8),并更新 sound(4)。
开发工作始于 2021 年的谷歌编程之夏,但预计将独立继续进行。
已应用的更改:
在 sound(4) 中实现 OSS 混音器的 (un)muting ioctls (提交 0f8dafb45859)。
实现播放/录音模式的 sysctl (提交 ed2196e5df0c)。
实现 mixer(3) 和新版 mixer(8) (提交 903873ce1560)。
欢迎提交补丁、评论和讨论。
更新基本系统 OpenSSH
链接:OpenSSH 链接: https://www.openssh.com/
发送到 freebsd-security@ 的公告 链接: https://lists.freebsd.org/pipermail/freebsd-security/2021-September/010473.html
联系方式:Ed Maste <emaste@freebsd.org>
OpenSSH 是一套远程登录和文件传输工具,在 FreeBSD 基本系统中从 7.9p1 版本更新至 8.7p1 版本。
FreeBSD 基本系统的 OpenSSH 包含了多个本地 bug 修复、配置更改和小功能。作为此更新工作的一部分,我已经将部分更改提交到上游,并计划将剩余更改也提交上游。
OpenSSH 现在支持 FIDO/U2F 设备,尽管启用这一功能在 FreeBSD 基本系统中还需要进行额外的工作。这包括导入一对依赖库:libcbor 和 libfido2。预计在接下来的几个月内,我将导入这些库,启用 FIDO/U2F 支持,并更新至 OpenSSH 8.8p1 版本。
注意:
OpenSSH 8.8p1 默认会禁用 ssh-rsa 签名方案,因此下次更新时需要做额外的工作。更多信息,请参见 未来 FreeBSD 基本系统 OpenSSH 更新的重要说明 邮件列表帖子。
赞助商:FreeBSD 基金会
内核
对内核子系统/功能、驱动程序支持、文件系统等的更新。
改进 Arm64
链接:指针认证评审 链接: https://reviews.freebsd.org/D31261
联系方式:Andrew Turner <andrew@FreeBSD.org>
FreeBSD 已经移植到 Arm Armv8-A 架构信封模型(AEM),这是一个 Armv8 架构模拟器。AEM 对于 Armv8 开发和测试非常有用,因为它支持多种配置,包括启用或禁用不同扩展的功能。在这项工作中,修复了 virtio 旧版 PCI 驱动程序,并更新了 ACPI 资源解析代码,使其能够与模型提供的 ACPI 表一起工作。
Libmd(4) 已更新,支持在可用时使用 sha256 指令。当这些指令可用时,性能大幅提升。例如,在 Apple M1 上,通过虚拟化程序,计算一个 1GB 文件的 sha256 的时间从中位数 3.46 秒减少到 0.5 秒。
现在支持在静态二进制文件中使用 ifunc(间接函数)。这将允许根据运行的硬件使用不同的函数实现。动态二进制中使用 ifunc 已经得到支持。
已更新 arm64 的 ID 寄存器定义,以符合 Armv8.5 规范,并且其他特殊寄存器也已更新为 Armv8.7 规范。
在内核中解码 arm64 ID 寄存器的工作做了许多清理,以确保我们为用户空间提供一致的硬件视图,无论是直接读取模拟的 ID 寄存器,还是使用 ELF HWCAP 值。
已经开始着手支持 Arm 可靠性、可用性和可维护性(RAS)扩展。它可能使用的外部中止现在已经在内核中得到了处理。
正在审查对 Arm 指针认证扩展的支持。此扩展允许程序使用新指令将哈希值添加到代码或数据指针中的未使用位。之后,它们可以检查哈希值,从而根据 CPU 的不同,产生无效指针或引发异常。这可以用来保护函数返回地址免受覆盖,从而使得返回导向编程(ROP)攻击变得更加困难。此更改支持用户空间和内核指针认证。目前,正在等待调试器更改提交至上游,以便 lldb 在需要时清除哈希,例如在堆栈跟踪中。
已经开始着手支持分支目标标识(BTI)扩展。这为页表添加了一个标志,用于禁止某些分支指令跳转到不希望的目标。当 CPU 从寄存器跳转到新位置时,它会检查指令是否正确。这将保护,例如,防止函数指针被调用时指向函数的中间部分。内核已构建并启用了此功能,并在 Arm AEM 中进行了测试。
赞助商:FreeBSD 基金会
在微软 HyperV 和 Azure 上的 FreeBSD 支持
链接:FreeBSD wiki 上的微软 Azure 文章 链接: https://wiki.freebsd.org/MicrosoftAzure
FreeBSD wiki 上的微软 HyperV 文章 链接: https://wiki.freebsd.org/HyperV
联系方式:微软 FreeBSD 集成服务团队 <bsdic@microsoft.com>
联系方式:freebsd-cloud 邮件列表
联系方式:FreeBSD Azure 发布工程团队 <releng-azure@FreeBSD.org>
联系方式:Wei Hu <whu@FreeBSD.org>
联系方式:許立文 <lwhsu@FreeBSD.org>
13.0-RELEASE Azure 市场镜像 已经发布 (公告)。
在 Azure 市场构建官方镜像的更改,符合 Azure 和 FreeBSD 云镜像的要求,如磁盘布局和 Gen2 虚拟机的 UEFI,以及一些小改进,如加速启动的配置,已经被导入 (提交)。
上述任务由 FreeBSD 基金会赞助,微软提供资源。
Microsoft Azure 网络适配器(MANA)是微软的新网络适配器,将在 Azure 公有云中提供。它通过虚拟功能(VF)为 Hyper-V 上运行的客户操作系统提供 SR-IOV 网卡。Wei 已经在工作 一段时间,并在本季度 提交了代码。
此任务由微软赞助。
进行中的工作任务:
构建并发布 gen2 虚拟机镜像到 Azure 市场
构建并发布基于 ZFS 的镜像到 Azure 市场
更新 Azure 代理 Port 到最新版本
待办事项
更新 https://docs.microsoft.com 上的 FreeBSD 相关文档
在 Azure Pipelines 中支持 FreeBSD
改进 amd64 UEFI 启动
联系方式:Konstantin Belousov <kib@FreeBSD.org>
PC 上的 UEFI BIOS 为操作系统之前的程序提供了更丰富、更流畅的环境,但也对在那里执行的程序,尤其是操作系统加载器,提出了一些要求。其中一个要求是,加载器必须与 BIOS 协调其内存使用,只使用为其分配的内存。即使加载器将控制权交给操作系统内核后,仍然有一些内存区域是 BIOS 为不同的原因保留的。例如,运行时服务代码和数据。
另一方面,传统的/CSM BIOS 启动以完全不同的方式使用内存;存在已知的内存区域保存 BIOS 数据,必须避免使用这些区域。否则,内存被认为是供加载器和操作系统使用的自由内存。(当然,情况并不那么简单,已知区域的定义取决于供应商,并且存在很多变通办法。)
BIOS 启动将内核和预加载数据(如模块、内存磁盘、CPU 微代码更新等)放置在从 2M 开始的连续物理内存块中。这一算法源于 i386 内核启动的方式。
此外,当准备将控制权交给内核时,加载器会创建非常特殊的临时映射,其中将物理地址空间的低 1G 映射为 1:1 到虚拟地址空间,然后对每个 1G 进行重复,直到虚拟内存结束。内核知道其物理位置和临时映射,并假设文本的物理地址位于 2M 处,构建内核页表。
当加载器获得对 UEFI 环境的支持时,这种加载器到内核的交接机制保持不变。加载器在 UEFI 启动服务处于活动状态时,在所谓的暂存区准备内核和辅助预加载数据,并在 EFI_BOOT_SERVICES.ExitBootServices()
之后,激活临时映射,并将暂存区复制到 2M。
当时的一个优势是,无需对内核进行更改。但也存在一些问题;最大的问题是 2M 处的内存可能无法重新使用。例如,BIOS 运行时代码或数据可能位于该位置,或者 2M 处根本没有内存,或者跳板页表或代码,甚至暂存区的某些部分可能与暂存区复制的 2M 区域重叠。结果是一个难以诊断的启动时间故障,通常是在加载器启动内核时发生硬性挂起。
另一个限制是 1G 的瞬态映射,由于复制的原因,预加载数据的总大小不能超过约 400M,包括内核、内存磁盘和其他所有内容。此外,按需扩展暂存区的代码相当不灵活,只能在原地扩展暂存区。
本报告中描述的工作使得 amd64 上的 UEFI 加载器能够从暂存区启动内核,而无需复制。内核对交接的假设已明确识别并记录。内核只要求暂存区位于 4G 以下,并与跳板页表一起(这是因为 CPU 架构要求 32 位保护模式进入长模式),必须对齐到 2M,并且交接时低 4G 区域必须 1:1 映射。内核计算其物理地址,并相应地构建内核页表。
使内核能够在暂存区原地启动需要识别所有 amd64 内核对其物理位置的依赖。最复杂的部分是应用处理器的启动,这要求重写初始化代码,最终我们能够简化此过程。特别是,当 AP 进入分页模式时,它直接进入正确的内核页表,而不加载中间的跳板页表。
更新后的加载器会自动检测加载的内核是否可以处理原地暂存区(“非复制模式”)。如果需要,可以通过加载器的 copy_staging
命令覆盖此设置。例如,copy_staging enable
告诉加载器无论内核功能如何,都无条件将暂存区复制到 2M(默认是 copy_staging auto
)。此外,暂存区扩展的代码变得更加健壮,允许在无需手动调整和重新编译加载器的情况下进行扩展。
赞助商:FreeBSD 基金会
更新 FreeBSD ENA 驱动程序
链接: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)是 Amazon Web Services (AWS) 虚拟化环境中的智能网卡。ENA 驱动程序支持多个发送和接收队列,能够处理最多 100 Gb/s 的网络流量,具体取决于所使用的实例类型。
自上次更新以来已完成的工作:
更新 ENA 驱动程序至 v2.4.1
引入完整的内核 RSS API 支持
允许重新配置 RSS 间接表和哈希键
支持在 c6gn/m6i AWS 实例类型上使用 netmap
修复卸载功能与某些程序性 sysctl 节点之间的竞争条件
添加新的统计计数器
改进重置处理例程的安全性
避免在 LLQ 条件下的 Tx 路径中的 mbuf 合并
正在进行的工作:
为 iflib 框架原型移植驱动程序
将 ENA v2.4.1 驱动程序合并到 FreeBSD 11/12/13-STABLE 分支
向驱动程序添加 IPv6 L4 校验和卸载支持
赞助商:亚马逊公司
FreeBSD 中的打洞支持
链接:
Commit 0dc332bff200 链接: https://cgit.freebsd.org/src/commit/?id=0dc332bff200c940edc36c4715b629a2e1e9f9ae
Commit 9e202d036dd6 链接: https://cgit.freebsd.org/src/commit/?id=9e202d036dd6f38ce0f578aa2086ebc358315bab
Commit 5ee2c35751ef 链接: https://cgit.freebsd.org/src/commit/?id=5ee2c35751ef5d131222423bf3e25073f997c337
OpenZFS 拉取请求 #12458 链接: https://github.com/openzfs/zfs/pull/12458
联系方式:Ka Ho Ng <khng@FreeBSD.org>
打洞功能允许将给定文件的连续字节范围转换为“洞”。支持打洞的文件系统可以从给定的文件中取消分配文件系统空间。此功能的一个应用场景是将虚拟机客户端的 TRIM/UNMAP/DEALLOCATE 请求转换为宿主机端的打洞调用,从而在客户端不再需要时回收文件系统空间。
新增了一组 API 和 KPI,开发人员可以调用它们来对给定文件执行打洞操作,如果底层文件系统支持该功能。对于不支持打洞的文件系统,内核中有一个回退实现,使用零填充代替。除了 API 和 KPI 的增加外,truncate(1)
工具通过增加 -d
标志进行了扩展,以支持调用打洞操作。
截至报告撰写时,OpenZFS 和 tmpfs 是支持打洞的文件系统。
赞助商:FreeBSD 基金会
FreeBSD 中的英特尔网络
链接:DPDK 链接: https://github.com/DPDK/dpdk/tree/main/drivers/net
联系方式:Intel <freebsd@intel.com>
联系方式:Kevin Bowling <kbowling@FreeBSD.org>
已更新 lem(4)/em(4)/igb(4) 和 ix(4) ,包含来自 DPDK 的各种公共代码改进。此外,社区还进行了一些 bug 修复:
Intel 已更新 ixl(4),并进行了一些改进:
Intel 无线驱动程序支持
链接:iwlwifi 状态 FreeBSD wiki 页面 链接: https://wiki.freebsd.org/WiFi/Iwlwifi
联系方式:Bjoern A. Zeeb <bz@FreeBSD.ORG>
Intel 无线驱动程序更新项目旨在为更新的芯片组提供支持,并加入 mac80211 LinuxKPI 兼容代码。过去,Intel 驱动程序代码曾为 iwm(4) 本地驱动程序移植;使用 LinuxKPI 兼容框架可以直接使用该驱动程序,只有非常小的修改,我们希望这些修改能被纳入原始驱动程序。
在 6 月底的初始快照发布后,9 月初又发布了一个新的快照。感谢所有在 CURRENT 上进行测试并反馈的用户。
尽管我们持续更新驱动程序及所需的兼容代码,但目前的重点是稳定性,并且增加对更新的 802.11 标准的支持。当前驱动程序支持 11a/b/g,接下来将支持 11n,之后再考虑支持 11ac。
我们目前正在尽可能将更多内容集成到 FreeBSD 中,并确保其合理性。完全集成到 FreeBSD 主干中的工作正在等待政策更新。
有关开发或代码的最新状态,请参阅上述 wiki 页面或 freebsd-wireless 邮件列表。我们预计很快会发布另一个快照,并希望也能再次支持 stable/13。
赞助商:FreeBSD 基金会
Microchip LAN743x 设备驱动程序 mgb(4)
链接:
添加 mgb(4) 驱动程序的提交 链接: https://cgit.freebsd.org/src/commit/?id=8890ab7758b8a03a68f3fe596f6a5446921631a5
将 mgb(4) 模块连接到构建中的提交 链接: https://cgit.freebsd.org/src/commit/?id=543df609072fe49079c36d6bee510e1645edde3a
联系方式:Ed Maste <emaste@freebsd.org>
Microchip 的 LAN7430 和 LAN7431 是带有集成 PHY(LAN7430)或 RGMII 接口(LAN7431)的 PCIe 千兆以太网接口 IC。
2019 年,FreeBSD 基金会实习生 Gerald ND Aryeetey 为这些设备开发了 mgb(4) 驱动程序。该驱动程序已添加到代码树中,但尚未连接到构建过程中。自那时以来,已进行了一些大规模的 iflib 变更,其中包括对 mgb(4) 的更新。
我已经解决了驱动程序中的一些待解决问题,并将该模块添加到构建中。它已经可以在 -CURRENT 快照镜像中使用。该驱动程序功能正常,尽管仍需要一些额外的工作,特别是接收过滤引擎的配置,以及 VLAN 和 RX/TX 校验和卸载。相关的 caveats 和注意事项已在手册页中说明。
我非常希望收到反馈和测试结果。
赞助商:FreeBSD 基金会
修复 msdosfs_rename VOP
联系方式:Konstantin Belousov <kib@FreeBSD.org> 联系方式:Peter Holm <pho@FreeBSD.org>
我们的 msdosfs(5) 实现是旧代码,且有相对较大的遗留成本。特别是,尽管它随着时间的推移进行了细粒度的锁定和其他杂项 bug 修复,但有时还是会发现严重的问题。
最近,trasz@ 发现 msdosfs 的重命名操作很容易发生死锁。进一步检查重命名代码时,揭示了大量与锁定、可能的使用后释放和文件系统结构损坏相关的问题。
作为更新的一部分,msdosfs 重命名代码中的锁定机制被重新设计。我们需要锁定最多四个 vnode,并检查一个路径,以确保重命名操作不会在目录之间创建循环父目录关系。为此,锁定程序从 UFS 的重命名操作中复制而来,其中除了第一个 vnode 以外的所有 vnode 都是以尝试模式锁定的。为 msdosfs 添加了无锁重新锁定,并将目录路径检查程序改为非阻塞模式。
在此工作过程中,所有已知问题都已修复,并且 msdosfs 通过了增强版的 stress2 测试套件。
赞助商:FreeBSD 基金会(kib 的贡献)
OpenZFS RAIDZ 扩展更新
链接:
OpenZFS 拉取请求 链接: https://github.com/openzfs/zfs/pull/12225
2021 FreeBSD 开发者峰会视频 链接: https://www.youtube.com/watch?v=yF2KgQGmUic
2021 FreeBSD 开发者峰会幻灯片 链接: https://docs.google.com/presentation/d/1FeQgEwChrtNQBHfWSNsPK3Y53O5BnPh3Cz5nRa5GAQY/view
来自 Ars Technica 的新闻文章 链接: https://arstechnica.com/gadgets/2021/06/raidz-expansion-code-lands-in-openzfs-master/
联系方式:Matthew Ahrens <matt@mahrens.org>
项目
此功能允许将磁盘一个一个地添加到 RAID-Z 组中,逐步扩展其容量。该功能对于小型池(通常仅有一个 RAID-Z 组)特别有用,因为这类池没有足够的硬件通过添加整个新的 RAID-Z 组来扩展容量(通常是将磁盘数量加倍)。
FreeBSD 的 ZFS 实现来自 OpenZFS 项目。这项工作将被集成到 OpenZFS 仓库中,并为 FreeBSD 和 Linux 提供支持。
状态
该工作功能上已经完成,并已打开拉取请求。
剩余工作
剩余工作包括一些代码清理、设计文档编写以及处理测试失败。
我们还需要征求代码审阅人员并回应审阅反馈。
赞助商:FreeBSD 基金会
IPSEC 隧道中的 RFC1191 支持
联系方式:Wojciech Macek <wma@semihalf.com>
Semihalf 团队一直在努力为 IPSEC 隧道提供 RFC1191 支持。这使得 PMTUD 算法能够动态发现隧道可以处理的最大路径 MTU,并相应地更新隧道参数。因此,性能得到了改善,因为不再需要进行数据包分片。
新引入的重构包括:
对 IPSEC 的 NEEDFRAG 支持 提交 d9d59bb1af1
对 IPv4 IPSEC 通过 IPv6 链接的 PMTUD 支持 提交 4f3376951d70
根据 RFC1191 规格的安全修复 提交 b4220bf387e6
对 IPv6 隧道的 PMTUD 支持 提交 9dfc8606eb80
赞助商:Stormshield
Realtek rtw88 支持
链接:Rtw88 状态 FreeBSD wiki 页面 链接: https://wiki.freebsd.org/WiFi/Rtw88
联系方式:Bjoern A. Zeeb <bz@FreeBSD.ORG>
该项目旨在为 Realtek 的 rtw88 芯片提供支持。
随着 LinuxKPI 兼容代码的扩充,Realtek rtw88 驱动程序的初步移植已经完成。这使我们在 Intel 驱动程序之后获得了对第二个驱动程序的支持,并帮助验证和发展 LinuxKPI 代码库。为了使驱动程序编译的变化和整体时间非常少。目前我们遇到了 DMA 问题,这使得大多数用户无法加载固件或在之后使用驱动程序。
感谢所有勇于尝试这个初步代码版本的用户。
尽管这是个业余时间项目,但我们希望能更好地支持 Realtek 无线设备,并将继续致力于此项工作。
有关开发或代码的最新状态,请关注上述 wiki 页面或 freebsd-wireless 邮件列表。
Marvell SDHCI 改进和 ACPI 支持
联系方式:Bartlomiej Grzesik <bag@semihalf.com> 联系方式:Marcin Wojtas <mw@semihalf.com>
Semihalf 团队一直在为 Marvell Octeon TX2 CN913x 和 Armada 7k/8k SoC 的 SD/MMC 控制器提供 ACPI 支持,同时扩展和改进 FreeBSD 操作系统中相关的通用部分。
已应用的更改:
添加 ACPI_GET_PROPERTY 以访问设备特定数据(DSD) 提交 b91fc6c43a81
引入通用的 device_get_property/device_has_property,允许使用相同的通用代码获取 DT/ACPI 属性 提交 3f9a00e3b577
将 mmc_helper 切换到 device_* API,以统一方式访问来自 DT/ACPI 的控制器描述 提交 8a8166e5bcfb
为 sdhci_xenon 驱动程序添加 ACPI 支持 提交 d78e464d2330 和 提交 adbce5ff747b
应用其他与核心 mmc 代码和 sdhci_xenon 驱动程序相关的属性解析的小改进和修复。
赞助商:Semihalf
改进堆栈间隙(Stack gap)处理
联系人:Dawid Gorecki <dgr@semihalf.com> 联系人:Marcin Wojtas <mw@semihalf.com>
堆栈间隙是一种通过在堆栈顶部和字符串区域之间创建一个随机大小的间隙来随机化堆栈地址的特性。当前的缓解措施实现可能会导致某些应用程序出现问题,例如 Firefox(PR239873)。直到现在,解决此问题的唯一方法是禁用这些程序的堆栈间隙,正如 ntpd 中所做的那样。
Semihalf 团队一直在努力解决与堆栈间隙相关问题的根本原因。
其中一个问题可以在通过 setrlimit(2)
设置堆栈限制为较低值时观察到。由于堆栈间隙大小可能会很大,并且进程无法知道堆栈间隙的大小,这导致程序在从系统调用返回后立即中止,因为堆栈超出了限制。修复方案是在 setrlimit(2)
调用期间增加软资源限制(rlim_cur
)与堆栈间隙大小相同。此修复可以解决 ntpd 的问题,而无需完全禁用堆栈间隙。当前,补丁正在审查中。
第二个识别出的问题与线程堆栈的处理方式有关。线程堆栈是使用 kern.usrstack
sysctl 计算的,该值应指向堆栈的开始位置。此 sysctl 返回一个常量值,具体取决于 ABI,并且忽略了堆栈间隙的存在。引入了一个新的 sysctl,并更新了线程库以相应使用它。补丁 D31897 和 D31898 目前正在讨论中。它们修复了启用堆栈间隙特性后,Firefox 和 Thunderbird 无法启动的问题。
赞助商:Stormshield
在 FreeBSD 上使用 syzkaller
联系人:Mark Johnston <markj@FreeBSD.org>
联系人:Michael Tuexen <tuexen@FreeBSD.org>
syzkaller 是一种覆盖引导操作系统内核模糊测试工具。有关 syzkaller 的介绍,请参阅 2019 年第一季度报告中的 syzkaller 条目。
在过去的一个季度,我们集中精力缩小了来自公共 syzbot 实例的报告积压。已经修复了许多长期存在的套接字子系统中的锁定 bug,SCTP 协议实现也进行了许多 bug 修复。此外,修复了各种其他内核子系统中的 多个 bug,积压情况在过去的季度大大减少。由于这一努力,我们能够更轻松地识别回归并及时修复引入的 bug。工作仍在进行中,以进一步减少积压。
KASAN(内核地址卫生检查器)已在 syzbot 使用的默认内核配置中启用,这大大增强了我们定位并修复内核 bug 的能力。有关 KASAN 和 KMSAN 的介绍,请参阅 2021 年第二季度报告中的 kernel-sanitizers 条目。KASAN 帮助确保内存安全 bug 更加确定性地显现,从而提高了 syzkaller 发现重现者的能力并简化了调试。
KMSAN(内核内存卫生检查器)Port 已于 8 月提交到 FreeBSD 主分支。为使其能在 syzkaller 中使用,已进行了一些初步工作(主要是 kcov(4) 需要进行几处小修改以便在启用 KMSAN 的内核中工作),并且通过私有的 syzkaller 实例发现并修复了若干 bug。
未来几个月的目标包括:
在 syzbot 中添加 KMSAN 目标。
进一步减少 syzbot 的积压。
向上游提交 syzkaller 补丁,以支持对 Linuxulator 的模糊测试。
使用基于 ZFS 的虚拟机镜像进行模糊测试。
赞助商:FreeBSD 基金会
在 WireGuard 中使用 OCF
联系人:John Baldwin <jhb@FreeBSD.org>
我已经着手更新上游 WireGuard 驱动中的数据路径加密,以便在数据路径中使用内核中的 OpenCrypto 框架(OCF)。通过 WireGuard 隧道发送的数据包使用 Chacha20-Poly1305 AEAD 加密算法。与 TLS 和 IPsec 不同,WireGuard 使用的是 8 字节的 nonce,而不是与此算法一起使用的 12 字节 nonce。
到目前为止,大部分工作集中在更新 OCF,以更好地支持针对给定加密算法的多个 nonce(以及标签/MAC)长度。我恢复了之前开始的一个旧分支,旨在支持所有使用非默认 nonce 和标签长度的 AES-CCM NIST KAT 向量。我已经优化了这一方法,使其更好地适应现有的 OCF 模型,其中 nonce 和 MAC 长度是会话的属性(类似于密钥长度)。我之前的分支将 nonce 长度设置为每个操作的属性。大部分工作涉及扩展 /dev/crypto
接口,以便为会话设置这些参数。现有的 OCF 测试在用户空间运行,并使用 /dev/crypto
接口,包括 cryptocheck 工具和 NIST KAT 向量测试。
基于这些框架更改,我已经扩展了 OCF 中现有的 Chacha20-Poly1305 加密算法,以支持 8 字节和 12 字节的 nonce,包括在加速的 ossl(4) 驱动中。我还针对上游 WireGuard FreeBSD 驱动提供了一个补丁,以便在数据平面中使用它,并验证了它与标准 WireGuard 驱动的互操作性。
未来的工作将集中于上游 OCF 更改的提交,以及进一步审查上游 WireGuard 驱动。
赞助商:FreeBSD 基金会
英特尔卷管理设备驱动程序更新
链接:
链接: https://cgit.freebsd.org/src/commit/?id=7af4475a6e31202a865b1dd3727018659b44470f
联系人:Alexander Motin <mav@FreeBSD.org>
英特尔 VMD 被英特尔的 VROC(芯片上的虚拟 RAID)使用,以便通过一个或多个 VMD 设备隔离 PCI 树的部分内容,包括 NVMe 设备。每个 VMD 设备都有 3 个内存窗口,用于访问其子设备的配置空间和内存,另外还有一些(我看到的是 19 和 33)MSI-X 中断向量,用于转发它们的 MSI 和 MSI-X 中断。
vmd(4) 驱动程序首次在 FreeBSD 13.0 中引入,但发现存在一些问题,这些问题在此次更新中得到了修复:
VMD 设备被修改为更像一个常规的 PCI 到 PCI 桥,实施了常规的 pcib(4) 接口,并使用标准的 pci(4) 总线驱动程序。
内存和总线号资源管理被重写,以正确处理使用 VMD 设备内存窗口的资源请求。
中断处理被完全重写,以便将子设备的中断分配到可用的 VMD MSI-X 向量,设置它们通过标准的操作系统机制进行处理,避免了通过任务队列进行自定义分发的开销。由于 VMD 向量和路由能力的限制,每个设备的子设备最多只能分配一个 MSI 或三个 MSI-X 向量,以避免共享。该限制可以根据 VMD 向量和子设备的数量进行调节。为了提高灵活性,nvme(4) 驱动程序已被修改为支持有限数量的向量,甚至可以从一个 MSI/MSI-X 向量开始。
赞助商:iXsystems, Inc.
Ports
影响 Ports 的更改,无论是涉及整个树的大范围更改,还是单个 Port 本身的更改。
改进 Ports 中的 CPE 数据
链接: chkcpe
联系人:Bernhard Froehlich <decke@FreeBSD.org>
常见平台枚举(CPE)是用于命名硬件和软件组件的开放标准。最初由 MITRE 开发,现在由 NIST 在国家漏洞数据库的主持下维护。CPE URI 通过供应商、产品名称、版本、修订等唯一标识设备或程序。NIST 维护着官方的 CPE 字典,其中列出了所有在公告中提到过的所有软件版本的 CPE 名称。
在 FreeBSD Ports 中,自 2014 年起,可以使用 USES=cpe
来标注 CPE 数据,但在 30,000 个 Port 中,只有约 1000 个 Port 使用了这一功能。因此创建了一个名为 chkcpe
的脚本,用于验证现有的 CPE 数据并自动查找新的匹配项。
为什么我们需要它?
它可以将已安装包的 CPE URI 与发布的漏洞数据进行比较,从而使 pkg audit
更加完善和完整。作为副作用,我们还将能够更好地概览需要修补或更新的 FreeBSD Ports 中的易受攻击 Port。
我该如何帮助?
在这个阶段,Port 维护者没有简单的方式提供帮助。单独创建 PR 仅仅是为了添加 CPE 数据没有意义,因为开销非常大。因此,我花了一些时间在 chkcpe 上,以改进审查和提交工作流程。目前,审查和提交每个 Port 大约需要 3 分钟。
如果你是 Ports Committer 并且想提供帮助,请与我联系!
待办事项
审查剩余的报告(约 1800 条),并在适当时更新 Port
提高匹配质量,以找到更多可能的匹配项
支持在
pkg audit
中使用 CPE 数据扫描 Ports 中的易受攻击 Port
更新 FreeBSD Erlang 生态系统 Port
联系人:FreeBSD Erlang 邮件列表 <erlang@FreeBSD.org>
Erlang 运行时系统,通常被称为 BEAM,为多个编程语言和 FreeBSD Ports 中的应用程序提供了运行时。
今年早些时候,Elixir 和 Erlang 运行时作为独立的 Port 进行了更新,以使 Port 维护者和用户能够并行测试应用程序。
在第三季度,当前的运行时已被作为默认版本引入——这意味着 lang/elixir
和 lang/erlang
正在作为这些卓越编程语言和运行时的最新版本运行。
较旧版本的 lang/erlang-runtime{21,22,23}
仍然可以作为 Port 使用。在 OTP20 之前的非常旧版本已从 Ports 中删除,因为它们不再得到上游支持。
只有较新的 OTP 版本包含更新的 SSL 应用程序,能够正确验证交叉签名的证书,这是 Let’s Encrypt 即将淘汰的根证书所使用的。
关于这些更改的更多详细信息可以参考 Erlang/OTP DST 根证书 X3 过期影响 和 DST 根证书 X3 过期更新
所有涉及 NIF 驱动程序的相关 Port 已经更新,以匹配更新后的 lang/erlang
版本,并且一些上游社区未更新的 Port 已被标记为损坏。
Erlang 团队计划:
在 2021Q4 删除已废弃的 OTP20 和 OTP21 运行时
删除直接依赖于 Erlang 和 Elixir 语言的 Port,因为这些通常是通过
mix
和rebar3
工具安装的,这是标准的社区构建工具链。
欢迎进行额外的测试和社区贡献;请通过邮件列表联系,特别是如果你能帮助测试特定的 Port 更新。
在 FreeBSD 上的 KDE
链接: KDE FreeBSD
联系人:Adriaan de Groot <kde@FreeBSD.org>
KDE 在 FreeBSD 项目的目标是将 KDE 社区的几乎所有软件打包到 FreeBSD 的 Ports 中。该软件包括一个完整的桌面环境 KDE Plasma(支持 X11 和 Wayland)以及数百个可以在任何 FreeBSD 机器上使用的应用程序。
KDE 团队(kde@)是 desktop@ 和 x11@ 的一部分,致力于构建使 FreeBSD 美观并作为日常图形桌面机器使用的软件栈。
第三季度是北半球的夏季:骑自行车和爬山,团队成员充满激情地追赶我们喜欢的软件。期间有许多值得追赶的目标:
三个 CMake 版本发布,最终到达 CMake 3.21.3,并恢复了与 libpkg 的支持,这样就可以再次通过 CPack 来生成 FreeBSD 包。
每月发布 KDE Frameworks、KDE Plasma 和 KDE Gear,保持了 exp-run 的进行。kde@ 团队特别感谢 Antoine 对我们多个 exp-run 请求的监督。
用于监控系统状态的 KDE Plasma 应用程序——ksysguard、Plasma 系统监视器以及支持库——已进行多次更新。FreeBSD 支持代码已经合并到上游。
在所有 Qt 和 KDE 包中,尝试减少“重”依赖项的数量。通常这意味着去除仅限开发者的依赖,避免安装测试代码等。其根本思路是减少安装特定 Port 时的大小,同时保持元 Port 的“开发者工具包包含”特性。
MySQL 5.7.34 引入了运行时不兼容性,影响了 KDE 的个人信息管理应用程序和邮件功能。这个问题已经在 Qt Port 中修复。
KDE Plasma 中的混音器应用程序现在默认使用 pulseaudio。
accountsservice 已更新,并且使用来自 OpenBSD 的代码进行了补丁修复。
kdiff3 更新至 1.9.3,现在包含上游补丁,以解决一些最初在 FreeBSD 上报告的特殊情况。
kimageannotator 和 ksnip 已更新,以便提供更好的截图功能。
kraft,一款小型企业支持应用程序,更新至版本 0.97。
krita 有一个上游版本发布,以解决性能问题,随后已更新到 FreeBSD。
kstars,互动天文馆和天文观测应用,更新至 3.5.5。
latte-dock,作为替代启动器,更新至 0.10.2。
libphonenumber,谷歌用于处理全球不同电话号码表示方式的库,已进行多次更新。
maliit-framework,用于屏幕上的键盘,已添加到 Ports 中。
pipewire 持续更新。它是一个下一代视频处理框架,正在越来越多地用于 Wayland 环境,以便高效地在应用程序之间传递视频数据。
poppler 更新至版本 21.09,显著提升了速度。
sddm 在单独安装时变得更为健壮,增加了
xinitrc
支持。已删除 math/eigen2 。
在 FreeBSD 上的 OpenSearch
链接: OpenSearch 网站
联系人:OpenSearch 团队 <opensearch@FreeBSD.org>
OpenSearch 是一款由社区驱动的开源搜索和分析套件,源自 Apache 2.0 许可证的 Elasticsearch 7.10.2 和 Kibana 7.10.2。它包括一个搜索引擎守护进程 OpenSearch 和一个可视化与用户界面 OpenSearch Dashboards。OpenSearch 使人们能够轻松地摄取、保护、搜索、聚合、查看和分析数据。这些功能在应用程序搜索、日志分析等用例中非常受欢迎。通过 OpenSearch,用户可以使用、修改、扩展、货币化并按需转售开源产品。
在 OpenSearch 1.0.0 发布后,创建了一个 FreeBSD OpenSearch 团队,协调将其移植到 FreeBSD 的工作。由于 Elasticsearch 7 和 Kibana 7 已经在 Ports 中,因此我们可以依赖这些 Port 快速启动(感谢 elastic@ 团队),并专注于已经发生变化的部分,即从原始代码库到分支的变动。该 Port 已经提交到 FreeBSD Ports 中,分别为 textproc/opensearch 和 textproc/opensearch-dashboards,并当前提供最新的 1.0.1 版本的 OpenSearch。
贡献
这些 Port 已经在我们的测试环境和一些生产工作负载中进行了充分的测试,但我们仍然在积极寻求用户反馈。欢迎随时向我们发送电子邮件报告成功或失败的情况。
Valgrind - 已发布 FreeBSD 的官方支持
链接: Valgrind 首页
联系人:Paul Floyd <pjfloyd@wanadoo.fr>
Valgrind 是一款用于构建动态分析工具的仪器框架。Valgrind 工具可以自动检测许多内存管理和线程问题,并详细分析程序的性能。你还可以使用 Valgrind 来构建新的工具。
随着 Valgrind 3.18.0 版本的发布,FreeBSD 官方支持已上线。支持的两个架构是 amd64 和 i386(x86)。
下一步将是更新 FreeBSD Port。这将涉及从过去 15 年多一直在树外维护的代码切换到使用官方的上游源码包。
由于 Valgrind 与操作系统的细节紧密相关,获得官方的 FreeBSD 支持是数十位开发者付出巨大努力的结果。
在 FreeBSD 上的 Wine
链接: Wine 首页
联系人:Gerald Pfeifer <gerald@FreeBSD.org>
联系人:Damjan Jovanovic <damjan.jov@gmail.com>
Wine 允许在 FreeBSD 上运行 Windows 程序。
本季度我们集中关注了跟踪主线开发的 wine-devel Port,经过了半打版本更新,简化了该 Port,移除了三个选项(SDL、VKD3D、VULKAN),这三个选项现在已无条件启用,并修复了多个可移植性问题。
这些更改将在接下来的几周内合并到主要的 Wine Port 中。
经过超过 21 年的 Wine Port 开发和超过 19 年的维护工作,到了交接的时刻。
幸运的是,Damjan 已经接手,并将负责 wine-devel 及相关 Port ——感谢!以下方面的帮助仍然非常欢迎:
维护每日(或至少定期)构建的上游 Wine 版本。本季度这一工作触发了为 FreeBSD 上游提供的二十多个修复,尽管通常这项工作所需的努力要少得多。
Ztop
联系人:Alan Somers <asomers@FreeBSD.org>
ztop
是一款新工具,实时显示 ZFS 数据集的 I/O,就像 top
一样,但用于 ZFS。与现有的 zpool iostat
(它只显示池级别的流量)不同,ztop
显示的是每个数据集级别的流量。
此前,没有工具可以显示此信息。Prometheus Node Exporter 可以将其导出到 Prometheus 中,之后可以使用各种其他工具查看,但这需要大量的软件栈,并且不是实时的。
我在本季度开始了 ztop
的开发,目前它已经完全功能化。然而,它暴露了内核中的一个性能问题。若数据集超过几千个,sysctl 接口过慢,导致 ztop
变得迟缓。如果有时间,未来的工作将解决这个问题。
赞助商:Axcient
杂项
无法归类的对象。
-CURRENT 编译时间分析
链接: Bug 257141 在 freebsd-current 上的讨论 构建过程各阶段的可视化图表
联系人:Wolfram Schneider <wosch@FreeBSD.org>
从源代码重新构建 FreeBSD 需要大量的 CPU 资源。根据你的机器,整个过程通常需要 20 分钟到几个小时不等。在 make buildworld
结束时,我们记录实际时间以及并行构建使用的参数。例如
构建过程分为几个步骤。了解哪个步骤占用了最多时间,以及特殊构建参数的影响,将是非常有用的。通过在 2021 年 8 月的小补丁,我们现在可以获得这些信息:
在这个例子中,我们花费了大部分时间在“阶段 4.2:构建库”上,占用了 77% 的 CPU 时间和 75% 的实际时间。现在,运行带有参数 WITHOUT_TOOLCHAIN=yes
的 buildworld
,构建速度提升了 3.3 倍。从 2 小时缩短到 36 分钟完成!
使用 WITHOUT_TOOLCHAIN=yes
没问题,只要没有重大 LLVM 编译器更改。
如果你不喜欢这个功能或怀疑它会引起问题,可以通过设置变量 TIME_ENV=""
来禁用它。
下一个任务:获取更详细的长期运行阶段(4.2、4.3、4.4)的时间信息。
第三方项目
许多项目基于 FreeBSD 或将 FreeBSD 组件集成到他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣,我们有时会在我们的季度报告中包含这些项目提交的简要更新。FreeBSD 项目不对这些提交中任何声明的准确性或真实性作出任何表态。
Gitlab 14.3 发布
链接:Gitlab 14.3 新功能 链接: https://about.gitlab.com/releases/2021/09/22/gitlab-14-3-released/
联系:Matthias Fechner <mfechner@FreeBSD.org>
GitLab 是 DevOps 平台。提供快速、安全、无牺牲的速度,并提供对 DevOps 成功的可见性。
现在,版本 14.3 在 FreeBSD 上可用。
helloSystem
链接:文档 链接: https://hellosystem.github.io/
联系:Simon Peter <probono@puredarwin.org>
联系:在 irc.libera.chat
的 #helloSystem
,也可以在 Matrix 上找到 #helloSystem:matrix.org
什么是 helloSystem?
helloSystem 是预配置为桌面操作系统的 FreeBSD,专注于简洁、优雅和可用性。它的设计遵循“少而精”的理念。
2021 年第三季度状态
helloSystem 的版本 0.6.0 已发布,包含许多贡献的功能和 bug 修复
改进了窗口管理,使用 KWin 作为窗口管理器
简化了 Filer 文件管理器
贡献者们已经开始将 helloSystem 桌面环境 helloDesktop 移植到 FreeBSD Ports 和 Packages 集合中(有关详细信息,请查看 https://github.com/helloSystem/ISO/releases/tag/r0.6.0 中的更改日志)
可安装的 Live ISO 镜像和完整的更改日志可以在 https://github.com/helloSystem/ISO/releases/tag/r0.6.0 获取。
贡献
在多个领域需要帮助,特别是在 FreeBSD 核心操作系统和内核以及 Qt/C++ 方面。
容器与 FreeBSD:Pot、Potluck 与 Potman
链接:Pot 在 GitHub 上 链接: https://github.com/pizzamig/potPotluck 仓库与项目 链接: https://potluck.honeyguide.net/Potluck 在 GitHub 上 链接: https://github.com/hny-gd/potluckPotman 在 GitHub 上 链接: https://github.com/grembo/potman
联系人:Luca Pizzamiglio (Pot) <pizzamig@freebsd.org> 联系人:Stephan Lichtenauer (Potluck) <sl@honeyguide.eu> 联系人:Michael Gmelin (Potman) <grembo@FreeBSD.org>
Pot 是一款 jail 管理工具,也支持通过 Nomad 进行编排。
在过去一个季度,发布了一个包含多项新特性的版本 0.13.0。 分层镜像 可将镜像拆分为一个基础镜像组件,该组件很少更改,例如包含基本的 jail 和软件包,再加上一个“叶子”镜像组件,包含可能更频繁更改的小型附加内容,例如在 CI 管道中构建的软件。由于并非每次都需要重建完整镜像,因此镜像的创建和分发速度可以大大加快。 同时,新增了一个 copy-out 命令,可以使容器内初始化的状态持久化,并可以重新注入到其他容器中。
Potluck 的目标是成为 FreeBSD 和 Pot 之于 Docker 就像 Dockerhub 之于 Linux 和 Docker:一个 Pot flavor 和完整容器镜像的仓库,用于 Pot 和在许多情况下使用 Nomad。
在过去的季度里,我们非常忙碌。不仅提交了多个新镜像,比如 Nextcloud,可以通过 Nomad 部署,而且用于构建虚拟数据中心基础的镜像(Nomad,Consul,Vault)也进行了重要更新。
对于这些镜像,预计在接下来的季度将完成进一步的改进,以提升安全性和可靠性。
此外,我们意识到,目前容器方法的优势,如 虚拟数据中心第一部分/第二部分/第三部分 中描述的,尚未足够明显和透明,且部分内容已不完全最新,因此我们计划在找到时间后提供额外的文档。
Potman 的目标是简化基于 Potluck 方法使用 Vagrant 和 VirtualBox 构建 Pot 镜像的过程,例如作为软件开发中 DevOps 工作流的一部分,包括测试和将镜像发布到仓库。
在过去的一个季度里,这个项目没有太多进展,但当前的计划是,在中长期内加入更多功能,以模块化和简化镜像构建定义,然后在 Potluck 库构建过程中利用 Potman。
一如既往,欢迎提供反馈和补丁。
WireGuard 在 FreeBSD 上稳定,计划提交上游
链接: WireGuard 链接: https://www.wireguard.com/ wireguard-freebsd 代码库 链接: https://git.zx2c4.com/wireguard-freebsd/
联系人:Jason A. Donenfeld <Jason@zx2c4.com>
WireGuard 是运行在内核中安全的隧道协议。
在过去的季度里,wireguard-freebsd 代码库 已经相当稳定和完整。曾经有一段时间,修复问题的发布频繁,而且大量精力都花在了追踪每一个 bug 报告,包括在 bugs.freebsd.org、IRC、邮件列表或其他地方的报告。但到目前为止,报告已经减少,大多数用户在 IRC 上询问使用和集成方面的问题,项目的稳定性逐渐提高。我们现在还为每次提交添加了自动化 CI,编译并运行了一个小型烟雾测试,覆盖了 wireguard-freebsd 支持的版本——12.1、12.2 和 13.0。希望将来,这个 小型烟雾测试 会扩展为包括来自 Linux 的 更大一组测试。
wireguard-freebsd 仓库的设计目标是成为一个树外的 kmod,分发在 Ports 中。但它也被组织成可以最终上游提交。为此,仓库维护了两个文件:compat.h 和 support.h。compat.h
包含 FreeBSD 主分支中存在但在多个旧版本中不存在的代码的 polyfill,以及为我们支持的各个版本编写的 ifdefs。另一方面,support.h
包含当前不在 FreeBSD 主分支中的代码。目标是最终将 support.h
中的所有代码移到 compat.h
中,到那时,仓库就可以准备好上游提交了。写本文时,基本上只剩下一个真实的函数——sogetsockaddr
——以及需要上游提交的两个便捷宏。
不过,一个重要的部分并不在 support.h
中,那就是代码使用的加密原语。文件 crypto.c 和 crypto.h 包含了 ChaCha20Poly1305、XChaCha20Poly1305、Blake2s 和 X25519 的 C "参考实现"(通过 MIT 的 fiat-crypto 项目正式验证)。这四个算法用于 WireGuard 的密钥交换路径,处理非常小的输入,预计它们将作为普通函数加入到 FreeBSD 的 sys/crypto/
树中。另一方面,数据路径使用一个处理 mbufs(可能很大的)并且对性能至关重要的 ChaCha20Poly1305 入口点。为此,jhb@ 一直在改进 OCF,以适应 WireGuard 的特点。下一步将是将我们当前的调用从 chacha20poly1305_{en,de}crypt_mbuf
(位于 wg_noise.c 中)迁移到调用 OCF,提交类型为 CRYPTO_BUF_MBUF
的 crypto_buffer
。这样就能自动受益于 Andy Polyakov 从 OpenSSL 导入的优化版本。
当我们迁移到 OCF 时,现有的 wireguard-freebsd 仓库可能会变成 wireguard-freebsd-compat
,专门用于为早期的 FreeBSD 版本提供回溯补丁,而新的 wireguard-freebsd 仓库将成为整个 FreeBSD 树,我们可以直接在其中进行集成补丁的工作。该仓库还将包含从 wireguard-tools 导入的 wg(8) 工具,我将重新许可为 MIT 许可证。
我对即将到来的季度感到非常兴奋,期待看看我们能将 wireguard-freebsd 的多少内容上游提交。
最后更新于