本报告涉及了 2021 年 1 月至 3 月期间与 FreeBSD 相关的项目,是计划发布的四个报告中的第一个。
2021 年第一季度,FreeBSD-CURRENT 和 -STABLE 都非常活跃,13.0-RELEASE 的工作从 1 月开始,预计将在 4 月中旬完成。这次更新带来了许多新特性,甚至有可能提升一些工作负载的性能。
本期报告的条目数量略有下降,这可能是由于代码冻结期以及疫情持续带来的影响,但我们自然希望下个季度会有好转。加上切换到 AsciiDoctor,并决定充分利用状态报告的工作计划以避免压力,现在的报告可以预期在季度结束后的第一个月末发布,而不再是中旬。
本报告特别包含了许多有趣的条目,涉及了从 Linux 兼容层、各种缓解工作、长期期待的 OpenBSM 工作、内核 sanitizers 的工作,到许多其他内容,希望大家阅读时会感兴趣。
此致, Daniel Ebdrup Jensen (代表状态报告团队)
来自各个官方和半官方团队的条目,可在 管理页面 中找到。
联系人:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球范围内的 FreeBSD 项目和社区。资金来自个人和企业捐赠,用于赞助和管理软件开发项目、会议和开发者峰会,并向 FreeBSD 贡献者提供差旅赞助。基金会购买并支持硬件,以改进和维护 FreeBSD 基础设施,并提供资源来改善安全性、质量保证和发布工程工作;发布营销材料以推广、教育和宣传 FreeBSD 项目;促进商业供应商与 FreeBSD 开发者之间的合作;最后,代表 FreeBSD 项目执行合同、许可协议和其他需要合法实体的法律安排。
以下是我们在上个季度所做的一些亮点工作,以帮助 FreeBSD:
与大多数组织一样,我们的团队继续在家工作。我们对员工的旅行临时禁令仍然有效,但由于大多数会议仍然是虚拟的,因此并未对我们的工作产生太大影响。尽管如此,由于我们一些优先事项的变化以及部分员工的育儿限制,导致某些工作和回应可能有所延迟,但我们仍继续支持社区和项目。
我们帮助促进商业用户与 FreeBSD 开发者之间的合作。我们还与公司会面,讨论他们的需求,并将这些信息反馈给项目。不出所料,由于居家令以及我们公司在第一季度对旅行的禁令,面对面的会议没有举行。然而,团队能够继续与合作伙伴和商业用户进行虚拟会议。这些会议帮助我们了解 FreeBSD 在一些应用中的使用情况。
我们很高兴能与 AMD 早期合作,确保 FreeBSD 在他们最近发布的第三代 EPYC 系列上顺利运行。你可以在这里阅读更多信息:https://freebsdfoundation.org/news-and-events/latest-news/freebsd-well-prepared-for-amd-epyc-7003-series-processors/。
首先,我们要感谢所有在今年给我们捐款的人!上个季度我们筹集了 88,237 美元,其中包括 Facebook 和 Tarsnap 等组织的捐赠,以及许多个人的捐款。我们还获得了几笔本季度的捐赠承诺。
在接下来的季度中,我们将联系 FreeBSD 商业用户,帮助支持我们不断增长的工作努力。在 2021 年初,我们在软件开发团队中开设了两个职位,以增加我们在这一领域能够提供的支持。这包括增加代码审查和错误修复的数量,并向 FreeBSD 添加一些主要功能,帮助保持 FreeBSD 成为你依赖的创新、安全和可靠的操作系统。
你将在我们的报告中以及本状态报告中的个别报告中了解我们如何使用你的捐款。
我们对 2021 年的计划感到兴奋,包括更多的 FreeBSD 在线宣传和培训、操作系统课程内容以及上述的软件开发工作。虽然我们仍然处于大流行中,但我们正在努力帮助社区内的人们通过更多虚拟机会进行联系。
请考虑捐赠,以帮助我们继续并增加 2021 年对 FreeBSD 的支持:https://www.freebsdfoundation.org/donate/
我们还有合作伙伴计划,为我们的较大商业捐赠者提供更多福利。了解更多信息并与你的公司分享!https://www.freebsdfoundation.org/FreeBSD-foundation-partnership-program/
在本季度,共有 264 个基本系统提交、63 个 Port 提交和 10 个文档树提交被标记为由 FreeBSD 基金会赞助。基金会还赞助了提交到第三方仓库的工作,包括对 LLDB(LLVM 项目调试器)的 26 次提交。这些工作包括员工、实习生和赞助受益者的贡献。在其他季度报告条目中,你可以了解更多关于这些赞助项目的内容,例如 LLDB 和其他内核调试改进以及 Kernel sanitizers。
如往常一样,员工提交了大量的错误修复、次要改进和安全补丁。内核的重点领域包括虚拟内存、x86 pmap、uma、tmpfs、nullfs、ffs 和 ufs 以及作业控制改进。
用户空间的工作包括对 libc、libcasper 和 libthr 库、运行时链接器以及 ldd、cmp、diff、makefs、elfctl、growfs 和 bhyve 工具的更改。
基金会员工还参与了许多 Phabricator 代码审查,支持错误分类,整合来自第三方的多项提交,并支持 Git 转换工作组。
基金会员工还支持将 AArch64(arm64)架构提升至 Tier-1 状态的工作。该工作包括对 freebsd-update 的新增功能、各种错误修复的整合以及测试运行问题的分类。
基金会提供了一名全职员工,并赞助提高 FreeBSD 项目持续集成、自动化测试和整体质量保证工作的项目。
在 2021 年第一季度,工作重点是提交前测试和在 CI 临时环境中构建发布工件。
另一主要工作项目是跟进版本控制系统(VCS)的迁移,将源码从 Subversion 改为 Git,并将文档改为 AsciiDoc 格式。
有关完成的工作项目和详细信息,请参见本报告中的 FreeBSD CI 部分。
基金会提供硬件和支持,以改善 FreeBSD 基础设施。在上个季度,我们继续支持全球范围内的 FreeBSD 硬件。我们协调了 NYI 芝加哥新设施与 clusteradm 的工作,开始为我们计划购买的部分新 FreeBSD 硬件做准备。NYI 慷慨地免费为该项目提供这些硬件。我们还与 NYI Bridgewater 场地的新所有者进行了联系,这里是大多数 FreeBSD 基础设施所在的地方。
我们的大部分工作都致力于为项目进行宣传。这包括推广他人对 FreeBSD 的贡献;制作宣传资料,帮助人们了解 FreeBSD,并使开始使用 FreeBSD 或贡献项目的途径变得更容易;以及参加活动并邀请其他 FreeBSD 贡献者志愿组织 FreeBSD 事件、为 FreeBSD 设置展位以及进行 FreeBSD 演讲。
FreeBSD 基金会赞助了全球范围内的许多会议、活动和峰会。这些活动可以是 BSD 相关的、开源的,或是面向弱势群体的技术活动。我们支持与 FreeBSD 相关的活动,帮助提供一个分享知识的平台,促进项目合作,并促进开发者与商业用户之间的合作。这一切都有助于提供一个健康的生态系统。我们支持非 FreeBSD 相关的活动,旨在推广和提高 FreeBSD 的知名度,增加其在不同应用中的使用,并招募更多贡献者参与项目。虽然我们由于疫情仍无法参加面对面的会议,但我们能够参加虚拟活动,并开始为在线 Spring FreeBSD 开发者峰会做计划。除了参加和计划虚拟活动,我们还不断开展新的培训计划,并更新如何使用 FreeBSD 的指南,以促进更多人尝试 FreeBSD。https://www.freebsdfoundation.org/freebsd/how-to-guides/
看看我们上个季度的一些宣传与教育工作:
在 Apricot 2021 上举办了一次工作坊
在 FOSDEM 2021 上设立虚拟展位,并制作了一部关于 13.0 新特性的介绍视频
在 FOSSASIA 2021 上设立虚拟展位,并作为社区赞助商参与
作为 USENIX FAST ‘21 的行业合作伙伴参与
承诺作为 USENIX Annual Tech、USENIX OSDI、USENIX Security 和 USENIX LISA 的行业合作伙伴参与
继续推广 FreeBSD Office Hours 系列,会议视频可在项目的 YouTube 频道找到:https://www.youtube.com/c/FreeBSDProject。有关更多信息,请参见本报告中的 Office Hours 部分。
与组织委员会合作,开始规划 Spring FreeBSD 开发者峰会。
继续招募 FreeBSD Fridays 系列成员。该系列将于 5 月份重新启动。
参与与 The Register 的采访,讨论 FreeBSD 13.0 的亮点。https://www.theregister.com/2021/03/10/the_state_of_freebsd/
通过我们的通讯,了解我们最新的工作:https://freebsdfoundation.org/our-work/latest-updates/?filter=newsletter
我们通过发布专业制作的 FreeBSD Journal,帮助世界了解 FreeBSD。如前所述,FreeBSD Journal 现在是免费的出版物。了解更多并访问最新期刊:https://www.freebsdfoundation.org/journal/
你可以了解更多我们参加的活动和即将到来的活动:https://www.freebsdfoundation.org/news-and-events/
基金会拥有 FreeBSD 商标,保护商标是我们的责任。我们还为核心团队提供法律支持,帮助调查出现的问题。
请访问 http://www.freebsdfoundation.org 了解我们如何支持 FreeBSD 以及如何为你提供帮助!
链接: FreeBSD 13.0-RELEASE 时间表 链接:https://www.freebsd.org/releases/13.0R/schedule.html FreeBSD 开发快照 链接:https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/
联系人:FreeBSD 发布工程团队,<re@FreeBSD.org>
FreeBSD 发布工程团队负责为 FreeBSD 的官方项目发布设定和发布时间表,宣布代码冻结并维护相应的分支等事项。
在 2021 年第一季度,发布工程团队开始了 13.0-RELEASE 周期的工作,这是 stable/13 分支的第一次发布。截至目前,发布进展顺利,时间表中增加了一个额外的 BETA 构建和两个额外的 RC 构建。时间表已更新以反映这些更新。
此外,整个季度,head、stable/12 和 stable/11 分支发布了多个开发快照构建。stable/13 的开发快照将在 13.0 发布后提供。
感谢所有在此期间帮助测试 13.0 构建并报告问题的人员。正如往常一样,我们追求质量而非数量。
赞助商:Rubicon Communications, LLC ("Netgate")
赞助商:FreeBSD 基金会
联系人:集群管理团队 <clusteradm@FreeBSD.org>
链接: 集群管理团队成员 链接:https://www.freebsd.org/administration/#t-clusteradm
FreeBSD 集群管理团队由负责管理 FreeBSD 项目所依赖的机器的人员组成,这些机器用于同步分布式工作和通信。在本季度,团队完成了以下工作:
安装了新的软件包构建器
为集群管理脚本添加了 Git 支持
在 universe 机器上放置了本地 Git 镜像
更换了英国镜像站的硬盘
更换了 pointyhat 机器上的硬盘 (https://pkg-status.freebsd.org)
回收了一些过时的、占用机架空间和电力的老旧服务器
升级了开发者参考平台
ref{11,12,13,14}-{amd64,i386}
universe*
安装了两台新的 aarch64 机器
ref12-aarch64, ref13-aarch64, ref14-aarch64
security-officer aarch64 freebsd-update 构建器
与 asciidoc 项目合作,更新了 https://www.freebsd.org 和 https://docs.freebsd.org
在巴西安装了一个新的镜像服务器,由 nic.br 赞助
gdns 将南美洲的访问指向此镜像
完整的 {download,ftp,pkg}.freebsd.org 镜像
帮助 rmacklem@ 参与今年的 NFS Bakeathon 互操作性测试活动,通过为测试 VPN 提供集群机器
持续进行日常的集群管理工作
处理突发问题
管理 pkgsync
进行中的工作:
将 pkg-master.nyi 迁移到新硬件
修复 Git 相关问题
升级集群硬件
升级开发者使用的机器到 14-CURRENT
安装 ref14* 机器
改进软件包构建基础设施
研究并测试迁移离开 Mailman2
与 Git 迁移工作组合作,进行 Ports 迁移
审查服务 jail 和服务管理员的操作
改进 Web 服务架构
改进集群备份计划
设置 PowerPC pkgbuilder/ref/universal 机器
为即将到来的澳大利亚新镜像站做准备,由 IX Australia 托管
链接: FreeBSD Jenkins 实例 链接:https://ci.FreeBSD.org
FreeBSD 硬件测试实验室 链接:https://ci.FreeBSD.org/hwlab
FreeBSD CI 工件归档 链接:https://artifact.ci.FreeBSD.org
FreeBSD CI 每周报告 链接:https://hackmd.io/@FreeBSD-CI
FreeBSD Jenkins wiki 链接:https://wiki.freebsd.org/Jenkins
托管 CI wiki 链接:https://wiki.freebsd.org/HostedCI
第三方软件 CI 链接:https://wiki.freebsd.org/3rdPartySoftwareCI
与 freebsd-testing@ 相关的票务 链接:https://preview.tinyurl.com/y9maauwg
FreeBSD CI 仓库 链接:https://github.com/freebsd/freebsd-ci
联系人:Jenkins 管理员 <jenkins-admin@FreeBSD.org> 联系人:許立文 <lwhsu@FreeBSD.org> 联系人:freebsd-testing 邮件列表 联系人:EFNet 上的 IRC #freebsd-ci 频道
FreeBSD CI 团队维护 FreeBSD 项目的持续集成系统。CI 系统首先检查提交的更改是否能成功构建,然后对新构建的结果执行各种测试和分析。构建过程中生成的工件会被归档到工件服务器中,供后续的测试和调试使用。CI 团队成员会检查失败的构建和不稳定的测试,并与该领域的专家合作,修复代码或调整测试基础设施。这些努力的详细信息可以在 每周 CI 报告 中找到。
在 2021 年第一季度,我们继续与项目中的贡献者和开发者合作,满足他们的测试需求,并继续与外部项目和公司合作,改进他们的产品和 FreeBSD。
重要变更:
所有 src 任务已更改为使用 git,以跟踪 VCS 迁移。再次感谢 Brandon Bergren (bdragon@)。
文档任务已更新,以跟踪 AsciiDoc 迁移。
新增任务:
进行中的工作和待办事项
设计和实施提交前 CI 构建和测试
设计和实施使用 CI 集群构建发布工件,类似于发布工程的工作方式
收集并整理 CI 任务和想法 在此
测试并合并 FreeBSD-ci 仓库 中的拉取请求
减少 CI/测试环境设置的过程,方便贡献者和开发者
设置 CI 阶段环境并将实验性任务部署在其中
为运行测试的虚拟机客机设置公共网络访问
在裸金属硬件上实施自动化测试
添加针对 -CURRENT 的 drm Port 构建测试
计划运行 ztest 和网络堆栈测试
添加更多与外部工具链相关的任务
改进硬件实验室,使其更加成熟并增加更多硬件
帮助更多软件在他们的 CI 流水线中获得对 FreeBSD 的支持 Wiki 页面: 3rdPartySoftwareCI、HostedCI
与托管 CI 提供商合作,提高对 FreeBSD 的支持
构建和测试结果将很快发送到 dev-ci 邮件列表,非常感谢提供反馈和帮助分析!
请查看 与 freebsd-testing@ 相关的票务 获取更多正在进行的工作信息,并随时加入我们的工作!
赞助商:FreeBSD 基金会
链接: 关于 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 压缩包 链接:http://ftp.freebsd.org/pub/FreeBSD/ports/ports/
联系人:René Ladan <portmgr-secretary@FreeBSD.org>
联系人:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
Ports 管理团队负责监督 Ports 的整体方向、构建包和人员事务。以下是上个季度的情况。
如往常一样,首先是季度概况:
目前我们有大约 43,800 个 Port(包括变种)。
目前 Port 的开放 PR 数量为 2477,其中 532 个未分配。
在上个季度,168 名提交者在主分支上做出了 9481 次提交,64 名提交者在 2021Q1 分支上做出了 620 次提交。与 2020Q4 相比,Port 数量再次增长了 5%,开放 PR 数量略有下降,而主分支的提交数量增长了近 9%。
在上个季度,我们欢迎了 Neel Chauhan (nc@)、Lewis Cook (lcook@) 和 Nuno Teixeira (eduardo@) 的加入。已经是 src 提交者的 Adrian Chadd (adrian@) 获得了 Ports 提交权限扩展。Tobias Berner (tcberner@) 请求是否可以加入 portmgr-lurker 程序,并很快被添加进去。
我们向 ports@ 邮件列表发送了另一封邮件,概述了进一步计划从 Ports 中移除 Python 2.7。目前,所有递归依赖 Python 2.7 的 Port 已标记为将在 2021-06-23 到期,这不幸地包括了许多 KDE Port,因为 qt5-webengine Port 的存在。我们正在评估各种缓解策略。
portmgr 与 Git 工作组合作,在过去一年中为 Ports 转换为 Git 做准备。任务包括:
转换各种脚本和工具以支持 Git
参加 Git 工作组会议
更新文档
更新各种内部和公共第三方服务
评估众多测试转换(git-beta)结果
关于 Ports 本身,引入了两个新的 USES:
kodi
用于简化 Kodi 插件的移植
mpi
用于 MPICH 和 OpenMPI 的依赖关系
为 ImageMagick 添加了新的默认版本,并删除了 Julia 的默认版本,因为目前没有 Port Julia。pkg
更新为 1.16.3,Firefox 更新为 87.0,Chromium 更新为 89.0.4389.114。
Cluster 管理团队协助在构建集群中启动了三台新的包构建机器。其中两台用于 arm64 构建,一台为通用构建器。
antoine@ 又忙于执行 exp-runs,这次有 28 次,测试:
各种 Port 更新
将 clang/LLVM 版本从 6 更新到 10,在 USES=compiler 中
减少 /usr/include/crypto 中的包含项
跨越多个类别的项目,包括内核和用户空间、Ports 或外部项目。
链接:
Git 过渡 wiki 链接:https://wiki.freebsd.org/git
doc git 仓库 链接:https://cgit.FreeBSD.org/doc
ports git 仓库 链接:https://cgit.FreeBSD.org/ports
src(基本系统)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>
联系人:Ulrich Spörlein <uqs@FreeBSD.org>
联系人:FreeBSD-git 邮件列表
联系人:EFnet 上的 IRC #gitcvt 频道
在 2020 年底 doc 和 src 源代码从 Subversion 迁移到 Git,部分额外工作延续到了 2021 年第一季度。Git 工作组实现和更新了提交钩子,并为 FreeBSD 13 从 Git 构建做准备。我们将草稿文档从 Markdown 转换为 AsciiDoc,并将其合并到提交者指南和手册中。
Ports 仓库的 Git 迁移在季度末开始,首先在 3 月 31 日进行一次最终的 Subversion 提交,标志着转换开始。我们正在处理 portsnap 和其他 Ports 基础设施,预计在迁移之前或之后完成。
Git 工作组继续跟踪两个具有宽松许可的 Git 兼容工具的进展:Gitup 和 Game of Trees。Gitup 是一个小型、无依赖的工具,用于克隆和更新 Git 仓库。它仅用于保持本地树的最新状态,不支持本地提交。
Game of Trees 是一个与 Git 仓库兼容的版本控制客户端。它提供了一个与 Git 不同的用户界面和工作流。它绝不是 Git 的替代品,但可以用于开发维护在 Git 仓库中的软件。
Gitup 和 Game of Trees 目前作为 Port 和包提供。未来的工作将评估它们作为基本系统的候选工具。
预计在 2021 年第二季度完成一些小的迁移任务。这将完成 Git 迁移的初步阶段,工作组将逐步结束。核心团队将开始新的工作,调查和评估新的工作流变化。
赞助商:FreeBSD 基金会(部分)
链接: Moritz 系统项目概述 链接:https://www.moritz.systems/blog/lldb-freebsd-cpu-target-support-and-userland-debugging-improvements/
进度报告 1 链接:https://www.moritz.systems/blog/freebsd-remote-process-plugin-on-non-x86-architectures/
进度报告 2 链接:https://www.moritz.systems/blog/freebsd-legacy-process-plugin-removed/
进度报告 3 链接:https://www.moritz.systems/blog/lldb-support-for-fork-and-vfork/
Git 仓库 链接:https://github.com/moritz-systems/llvm-project
联系人:Kamil Rytarowski kamil@moritz.systems
联系人:Michał Górny mgorny@moritz.systems
LLDB 项目构建在 LLVM 和 Clang 提供的库上,提供一个现代化的调试器。它使用 Clang AST 和表达式解析器、LLVM JIT、LLVM 反汇编器等,提供一个“开箱即用”的体验。它还非常快速,并且比 GDB(GNU 调试器)拥有更宽松的许可证。
FreeBSD 在基本系统中包括 LLDB。目前,相较于 GNU GDB 调试器,LLDB 仍然存在一些限制,并且尚未提供完全替代的功能。该项目旨在完成将 FreeBSD 平台支持移植到 LLDB 的现代客户端-服务器模型,适用于 FreeBSD 上所有原先支持的架构,并去除过时的插件。
在切换到新的进程模型后,项目重点实现了对 fork(2)
和 vfork(2)
系统调用的追踪支持。该模型兼容 GDB 的 follow-fork-mode
设置。通过 fork
,调试器可以选择继续追踪父进程并分离子进程,或者切换到追踪子进程并分离父进程。新的代码使得调试子进程成为可能,同时防止软件断点泄漏到子进程并导致它们崩溃。
预计这些改动将随 LLDB 13.0 发布。
FreeBSD/LLDB 开发人员和高级用户在这一稳定的操作系统上获得的整体体验已达到其他环境的水平。此外,针对 FreeBSD 的工作也带来了通用的改进,提升了 LLDB 对 Linux 和 NetBSD 的支持。
待办事项我们目前正在为 ptrace(2)
请求添加支持,以在不崩溃程序的情况下创建停止程序的核心转储。之后,我们计划改善 LLDB 对核心转储支持的测试覆盖率,并处理我们可能遇到的任何问题。
赞助商:FreeBSD 基金会
联系人:Edward Tomasz Napierala <trasz@FreeBSD.org>
改进 Linux 兼容层已持续进行两年,得到了 FreeBSD 基金会的支持,通过几项不同的项目赞助以及社区的贡献。该项目的目标是改善 FreeBSD 执行未修改 Linux 二进制文件的能力。当前,特定 Linux 应用程序的支持状态正在 Linux 应用程序状态 Wiki 页面 上追踪。
本季度的工作重点是确保 13.0-RELEASE 带有良好的 Linux 兼容层支持,并修复用户报告的问题。有一些新的目录由 linsysfs(5)
提供,正是由于这些目录的缺失,通过一连串的事件,导致 Ubuntu Focal 中的 make(1) 安装失败。getcwd(2)
系统调用已被修复,以便在某些情况下不再返回错误的错误值,这曾经破坏了 Mono。getsockopt(2)
系统调用现在支持 SO_PEERSEC
和 SO_PEERGROUPS
,这些正在被 su(8) 和 sudo(8) 使用。其他修复包括对 32 位 send(2)
系统调用的标志处理和若干 ptrace(2) 问题,后者影响了 Steam 游戏。内核版本被提升到 3.17.0,以修复 Focal 中的 Qt 应用程序。Port sysutils/debootstrap
及其对应的 debootstrap
软件包现在能正确处理 Ubuntu 的 GPG 密钥。debootstrap 工具现在为 apt(8)
安装了 mremap(2)
修复,这减少了设置 Linux chroot 和 jail 所需的步骤。最后,启动脚本也有所改进。
赞助:FreeBSD 基金会
联系人:Ed Maste <emaste@FreeBSD.org> 联系人:Konstantin Belousov <kib@FreeBSD.org> 联系人:Marcin Wojtas <mw@FreeBSD.org> 联系人:Dawid Górecki <dgr@semihalf.com>
我们增加了对强制执行 写 XOR 执行 映射策略的支持。通过将 sysctl kern.elf64.allow_wx
/ kern.elf32.allow_wx
设置为 0
(分别针对 64 位和 32 位二进制文件)来启用此策略。二进制文件可以通过设置 ELF 特性位 NT_FREEBSD_FCTL_WXNEEDED
来指示它们需要可写和可执行的映射,该特性位通过 elfctl 设置。
此外,elfctl 还增加了一些可用性改进,以支持由 Ports 使用,目标是支持不同版本的 FreeBSD 基本系统。我们为其增加了 -i
标志,以忽略未知标志(使得相同的 elfctl 调用可以用于较旧版本的 FreeBSD),并且可以 按值指定特性。
请求退出某项缓解措施的标志现在加上了 no
前缀,以使其意义更加明确。例如,表示二进制文件不兼容 ASLR 的标志现在命名为 noaslr
。没有前缀的标志名称仍然受到支持,为了向后兼容,但会发出警告,并将在未来版本中移除。
下一步是引入 Ports 基础设施,支持标记需要特殊标志的 Port 中的二进制文件。详情请见 PR252629。
另一个更新是,基本系统二进制文件现在默认作为位置独立的可执行文件(PIE)构建,适用于 64 位架构。PIE 可执行文件与地址随机化(ASLR)结合使用,以缓解某些类型的安全漏洞。ASLR 功能仍然是可选的,但如上所述的更改使得只需通过 sysctl 调整即可启用它,无需重新构建映像。启用 PIE 对大多数工作负载不会带来实质性的性能影响。
值得一提的是,某些 Port 继承了基本系统的 /usr/share/mk
基础设施,有些 Port 在切换 PIE 设置后最初未能成功构建。通过执行 exp-run 检测到的所有问题都已得到解决。详情请见 PR253275。
下一步是尝试默认为 64 位架构启用 ASLR。该 补丁 正在讨论中。
赞助商:FreeBSD 基金会
赞助商:Stormshield
链接: TrustedBSD / OpenBSM 链接:http://www.trustedbsd.org/openbsm.html
OpenBSM Github 源码 链接:https://github.com/openbsm/openbsm
与 macOS Catalina 同步 链接:https://github.com/openbsm/openbsm/commit/54a0c07cf8bac71554130e8f6760ca68e5f36c7f
Apple OpenSource 链接:https://opensource.apple.com
联系方式:Gordon Bergling <gbe@FreeBSD.org>
OpenBSM 是 FreeBSD 中的一个重要组成部分,为操作系统提供审计功能。OpenBSM 被集成到 FreeBSD 和 macOS 中。苹果和 FreeBSD 都对 OpenBSM 框架进行了更改,但这些更改尚未合并到上游。本项目旨在整合这些更改并将其提交到 OpenBSM 的 GitHub 仓库,以便之后将两方的开发工作合并到 FreeBSD 中。
目前有一个待处理的拉取请求,旨在将 FreeBSD 的源代码与 OpenBSM 同步。已经做了比较,以便纳入苹果的 Catalina 更改。几周前,苹果还公开了 Big Sur 的源代码。在与 OpenBSM 的最新比较中,苹果做了一些重叠的 ID 更改,这使得简单的导入这些更改变得不可能。我目前正在尝试通过使 OpenBSM 略微特定于厂商来解决这个问题。
内核子系统/功能、驱动程序支持、文件系统等的更新。
链接: 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(弹性网络适配器)是亚马逊云服务(AWS)虚拟化环境中使用的智能网卡。ENA 驱动程序支持多个传输和接收队列,并可以处理高达 100 Gb/s 的网络流量,具体取决于使用的实例类型。
自上次更新以来已完成的工作:
将 ENA 驱动程序更新为 v2.3.1
确定设备上 MSIx 向量表的位置并动态分配 - 这使得驱动程序能够在 c5gn 等实例上使用
将 ENA v2.3.1 驱动程序合并到 FreeBSD 11/12/13-STABLE 分支
ENA v2.3.1 将作为 FreeBSD 13.0-RELEASE 的一部分发布
正在进行的工作:
内部审查正在进行中:
引入完整的内核 RSS API 支持
允许重新配置 RSS 间接表和哈希键
调整 iflib 框架以满足 ENA 的要求
添加 DMA 宽度配置字段 提交 6dd69f0064f1
添加对管理员完成队列的支持 提交 09c3f04ff3be
原型化驱动程序移植到 iflib 框架
赞助商:亚马逊公司
链接: freebsd-wireless 邮件列表 链接:https://lists.freebsd.org/mailman/listinfo/freebsd-wireless
联系方式:Bjoern A. Zeeb <bz@FreeBSD.org>
英特尔无线驱动程序更新项目旨在为更新的芯片组提供支持。
在第一季度,驱动程序和固件已与上游同步,这样我们将支持目前在 Linux 中支持的所有现代网卡。部分 iwlwifi 驱动程序的更改也已提交回上游。
与原始 LinuxKPI 实现的几个冲突已解决或正在解决,更多的 LinuxKPI 代码也已提交到 FreeBSD HEAD。
LinuxKPI 802.11 兼容代码得到了改善,截至撰写本文时,我们已经能够通过 11a 协议传输数据包。
接下来几周的计划是整理清理工作,尽可能多地将代码合并到 HEAD,提供测试代码,并根据反馈进行稳定性优化,同时填补 LinuxKPI 802.11 兼容代码中的空白,以增强对更多标准和功能的支持。
赞助商:FreeBSD 基金会
联系方式:Mark Johnston <markj@FreeBSD.org>
目前正在将一对 Kernel Sanitizers 从 NetBSD 移植到 FreeBSD。Sanitizers 是调试工具,利用编译器的插桩来验证内存访问。它们能够自动检测许多类 C 编程错误,如使用已释放内存和加载未初始化变量等。当与 syzkaller 或其他测试工具结合使用时,它们能够有效地发现内核错误,这些错误否则可能需要大量手动工作才能识别。
正在移植的两个 Sanitizers 是 KASAN (AddressSanitizer) 和 KMSAN (MemorySanitizer)。KASAN 检查内核映射中的所有内存访问的有效性,并在发生越界访问或使用已释放内存时触发 panic。各种内核内存分配器注释内存区域,以标明相应的访问是否有效。KASAN 的初步移植已完成,计划在 4 月中旬出现在 FreeBSD 开发分支中。KMSAN 检测未初始化内存的使用,并能够检测导致内核内存内容泄露到用户空间的错误。两个 Sanitizers 都会消耗相当大的内存和 CPU 资源。它们主要用于与测试框架结合使用,尽管完全可以在桌面或笔记本环境中启动并运行启用了 Sanitizer 的内核。目前此项工作仅限于 amd64 架构,预计可以相对轻松地移植到 arm64 和 riscv 架构。
未来的工作包括完成 KMSAN 的移植、修复 KASAN 和 syzkaller 组合发现的 bug,并确保 Sanitizers 能验证对直接映射的访问。这可能需要提供禁用直接映射使用的选项,或为直接映射引入一个影像。
赞助商:FreeBSD 基金会
联系方式:Zyta Szpak <zr@semihalf.com>
联系方式:Kornel Dulęba <mindal@semihalf.com>
联系方式:Marcin Wojtas <mw@semihalf.com>
Semihalf 团队正在致力于提升 FreeBSD 对 Marvell Octeon TX2 CN913x 和 Armada 7k/8k SoC 系列的支持。
Marvell Armada 7k8k 和 Octeon TX2 CN913x SoC 系列是四核 64 位 ARMv8 Cortex-A72 处理器,配备高速外设,包括 10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0,广泛应用于网络、存储、安全和工业领域。
尽管这些 SoC 在 FreeBSD HEAD 中大多已得到支持,但仍有一些地方需要改进。
已应用的更改:
在 ap806_clock 驱动程序中添加缺失的频率模式 (commit a86b0839d7bf)
在 mvebu_gpio 驱动程序中进行多个修复 — 与 mmel 合作 (commit a5dce53b75d8)
修复 mv_ap806_gicp 中的设备树数据解析问题 (commit 622d17da46eb)
重新设计 ICU 中断控制器(mv_cp110_icu)及其父控制器(mv_ap806_gicp),使其不再依赖固件提供的数据,从而修复了从较新的 U-Boot/TF-A 版本启动操作系统的问题 (D28803)
PCIE Designware 驱动程序(pci_dw)修复:
正确设置外部 I/O ATU 窗口。
允许映射大于 4GB 的 ATU 窗口。
启用适当的用户空间映射和访问 PCI BAR 的通用改进。
待办事项
改进上游 PCIE 。
改进并合并 ICU 支持重构。
赞助商:Marvell
链接:
D26884 实现基于 sndstat 的 nvlist 枚举 ioctl 链接:https://reviews.freebsd.org/D26884
commit c96151d33509655efb7fb26768cb56a041c176f1 链接:https://cgit.freebsd.org/src/commit/?id=c96151d33509655efb7fb26768cb56a041c176f1
联系方式:Ka Ho Ng <khng@FreeBSD.org>
此项工作在 /dev/sndstat 上提出了一些 ioctl 命令,使用 nv(9) 来公开所有可用的音频设备节点。nv(9) 被用来生成音频设备节点信息的序列化二进制流表示,该信息在运行系统中可用。sndstat(4) 手册页中文档化的 nvlist 结构在编程使用上是稳定的。
长期以来,枚举音频设备节点接口需要解析 /dev/sndstat 的内容。编写这样的解析器并正确处理不同的 hw.snd.verbose
级别是非常繁琐的。使用 nv(9) 消除了编写文本解析器来执行音频设备节点枚举的需求。
此项工作已被 提交,并在 FreeBSD 14-CURRENT 中可用。
赞助商:FreeBSD 基金会
影响 Ports 的更改,无论是涉及大部分树的广泛更改,还是单个 Port 本身的更改。
链接: KDE FreeBSD 链接:https://freebsd.kde.org/ KDE Community FreeBSD 链接:https://community.kde.org/FreeBSD
联系方式:Adriaan de Groot <kde@FreeBSD.org>
KDE 在 FreeBSD 项目旨在为 FreeBSD Ports 打包所有由 KDE 社区生产的软件。该软件包括一个完整的桌面环境,称为 KDE Plasma、图形应用程序、即时消息应用、视频编辑套件以及一个茶钟和数百个可以在任何 FreeBSD 机器上使用的其他应用程序。
KDE 团队(kde@)是 desktop@ 和 x11@ 的一部分,构建软件堆栈使 FreeBSD 变得美丽且可用,作为日常使用的基于图形的桌面机器。
KDE Frameworks 有一个月度发布周期;KDE Plasma 和其他 KDE 软件按照季度周期运行,并每月修复 Bug。所有这些版本都及时地发布到 ports 中。围绕 KDE,有数百个其他应用程序有自己的版本,其中一些显著的新版本包括:
deskutils/calindori
,deskutils/kongress
,net-im/kaidan
,deskutils/semantik
和 graphics/kgeotag
net-im/ruqola
和 net-im/neochat
分别用于 Rocket 和 Matrix 即时消息
audio/amarok
,曾经是最受欢迎的 KDE 音乐播放器
基础设施工作改善了 Qt5 ports 安装和卸载对全局头文件 qconfig-modules.h
的更改。CMake 发布以令人不安的频率到来,各种低级别的东西,如 devel/libphonenumber
和 graphics/poppler
根据需要进行了更新。
FreeBSD 上 Qt 堆栈的最大问题是 Qt5-WebEngine,它基于 Chromium。像 Chromium 本身一样(上游),它有一个混乱的构建系统,基于 Python 2.7。Python 2.7 的计划移除以及依赖于它的 Port,对 Qt 和 KDE 堆栈的很大一部分构成了威胁。可能会有 WebEngine-less 版本的 Port,但真正的努力是尝试使 WebEngine 能够与 Python3 一起构建。
有关本季度更新的更详细描述,请参见 这里(第 1 部分) 和 这里(第 2 部分)。
链接: FreeBSD Office 项目 链接:https://wiki.freebsd.org/Office
联系方式:FreeBSD Office 团队邮件列表 <office@FreeBSD.org>
联系方式:Dima Panov <fluffy@FreeBSD.org>
联系方式: 許立文 <lwhsu@FreeBSD.org>
FreeBSD Office 团队致力于开发一系列与办公相关的软件套件和工具,如 OpenOffice 和 LibreOffice。
本季度的工作重点是为所有 FreeBSD 用户提供最新的稳定版 LibreOffice 套件和配套应用程序。
最新和季度 ports 分支获得了 LibreOffice 套件的新分支(7.1),并更新至 7.1.1 版本。
与此同时,我们的 WIP 仓库 重新获得了一个工作中的 CI 实例,这得益于許立文。
我们正在寻找人员帮助处理待办事项
打开的 Bug 列表 包含所有需要关注的已提交问题
上游本地补丁的提交
补丁、评论和异议始终欢迎在邮件列表和 Bugzilla 中提出。
链接: VirtualBox 官方主页 链接:https://www.virtualbox.org/
在 FreshPorts 上的 VirtualBox OSE Port 链接:https://www.freshports.org/emulators/virtualbox-ose
联系方式:VirtualBox 团队 <vbox@FreeBSD.org>
VirtualBox Port已更新至上游的 6.1.18 版本。
这是一个新的主要版本,具有新特性和更好的支持,尤其是在图形输出方面。此新版本仅支持提供硬件虚拟化支持的最新 amd64 CPU(VT-x、AMD-V 位)。
之前的 VirtualBox Port版本已作为 -legacy 版本保留,以便无法使用新版本的用户仍能获得虚拟化解决方案。
目前新增加的 Port 在 i386 上构建失败,但旧版添加项提供了基本的仿真功能。
文档树中、手册页或外部书籍/文档中的重要更改。
联系方式:Sergio Carlavilla <carlavilla@FreeBSD.org>
Doc New Generation 项目已完成。切换日期为 1 月 23 日,星期六。
但是仍有一些剩余任务:
使用 AsciiDoctor API 将 Python 脚本转换为 Ruby
将 4.4 到 9.0 版本的发布转换为 AsciiDoctor
在源代码部分使用 rouge,替代 CSS hack
拆分新闻页面,减少页面的总大小
拆分书籍
改进 FDP 书籍
如果你想帮助减少 TODO 列表,随时联系我 :)
链接:
在 Weblate 上翻译 FreeBSD wiki 链接:https://wiki.freebsd.org/DocTranslationOnWeblate
FreeBSD Weblate 实例 链接:https://translate-dev.freebsd.org/
联系方式:Danilo G. Baio <dbaio@FreeBSD.org>
在文档迁移到 Hugo/AsciiDoctor 后,Weblate 工具再次开放。
我们在 Weblate 上有三个项目:
文档(书籍和文章)- 开放
FreeBSD 文档(已归档)- 以前的项目
网站 - 待定
在迁移到 Hugo/AsciiDoctor 之前使用 Weblate 的语言团队,请查看我们的 基于自动建议的翻译 Wiki 文章,了解更多详情。
我们刚刚开始一个项目,将旧的自动翻译字符串的方法(使用机器翻译功能)转换为一个新系统,以便与新的文档兼容。这将节省我们翻译者的时间。
仍有一些待办事项你可以查看 状态页面,任何帮助都非常欢迎。
下一个季度的下一步是通过 Weblate 准备并发布网站翻译。
联系方式:Sergio Carlavilla <carlavilla@FreeBSD.org>
该工作组的目的是重新设计网站和文档门户。
工作将分为 4 个阶段。
阶段 1:
重新设计文档门户:新设计、响应式布局和全局搜索。
阶段 2:
重新设计手册页脚本,使用 mandoc 生成 HTML。
阶段 3:
重新设计 Port 脚本,创建应用程序门户。
阶段 4:
重新设计主网站:新设计、响应式布局和暗色主题。
无法归类的事项。
链接: Discord Wiki 页面 链接:https://wiki.freebsd.org/Discord Discord 邀请链接 链接:https://discord.gg/RHprKbvWJN
联系方式:Lewis Cook <lcook@FreeBSD.org> 联系方式:Vincent Milum Jr <freebsd@darkain.com> 联系方式:Kubilay Kocak <koobs@FreeBSD.org>
FreeBSD 项目和社区继续增长,在过去的两个季度中,我们在流行的 Discord 平台上建立了一个 FreeBSD 官方服务器,作为一个补充手段,提供外部推广、支持、协作和社交连接,连接新老 FreeBSD 社区成员。
Discord 拥有广泛的可访问性和独特的功能,社区成员可以在没有其他社交媒体学习曲线的压力下享受这些功能,这些学习曲线通常会让新手感到困惑或不知所措。它还提供了一个机会,能够将 FreeBSD 的影响力扩展到传统领域之外。
我们目前拥有 480 名成员,且这个数字每天都在增长,并且已经建立了基准的社区指南和与其他支持渠道及 FreeBSD 行为准则一致的管理流程。
虽然这只是初步阶段,但我们已经成功举办了活动。在 1 月份,Tom Jones(thj@)宣布并举办了一个专注于 FreeBSD 13 分支问题的线上 Bugathon。我们还创建了专门的文本和语音频道,方便将来举办更多此类活动。我们希望看到更多类似的活动,作为如何有效利用 Discord 的示例,这是我们作为社区或项目之前未曾尝试过的方式。
展望未来,我们计划:
在 Discord 中自动发布新闻、更新和公告。
验证并启用为大型社区设计的 Discord 新功能。
设置具有独特功能的机器人,包括管理和互动功能。我们欢迎此方面的创意。
我们鼓励项目和社区成员主动联系,讨论如何最好地利用 Discord。一些我们希望大家参与的创意包括:
头脑风暴/建议独特和创意的想法或功能。
提供 bug 报告和用户体验反馈及建议。
在其他社交媒体平台积极推广 Discord,特别是那些可能对 FreeBSD 新鲜或好奇的人群。
为 Wiki 页面及其内容做贡献。
在 Discord 上参与并支持其他成员。
主持 FreeBSD 相关话题的直播。
如果你愿意,可以在我们的实时音频和视频频道中参与。
许多项目建立在 FreeBSD 基础上,或将 FreeBSD 组件融入到它们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣,我们有时会在我们的季度报告中包含这些项目提交的简短更新。FreeBSD 项目对这些提交中的任何声明的准确性或真实性不做任何表示。
链接: CBSD API 模块 链接:https://www.bsdstore.ru/en/cbsd_api_ssi.html
联系方式:Oleg Ginzburg <olevole@olevole.ru>
CBSD 是为 FreeBSD 的 jail(8) 子系统、bhyve(8) 和 xen(4) 编写的管理层。CBSD 允许用户通过多种统一方法来管理 jail/bhyve/xen 环境,提供 vagrant 风格的 CBSDfiles
、CLI
和通过 dialog(1) 等多种方式。
在上个季度,增加了 RestAPI 服务层,支持创建可编程的云解决方案。此外,已经完成了通过 CBSDfile
支持 RestAPI 的工作,从而支持私有云环境的部署。在这种情况下,本地 CBSD 层充当轻客户端。
链接: 文档 链接:https://hellosystem.github.io/docs/
联系方式:Simon Peter <probono@puredarwin.org>
联系方式:在 irc.freenode.net
的 #helloSystem
,在 Matrix 镜像为 #helloSystem:matrix.org
helloSystem 是基于 FreeBSD 的预配置桌面操作系统,专注于简洁、优雅和可用性。其设计遵循“少即是多”的理念。
发布了 helloSystem 版本 0.4.0。可安装的 Live ISO 镜像可供下载。
开始为 0.5.0 版本进行工作。我们已经开始看到贡献的功能和 bug 修复:
系统菜单即时反映应用程序中的更改。
Filer 文件管理器将已打开的窗口置于最前,而不是为同一文件夹打开多个窗口。
初始空间模式选项(每个文件夹在文件管理器中打开自己的窗口,且该窗口记住其屏幕位置)。
helloSystem 的实验性和发布版 Live ISO 可在 https://github.com/helloSystem/ISO/releases 上获取。
在多个领域需要帮助,尤其是在 FreeBSD 核心操作系统和内核,以及 Qt/C++ 方面。
链接: 网站 链接:https://alpha.pkgbase.live/
联系方式:Mina Galić <me@igalic.co>
PkgBase.live 是一个非官方的 FreeBSD PkgBase 项目 存储库。PkgBase 将 FreeBSD 基本系统打包为大约 330 个包。
PkgBase 项目为用户提供选择安装系统的部分组件的自由。用户可以选择安装基本系统的部分组件,而不需要从源代码构建系统,并且在需要时可选择安装 -dbg
包。PkgBase 使用默认选项构建。用户无需构建 WITHOUT_SENDMAIL
,只需选择不安装它即可!此外,PkgBase.live 构建了 每个 可用的内核!这对于像 armv7
这样的架构尤其重要。
作为一项服务,PkgBase.live 的灵感来源于 up.bsd.live,该服务为 STABLE 和 CURRENT 分支提供了 freebsd-update(8)。尽管受此启发,freebsd-update 一直是我不断遇到挫折的问题,因此我在寻找替代方案。
PkgBase 还没有准备好成为主流服务,否则 FreeBSD 项目早就提供了这个服务。自 2016 年以来,测试呼吁一直开放,我认为现在是时候提供一个 公开 服务,让更广泛的社区成员参与测试,而无需自己做所有工作。
很多东西已经可以正常工作,但仍然需要做更多的工作,正如 TODO 列表和网站上的“待处理更改”所示。也许最重要的是提供 ISOs,让人们从一开始就能够设置一个全新的系统并使用 PkgBase。
PkgBase 的硬件由 FreeBSD 社区的一名成员慷慨赞助。
链接: Potluck 仓库与项目 链接:https://potluck.honeyguide.net/ Potluck 在 GitHub 上 链接:https://github.com/hny-gd/potluck Potman 在 GitHub 上 链接:https://github.com/grembo/potman Pot 项目 链接:https://pot.pizzamig.dev
联系方式:Stephan Lichtenauer (Potluck) <sl@honeyguide.eu> 联系方式:Michael Gmelin (Potman) <grembo@FreeBSD.org>
Pot 是一个 jail 管理工具,还支持通过 Nomad 进行编排。
Potluck 旨在成为 FreeBSD 和 Pot 的 Dockerhub,就像 Dockerhub 对 Linux 和 Docker 的作用一样:它是一个 Pot 风味和完整镜像的仓库,供 Pot 使用,并且在许多情况下也可以与 Nomad 一起使用。
新的 Potman 项目旨在简化基于 Potluck 方法的 Pot 镜像构建,使用 Vagrant 和 VirtualBox 进行操作,例如作为 DevOps 流程的一部分,用于软件开发和测试。这样,Pot 镜像可以更容易地作为 Jenkins 流程的一部分创建,并通过 Nomad 和 Consul 部署。
在过去的两个季度中,FreeBSD 12.2 Potluck 镜像已构建,并且 11.4 镜像已升级为新包。此外,还创建了新的镜像,如 Wordpress 和改进的风味脚本(解决了一个严重的网络问题)。
未来计划包括进一步的 Potman 流程功能、新的和改进的 Potluck 镜像,以及发布基于 FreeBSD 13 的镜像。
一如既往,欢迎反馈和补丁。
链接: sysctlinfo 链接:https://gitlab.com/alfix/sysctlinfo
sysctlbyname-improved 链接:https://gitlab.com/alfix/sysctlbyname-improved
BSDCan 2020 - sysctlinfo 问题 链接:https://git.io/Jm9x7
sysctl-libnv 链接:https://gitlab.com/alfix/sysctl-libnv
sysctlmibinfo2 链接:https://gitlab.com/alfix/sysctlmibinfo2
sysctlview 链接:https://gitlab.com/alfix/sysctlview
nsysctl 链接:https://gitlab.com/alfix/nsysctl
联系方式:Alfonso Sabato Siciliano <alfonso.siciliano@email.com>
sysctl 系统调用和封装的 sysctl 工具可以在运行时获取和设置系统状态;内核将可用的参数作为管理信息库(MIB)中的对象暴露。在最近一次带有 CURRENT-GENERIC 配置的系统更新后,我的笔记本电脑上的 MIB 超过了一万个对象(包括内部节点和叶节点,大多数位于 vm.uma 子树中),并且没有 ZFS 桶。此外,我收到了关于 sysctl 的建议、创意、PR 和问题,因此一些改进已经完成;最后,BSDCan 2020 期间收到的建议已得以实现。
sysutils/sysctlinfo 已更新至 20210222,它是一个访问 MIB 和获取对象信息(描述、类型、格式、标志等)的接口。它已被重构,新的版本效率几乎提高了 100%,用于探索 MIB 并将对象的所有信息传递到用户空间。此外,还实现了新功能:获取更多关于对象的信息,避免在用户空间进行额外计算,并改善与当前未文档化接口的兼容性。
sysutils/sysctlbyname-improved 已更新至 20210223,这是 sysctlinfo 的扩展,用于处理带有一些空字符串级别的对象名称,或扩展为将输入传递给 CTLTYPE_NODE 的处理程序;它已更新以利用 sysctlinfo 的改进(主要是效率)。
sysctl-libnv 是一个项目,提供了如何构建一个带有 nvlist 值的 sysctl 对象的实现和示例——要了解 nvlist,可以查看 libnv(9) 手册页。新定义了一个 sysctl 处理程序:只需创建一个 nvlist 并将其传递给宏;然后,系统调用使用新的处理程序将 nvlist 传递给用户空间,nsysctl 工具可以管理该对象值。
以下工具已更新,以便利用新的内核功能和改进。
devel/libsysctlmibinfo2 已更新至 2.0.1;主要是 sysctlmibinfo2 库封装了上述低级接口;此外,它定义了一个带有对象属性的 struct sysctlmif_object
,并提供了方便的 API 来构建 sysctlmif_object 的数据结构(例如:子树、深度优先遍历的列表等);因此,它在正确处理对象/构建类似 sysctl 的实用工具时非常有用。
显然,sysctlmibinfo2 受益于 sysctlinfo 的功能:支持 CTL_MAXNAME 层级的 OID,支持能力模式,可以查找与名称匹配的对象(避免只为了找到相应的 OID 而探索 MIB),一次性获取对象的所有信息,并通过 sysctlbyname-improved 管理特殊名称。
版本 2.0.1 利用了内核改进:提高了构建 sysctlmif_object 的效率,并新增了获取对象信息的功能:“handler”和“nextbyname”。新函数包括:sysctlmif_hashandler()
和 sysctlmif_hashandlerbyname()
用于知道一个对象是否定义了内核处理程序,sysctlmif_nextnodebyname()
和 sysctlmif_nextleafbyname()
用于探索 MIB,sysctlmif_leaves()
和 sysctlmif_leavesbyname()
用于构建只包含叶节点的数据结构。
上述 API(无论是内核还是用户空间)都非常简单:可以用几行代码实现“sysctl -aN”、“sysctl -d kern.ostype”等。然而,每个项目都提供了包含介绍、入门、特性、API、实际应用案例、FAQ 和公共领域示例的 README 文件,用于构建新项目。当然,手册和示例最近也已更新。
deskutils/sysctlview 已更新至 2.1;sysctlview 的第一个版本只是 MIB 的图形表示,现在可以看作是 sysctl 的 GUI 版本。此工具利用了 sysctlinfo 的对象序列化;事实上,考虑到当前 MIB 的大小,让内核多次查找相同对象以获取其所有属性是不可行的。感谢用户的反馈,新的版本提供了更好的 UI,例如点击列标题对条目进行排序。此外,“Handler”条目已添加到“对象”窗口中,这有助于了解一个对象是否有值,或者一个 CTLTYPE_NODE 的 OID 是否可以扩展。
sysutils/nsysctl 已更新至 2.0,它是 sysctlview 的 CLI 版本;输出由选项明确指示,并通过 libxo 以人类可读和机器可读格式打印;此外,一些字符串值被解析以显示结构化输出。这些选项不是互斥的,允许显示参数的属性,因此 nsysctl 对于了解如何处理一个对象非常有用,而无需查找其实现,例如:是否支持多处理器?是否支持能力模式?OID 是否可扩展?该整数是否表示开尔文温度?它是否有值?标签是什么?等等。新版本支持 libnv;它对管理非原始数据类型非常有用,并且未来可能避免硬编码通用的不透明类型。最后,sysctlinfo 的新功能使得使用 nsysctl 来调试 MIB 而不需要内核重新编译,且无需使用 SYSCTL_DEBUG。注意:该项目提供了教程来描述每个功能。