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 的公司取得联系,倾听它们的故事。如果你属于此类公司且我们尚未联系,请在 我的日程 上安排通话。
本季度其他合作相关活动包括:
我与基金会同事合作,为向行业分析师的演示制作了多份行业特定的使用案例幻灯片。
我还在寻求包括以下机构的资助机会:
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。
以下是我们在推广和教育方面的一些工作:
协助组织并参加了 2023 年 5 月 17-18 日在加拿大安大略渥太华举办的 开发者峰会
在 BSDCan 庆祝项目 30 周年,提供蛋糕及特刊 FreeBSD 期刊 30 周年纪念版
在 2023 年 7 月 13-16 日于美国俄勒冈州波特兰的 FOSSY 安排 FreeBSD 研讨会与讲座
确认对 2023 年 9 月 14-17 日在葡萄牙科英布拉举行的 EuroBSDCon 2023 的银级赞助
确认对 2023 年 10 月 15-17 日在美国北卡罗来纳州罗利举行的 All Things Open 展位支持
开始规划 FreeBSD 秋季厂商峰会
欢迎两位 新团队成员:Greg Wallace 和 Pierre Pronchery
通过特别视频和博客文章庆祝 FreeBSD 日 及项目 30 周年纪念,活动日期为 6 月 19 日及当周
其他博客文章:
EuroBSDCon 2023 差旅补助申请开启 - 注意:申请截止日期为 2023 年 8 月 2 日
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 月。
团队继续为 main
、stable/13
和 stable/12
分支提供每周开发快照构建。注意,今后将不再针对 stable/12
提供快照构建。
赞助方:Tarsnap
赞助方:FreeBSD 基金会
集群管理团队
链接:
集群管理团队成员 URL: https://www.freebsd.org/administration/#t-clusteradm
联系方式:集群管理团队 [email protected]
FreeBSD 集群管理团队成员负责管理项目依赖的机器,用于同步其分布式工作和通信。
本季度,团队完成了以下工作:
定期支持 FreeBSD.org 用户账户。
定期维护(含替换)所有物理主机和镜像的磁盘及部件。
启用 FreeBSD 项目管理镜像对 https://www.FreeBSD.org 和 https://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 上进行更多测试来提升他们的产品质量。
已完成的重要任务:
main 和 stable/13 分支的构建环境已更新到 13.2-RELEASE,stable/12 分支更新为 12.4-RELEASE。
使用 gcc12 的 *-build 作业已将失败报告发送至 dev-ci 邮件列表。
在 BSDCan 2023 开发者峰会 上展示 Testing/CI 状态更新。
正在进行的任务:
设计并实现 pre-commit CI 构建和测试(支持 workflow 工作组)
设计并实现使用 CI 集群构建发行产物(如发布工程操作)
简化贡献者和开发者的 CI/测试环境配置
设置 CI 阶段环境并运行实验性作业
整理 freebsd-ci 仓库脚本,为合并到 src 仓库做准备
改进硬件测试实验室并增加测试硬件
合并 D38815
合并 D36257
开放或排队任务:
收集并整理 CI 任务和想法
为运行测试的虚拟机提供公共网络访问
使用裸机硬件运行测试套件
为 -CURRENT 构建 drm ports 测试
计划运行 ztest 测试
帮助更多软件在其 CI 流程中支持 FreeBSD(Wiki 页面:3rdPartySoftwareCI、HostedCI)
与托管 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 sysent
和 make 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)。
赞助方: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 对作者来说过于耗时。
需要帮助
编写 [loader.kboot(8)(https://man.freebsd.org/cgi/man.cgi?query=loader.kboot&sektion=8&format=html) 文档,包括使用方法、镜像创建方式及当前可行的用例。
完成 amd64 支持。
统一 kboot 与 efi 的 elf 架构特定元数据代码,解决编译时差异和构建基础设施问题。
增加 riscv64 支持。
PowerPC 测试(自重构开始后未测试)。
编写脚本,将 EDK-II 镜像(例如从 QEMU)重新打包为带 FreeBSD Linux 内核的 linux-boot 镜像,用于 CI 测试。
在 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
分支之前提交 D40369。D40370 和 D40371 将在 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 Matuska 是 mfsBSD 白皮书 的作者,同时也是 mfsBSD 仓库 的维护者。
目标
本项目在 src/release makefile 中为 -current 和 -stable 版本的 mfsBSD 镜像创建每周快照的额外目标。目前仅生成发布版本的 mfsBSD 镜像,这可能导致其与基础工具不同步。本项目旨在解决这一问题。
时间与地点
这是 2023 谷歌编程之夏项目,官方编码周期为 2023 年 5 月 29 日至 2023 年 8 月 28 日。作为开源社区的新手,作者欢迎在项目仓库中提供所有评论、建议或 RP,期间所有代码均在此维护。
导师:Juraj Lutter 和 Joseph 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 测试,这涉及 LXD 和 FreeBSD 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-novncproxy
和nova-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 承担以下任务:
将 Hyper-V 客户端支持移植至 aarch64
待完成任务:
更新微软 Learn 上 FreeBSD 相关文档
支持 Azure Pipelines 的 FreeBSD
更新 Azure agent port 至最新版本
赞助方:微软(针对 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 年第二季度状态
支持 15 种语言
注册用户 183 人
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 跟进并加入。工作分为四个阶段:
文档门户重新设计 创建响应式新设计,并增加全局搜索功能。(已完成)
Web 上手册页重新设计 使用 mandoc 生成 HTML 页面脚本。(已完成)公共实例:https://man-dev.FreeBSD.org
Web 上 Ports 页面重新设计 Ports 脚本创建应用门户。(进行中)
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
弃用:
graphics/ikona(Rust + Qt 图标查看器)上游已放弃
polish/kadu(曾在波兰流行的聊天应用)已弃用
sysutils/plasma5-ksysguard(系统监控应用)上游弃用,将不再更新
更新:
astro/kstars 更新至 3.6.4
devel/qcoro 更新至 0.9.0
devel/qtcreator 更新至 10.0.2
games/gcompris-qt 更新至 3.2
graphics/kphotoalbum 更新至 5.10.0
net-im/tokodon 加入 KDE Gear
textproc/kdiff3 更新至 1.10.1
新软件:
devel/kommit(Git 客户端)新增,为 gitklient 的重命名
multimedia/kasts KDE 社区新推出的播客收听应用
textproc/arianna KDE 社区新推出的移动电子书阅读器,可用于阅读 FreeBSD 文档
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:
lang/gcc13 跟踪 GCC 13 发布
lang/gcc14-devel 跟踪 GCC 14 上游快照
*-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-makejail 或 https://github.com/AppJail-makejails/caldera(来自 AppJail)轻松测试 MITRE Caldera 基础设施。AppJail 是一款便于从命令行管理 jail 容器的好工具。
欢迎有兴趣的人参与项目。
当前版本:4.2.0
待办事项
增加 Caldera 测试基础设施 makejail
将 FreeBSD 添加到 MITRE Caldera 官方支持平台中,参见 https://github.com/mitre/caldera/pull/2752
将 FreeBSD 添加到 Red Canary 官方支持平台中,参见 https://github.com/redcanaryco/atomic-red-team/pull/2450
FreeBSD 上的 Wazuh
链接:
Wazuh URL: https://www.wazuh.com/
联系人:José Alonso Cárdenas Márquez [email protected]
Wazuh 是一家免费开源平台,用于威胁预防、检测和响应,可保护本地、虚拟化、容器化及云环境中的工作负载。
Wazuh 解决方案由端点安全代理和管理服务器组成。管理服务器收集并分析代理收集的数据。Wazuh 与 Elastic Stack 和 OpenSearch 完全集成,提供搜索引擎和数据可视化工具,用户可通过其浏览安全告警。
将 Wazuh 移植到 FreeBSD 的工作开始于 Michael Muenz,他自 2021 年 9 月首次将 security/wazuh-agent 加入 Ports 树。2022 年 7 月,我接管该 Port,并开始移植其他 Wazuh 组件。
目前,所有 Wazuh 组件已移植或适配:security/wazuh-manager、security/wazuh-agent、security/wazuh-server、security/wazuh-indexer、security/wazuh-dashboard。
在 FreeBSD 上,security/wazuh-manager 与 security/wazuh-agent 从 Wazuh 源代码编译,security/wazuh-indexer 基于 textproc/opensearch 改编,用于存储代理数据。security/wazuh-server 对配置文件进行了 FreeBSD 定向适配。运行时依赖包括 security/wazuh-manager、sysutils/beats8(filebeat)和 sysutils/logstash8。security/wazuh-dashboard 使用适配的 textproc/opensearch-dashboards 以及从 Wazuh 源代码生成的 wazuh-kibana-app 插件。
该工作的主要目标同样是提升 FreeBSD 在信息安全或网络安全平台中的可见性。
此外,你可以使用 https://github.com/alonsobsd/wazuh-makejail 或 https://github.com/AppJail-makejails/wazuh(来自 AppJail)轻松测试 Wazuh 单节点基础设施(All-in-one)。
欢迎有兴趣的人参与项目。
当前版本:4.4.4
待办事项
增加 Wazuh 集群模式基础设施 makejail(进行中)
将 FreeBSD 添加到 Wazuh Inc 官方支持平台;参见 https://github.com/wazuh/wazuh-kibana-app/pull/5413
添加 FreeBSD SCA 策略(进行中)
第三方项目
许多项目基于 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
最后更新于