已切换至秋季配色,取自《小市民系列》,若影响可视性等问题请联系邮件地址 [email protected]

FreeBSD 2023 年第二季度状态报告

这是 2023 年第二份状态报告,共有 37 份报告。

如你所见,我们的报告数量比上季度有所增加。这是个好消息,也彰显了 FreeBSD 社区的活跃程度,以及大家始终致力于提供高质量软件的努力。

特别请注意,夏季已到,不要错过我们谷歌编程之夏学生分享的精彩项目。

祝阅读愉快。

Lorenzo Salvadore

代表状态团队敬上。

FreeBSD 团队报告

可在 管理页面 查阅来自各官方及半官方团队的条目。

FreeBSD 核心团队

联系方式:FreeBSD 核心团队 [[email protected]

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

2023 年 5 月 开发峰会

核心团队在 5 月 17–18 日的 FreeBSD 开发者峰会上展示了动态更新。可在 https://wiki.freebsd.org/DevSummit/202305 查看演示文稿。

FreeBSD 14

核心团队正在与其他团队协作,确保 FreeBSD 14.0-RELEASE 拥有最高质量标准。

核心团队对 14 版本不再支持 riscv64sf(64 位 RISC-V 软浮点)表示无异议。

同 FreeBSD 基金会的会议

核心团队与 FreeBSD 基金会持续定期会面,讨论 FreeBSD 的管理、开发及后续发展。核心团队与基金会董事会及员工举行了两次会议,讨论基金会如何协助核心团队及整个项目。

Matrix 即时通讯方案

在 2023 年 5 月 开发峰会的核心团队动态中,其中一个主要议题是提出新的项目沟通解决方案。

目前,由集群管理员设置了测试实例 matrix-dev.FreeBSD.org。所有开发者可使用 Kerberos 凭证访问该实例,一些公开聊天室可通过 Matrix 的联合功能加入。请注意,此实例仅用于测试和评估,不保证备份或可用性。

核心团队仍在讨论该服务的范围和管理方式,并收集社区反馈。

行为准则委员会

行为准则委员会(conduct@)目前由核心团队管理。

提交权限

核心团队批准了 Christos Margiolis (christos@) 的 src 提交权限。

FreeBSD 基金会

链接:

FreeBSD 基金会 URL: https://www.freebsdfoundation.org

技术路线图 URL: https://freebsdfoundation.org/blog/technology-roadmap/

捐赠 URL: https://www.freebsdfoundation.org/donate/

基金会合作计划 URL: https://freebsdfoundation.org/our-donors/freebsd-foundation-partnership-program/

FreeBSD 期刊 URL: https://www.freebsdfoundation.org/journal/

基金会新闻与活动 URL: https://www.freebsdfoundation.org/news-and-events/

联系方式:Deb Goodkin [email protected]

FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球的 FreeBSD 项目与社区。来自个人和企业的捐赠用于资助和管理软件开发项目、会议及开发者峰会。我们还为 FreeBSD 贡献者提供差旅补助,购买并支持硬件以改善和维护 FreeBSD 基础设施,并提供资源以提升安全性、质量保证和发布工程工作。我们发布宣传材料以推广、教育和宣传 FreeBSD 项目,促进商业供应商与 FreeBSD 开发者之间的合作,并代表 FreeBSD 项目执行合同、许可协议及其他需要具备合法主体的法律事务。

FreeBSD 生日快乐,三十岁了

二十三年来,我们始终自豪地支持这个非凡的操作系统及其充满活力的社区,并期待在将来的日子里继续提供支持。在本次进展中,我们将概述基金会在多个领域对 FreeBSD 的贡献。内容涵盖项目开发举措,其中一些已有详细报告。此外,我们还将展示对 FreeBSD 的推广工作、促进社区参与的努力,以及拓展合作伙伴关系的进展。最后,我们将探讨为争取更多资金而开展的持续工作,从而能够投入更多资源来填补项目中的空白。

筹款工作

本季度,我们在与商业 FreeBSD 用户的互动方面取得了重大进展。为了增强与现有及潜在商业用户的合作关系,我们聘请了 Greg Wallace 担任合作与研究总监。他的主要目标是扩大与商业用户的合作。从就任以来,Greg 就全力以赴,在一个季度内会见了众多公司。这些交流提供了宝贵的洞见,让我们了解 FreeBSD 的实际应用情况、用户面临的挑战以及项目可以改进的领域。通过了解这些方面,我们可以更明智地决定资金分配,并认识到 FreeBSD 的独特优势。此外,该职位还负责开展研究,以探索目标市场、探索 FreeBSD 的新机会,并确保我们的声音在相关讨论中被听到。关于 Greg 的目标和成就的更多细节,可参见下面的状态更新。

基金会对所有为支持我们工作的捐赠者表示衷心感谢。除了众多个人捐赠外,我们很高兴收到了 NetApp 和黑莓的大额捐赠。此外,我们还获得了 Tarsnap、iXsystems 和 LPI 对 FreeBSD 开发者峰会的赞助。这些赞助大大帮助了抵消开支,并使我们能够为参会者提供可承受的注册费用。

今年我们的预算约为 2,230,000 美元,其中包括对 FreeBSD 推广和软件开发的增加支出。超过一半的预算用于直接改善 FreeBSD 和保持其安全性的工作。

通过设立专职负责合作伙伴的岗位,我们能够有效强调投资我们工作的意义,并向公司展示项目的长期可持续性。

您的支持在我们的使命中起着关键作用,我们对您对 FreeBSD 社区的承诺深表感谢。请考虑为我们 2023 年的筹款活动捐赠!https://www.freebsdfoundation.org/donate/

对于重要的商业捐赠者,我们有 FreeBSD 基金会合作计划,该计划成立于 2017 年。

合作伙伴计划

大家好,我是 Greg Wallace。今年四月初,我加入基金会,担任合作与研究总监。这篇博客介绍了我和这个职位。在合作方面,我专注于与使用 FreeBSD 的公司建立联系。我已经会见了几家公司,了解它们如何使用 FreeBSD。其中一些会谈产生了潜在合作的讨论。我会继续了解有趣的 FreeBSD 用户公司,并主动联系它们。

我的目标是与每一家使用 FreeBSD 的公司取得联系,倾听它们的故事。如果你属于此类公司且我们尚未联系,请在 我的日程 上安排通话。

本季度其他合作相关活动包括:

  • 我制作了 这些幻灯片,介绍了与基金会合作如何推动 FreeBSD 的发展。如果你对改进这些幻灯片有建议,或希望我向你的组织进行展示,请发邮件给我安排通话。欢迎随意分享此演示文稿,无论是部分还是全部内容。

  • 我与基金会同事合作,为向行业分析师的演示制作了多份行业特定的使用案例幻灯片。

  • 我还在寻求包括以下机构的资助机会:

    • NSF 安全与可信赖网络空间(SaTC)

    • 主权科技基金(Sovereign Tech Fund)

    • NGI

在研究方面,我的总体目标是确保社区的所有专业知识能够在全球关于计算性能、安全性和能源效率的讨论中得到体现。作为一个社区,我们有很多内容可以贡献。

到目前为止,我一直在跟踪并参与以下讨论:

如果你有研究想法或希望在该领域合作,请发邮件给我安排通话

改进操作系统

在 2023 年第二季度,共有 339 个 src、155 个 Ports 和 20 个 doc 树提交标注 FreeBSD 基金会为赞助方。其中部分及其他基金会赞助的工作在单独报告条目中有所描述:

以下是其他基金会赞助工作的示例:

  • 修复 [fsck_ffs(8)(https://man.freebsd.org/cgi/man.cgi?query=fsck_ffs&sektion=8&format=html) 的 Bug

  • 修复 [killpg(2)(https://man.freebsd.org/cgi/man.cgi?query=killpg&sektion=2&format=html) 的 Bug

  • 改进 hwpmc

  • 改进 vmm

  • LLVM 16 与 OpenSSL 3.0 的 Ports 修复与解决方案

  • 将 Port kinst 移植到 RISC-V 及相关 DTrace 工作

  • 更新 libfido2 到版本 1.9.0

  • 各类 LinuxKPI 802.11 改进

  • 各类 RISC-V 改进

  • 从版本 4.9.3 更新并导入 tcpdump 至版本 4.99.4

可在 基金会项目页面 查看当前及以往基金会承包工作的状态。

基金会技术团队成员于 5 月 17–18 日在加拿大渥太华举行的开发者峰会上进行了展示,包括主持谷歌编程之夏、FreeBSD 基金会 技术评审工作流 工作组会议。Pierre Pronchery 介绍了 BSD 驱动程序协调,En-Wei Wu 讨论了与基金会合同完成的 wtap 工作

持续集成与质量保证

基金会提供全职员工并资助项目,以改进 FreeBSD 项目的持续集成、自动化测试及整体质量保证工作。关于持续集成的工作,可在专门报告条目中阅读更多内容。

宣传工作

我们的大部分工作都致力于 FreeBSD 项目的推广。这可能包括突出展示有趣的 FreeBSD 工作、制作文献和视频教程、参加活动或进行演讲。我们制作的文献旨在教授人们 FreeBSD 基础知识,并帮助他们更轻松地采纳或贡献 FreeBSD。除了参加和演讲外,我们还鼓励并协助社区成员举办自己的 FreeBSD 活动、做演讲或管理 FreeBSD 展台。

FreeBSD 基金会在全球范围内赞助许多会议、活动和峰会。这些活动可能与 BSD 相关、开源相关,或是面向弱势群体的技术活动。我们支持以 FreeBSD 为中心的活动,以提供知识分享、项目协作和促进开发者与商业用户合作的平台,从而维持健康的生态系统。我们支持非 FreeBSD 活动,以宣传和提高 FreeBSD 的认知度,增加其在不同应用中的使用,并招募更多贡献者加入项目。我们很高兴大部分活动能够回归线下参与。除了参加和策划活动,我们还在持续开展新的培训计划,并更新我们的 使用指南,以方便更多人尝试 FreeBSD。

以下是我们在推广和教育方面的一些工作:

我们通过发布专业制作的 FreeBSD 期刊,帮助全球了解 FreeBSD。正如之前提到的,FreeBSD 期刊现免费发行。了解更多信息及访问最新期刊,请访问 https://www.freebsdfoundation.org/journal/

更多关于我们参加的活动及即将举办的活动信息,可访问 https://www.FreeBSDfoundation.org/news-and-events/

法律/FreeBSD 知识产权

基金会持有 FreeBSD 商标,并负责保护其权益。我们还为核心团队提供法律支持,以调查出现的问题。

访问 https://www.freebsdfoundation.org 了解更多关于我们如何支持 FreeBSD 及如何提供帮助的信息。

FreeBSD 发布工程团队

链接:

FreeBSD 13.2-RELEASE 时间表 URL: https://www.freebsd.org/releases/13.2R/schedule/

FreeBSD 14.0-RELEASE 时间表 URL: https://www.freebsd.org/releases/14.0R/schedule/

FreeBSD 发行版 URL: https://download.freebsd.org/releases/ISO-IMAGES/

FreeBSD 开发快照 URL: https://download.freebsd.org/snapshots/ISO-IMAGES/

联系方式:FreeBSD 发布工程团队 [email protected]

FreeBSD 发布工程团队负责制定和公布官方项目版本的发布计划、宣布代码冻结、维护相应分支等工作。

在 2023 年第二季度,团队继续推进 13.2-RELEASE 工作。13.2 周期严格遵循预定计划,最终在四月中旬完成了三次额外 RC 构建及 RELEASE 构建和公告。

在与项目管理内各团队协调后,发布工程团队重新审视了即将到来的 14.0-RELEASE 原始计划,主要因部分工作尚在进行中。更新后的计划经过讨论和微调,以应对部分问题,并最终在 FreeBSD 项目网站上发布。新计划将 14.0-RELEASE 目标定于 2023 年 10 月。

团队继续为 mainstable/13stable/12 分支提供每周开发快照构建。注意,今后将不再针对 stable/12 提供快照构建。

赞助方:Tarsnap

赞助方:FreeBSD 基金会

集群管理团队

链接:

集群管理团队成员 URL: https://www.freebsd.org/administration/#t-clusteradm

联系方式:集群管理团队 [email protected]

FreeBSD 集群管理团队成员负责管理项目依赖的机器,用于同步其分布式工作和通信。

本季度,团队完成了以下工作:

  • 定期支持 FreeBSD.org 用户账户。

  • 定期维护(含替换)所有物理主机和镜像的磁盘及部件。

  • 启用 FreeBSD 项目管理镜像对 https://www.FreeBSD.orghttps://docs.FreeBSD.org 的镜像同步。

  • 集群刷新,将所有主机和 jail 升级至 14-CURRENT、13-STABLE 和 12-STABLE 的最新版本。

正在进行的工作

  • 主要站点的大规模网络升级

    • 新的 Juniper 交换机已到达主站点以替换旧设备。感谢 Juniper 的捐赠。

  • 更换主站点及部分镜像的旧服务器

    • 除了损坏的 CI 服务器外,还有几台旧服务器存在损坏磁盘和故障电源问题。此任务与 FreeBSD 基金会及捐助方/赞助方合作完成。

  • 安装新的 CI(持续集成)机器,这些机器由包构建器重新利用。

  • 审查运行在 FreeBSD 集群中的服务的备份配置。

FreeBSD 官方镜像概览

当前镜像位置包括:澳大利亚、巴西、德国、日本(两个完整镜像站)、马来西亚、南非、中国台湾、英国(完整镜像站)、美国—加利福尼亚、新泽西(主站)、华盛顿。

硬件及网络连接由以下机构慷慨提供:

法兰克福单服务器镜像是欧洲主要镜像站,在带宽和使用量上居首。

我们仍在欧洲寻找额外完整镜像站(五台服务器),以替换英国完整镜像站的旧服务器。

在全球互联网交换点(澳大利亚、巴西、南非)设立单镜像的模式效果良好;如果你了解或就职于相关机构并能赞助单镜像服务器,请联系我们。美国(西海岸)和欧洲(任意地点)为优选地点。

请参阅 通用镜像布局 获取完整镜像站规格,以及 tiny-mirror 获取单镜像站信息。

持续集成

链接:

FreeBSD Jenkins 实例 URL: https://ci.FreeBSD.org

FreeBSD CI 构建产物归档 URL: https://artifact.ci.FreeBSD.org

FreeBSD Jenkins wiki URL: https://wiki.FreeBSD.org/Jenkins

托管 CI wiki URL: https://wiki.FreeBSD.org/HostedCI

第三方软件 CI URL: https://wiki.FreeBSD.org/3rdPartySoftwareCI

与 freebsd-testing@ 相关的工单 URL: https://bugs.freebsd.org/bugzilla/buglist.cgi?bug_status=open&email1=testing%40FreeBSD.org&emailassigned_to1=1&emailcc1=1&emailtype1=equals

FreeBSD CI 仓库 URL: https://github.com/freebsd/freebsd-ci

dev-ci 邮件列表 URL: https://lists.FreeBSD.org/subscription/dev-ci

联系方式:Jenkins 管理员 [email protected]

联系方式:許立文 [email protected]

联系方式:freebsd-testing 邮件列表

联系方式:EFNet IRC #freebsd-ci 频道

在 2023 年第二季度,我们与项目贡献者和开发者合作,满足其测试需求。同时,我们也与外部项目和公司合作,通过在 FreeBSD 上进行更多测试来提升他们的产品质量。

已完成的重要任务:

正在进行的任务:

  • 设计并实现 pre-commit CI 构建和测试(支持 workflow 工作组

  • 设计并实现使用 CI 集群构建发行产物(如发布工程操作)

  • 简化贡献者和开发者的 CI/测试环境配置

  • 设置 CI 阶段环境并运行实验性作业

  • 整理 freebsd-ci 仓库脚本,为合并到 src 仓库做准备

  • 改进硬件测试实验室并增加测试硬件

  • 合并 D38815

  • 合并 D36257

开放或排队任务:

  • 收集并整理 CI 任务和想法

  • 为运行测试的虚拟机提供公共网络访问

  • 使用裸机硬件运行测试套件

  • 为 -CURRENT 构建 drm ports 测试

  • 计划运行 ztest 测试

  • 帮助更多软件在其 CI 流程中支持 FreeBSD(Wiki 页面:3rdPartySoftwareCIHostedCI

  • 与托管 CI 提供商合作,提升 FreeBSD 支持

更多 WIP 信息请参见 freebsd-testing@ 相关工单,欢迎加入我们的工作!

赞助方:FreeBSD 基金会

Ports

链接:

关于 FreeBSD Ports URL: https://www.FreeBSD.org/ports/

Ports 贡献指南 URL: https://docs.freebsd.org/en/articles/contributing/#ports-contributing

FreeBSD Ports 监控 URL: http://portsmon.freebsd.org/

Ports 管理团队 URL: https://www.freebsd.org/portmgr/

Ports 压缩包 URL: http://ftp.freebsd.org/pub/FreeBSD/ports/ports/

联系方式:René Ladan [email protected]

联系方式:FreeBSD Ports 管理团队 [email protected]

Ports 管理团队负责把控 Ports 的整体方向、构建包以及人员事务。本季度工作情况如下:

当前 Ports 中共有 34,400 余款 port。现有 3,019 个开放的 ports PR,其中 746 个尚未分配。本季度 main 分支由 151 名提交者完成 10,439 次提交,2023Q2 分支由 55 名提交者完成 745 次提交。与上一季度相比,ports 数量略有增加,开放 PR 数量略有减少,ports 提交数量有所增加。

本季度,我们欢迎 Tom Judge(tj@)回归,同时告别 Steve Wills(swills@),Steve 也曾是 portmgr 成员。作为 portmgr 潜水者项目的一部分,我们欢迎 Ronald Klop(ronald@)、Renato Botelho(garga@)和 Matthias Andree(mandree@)加入。

Portmgr 已恢复在源码中引入子包的工作,但仍有多项内容需要完善。

在软件方面,pkg 更新至 1.19.2,Firefox 更新至 114.0.2,Chromium 更新至 114.0.5735.198,KDE Gear 更新至 23.04.2。本季度,antoine@ 进行了 23 次 exp-run 来测试包更新,调整 CPU_MAXSIZE 至 1024,修复 devel/cmake-core 在 armv7 上的失败,并为 USES=meson 添加 --auto-features=enabled。最后,Ports Tree 已更新以支持 FreeBSD-CURRENT 上的 LLVM 16 和 OpenSSL 3。

项目

这些项目跨越多个类别,从内核和用户空间到 Ports 和第三方项目。

Cirrus-CI

链接: FreeBSD Cirrus-CI 仓库 URL: https://cirrus-ci.com/github/freebsd/

FreeBSD src CI URL: https://cirrus-ci.com/github/freebsd/freebsd-src

FreeBSD doc CI URL: https://cirrus-ci.com/github/freebsd/freebsd-doc

联系方式:Brooks Davis [email protected]

联系方式:Ed Maste [email protected]

联系方式:許立文 [email protected]

Cirrus-CI 是一项托管的持续集成服务,为开源项目提供 Linux、Windows、macOS 和 FreeBSD 上的 CI 服务。它补充了我们的 Jenkins CI 基础设施,支持包括 GitHub RP 和 FreeBSD fork 测试在内的其他用例。我们在 2019 年将 Cirrus-CI 配置添加到 FreeBSD src 源码,在 2020 年添加到 doc。许多托管在 GitHub 的 FreeBSD 项目(如 drm-kmod、kyua、pkg 和 poudriere)也使用 Cirrus-CI。

Cirrus-CI 配置持续进行维护更新(迁移至最新 FreeBSD 发行镜像)。在 src tree 中,我们增加了一些额外检查,确保在需要时更新生成的文件(make sysentmake makeman),并检查缺失目录。我们还增加了使用 Clang/LLVM 16 工具链包进行构建的作业,与基本系统中 Clang 版本保持一致。GCC 作业现在默认在 GitHub 镜像上运行,适用于所有提交。

赞助方:美国国防高级研究计划局

赞助方:FreeBSD 基金会

FreeBSD 内核中的 BATMAN 支持

链接:

Wiki 页面 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/CallingTheBatmanFreeNetworksOnFreeBSD

[源代码(RP)(https://github.com/obiwac/freebsd-gsoc/pull/1) URL: https://github.com/obiwac/freebsd-gsoc/pull/1

联系方式:Aymeric Wibo [email protected]

BATMAN(Better Approach to Mobile Ad-hoc Networking,即连网络优化方案)是 Freifunk 项目开发并使用的路由协议,用于(主要是无线)多跳自组网络。Freifunk 是一项由德国发起的城市级开放 WiFi 网络计划,基于网络中立性原则。BATMAN 的目标是完全去中心化协议;网络中的任何节点都无需了解或关心整个网络的拓扑结构。

该协议在 Linux 上通过内核模块 batman-adv 提供支持,本项目旨在将其引入 FreeBSD,包括内核模块本身,以及创建 BATMAN 网络所需的用户空间网络库和工具。

目前,接口创建及交互(Linux 和 FreeBSD 用户空间均支持)已可工作,数据包传输功能部分可用,但尚不完整。batadv 接口的支持已加入 [ifconfig(8)(https://man.freebsd.org/cgi/man.cgi?query=ifconfig&sektion=8&format=html)。

导师:Mahdi Mokhtari

赞助方:2023 谷歌编程之夏

使 LinuxBoot 支持 FreeBSD

联系方式:Warner Losh [email protected]

链接:

LinuxBoot 项目 URL: https://www.linuxboot.org/

BSDCan 2023 kboot 演讲幻灯片 URL: https://docs.google.com/presentation/d/1N5Jp6XzYWv9Z9RhhETC-e6tFkqRHvp-ldRDW_9h2JCw/edit?usp=sharing

LinuxBoot 是一项旨在创建清洁、稳健、可审计且可重复的启动固件的项目。最初作为谷歌的一个特定项目,它已经发展为支持所有使用 Linux 启动最终操作系统的启动环境。许多平台现在支持该环境,有时甚至是唯一可用的启动环境。此外,一些嵌入式设备的 LinuxBoot 环境是硬编码的,难以更改,因此能够从 Linux 启动 FreeBSD 是非常有价值的。

旧的 Sony PlayStation 3 平台使用名为 kboot 的引导加载器从其 Linux 内核启动 FreeBSD(所有这些都早于 LinuxBoot 项目)。该代码已被大幅增补,并通过可替换的每架构插件变得通用。正常的 FreeBSD /boot/loader 被构建为 Linux 二进制文件,用于读取 FreeBSD 内核、模块和可调参数,将它们放入内存,就像运行在预启动环境中一样,然后使用 [kexec_load(2)(https://man.freebsd.org/cgi/man.cgi?query=kexec_load&sektion=2&format=html) 将映像加载到 Linux 内核并执行特殊重启。对于支持 UEFI 的系统,它会将 UEFI 内存表和指向 UEFI 运行时服务的指针传递给新内核。

它支持从主机文件系统、主机块设备上的任意 [loader(8)(https://man.freebsd.org/cgi/man.cgi?query=loader&sektion=8&format=html) 支持的文件系统(包括跨多个设备的 pool)、内存盘映像以及通过网络下载的文件加载数据。可任意混合使用。例如,配置覆盖可以从主机文件系统加载,而内核从专用存储(如 NVME)或 RAM 磁盘映像加载。它支持通过 stdin/stdout 运行的主机控制台,并支持显式指定路径,例如 /dev/nvme0ns1:/boot/loader/gerbil.conf。还支持 ZFS 启动环境,包括一次性启动功能。

现在 FreeBSD/aarch64 可以在 LinuxBoot 环境中从 Linux 启动,功能与 [loader.efi(8)(https://man.freebsd.org/cgi/man.cgi?query=loader.efi&sektion=8&format=html) 相当。为 GICv3 提供了内存布局工作补丁 (D40902)。

FreeBSD/amd64 支持正在进行中,约完成 80%。由于 amd64 是较早的平台,它对引导加载器提供内核所需数据的要求更多。在 BIOS 环境中,内核无法从长模式获取这些数据,因此必须由引导加载器提供。尽管 UEFI 和 ACPI 提供了获取方式,但许多数据仍需引导加载器提供。内核初始化时可能会 panic,因为尚未发现和实现所有前提条件。

PowerPC 可以构建,但其状态未知。尝试获取合适的 PlayStation 3 对作者来说过于耗时。

需要帮助

  1. 编写 [loader.kboot(8)(https://man.freebsd.org/cgi/man.cgi?query=loader.kboot&sektion=8&format=html) 文档,包括使用方法、镜像创建方式及当前可行的用例。

  2. 完成 amd64 支持。

  3. 统一 kboot 与 efi 的 elf 架构特定元数据代码,解决编译时差异和构建基础设施问题。

  4. 增加 riscv64 支持。

  5. PowerPC 测试(自重构开始后未测试)。

  6. 编写脚本,将 EDK-II 镜像(例如从 QEMU)重新打包为带 FreeBSD Linux 内核的 linux-boot 镜像,用于 CI 测试。

  7. 在 coreboot LinuxBoot 上测试。

赞助方:奈飞

改进内核模块 LLDB

链接:

谷歌编程之夏 Wiki 项目 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/LLDBKernelModuleImprovement

项目代码库 URL: https://github.com/aokblast/freebsd-src/tree/lldb_dynamicloader_freebsd_kernel

联系方式:Sheng-Yi Hong [email protected]

FreeBSD 项目使用 LLVM 作为工具链,LLVM 自带 LLDB 调试器。用户空间调试功能已完善,但内核空间仍需改进,其中之一是 LLDB 内核模块调试功能——解析内核核心转储提供的已加载模块数据并加载模块对象。目标是为 LLDB 实现此插件,目前作为谷歌编程之夏项目进行中。

当前仍在进行调试和开发中。

赞助方:2023 谷歌编程之夏

用户空间

对基本系统及其程序的变更。

基本系统中的 OpenSSL 3

链接:

OpenSSL 下载 URL: https://www.openssl.org/source/

OpenSSL 3.0 发布 URL: https://www.openssl.org/blog/blog/2021/09/07/OpenSSL3.Final/

openssl-fipsinstall URL: https://www.openssl.org/docs/man3.0/man1/openssl-fipsinstall.html

联系方式:Pierre Pronchery [email protected]

Pierre 负责将 OpenSSL 3 导入基本系统。OpenSSL 提供了通用加密和安全通信库,是 SSL/TLS 协议的开源实现。其广泛应用于邮件、即时通讯、VoIP 和全球 Web(HTTPS)服务。Apache 和 nginx 等 Web 服务器使用 OpenSSL,其合计市场份额超过 50%,凸显 OpenSSL 在互联网基础设施中的重要性。

OpenSSL 1.1 自 2016 年 8 月发布以来,已被大多数 Linux 和 BSD 系统采用,并通过 LTS 支持。然而官方支持将在今年 9 月中旬结束,因此紧急需要采用其继任者 3.0 分支。

OpenSSL 3 完全切换至 Apache License 2.0,增加了 provider 模块概念,将过时算法隔离到 legacy 模块,可通过 fips 模块使用标准 FIPS 功能并获得认证。更新的库需要应用重新编译,部分 API 已弃用,但可显式调用旧 API 以支持过渡。FreeBSD 已配置部分库和应用请求 OpenSSL 1.1 API,以便平滑迁移至 OpenSSL 3 原生 API。

虽然更新对小块输入的性能有一定影响,但 1 KB 及以上块影响不大。FIPS provider 仍需手动步骤,FreeBSD 正在寻找默认可用的解决方案。

赞助方:FreeBSD 基金会

Linux 兼容层更新

链接:

Linux 兼容层状态 Wiki URL: https://wiki.freebsd.org/Linuxulator

Linux 应用状态 Wiki URL: https://wiki.freebsd.org/LinuxApps

联系方式:Dmitry Chagin [email protected]

该项目旨在提升 FreeBSD 执行未修改 [linux(4)(https://man.freebsd.org/cgi/man.cgi?query=linux&sektion=4&format=html) 二进制程序的能力。

cbbac5609115 起,实现了在 amd64 上跨信号传递保留 FPU xsave 状态,从而支持带抢占调度的现代 golang 程序。

新增功能允许在 [namei(9)(https://man.freebsd.org/cgi/man.cgi?query=namei&

Service Jail — rc.d 服务的自动 jail

链接:

D40369: 扩展 /usr/bin/service 以支持设置 ENV 变量 URL: https://reviews.freebsd.org/D40369

D40370: rc.d 服务自动 jail 的基础设施 URL: https://reviews.freebsd.org/D40370

D40371: 自动 service jail:为服务在自动 jail 中的完整功能做一些配置 URL: https://reviews.freebsd.org/D40371

联系方式:Alexander Leidinger [email protected]

Service jail 扩展了 [rc(8)(https://man.freebsd.org/cgi/man.cgi?query=rc&sektion=8&format=html) 系统,使 rc.d 服务可以自动被 jail。服务 jail 会继承父主机或父 jail 的文件系统,但默认使用 jail 的其他所有限制(进程可见性、受限网络访问、文件系统挂载权限、sysvipc 等)。额外配置可以允许继承父节点的 IP、sysvipc、内存页锁定,以及使用 bhyve 虚拟机监控器 ([vmm(4)(https://man.freebsd.org/cgi/man.cgi?query=vmm&sektion=4&format=html))。

例如,如果想将 local_unbound 放入 service jail 并可通过 IPv4 和 IPv6 访问,只需在 [rc.conf(5)(https://man.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5&format=html) 中添加:

local_unbound_svcj_options=net_basic
local_unbound_svcj=YES

虽然这种方式不具备使用独立文件系统和 IP/VNET 的手动 jail 的全部安全优势,但配置更加简单,同时提供了一些 jail 的安全好处,例如隐藏同一用户的其他进程。

上述链接中的补丁是对 2019 年我所展示内容 的重写。主要区别在于引入了 ENV 变量以便更合理地追踪,这也需要修改 [service(8)(https://man.freebsd.org/cgi/man.cgi?query=service&sektion=8&format=html)。

作者计划在 stable/14 分支之前提交 D40369D40370D40371 将在 14.0 发布后提交,并希望获得更多审查意见。

使用 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 的安全沙箱

链接:

ktrace 分支 URL: https://github.com/jakesfreeland/freebsd-src/tree/ff/ktrace

联系方式:Jake Freeland [email protected]

使用 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 进行 Capsicum 化

本报告介绍了对 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 的扩展,该扩展可记录尚未进行 Capsicum 化的程序的能力(capability)违规行为。

Capsicum 化的第一步逻辑是确定程序在哪些地方触发了能力违规。可以通过查看源码并移除与 Capsicum 不兼容的代码来解决,但这种方法既繁琐,又要求开发者熟悉所有能力模式下不允许的操作。

另一种方法是使用 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 自动发现违规行为。[ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 工具可以记录指定进程的内核活动。Capsicum 违规发生在内核内部,因此 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 可通过 -t p 选项记录并返回程序违规的额外信息。

传统上,程序必须进入能力模式才能报告违规。当调用受限系统调用时,它会失败并返回 ECAPMODE: Not permitted in capability mode。如果开发者在做错误检查,程序很可能因此终止。这使得违规追踪不太方便,因为 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 只能报告第一个能力违规,之后程序就会结束。

幸运的是,新的 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 扩展可以在程序 进入能力模式时记录违规。这意味着开发者无需修改程序即可进行能力违规追踪,程序仍能正常获取资源并执行。

违规追踪示例

下面的 cap_violate 程序尝试触发 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 可以捕获的每一种违规行为:

# ktrace -t p ./cap_violate
# kdump
1603 ktrace   CAP   system call not allowed: execve
1603 foo      CAP   system call not allowed: open
1603 foo      CAP   system call not allowed: open
1603 foo      CAP   system call not allowed: open
1603 foo      CAP   system call not allowed: open
1603 foo      CAP   system call not allowed: readlink
1603 foo      CAP   system call not allowed: open
1603 foo      CAP   cpuset_setaffinity: restricted cpuset operation
1603 foo      CAP   openat: restricted VFS lookup: AT_FDCWD
1603 foo      CAP   openat: restricted VFS lookup: /
1603 foo      CAP   system call not allowed: bind
1603 foo      CAP   sendto: restricted address lookup: struct sockaddr { AF_INET, 0.0.0.0:5000 }
1603 foo      CAP   socket: protocol not allowed: IPPROTO_ICMP
1603 foo      CAP   kill: signal delivery not allowed: SIGCONT
1603 foo      CAP   system call not allowed: chdir
1603 foo      CAP   system call not allowed: fcntl, cmd: F_KINFO
1603 foo      CAP   operation requires CAP_WRITE, descriptor holds CAP_READ
1603 foo      CAP   attempt to increase capabilities from CAP_READ to CAP_READ,CAP_WRITE

前七条“system call not allowed”记录并非直接源自程序代码 cap_violate,而是由 FreeBSD 的 C 运行时库触发的。当你使用 -t np 选项同时追踪 namei 转换和能力违规时,这一点就显而易见:

# ktrace -t np ./cap_violate
# kdump
1632 ktrace   CAP   system call not allowed: execve
1632 ktrace   NAMI  "./cap_violate"
1632 ktrace   NAMI  "/libexec/ld-elf.so.1"
1632 foo      CAP   system call not allowed: open
1632 foo      NAMI  "/etc/libmap.conf"
1632 foo      CAP   system call not allowed: open
1632 foo      NAMI  "/usr/local/etc/libmap.d"
1632 foo      CAP   system call not allowed: open
1632 foo      NAMI  "/var/run/ld-elf.so.hints"
1632 foo      CAP   system call not allowed: open
1632 foo      NAMI  "/lib/libc.so.7"
1632 foo      CAP   system call not allowed: readlink
1632 foo      NAMI  "/etc/malloc.conf"
1632 foo      CAP   system call not allowed: open
1632 foo      NAMI  "/dev/pvclock"
1632 foo      CAP   cpuset_setaffinity: restricted cpuset operation
1632 foo      NAMI  "ktrace.out"
1632 foo      CAP   openat: restricted VFS lookup: AT_FDCWD
1632 foo      NAMI  "/"
1632 foo      CAP   openat: restricted VFS lookup: /
1632 foo      CAP   system call not allowed: bind
1632 foo      CAP   sendto: restricted address lookup: struct sockaddr { AF_INET, 0.0.0.0:5000 }
1632 foo      CAP   socket: protocol not allowed: IPPROTO_ICMP
1632 foo      CAP   kill: signal delivery not allowed: SIGCONT
1632 foo      CAP   system call not allowed: chdir
1632 foo      NAMI  "."
1632 foo      CAP   system call not allowed: fcntl, cmd: F_KINFO
1632 foo      CAP   operation requires CAP_WRITE, descriptor holds CAP_READ
1632 foo      CAP   attempt to increase capabilities from CAP_READ to CAP_READ,CAP_WRITE

实际上,能力模式总是在 C 运行时库初始化之后才会进入,因此程序永远不会触发那前七条违规记录。我们之所以看到它们,是因为 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 在程序启动前就开始记录违规信息。

这个演示清楚地表明,违规追踪并不总是完美的。它是检测受限系统调用的有用指南,但不一定完全反映程序在能力模式下的实际行为。在能力模式中,违规等同于错误;它们提示应停止执行。而违规追踪忽略了这一建议,仍然继续执行,因此可能会报告无效的违规。

下方示例追踪了工具 [unzip(1)(https://man.freebsd.org/cgi/man.cgi?query=unzip&sektion=1&format=html)(未进行 Capsicum 化)的违规情况:

# ktrace -t np unzip foo.zip
Archive:  foo.zip
creating: bar/
extracting: bar/bar.txt
creating: baz/
extracting: baz/baz.txt
# kdump
1926 ktrace   CAP   system call not allowed: execve
1926 ktrace   NAMI  "/usr/bin/unzip"
1926 ktrace   NAMI  "/libexec/ld-elf.so.1"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/etc/libmap.conf"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/local/etc/libmap.d"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/var/run/ld-elf.so.hints"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libarchive.so.7"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/lib/libarchive.so.7"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libc.so.7"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libz.so.6"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libbz2.so.4"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/lib/libbz2.so.4"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/liblzma.so.5"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/lib/liblzma.so.5"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libbsdxml.so.4"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libprivatezstd.so.5"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/lib/libprivatezstd.so.5"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libcrypto.so.111"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libmd.so.6"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libthr.so.3"
1926 unzip    CAP   system call not allowed: readlink
1926 unzip    NAMI  "/etc/malloc.conf"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/dev/pvclock"
1926 unzip    NAMI  "foo.zip"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/etc/localtime"
1926 unzip    NAMI  "bar"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: mkdir
1926 unzip    NAMI  "bar"
1926 unzip    NAMI  "bar"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "bar/bar.txt"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "bar/bar.txt"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: mkdir
1926 unzip    NAMI  "baz"
1926 unzip    NAMI  "baz"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz/baz.txt"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz/baz.txt"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD

对于 [unzip(1)(https://man.freebsd.org/cgi/man.cgi?query=unzip&sektion=1&format=html) 的违规追踪输出,更接近开发者第一次对自己程序进行追踪时所看到的情况。大多数程序都会链接到库。在此例中,[unzip(1)(https://man.freebsd.org/cgi/man.cgi?query=unzip&sektion=1&format=html) 链接了 [libarchive(3)(https://man.freebsd.org/cgi/man.cgi?query=libarchive&sektion=3&format=html),这一点在追踪结果中得到了体现:

1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/lib/libarchive.so.7"
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/usr/lib/libarchive.so.7"

[unzip(1)(https://man.freebsd.org/cgi/man.cgi?query=unzip&sektion=1&format=html) 的违规记录出现在 C 运行时违规之后:

1926 unzip    NAMI  "foo.zip"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: open
1926 unzip    NAMI  "/etc/localtime"
1926 unzip    NAMI  "bar"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: mkdir
1926 unzip    NAMI  "bar"
1926 unzip    NAMI  "bar"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "bar/bar.txt"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "bar/bar.txt"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    CAP   system call not allowed: mkdir
1926 unzip    NAMI  "baz"
1926 unzip    NAMI  "baz"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz/baz.txt"
1926 unzip    CAP   fstatat: restricted VFS lookup: AT_FDCWD
1926 unzip    NAMI  "baz/baz.txt"
1926 unzip    CAP   openat: restricted VFS lookup: AT_FDCWD

在这个例子中,[unzip(1)(https://man.freebsd.org/cgi/man.cgi?query=unzip&sektion=1&format=html) 正在重建压缩包中的文件结构。违规产生的原因是 AT_FDCWD 值在 capability 模式下不能使用。这些违规的大部分可以通过在进入 capability 模式前先打开 AT_FDCWD(当前目录),然后将该描述符传递给 [openat(2)(https://man.freebsd.org/cgi/man.cgi?query=openat&sektion=2&format=html)、[fstatat(2)(https://man.freebsd.org/cgi/man.cgi?query=fstatat&sektion=2&format=html) 和 [mkdirat(2)(https://man.freebsd.org/cgi/man.cgi?query=mkdirat&sektion=2&format=html) 作为相对引用来解决。

违规追踪虽然不能自动 Capsicumize 程序,但它是开发者工具箱中的另一种工具。使用 [ktrace(1)(https://man.freebsd.org/cgi/man.cgi?query=ktrace&sektion=1&format=html) 对程序进行追踪只需几秒钟,结果几乎总是 Capsicum 沙箱化程序的良好起点。

赞助方:FreeBSD 基金会

NVMe-oF(NoF,基于 Fabrics 的 NVMe)

链接:

nvmf2 分支 URL: https://github.com/bsdjhb/freebsd/tree/nvmf2

联系人:John Baldwin [email protected]

NVMe-oF 能通过网络 fabric 使用 NVMe 协议与存储设备通信。这类似于使用 iSCSI 通过网络导出存储设备。

目前 NVMe-oF 定义了 Fibre Channel、RDMA 和 TCP 的网络传输方式。

nvmf2 分支的工作包括用户态库 (lib/libnvmf),该库包含传输抽象及 TCP 传输实现。还修改了 [nvmecontrol(8)(https://man.freebsd.org/cgi/man.cgi?query=nvmecontrol&sektion=8&format=html),添加 'discover'、'connect' 和 'disconnect' 命令来管理远程控制器连接。

分支还包含内核态的 Fabric 实现。nvmf_transport.ko 提供传输抽象,位于 nvmf 主机(SCSI 术语中的 initiator)与各个传输之间。nvmf_tcp.ko 实现 TCP 传输层。nvmf.ko 实现 NVMe over Fabrics host(initiator),连接远程控制器并将远程命名空间导出为磁盘设备。与 NVMe PCI-e 驱动 [nvme(4)(https://man.freebsd.org/cgi/man.cgi?query=nvme&sektion=4&format=html) 类似,命名空间通过 /dev/nvmeXnsY 设备导出,仅支持简单操作,同时通过 CAM 导出为 ndaX 磁盘设备。不同于 [nvme(4)(https://man.freebsd.org/cgi/man.cgi?query=nvme&sektion=4&format=html),[nvmf(4)(https://man.freebsd.org/cgi/man.cgi?query=nvmf&sektion=4&format=html) 不支持 [nvd(4)(https://man.freebsd.org/cgi/man.cgi?query=nvd&sektion=4&format=html) 驱动。[nvmecontrol(8)(https://man.freebsd.org/cgi/man.cgi?query=nvmecontrol&sektion=8&format=html) 可用于远程命名空间和控制器,例如获取日志页、显示 identify 信息等。

需要注意的是,[nvmf(4)(https://man.freebsd.org/cgi/man.cgi?query=nvmf&sektion=4&format=html) 当前实现较简单,一些错误处理仍为待办事项 O。如果发生错误,队列(及其网络连接)会被丢弃,但设备仍保留,I/O 请求暂停。可使用 nvmecontrol reconnect 重新连接网络连接以恢复操作。与 iSCSI 使用持久守护进程 ([iscsid(8)(https://man.freebsd.org/cgi/man.cgi?query=iscsid&sektion=8&format=html)) 不同,重连需手动进行。

当前代码非常新,可能不够健壮,尚不适合生产环境。经验丰富且愿意承担内核 panic 导致数据丢失风险的用户,可自行测试 NVMe-oF。

下一主要任务是实现 Fabrics 控制器(SCSI 术语中的 target),可能先在用户态实现简单版本,再实现内核 offload 数据处理的“真实”版本,并与 [ctld(8)(https://man.freebsd.org/cgi/man.cgi?query=ctld&sektion=8&format=html) 集成,以便通过单个配置文件和守护进程导出 iSCSI 或 NVMe 磁盘设备。这可能需要对 ctld 进行重构,以降低 iSCSI 特定性。控制器端开发还可验证传输独立层中当前未充分测试的 API 设计。预计在此步骤完成前,不会将 NVMe over Fabrics 的更改合并到主树。

赞助方:Chelsio Communications

内核

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

改进启动性能

链接:

Wiki 页面 URL: https://wiki.freebsd.org/BootTime

BSDCan 演讲幻灯片 URL: [https://www.bsdcan.org/events/bsdcan_2023/sessions/session/116/slides/44/BSDCan23-

Firecracker.pdf](https://www.bsdcan.org/events/bsdcan_2023/sessions/session/116/slides/44/BSDCan23-Firecracker.pdf)

联系人:Colin Percival [email protected]

Colin 正在协调加速 FreeBSD 启动过程的工作。

近期的工作从 EC2 转向 Firecracker 虚拟机管理器,其提供非常简化的环境;将启动流程精简到最低限度,更容易识别剩余耗时并进一步优化。

通过对 FreeBSD 和 Firecracker 的一些实验性补丁,现在可以在 20 毫秒内启动 FreeBSD 内核。

部分近期改进在 Colin 的 Porting FreeBSD to Firecracker BSDCan 演讲中有讨论。

赞助方:https://www.patreon.com/cperciva

启动加载程序的 CI 测试平台

链接:

FreeBSD 谷歌编程之夏 Wiki 页面 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/CITestHarnessForBootloader

GitHub 项目链接 URL: https://github.com/mightyjoe781/freebsd-src/tree/bootloader-smk/tools/boot/bootloader_test

联系人:Sudhanshu Mohan Kashyap [email protected]

FreeBSD 支持多种架构、文件系统和磁盘分区方案。该项目旨在编写 Lua 脚本,用于测试所有一、二线支持架构组合的启动加载程序,并报告任何损坏的组合和预期功能。如果时间允许,脚本还可进一步集成到现有构建基础设施(Jenkins 或 GitHub Actions),生成测试结果的综合报告。

当前,开发者的修改可能会影响操作系统在特定环境下的启动能力。这些脚本可以保证修改不会导致测试环境出现回退问题。脚本设计高效,成本远低于现有的完整的 make universe 测试,因此开发者可以经常使用,并能无成本地集成到 CI 流程中。

目前脚本开发进展顺利,但仍需收集各类 QEMU 配置以测试不同环境。如有可用的 FreeBSD 版本 QEMU 配置,请发送至 [email protected]

赞助方:2023 谷歌编程之夏项目

FreeBSD 内核物理内存压缩

链接:

谷歌编程之夏项目 Wiki 页面 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/PhysicalMemoryAntiFragmentationMechanisms

差异修订 D40575 URL: https://reviews.freebsd.org/D40575

差异修订 D40772 URL: https://reviews.freebsd.org/D40772

联系人:Bojan Novković [email protected](%[email protected](mailto:[email protected]))

现代 CPU 架构通过支持大页提升性能,但由于物理内存碎片严重,大页分配可能失败。本项目实现物理内存压缩,以在运行系统中主动减少碎片化,作为谷歌编程之夏项目的一部分,目标是在虚拟内存子系统中增加多种防碎片机制。

差异修订 D40575 实现了量化物理内存碎片程度的指标。D40772 实现了物理内存压缩,并添加了守护进程,用于监控系统并在需要时执行压缩。

未来计划包括设计基准测试套件、运行测试,并根据评审和测试结果调整代码。该项目仍在进行中,欢迎测试、评审和反馈。

赞助方:2023 谷歌编程之夏项目

提高 MAXCPU

链接:

Review D36838: amd64: 将 MAXCPU 从 256 提升至 1024 URL: https://reviews.freebsd.org/D36838

联系人:Ed Maste [email protected](%[email protected](mailto:[email protected]))

当前 amd64 和 arm64 FreeBSD 内核默认支持最多 256 个 CPU。通过设置 MAXCPU 内核选项,可为自定义内核增加更多核心支持。但未来 FreeBSD 14 生命周期中,更高核数的系统将越来越常见,因此计划将默认 MAXCPU 提升至 1024,以支持大核数系统“开箱即用”。

已完成的修改包括修复 cpuset_t 的用户态最大值为 1024,并避免使用静态 MAXCPU 大小数组,改为按需分配内存。

后续工作包括继续减少静态 MAXCPU 分配,并解决超高核数系统的可扩展性瓶颈,目标是在 FreeBSD 14 发布时提供稳定 ABI 和 KBI,支持大 CPU 数量。

赞助方:FreeBSD 基金会

移植 SquashFS 到 FreeBSD 内核

链接:

Wiki 页面 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/PortSquashFuseToTheFreeBSDKernel

源码 URL: https://github.com/Mashijams/freebsd-src/tree/gsoc/squashfs

联系人:Raghav Sharma [email protected]

SquashFS 是一种只读文件系统,可高效压缩整个文件系统或单个目录,自 2009 年起 Linux 内核内置支持,在嵌入式 Linux 中广泛使用。该项目目标是为 FreeBSD 内核增加 SquashFS 支持,使其能够从内存中的 SquashFS 文件系统启动。

当前驱动兼容 FreeBSD 13.2,能正确解析 SquashFS 磁盘文件,并支持 [mount(8)(https://man.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html)。该驱动支持多种压缩方式(zstd、lzo2、zlib 等),与 Linux SquashFS 兼容。

未来计划包括添加目录、文件、扩展属性和符号链接的读取支持。项目仍在进行中,由 Chuck Tuffli 指导,预计在谷歌编程之夏项目结束前完成。

赞助方:2023 谷歌编程之夏项目

改进 Pf

链接:

D40911 URL: https://reviews.freebsd.org/D40911

D40861 URL: https://reviews.freebsd.org/D40861

D40862 URL: https://reviews.freebsd.org/D40862

D40863 URL: https://reviews.freebsd.org/D40863

D40864 URL: https://reviews.freebsd.org/D40864

D40865 URL: https://reviews.freebsd.org/D40865

D40866 URL: https://reviews.freebsd.org/D40866

D40867 URL: https://reviews.freebsd.org/D40867

D40868 URL: https://reviews.freebsd.org/D40868

D40869 URL: https://reviews.freebsd.org/D40869

D40870 URL: https://reviews.freebsd.org/D40870

联系人:Kajetan Staszkiewicz [email protected]

联系人:Naman Sood [email protected]

联系人:Kristof Provost [email protected]

[pf(4)(https://man.freebsd.org/cgi/man.cgi?query=pf&sektion=4&format=html) 是 FreeBSD 中的防火墙之一,也是最流行的防火墙之一,由 OpenBSD 项目创建并移植到 FreeBSD。

回溯 OpenBSD 语法

Kajetan 引入了 OpenBSD 风格的“scrub”操作语法,可用于“match”和“pass”规则。现有规则仍受支持,但现在也支持 OpenBSD 风格的“scrub”配置。

pfsync 协议版本控制

现在可以配置 [pfsync(4)(https://man.freebsd.org/cgi/man.cgi?query=pfsync&sektion=4&format=html) 的协议版本,能在不同内核版本之间进行状态同步的同时进行协议更改,从而支持新功能。

pfsync: IPv6 传输

现在也可以通过 IPv6 传输 pfsync 流量。该功能由 Naman 完成 Luiz Amaral 开始的工作。

SCTP

pf 正在进行对 SCTP 的支持,包括端口号过滤、状态跟踪、pfsync 故障切换以及对被拒绝连接返回 ABORT 数据块。

赞助方:InnoGames GmbH

赞助方:Orange Business Services

赞助方:FreeBSD 基金会

网络接口 API(IfAPI)

链接:

原项目页面 URL: https://wiki.freebsd.org/projects/ifnet

联系人:Justin Hibbits [email protected]

IfAPI(前身为 DrvAPI)始于 2014 年,目标是隐藏 [ifnet(9)(https://man.freebsd.org/cgi/man.cgi?query=ifnet&sektion=9&format=html) 结构,使网络驱动通过访问器函数访问成员,从而无需重新编译驱动即可更改网络栈,并可能允许单个驱动支持多个 FreeBSD 版本。

该目标已在基本系统中实现,但仍需更新一些 ports 以使用 IfAPI。可使用 tools/ifnet/convert_ifapi.sh 自动完成大部分转换。文档尚在编写中,但仍需协助整理 [ifnet(9)(https://man.freebsd.org/cgi/man.cgi?query=ifnet&sektion=9&format=html) 的内容,目前部分信息已过时。

赞助方:Juniper Networks, Inc.

让 Netgraph 无锁化

链接:

Wiki 页面 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/LocklessSynchronizationBetweenNodesInNetgraph

代码仓库 URL: https://github.com/zinh88/epoch-netgraph

联系人:Zain Khan [email protected]

Netgraph 通过将内核对象(节点)组织为图并使用 hook 连接,实现自定义或复杂网络功能。节点可对输入数据包执行操作,并将输出发送给其他节点。在 SMP 前的环境中,线程总能立即调用节点函数,但并发引入了节点忙碌的可能性,同时数据包路径可能因节点或 hook 被移除而引用已释放对象。

现有代码通过拓扑读写互斥锁防止结构重组导致的问题。项目目标是恢复类似单线程时的流畅数据流,使数据在重组事件中无需等待,同时保证内核安全。

FreeBSD 提供了基于 Epoch 的并发安全数据结构和机制,该项目利用 Epoch 实现安全回收。由于修改基本系统,还会影响消息队列、引用计数等设计。

项目涉及大量测试,目前只移除了部分拓扑保护锁并在 VM 上测试简单图,硬件测试将在 4 核以上系统进行。

赞助方:2023 谷歌编程之夏项目

架构

更新平台特定功能并支持新硬件平台。

amd64 SIMD 增强

链接:

SIMD 调度框架草案 URL: https://reviews.freebsd.org/D40693

项目提案 URL: http://fuz.su/~fuz/freebsd/2023-04-05_libc-proposal.txt

联系人:Robert Clausecker [email protected]

SIMD 指令集(如 SSE、AVX、NEON)在现代计算机中广泛使用,可为许多应用提供性能优势。本项目旨在提供常用 libc 函数(主要为 [string(3)(https://man.freebsd.org/cgi/man.cgi?query=string&sektion=3&format=html))的 SIMD 加速版本,加速大部分 C 程序。

每个函数将提供最多四个实现:

  • 标量:为 amd64 优化,但不使用 SIMD

  • 基线:使用 SSE 和 SSE2,或 x86-64-v2 实现,使用 SSE4.2 前所有扩展

  • x86-64-v3:使用 AVX 和 AVX2

  • x86-64-v4:使用 AVX-512F/BW/CD/DQ

用户可通过设置 AMD64_ARCHLEVEL 环境变量选择 SIMD 增强级别。

当前项目仅针对 amd64,但未来可能扩展至 arm64 等架构。

赞助方:FreeBSD 基金会

将 mfsBSD 集成到发布构建工具中

链接:

Wiki 文章 URL: https://wiki.freebsd.org/SummerOfCode2023Projects/IntegrateMfsBSDIntoTheReleaseBuildingTools

[项目仓库(integrate-mfsBSD-building 分支)(https://github.com/soobinrho/freebsd-src/tree/integrate-mfsBSD-building) URL: https://github.com/soobinrho/freebsd-src/tree/integrate-mfsBSD-building

联系人:Soobin Rho [email protected]

什么是 mfsBSD?

“mfsBSD 是一套工具,用于创建小型但功能完整的基于 mfsroot 的 FreeBSD 发行版,将所有文件存储在内存(MFS,Memory File System)中,并可从硬盘、USB 存储设备或光盘加载。它可用于无盘系统、恢复分区以及远程覆盖其他操作系统等多种用途。”

Martin MatuskamfsBSD 白皮书 的作者,同时也是 mfsBSD 仓库 的维护者。

目标

本项目在 src/release makefile 中为 -current 和 -stable 版本的 mfsBSD 镜像创建每周快照的额外目标。目前仅生成发布版本的 mfsBSD 镜像,这可能导致其与基础工具不同步。本项目旨在解决这一问题。

时间与地点

这是 2023 谷歌编程之夏项目,官方编码周期为 2023 年 5 月 29 日至 2023 年 8 月 28 日。作为开源社区的新手,作者欢迎在项目仓库中提供所有评论、建议或 RP,期间所有代码均在此维护。

导师:Juraj LutterJoseph Mingone

赞助方:2023 谷歌编程之夏项目

云计算

更新云相关功能并支持新云平台。

作为 cloud-init 一级平台的 FreeBSD

链接:

cloud-init 官网 URL: https://cloud-init.io/

cloud-init 文档 URL: https://cloudinit.readthedocs.io/en/latest/

cloud-init 持续重构 URL: https://github.com/canonical/cloud-init/blob/main/WIP-ONGOING-REFACTORIZATION.rst

联系人:Mina Galić [email protected]

cloud-init 是云服务器的标准初始化方式,但对非 Linux 系统支持较差,FreeBSD 缺乏 cloud-init 支持阻碍了其成为一级平台。本项目旨在使 FreeBSD 的 cloud-init 支持与 Linux 持平,并计划逐步覆盖所有 BSD 系统。

本季度进展:

  • 临时网络类已重写并实现平台无关,可用于多个云提供商初始化临时网络。

  • cloud-init 已在 Vultr 成功测试,希望下一版本可推动 Vultr 将 FreeBSD 镜像切换为 cloud-init。

  • 扩展了 BSD 的 rsyslog 支持,并为 cloud-init 的 ds-identify 添加了 rc 脚本,实现零配置启动速度大幅提升:ds-identify 首先快速猜测云提供商,cloud-init 使用该猜测而非遍历全部提供商。用户可通过删除 /usr/local/etc/rc.d/dsidentify 禁用,并提供自定义列表,进一步节省启动时间。

下一步计划包括继续网络重构任务,并为 FreeBSD 添加 LXD 支持,以纳入 CI 测试,这涉及 LXDFreeBSD virtio 子系统 的工作。

欢迎早期测试者访问 net/cloud-init-devel 并报告 bug。自上次报告以来,cloud-init 的 bug 跟踪已从 Launchpad 转移到 GitHub。

赞助方:FreeBSD 基金会

FreeBSD 上的 OpenStack

链接:

OpenStack URL: https://www.openstack.org/

FreeBSD 上的 OpenStack URL: https://github.com/openstack-on-freebsd

联系人:Chih-Hsin Chang [email protected]

联系人:許立文 [email protected]

项目目标是移植 OpenStack 核心组件(如 keystone、nova、neutron),使 FreeBSD 可作为 OpenStack 主机。

本季度成果:

  • 移植 nova-novncproxynova-serialproxy,增加实例控制台访问方式

  • 将开发环境从物理机迁移至虚拟机

  • 解决实例内部网络连接问题

  • 可启动多个实例

  • 从 Python 3.8 移植至 3.9

下季度计划继续优化控制台代理服务,使整体流程更流畅。

POC 构建指南可在 docs 仓库 查阅,每个 OpenStack 组件的补丁版本均在同一 GitHub 组织下。

欢迎项目贡献者先检查文档并提供反馈。

赞助方:FreeBSD 基金会

在 Microsoft HyperV 与 Azure 上的 FreeBSD

链接:

微软 Azure FreeBSD wiki URL: https://wiki.freebsd.org/MicrosoftAzure

微软 HyperV FreeBSD wiki URL: https://wiki.freebsd.org/HyperV

联系人:微软 FreeBSD 集成服务团队 [email protected]

联系人:freebsd-cloud 邮件列表

联系人:FreeBSD Azure 发布工程团队 [email protected]

联系人:Wei Hu [email protected]

联系人:Souradeep Chakrabarti [email protected]

联系人:許立文 [email protected]

本季度工作重点为 ARM64 架构支持及向 Azure community gallery 构建和发布镜像。测试镜像示例:

  • FreeBSD-CURRENT-testing

  • FreeBSD-CURRENT-gen2-testing

  • FreeBSD-CURRENT-arm64-testing

使用方法:创建虚拟机时,在“Select an Image”步骤选择“Community Images (PREVIEW)”并搜索 FreeBSD

进行中的任务:

  • 自动化镜像构建与发布并合并到 src/release/

  • 构建和发布基于 ZFS 的 Azure Marketplace 镜像(已合并到 main,可通过 VMFS=zfs 创建)

  • 构建并发布 Hyper-V gen2 VM 镜像至 Azure Marketplace

  • 构建并发布快照版本至 Azure community gallery

上述任务由 FreeBSD 基金会赞助,微软提供部分资源。

微软的 Wei Hu 与 Souradeep Chakrabarti 承担以下任务:

待完成任务:

赞助方:微软(针对 Microsoft 团队人员及资源)

赞助方:FreeBSD 基金会(其余任务)

EC2 上的 FreeBSD

链接: FreeBSD/EC2 Patreon URL: https://www.patreon.com/cperciva

联系人:Colin Percival [email protected]

可在 x86(Intel 与 AMD)和 ARM64(Graviton)EC2 实例上运行 FreeBSD。工作仍在继续,以确保新发布的实例类型能够得到支持,包括最近宣布的 M7a“EPYC”实例,这些实例将在 FreeBSD 14.0-RELEASE 中获得支持。

每周 FreeBSD 快照最近已从“UEFI”启动模式更改为“UEFI Preferred”启动模式,从而在支持“裸机”和“上一代”不兼容 UEFI 的实例类型的同时,享受 UEFI 带来的启动性能提升。此更改将在 FreeBSD 14.0-RELEASE 中体现。

EC2 启动脚本最近已更新以支持 IMDSv2,该更新也将在 FreeBSD 14.0-RELEASE 中生效。

若 FreeBSD 13.2 用户需要这些更新,作者可提供 FreeBSD“13.2-RELEASE plus updates”AMI。

此工作由 Colin 的 FreeBSD/EC2 Patreon 赞助。

文档

文档树、手册页或新外部书籍/文档中的显著变更。

文档工程团队

链接:

FreeBSD 文档项目 URL: https://www.freebsd.org/docproj

新贡献者文档指南 URL: https://docs.freebsd.org/en/books/fdp-primer/

文档工程团队 URL: https://www.freebsd.org/administration/#t-doceng

联系人:FreeBSD 文档工程团队 [email protected]

文档工程团队负责处理与 FreeBSD 文档工程团队相关的元项目事务;更多信息请参见 文档工程团队章程

本季度:

  • fernape@ 被任命为新成员

  • www/gohugo Port 维护权已转交给文档工程团队,因其是文档基础设施关键部分,该决定已与前维护者达成一致

  • 改进了翻译工作流程(如下节所述)

Port 开发者手册

新增 USES=nextcloud

FDP 指南

新增一章介绍 Weblate,用于 新贡献者 FreeBSD 文档项目指南。该章节详细说明加入 FreeBSD 翻译团队的步骤,包括在线 Weblate 和离线翻译,提供高效翻译、校对和测试的实用建议,并指导贡献者如何将翻译正式提交到文档仓库,实现无缝集成。

FreeBSD Weblate 翻译

链接:

在 Weblate 翻译 FreeBSD URL: https://wiki.freebsd.org/Doc/Translation/Weblate

FreeBSD Weblate 实例 URL: https://translate-dev.freebsd.org/

2023 年第二季度状态

FreeBSD Weblate 实例现运行在专用服务器上,显著提高速度和翻译效率,特别感谢 ebrandi@ 提供硬件升级。

语言进展

  • 中文(简体)(zh-cn) 进度:7%

  • 中文(繁体)(zh-tw) 进度:3%

  • 荷兰语 (nl) 进度:1%

  • 法语 (fr) 进度:1%

  • 德语 (de) 进度:1%

  • 印尼语 (id) 进度:1%

  • 意大利语 (it) 进度:5%

  • 韩语 (ko) 进度:32%

  • 挪威语 (nb-no) 进度:1%

  • 波斯语 (fa-ir) 进度:3%

  • 波兰语 进度:1%

  • 葡萄牙语 (pt-br) 进度:22%

  • 僧伽罗语 (si) 进度:1%

  • 西班牙语 (es) 进度:33%

  • 土耳其语 (tr) 进度:2%

感谢所有参与翻译或审校文档的贡献者,也请在当地用户组中推广此工作,我们始终需要更多志愿者。

FreeBSD 手册工作组

联系人:Sergio Carlavilla [email protected]

正在重写网络章节

FreeBSD 网站改版 - WebApps 工作组

联系人:Sergio Carlavilla [email protected]

工作组负责创建新的 FreeBSD 文档门户和重新设计 FreeBSD 主网站及其组件。开发者可在 FreeBSD Slack 频道 #wg-www21 跟进并加入。工作分为四个阶段:

  1. 文档门户重新设计 创建响应式新设计,并增加全局搜索功能。(已完成

  2. Web 上手册页重新设计 使用 mandoc 生成 HTML 页面脚本。(已完成)公共实例:https://man-dev.FreeBSD.org

  3. Web 上 Ports 页面重新设计 Ports 脚本创建应用门户。(进行中

  4. FreeBSD 主网站重新设计 新设计,响应式并支持暗色主题。(进行中

Ports

涉及 Ports 的变更,无论是影响整个树的重大变动,还是单个 Port 的更新。

FreeBSD 上的 KDE

链接:

KDE/FreeBSD initiative URL: https://freebsd.kde.org/

FreeBSD — KDE Community Wiki URL: https://community.kde.org/FreeBSD

联系人:Adriaan de Groot [email protected]

FreeBSD 上的 KDE 项目为 Ports 树打包了 CMake、Qt 以及 KDE 社区的软件。这些软件包括完整的桌面环境 KDE Plasma(支持 X11 与 Wayland)以及数百款可在任意 FreeBSD 机器上使用的应用程序。

KDE 团队 (kde@) 是 desktop@ 和 x11@ 的一部分,构建软件栈,使 FreeBSD 在日常使用中成为美观且可用的图形桌面工作站。下文主要介绍 KDE 相关的 Ports,但也包括对整个桌面栈重要的项目。

基础设施

更新 Qt5 Ports:

  • devel/qt5-webengine 修复了在 Clang 16 下构建的问题,为即将发布的 FreeBSD 14 做准备。

  • devel/qt5-qmake 修复了在 Qt 未安装系统上安装 qmake 会引发异常的边缘情况。

更新 Qt6 Ports:

  • devel/qt6-tools 修复了在 Clang 16 下构建的问题,为 FreeBSD 14 发布做准备。

accessibility/at-spi2-core Port(桌面辅助技术关键组件)已更新至 2.48.0,并改进了对非 X11 桌面的支持,提升了 Wayland 系统兼容性。感谢 Jan Beich 的贡献。

graphics/poppler Port(许多 PDF 查看器的基础)更新至 23.05。

ports-mgmt/packagekit-qt Port 新增到树中,为 FreeBSD 图形化包管理器铺路。

KDE 栈

KDE Gear 每季度发布,KDE Plasma 每月更新,KDE Frameworks 也每月发布新版本。上述更新在上游发布后不久即可在 Ports 中体现。

  • KDE Frameworks 更新到 5.105、5.106 与 5.107

  • KDE Gear 更新至 23.04.0,并随即发布 .1 与 .2 修复版本

  • KDE Plasma Desktop 更新至 5.27.4,随后发布 .5 与 .6 修复版本

相关 Port

弃用:

更新:

新软件:

FreeBSD 上的 GCC

链接:

GCC 项目 URL: https://gcc.gnu.org/

GCC 10 发行系列 URL: https://gcc.gnu.org/gcc-10/

GCC 11 发行系列 URL: https://gcc.gnu.org/gcc-11/

GCC 12 发行系列 URL: https://gcc.gnu.org/gcc-12/

GCC 13 发行系列 URL: https://gcc.gnu.org/gcc-13/

联系人:Lorenzo Salvadore [email protected]

上游发布了 GCC 13。如上次报告所述,计划从 GCC 13 第一个版本开始尝试更新 GCC_DEFAULT,因此本季度大部分工作为此做准备。

GCC 13.1(首个 GCC 13 版本)发布后,在 Ports 树中创建了两个新 Port:

*-devel Ports

启用对 .init_array 与 .fini_array 的支持。FreeBSD 自提交 83aa9cc00c2d 起已支持。

i386、amd64 与 aarch64 默认 bootstrap 选项已从 LTO_BOOTSTRAP 回退到 STANDARD_BOOTSTRAP:

  • LTO bootstrap 在这些架构上产生过多包构建失败

  • LTO_BOOTSTRAP 仍可供需要的用户使用

这些更改将向生产 Ports 推送。

生产 Ports

上游已发布 GCC 13,新建 Port lang/gcc13。GCC 11 与 12 已更新,上游计划发布 GCC 10 新版本,所有对应 Ports 需更新。

为简化维护者和用户工作,计划同时测试并更新以下内容:

  • 将 GCC_DEFAULT 更新为 13

  • 在生产 Ports 启用 .init_array 与 .fini_array

  • 将生产 Ports 的 bootstrap 从 LTO_BOOTSTRAP 切换回 STANDARD_BOOTSTRAP

优势:

  • 测试次数更多但实验运行更少

  • Ports 用户构建次数更少

Puppet

链接:

Puppet URL: https://puppet.com/docs/puppet/latest/puppet_index.html

联系人:Puppet 团队 [email protected]

Puppet 是一款自由软件配置管理工具,由 Puppet Server 提供信任源,以领域特定语言描述机器的预期配置,Puppet Agent 在每个节点上确保实际配置与预期匹配。可选 PuppetDB 用于高级架构和配置依赖关系管理。

Puppet 团队维护 Puppet 及相关工具的 Ports。

  • Puppet 8 最近发布,并已加入 Ports 树

  • Puppet 6 已到达生命周期终点并弃用,建议用户升级到 Puppet 7 或 Puppet 8

目前,Puppet 7 仍为依赖 Puppet 的 Ports 默认版本。Puppet 社区正在努力确保各种模块与最新代码兼容,当前升级到 Puppet 8 可能存在挑战。随着模块更新完成,预计几个月后将 Puppet 8 设为默认版本。

FreeBSD 上的 MITRE Caldera

链接:

MITRE Caldera URL: https://caldera.mitre.org/

Red Canary URL: https://www.redcanary.com/

联系人:José Alonso Cárdenas Márquez [email protected]

MITRE Caldera 是一家网络安全平台,用于轻松自动化对手模拟、辅助红队手动操作以及自动化事件响应。

它基于 MITRE ATT&CK® 框架构建,是 MITRE 的一项活跃研究项目。

MITRE Caldera (security/caldera) 于 2023 年 4 月加入 Ports 树。该 Port 支持 Atomic Red Team Project,可通过 MITRE Caldera atomic plugin 使用。

该工作的主要目标是提升 FreeBSD 作为信息安全或网络安全平台的可见性。

此外,你可以使用 https://github.com/alonsobsd/caldera-makejailhttps://github.com/AppJail-makejails/caldera(来自 AppJail)轻松测试 MITRE Caldera 基础设施。AppJail 是一款便于从命令行管理 jail 容器的好工具。

欢迎有兴趣的人参与项目。

当前版本:4.2.0

待办事项

FreeBSD 上的 Wazuh

链接:

Wazuh URL: https://www.wazuh.com/

联系人:José Alonso Cárdenas Márquez [email protected]

Wazuh 是一家免费开源平台,用于威胁预防、检测和响应,可保护本地、虚拟化、容器化及云环境中的工作负载。

Wazuh 解决方案由端点安全代理和管理服务器组成。管理服务器收集并分析代理收集的数据。Wazuh 与 Elastic StackOpenSearch 完全集成,提供搜索引擎和数据可视化工具,用户可通过其浏览安全告警。

将 Wazuh 移植到 FreeBSD 的工作开始于 Michael Muenz,他自 2021 年 9 月首次将 security/wazuh-agent 加入 Ports 树。2022 年 7 月,我接管该 Port,并开始移植其他 Wazuh 组件。

目前,所有 Wazuh 组件已移植或适配:security/wazuh-managersecurity/wazuh-agentsecurity/wazuh-serversecurity/wazuh-indexersecurity/wazuh-dashboard

在 FreeBSD 上,security/wazuh-managersecurity/wazuh-agent 从 Wazuh 源代码编译,security/wazuh-indexer 基于 textproc/opensearch 改编,用于存储代理数据。security/wazuh-server 对配置文件进行了 FreeBSD 定向适配。运行时依赖包括 security/wazuh-managersysutils/beats8(filebeat)和 sysutils/logstash8security/wazuh-dashboard 使用适配的 textproc/opensearch-dashboards 以及从 Wazuh 源代码生成的 wazuh-kibana-app 插件。

该工作的主要目标同样是提升 FreeBSD 在信息安全或网络安全平台中的可见性。

此外,你可以使用 https://github.com/alonsobsd/wazuh-makejailhttps://github.com/AppJail-makejails/wazuh(来自 AppJail)轻松测试 Wazuh 单节点基础设施(All-in-one)。

欢迎有兴趣的人参与项目。

当前版本:4.4.4

待办事项

第三方项目

许多项目基于 FreeBSD 构建或将 FreeBSD 组件整合到其项目中。由于这些项目可能对更广泛的 FreeBSD 社区有兴趣,我们有时会在季度报告中包含这些项目提交的简要更新。FreeBSD 项目不对这些提交内容的准确性或真实性作出任何保证。

PkgBase.live

链接:

网站 URL: https://alpha.pkgbase.live/

源码 URL: https://codeberg.org/pkgbase

联系人:Mina Galić [email protected]

PkgBase.live 是 FreeBSD PkgBase 项目 的非官方仓库,目前已恢复服务。

该服务灵感来自 https://up.bsd.lv/,曾为 STABLE 与 CURRENT 分支提供 [freebsd-update(8)(https://man.freebsd.org/cgi/man.cgi?query=freebsd-update&sektion=8&format=html)。up.bsd.live 暂停服务,使 PkgBase.live 恢复更显必要。

目前提供构建版本:

  • FreeBSD 13.2-RELEASE

  • FreeBSD 13-STABLE

  • FreeBSD 14-CURRENT

支持平台:

  • amd64

  • aarch64

  • armv7

  • i386

RISCv64 暂时未提供。

硬件为 Vultr 的高性能 VPS。服务器与运行构建任务及提供包的 jails 均为“自托管”,安装并通过 PkgBase 保持最新。

由于尚未在 FreeBSD jails 中配置 Vultr IPv6,PkgBase.live 暂不支持 IPv6。如有经验,请联系管理员。

硬件由 FreeBSD 社区成员赞助。

FreeBSD 容器管理:Pot、Potluck 与 Potman

链接:

Pot GitHub 组织 URL: https://github.com/bsdpot

联系人:

Luca Pizzamiglio (Pot) [email protected]

Bretton Vine (Potluck) [email protected]

Michael Gmelin (Potman) [email protected]

Pot 是一款 jail 管理工具,同时支持通过 Nomad 进行编排 详细

本季度发布 Pot 0.15.5,包含多项 bug 修复与 [属性设置功能(如 jail sysctl 变量)(https://github.com/bsdpot/pot/pull/263),将在 2023Q3 季度包集中提供。

Potluck 旨在成为 FreeBSD 与 Pot 的 Dockerhub,即提供 Pot 风格及完整容器镜像的仓库,可与 Pot 或 Nomad 一道使用。

所有 Potluck 容器已重新构建为基于 FreeBSD 13.2 的镜像,并通过 Pot signify 签名。

撰写了 《在 FreeBSD 上使用 Ansible、Pot 等构建虚拟数据中心的初学者指南》,说明如何通过 Ansible playbook 部署基于 Pot 与 Potluck 的复杂环境,包括示例节点如 MariaDB、Prometheus、Grafana、nginx、OpenLDAP 或 Traefik,以及由 Nomad 与 Consul 管理的容器编排。

Pot 团队提交的 Nomad 安全性改进补丁 已被上游接受,将作为 Nomad 1.6.0 的一部分。Nomad 是调度器与编排器,支持通过 sysutils/nomad-pot-driver 使用 Pot。

欢迎反馈与补丁。

赞助商:Honeyguide Group

最后更新于