FreeBSD 再次打破了关于其终结的传言。
本季度的大部分开发工作并不十分显眼,特别是确保即将发布的 11.1 版本尽可能少出现回归问题所需的努力。针对即将发布的 10.4 维护版本的规划也已经开始,并将迅速跟进。
进一步的工作聚焦于将 arm 架构的支持提升至一级支持状态,并改进文档。此外,对源代码和 Ports 进行了大规模的更改。
以下是这些项目及其他内容的详细信息。
——Mark Linimon
2017 年 7 月至 9 月期间的提交截止日期为 2017 年 10 月 21 日。
联系方式:FreeBSD 发布工程团队 <re@FreeBSD.org>
FreeBSD 发布工程团队负责设置和发布 FreeBSD 官方项目发布的发布计划、宣布代码冻结以及维护相应的分支等任务。
FreeBSD 11.1-RELEASE 的发布周期从 5 月 19 日开始,并按计划进行。我们鼓励 FreeBSD 用户在可能的情况下进行测试,以帮助确保即将发布的 stable/11 分支的第二个版本的可靠性和稳定性。
该项目由 FreeBSD 基金会赞助。
联系方式:René Ladan <portmgr-secretary@FreeBSD.org> 联系方式:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
2017年第二季度,Port 数量首次突破 30,000 个里程碑。目前 PR(问题报告)数量接近 2,500 个,其中约 600 个未分配。本季度有 171 名提交者提交了将近 7,400 个提交。相比上一季度,本季度关闭的 PR 数量更多,但也有更多的 PR 被提交,这些都值得欣慰。
在过去的三个月里,我们迎来了四位新提交者:Bradley T. Hughes (bhughes@)、Danilo G. Baio (dbaio@)、Jochen Neumeister (joneum@) 和 Richard Gallamore (ultima@)。kan@ 重新加入了我们,成为 Port 提交者。由于长时间没有活动,bf@ 的提交权限被暂时保管。
在管理方面,Ports 管理团队欢迎 bapt@ 回归,他正在为 Ports 开发一些新特性。Ports 管理团队还在 BSDCan 上召开了年度面对面的会议。
在基础设施方面,引入了三个新的 USES 值:
cargo,用于简化 Rust 包或二进制文件的 Port 移植,使用 cargo 命令(在本报告中另有详细说明)
groff,用于处理依赖于 groff 文档格式化系统的项目,该系统已从 FreeBSD 12 的基本系统中移除
meson,提供对基于 Meson 项目的支持
PostgreSQL 的默认版本从 9.3 切换到 9.5,Python3 的默认版本从 3.5 切换到 3.6。使用 cmake 的 Port 的默认生成器已经切换为 ninja。
一些主要的版本更新包括:pkg 1.10.1、Firefox 54.0.1 和 Chromium 59.0.3071.115。
在幕后,antoine@ 进行了 36 次实验运行(exp-runs),测试了版本更新,使 Port CRAN 平台独立,测试将 bsdgrep(1) 安装为 /usr/bin/grep
,测试 LLVM 更新,测试 ino64 项目,并进行 Makefile 清理。
联系方式:FreeBSD 核心团队 <core@FreeBSD.org>
核心团队在第二季度的活动 culminated 在 BSDCan 上推出了两个新倡议:
扩展 FreeBSD 项目成员资格
FreeBSD 社区流程
将 FreeBSD 项目成员资格扩展到不仅限于提交者的做法,旨在让项目能够认可和奖励那些以编写代码以外的方式支持我们的人。这些人包括组织会议或用户组的人员;在社交媒体上是著名支持者的人员;处理错误报告和测试更改的人员;以及以各种方式做出贡献的其他人,他们应当因对项目的支持而获得认可。核心团队希望,这不仅能鼓励更多人志愿为项目投入时间和精力,也能鼓励那些已经参与的人继续参与项目,甚至深入参与。
对新一组非提交者项目成员的命名经历了几次尝试:在尝试并放弃“贡献者”和“伙伴”之后,核心团队认为,既然他们所提供的是正式的项目成员资格,那么直接称其为“项目成员”才是合适的。因此,提交者成为那些有权限向项目的代码库提交代码的项目成员。项目成员将获得一个 @FreeBSD.org
的电子邮件地址、对各种项目硬件的访问权限、访问内部邮件列表和其他沟通渠道的权限,并可独立参加开发者峰会。提交者还拥有对 Subversion 仓库和 GitHub 的提交权限,活跃的提交者可以参加核心团队选举投票。
这一想法在其他项目中已有较长的历史,FreeBSD 正在有意识地借鉴其他地方行之有效的做法。当提出一个重大破坏性或大规模的更改时,我们应该有一个正式的机制来记录这个更改及其含义。感兴趣的各方可以作出回应,最终将这个更改演化为最适合所有用户的版本,或者如果被认为不可行则撤回。更改的文档将作为参考点,以防将来提出类似的提案。创建一个更正式的流程应有助于避免就需要做什么展开无休止的空洞争论,而没人认为自己对这个想法有足够的投入,也没有得到大多数项目成员的支持,从而难以付诸实践,达到期望的结果。
首个 FCP——FCP 0——说明了这个流程。在写这篇文章时,核心团队正在投票决定是否接受初步文档,该文档可以在项目的 Github 仓库 中查看。已创建了两个新的邮件列表:fcp@FreeBSD.org 是接收新 FCP 提案通知并讨论其内容的渠道,而 fcp-editors@FreeBSD.org 则为 FCP 文档草拟过程提供帮助。
核心团队很高兴地宣布,Gordon Tetlow 已加入安全官员团队,负责管理安全团队的工作量,解放其他成员,使他们能够专注于漏洞修复的技术方面。此外,Ed Maste 加入了安全团队,在必要时协助安全官员。
尽管 Florian Smeets 必须卸任,邮件管理员团队已招募了三名新成员,并且现在已经恢复到正常规模。
考虑到自 10.3 发布以来,已合并到 10-STABLE 的多个修复,核心团队批准了在 11.1 发布后不久发布 10.4 版本。与 10.3 的长期支持不同,这将是一个正常支持生命周期的发布,因此 10.x 分支的总体支持生命周期不会显著延长。
本季度,核心团队批准发布了三名新的提交权限。请欢迎:
Vladimir Kondratyev (wulf@)
Ryan Libby (rlibby@)
Kyle Evans (kevans@)
同时,在本季度,有一位成员放弃了他们的提交权限:
Jordan Hubbard (jkh@)
当 FreeBSD 项目的创始成员之一 Jordan Hubbard 决定离开时,总是令人不安的,但 Jordan 的兴趣已经从 FreeBSD 相关项目转移,他决定永远放下自己的提交权限。
核心团队要感谢 NTTA(前 Verio)多年提供 cvsup 镜像托管服务,并感谢他们提供继续在西雅图设施为我们提供托管机器的好意。由于我们不需要额外的北美托管,因此我们婉拒了他们的提议。
像往常一样,关于代码许可和与知识产权相关的其他问题提出了不少问题。Ed Maste 已在 Mastodon 社交网络上代表 FreeBSD 基金会注册了“freebsd”账号。对于导入到 libc 的代码,“Unlicense”是适用的。我们仍有一些代码是在旧的四条款 BSD 许可证下发布的,其中额外条款特别提到加利福尼亚大学。尽管加州大学普遍批准删除这一条款,但我们需要与所有版权持有者确认,才能更改任何剩余的四条款许可。
核心团队与安全团队一起,正在监控关于“堆栈冲突”漏洞的进展,该漏洞在 6 月引起了广泛关注。针对 Qualys 发布的概念验证,正在进行堆栈保护缓解系统的更改。
联系方式:Deb Goodkin <deb@FreeBSDFoundation.org>
上个季度,基金会在多方面支持了 FreeBSD 项目!我们从滑铁卢大学招募了两名实习生,他们非常高效,从参与持续集成项目到为 makefs 添加 MSDOS FAT 文件系统支持。我们继续通过内部的软件开发人员加速操作系统的变更,并赞助外部的软件开发项目,同时在全球范围内参与技术会议,继续推广 FreeBSD。为了鼓励更多的商业用户向基金会捐款,我们推出了一个新的合作伙伴计划。FreeBSD 11.1 发布工作由一名全职基金会员工领导,以确保发布及时且可靠。最后,我们主导了庆祝新宣布的 FreeBSD 日的活动,旨在提高全球对 FreeBSD 的认识!
以下是我们 Q2 通讯的一些亮点,你还可以在本报告中找到基金会工作人员(包括 Ed Maste、Kostik Belousov 和 Glen Barber)的撰写内容。别忘了,我们完全依赖捐款支持。请花一点时间 立即捐款,让我们继续支持全球的 FreeBSD 项目和社区!
我们的努力在 2017 年第二季度继续进行。请查看我们最近的开发项目总结中的亮点。
四月:FreeBSD USB 大容量存储目标项目更新
基金会向 Edward Tomasz Napierała 颁发了一个项目赞助,用于开发一个 USB 大容量存储目标驱动程序,使用 FreeBSD CAM 目标层 (CTL) 作为后端。该项目使 FreeBSD 可以在嵌入式平台(如 BeagleBone Black 或树莓派 Zero)上模拟一个 USB 大容量存储目标,通常被称为 U 盘。请阅读更多内容:https://www.FreeBSDfoundation.org/blog/april-2017-development-projects-update/
五月:基金会招募了合作教育学生
在五月初,我们踏上了 FreeBSD 基金会的新旅程,招募了来自滑铁卢大学的合作教育 (co-op) 学生。滑铁卢大学是合作教育的先锋和领导者,100% 的工程学学生和大多数计算机科学学生参与了合作教育项目。请阅读更多内容:https://www.FreeBSDfoundation.org/blog/may-2017-development-projects-update/
六月:FreeBSD 基金会 2017 项目提案征集(由 Ed Maste 贡献)
基金会支持 FreeBSD 的方式之一是为个人项目提供开发赞助。这些赞助允许开发人员提出他们希望开展的项目,以改进 FreeBSD,并请求资金来执行该工作。基金会始终愿意接收提案,但有时会发出征集提案的通知,突出特定领域的关注点,并能够收集和评估一组提案。
提案提交的截止日期为 2017 年 7 月 14 日,但如上所述,任何人都可以随时提交提案。
尽管提案可以涉及任何 FreeBSD 子系统或基础设施,但我们特别感兴趣的是接收以下方面的提案:
改进 FreeBSD 本身或运行在 FreeBSD 上的应用程序的安全性
新的测试用例、改进的测试基础设施和质量保证
改进的软件开发工具
改进社区合作和沟通的项目
改进 FreeBSD 在各种硬件平台上为新用户提供的“开箱即用”体验
确立 FreeBSD 作为推动共同利益项目(如 ZFS、LLVM 或 libarchive)发展的领导者
更多细节请访问 https://www.FreeBSDfoundation.org/blog/FreeBSD-foundation-2017-project-proposal-solicitation/。完整的项目提案提交指南可以在 http://cts.vresp.com/c/?FreeBSDFoundation/d364934d4d/TEST/1b229d9af7 查看。
如有任何问题,请随时联系 proposals@FreeBSDfoundation.org。
宣布新合作伙伴计划(由 Deb Goodkin 贡献)
我很高兴地宣布我们新的 FreeBSD 基金会合作伙伴计划!我们的工作完全由个人和组织的捐款支持。我们拥有 1,500,000 美元的支出预算,依赖来自商业用户的大额捐款来帮助我们维持和增加支持。鉴于这些捐款的价值,并且为了建立可持续的资金模式,我们希望设立一些能突出这种支持并以富有成效的方式感谢捐赠者的福利。合作伙伴关系是帮助商业用户快速加入 FreeBSD、与社区分享他们的需求,并促进与 FreeBSD 开发者合作的一种途径。我们相信,与商业用户建立这些关系将有助于保持 FreeBSD 的相关性,并帮助提供一个可持续和健康的生态系统。
你可以查看我们更新的捐赠者页面,了解我们如何认可我们的合作伙伴,地址是:https://www.FreeBSDfoundation.org/donors/。你还可以了解更多关于这个新计划的信息:https://www.FreeBSDfoundation.org/FreeBSD-foundation-partnership-program/。
上周我在中国时,有机会与几家公司讨论了我们的新合作伙伴计划,这无疑引起了更多支持我们工作的兴趣。
我们继续联系商业用户,寻求帮助以便我们能为 FreeBSD 提供更多的宣传和支持。这包括赞助更多项目以改进 FreeBSD、提供 FreeBSD 教育和培训,并招募更多的贡献者加入项目。只有在你的捐赠支持下,我们才能提供上述支持,我们需要你的帮助来将我们与你的公司联系起来。请考虑通知你的组织我们的新合作伙伴计划,并帮助我们与你公司内的相关联系人建立联系。
你的捐款将帮助我们:
加速 FreeBSD 的改进和新特性的增加
全职支持发布工程工作
创建并提供 FreeBSD 教育和培训材料
提供面对面的开发者协作机会
改进和支持 FreeBSD 基础设施
我们需要你的支持来继续改进 FreeBSD。
2017 年第二季度会议回顾
从赞助活动到参加会议,基金会继续在 2017 年第二季度履行其宣传使命。在过去的几周里,基金会团队的成员代表项目和基金会参加了全球的各类活动。以下是一些会议回顾。
FOSSASIA 2017(由 Philip Paeps 贡献)
基金会慷慨赞助了我从东京到新加坡的部分旅费,让我参加了 FOSSASIA。我进行了“FreeBSD 不是 Linux 发行版”的演讲,这是基金会董事会成员 George Neville-Neil 为开源中国在去年 12 月编写的演讲稿。我的演讲受到了热烈欢迎,尤其是主要由 Linux 用户组成的听众提出了很多很好的问题。请阅读更多内容:https://www.FreeBSDfoundation.org/blog/fossasia-2017-trip-report-philip-paeps/
OSCON 2017(由 Ed Maste 贡献)
我代表 FreeBSD 基金会参加了 2017 年的 OSCON 会议,该会议于 5 月 8 日至 11 日在美国德克萨斯州奥斯汀举行:https://conferences.oreilly.com/oscon/oscon-tx。
基金会的展台还由 FreeBSD 提交者 Brad Davis 和来自 Netgate 的 Doug Mcintire 提供支持。我们在星期三早上碰面,开始布置展台。我们的展位是“非营利展区”的一部分,这个展区由大约八个展位组成,位于 Open Camps 和 Operation Code 之间。
为了吸引更多展位流量,我带来了一个配备小型 LCD 显示屏的 Raspberry Pi 3。作为演示,Raspberry Pi 展示了一个展示 FreeBSD 源代码树变化的 Gource 渲染视频(请参见 https://www.youtube.com/watch?v=vZ8Sspua0Ks)。请阅读更多内容:https://www.FreeBSDfoundation.org/blog/conference-recap-oscon-2017/
Rootconf 2017(由 Philip Paeps 贡献)
在 5 月中旬,我在印度班加罗尔的 Rootconf 2017 上做了报告。Rootconf 是印度的主要会议,系统和运维工程师在此分享关于构建可靠系统的实际经验:https://rootconf.in/2017/。
一如既往,听到人们在尝试在不太可靠的平台上运行可靠系统时面临的困难,还是非常有趣的。虽然许多演讲都非常专注于 Linux,并且对我来说不太吸引,但有几个演讲还是引起了我的兴趣。
我特别喜欢 Aruna Sankaranarayanan 的演讲(https://www.youtube.com/watch?v=XQJ7YhVoSWI&feature=youtu.be),她讲解了 Mapbox 如何利用 Amazon 的“现货定价”机制,通过在不同的价格点启动和关闭机器来优化成本,同时不影响可用性。他们的 spotswap 软件(https://github.com/mapbox/spotswap/)已在 BSD 许可证下发布。听起来应该可以将其轻松移植到 FreeBSD 上。阅读更多内容:https://www.FreeBSDfoundation.org/blog/rootconf-2017-trip-report-philip-paeps/。
BSDCan 2017/FreeBSD 开发者峰会(由 Deb Goodkin 贡献)
我们的其中一项举措是协助在全球范围内提供面对面的知识共享和开发机会。我们通过赞助与 BSD 相关的会议以及 FreeBSD 开发者和供应商峰会来实现这一目标。我们最近赞助了 BSDCan 2017 和 FreeBSD 开发者和供应商峰会,该峰会于 2017 年 6 月 7-10 日在加拿大安大略省渥太华举行。我们的许多董事会成员和员工参加了峰会和会议,进行教程、演讲、主持会议、与开发者合作、演示和分享知识。
此外,今年我们很高兴将我们新的滑铁卢大学实习生带到会议上,他们有机会在基金会展位上展示他们的一些项目。阅读更多内容:https://www.FreeBSDfoundation.org/blog/conference-recap-bsdcan-2017FreeBSD-developers-summit/。
开放旅行赞助申请
基金会认识到,将 FreeBSD 社区成员聚集在一起的面对面交流对项目的进一步发展和推广 FreeBSD 具有重要意义。社区成员如果需要赞助参加与 FreeBSD 开发和宣传相关的会议的差旅费用,可以申请旅行赞助。请注意:旅行赞助政策最近已更新,请在提交申请之前仔细阅读。
有关旅行赞助的更多信息,请访问:https://www.FreeBSDfoundation.org/what-we-do/grants/travel-grants/。
FreeBSD 日是 6 月 19 日! (由 Anne Dickison 贡献)
6 月 19 日被宣布为 FreeBSD 日!感谢所有加入我们,纪念 FreeBSD 项目的开创性遗产及其对技术的持续影响的人们。了解更多关于 FreeBSD 日以及我们如何庆祝的内容,请访问:https://www.FreeBSDfoundation.org/blog/happy-FreeBSD-day/。
即将举行的活动
了解更多关于基金会即将举行的活动,请访问:https://www.FreeBSDfoundation.org/news-and-events/upcoming-events/。
FreeBSD 期刊
2017 年 5/6 月期的 FreeBSD 期刊已发布。不要错过关于 FreeBSD 防火墙盛宴、CADETS:在 FreeBSD 上融合跟踪和安全、面向 oblivious 沙盒化与 Capsicum 等文章。(https://www.FreeBSDfoundation.org/past-issues/security/)
你错过了 3/4 月期吗?查看关于 CFEngine、Puppet on FreeBSD、Vagrant 等的文章!(https://www.FreeBSDfoundation.org/past-issues/configuration-management/) 作为新增功能,基于浏览器的订阅者现在可以下载并分享文章的 PDF 文件!
示例期刊!如果你曾经想阅读整期 FreeBSD 期刊,现在有机会了。从 https://mydigitalpublication.com/publication/?i=296880#{"issue_id":296880,"numpages":1,"page":1} 下载示例期刊,并与你的朋友和同事分享。如果你还不是订阅者?今天就注册:https://www.FreeBSDfoundation.org/journal/。
有关基金会事务的更多信息,请查阅我们的季度新闻通讯,链接已在上文提供。
联系人:David Wolfskill <dhw@FreeBSD.org> 联系人:Larry Rosenman <ler@FreeBSD.org> 联系人:Ryan Steinmetz <zi@FreeBSD.org> 联系人:Eygene Ryabinkin <rea@FreeBSD.org> 联系人:Remko Lodder <remko@FreeBSD.org> 联系人:Kurt Jaeger <pi@FreeBSD.org>
邮件管理员负责 FreeBSD 项目的邮件流管理。
Clusteradm 提供了四个 jail:mailman、mailarchive、mx1 和 mx2。此外,还有一部分设置在 freefall.FreeBSD.org 上运行。该系统使用 postfix、mailman、spamassassin 和其他一些来自 Ports 的工具来处理邮件流。我们使用一个非常小、非公开的 Subversion 仓库来管理配置的部分内容。
在第二季度,Larry Rosenman、Kurt Jaeger、Eygene Ryabinkin、Remko Lodder 和 Ryan Steinmetz 加入了邮政管理员团队,Florian Smeets 离开了该团队。
感谢 Florian 长期以来在这个角色中的辛勤工作!David Wolfskill 计划在新团队成员稳定后离开该职位。Vsevolod Stakhov 计划为我们提供支持,以将 rspamd 集成到现有设置中。
邮件管理员团队的工作量不大,但系统设置的复杂性要求较高。
我们需要改善内部的工作流程和过程文档。
我们应考虑增加一些监控,以提供有关邮件流的季度统计数据。
联系人:Gleb Kurtsou <gleb@FreeBSD.org> 联系人:Konstantin Belousov <kib@FreeBSD.org> 联系人:Kirk McKusick <mckusick@FreeBSD.org>
64 位 inode 项目已于 2017 年 5 月 23 日完成并合并到 FreeBSD 12 中。它将 ino_t、dev_t 和 nlink_t 类型扩展为 64 位整数。它修改了 struct dirent 布局,增加了一个 d_off 字段,扩展了 d_fileno 的大小至 64 位,增加了 d_namlen
的大小至 16 位,并更改了结构的对齐要求。它还增加了 struct statfs
中数组 f_mntfromname[]
和 f_mntonname[]
的长度,从 MNAMELEN 扩展至 1024。
通过提供版本化符号、巧妙利用现有结构中的填充以及其他各种技巧,减少了 ABI 的破坏。不幸的是,并不是所有问题都能解决,尤其是在基系统外部。例如,传递 struct stat 作为参数的第三方 API,在向前和向后兼容性方面存在问题。
kinfo 消费 sysctl MIBs 的 ABI 已以向后兼容的方式更改,但没有通用机制来处理其他 sysctl MIBS,这些 MIB 返回的结构布局已发生变化。在我们看来,这种破坏通常发生在管理接口中,我们通常允许 ABI 的滑移,或者这些破坏并不重要。
struct xvnode 的布局已更改,并且没有提供兼容性填充。
对于 struct xtty,dev_t tty 设备成员已简化为 uint32_t。我们决定在这种情况下维护 ABI 兼容性比报告 64 位 dev_t 值更有意义,目的是为了 pstat。
更新说明:请严格按照 UPDATING 中的说明操作。先构建并安装启用了 COMPAT_FREEBSD11 选项的新内核,然后重启,再安装新的 world。
致谢:64 位 inode 项目,亦称为 ino64,最初由 Gleb Kurtsou(gleb)启动,许多年后 Kirk McKusick(mckusick)接手并更新了补丁,并充当旗帜手。反馈、建议和讨论由 Ed Maste(emaste)、John Baldwin(jhb)、Jilles Tjoelker(jilles)和 Rick Macklem(rmacklem)参与。Kris Moore(kris)进行了初步的 ports 调查,随后由 Antoine Brodin(antoine)进行 exp-run。Peter Holm(pho)完成了至关重要的全面测试。项目的协调和完成由 Konstantin Belousov(kib)承担了重任。
该项目由 FreeBSD 基金会(emaste, kib)赞助。
联系人:Ed Schouten <ed@nuxi.nl>
Capsicum 和 CloudABI 的一个弱点是,开发需要发起网络连接的应用程序并不容易,因为像 connect()
和 sendto()
这样的系统调用被禁用。尽管有时我们可以通过确保沙箱化进程在启动时已持有套接字文件描述符来绕过这个问题,但这并不允许目标进程重启、移动到不同的网络地址或进行负载均衡等操作。
为这个问题找到解决方案对我来说非常重要,因为我目前正在致力于使 CloudABI 能够在 Kubernetes 上运行,Kubernetes 是 Google 的开源集群管理套件。这个想法是,Kubernetes 将调度 CloudABI 进程而不是 Docker 容器。这些 CloudABI 进程的所有依赖服务将被显式注入,使得内部通信非常安全。所有这些也当然计划在 FreeBSD 上运行!
为了解决这个问题,我一直在开发一个名为 Flower(读作 flow-er)的守护进程,它允许软件注册服务并与之连接。服务器通过一组带值的标签来标识(例如,{datacenter: 'frankfurt', service: 'mysql'})。客户端可以通过提供相应的标签来连接这些服务器。Flower 的安全模型是基于能力的,像 Capsicum 一样。绑定和连接的能力可以通过永久性地将标签约束为某些值来限制。
Flower 被设计为不充当代理。它不复制任何数据。它只是转发现有的套接字文件描述符,或者创建 UNIX 套接字对,并将这些分发给它的客户端和服务器。为了实现这一点,进程通过一个名为 ARPC 的 RPC 库与 Flower 进行通信。ARPC 是一个非常简单的 Google GRPC 克隆,具有一个特殊的功能:消息(Protobufs)可以附加文件描述符。
该项目由荷兰的 Nuxi 赞助。
完成 Flower 代码的实现。
将 Flower 与 Kubernetes/CloudABI 运行时集成。
将 Kubernetes/CloudABI 运行时作为开源软件发布。
联系人:Willem Jan Withagen <wjw@digiware.nl>
Ceph 是一款分布式对象存储和文件系统,旨在提供卓越的性能、可靠性和可扩展性。
对象存储 Ceph 通过原生语言绑定或 radosgw 提供对对象的无缝访问,后者是一个兼容 S3 和 Swift 应用程序的 REST 接口。
块存储 Ceph 的 RADOS 块设备(RBD)提供对跨整个存储集群条带化和复制的块设备映像的访问。
文件系统 Ceph 提供一个 POSIX 兼容的网络文件系统,旨在提供高性能、大数据存储,并与传统应用程序实现最大兼容性。
我开始研究 Ceph 是因为 HAST 解决方案与 CARP 和 ggate 并没有真正达到我所期望的效果。我计划运行一个 Ceph 存储集群,其中的存储节点运行 ZFS,用户工作站运行 bhyve,并将 RBD 磁盘存储在 Ceph 中。
现在为 FreeBSD 编译将构建 Ceph 中的大多数工具。
自上次报告以来的最重要变化包括:
Ceph 已发布候选版本 v12.1.0(即 Luminous);相应的打包文件正在我的树中,等待 Luminous 正式发布。
ceph-fuse 已经可以工作,允许挂载 cephfs 文件系统。速度不是特别快,但确实有效。
rbd-ggate 可用,用于创建 Ceph rbd 支持的设备。rbd-ggate 是 Mykola Golub 提交的。它的工作方式相对简单:待集群正常运行,可以使用 rbd import
和 rbd-ggate map
创建由 Ceph 集群支持的 ggate 类设备。
自上次报告以来的其他改进:
正在修复 init-ceph 代码中的一些错误(这些是 rc.d 所需的)。
RBD 和 rados 正常运行。
已编写所需的兼容性代码,使 FreeBSD 和 Linux 守护进程能够在同一集群中协同工作。
删除了更多与 Linux 特性相关的依赖——只有 /bin/bash
被保留。
Ceph 下一个官方版本是 Luminous(v12.1.0)。待上游发布,FreeBSD 将提供 Port。
要在 FreeBSD 系统上运行,运行 pkg install net/ceph-devel
或克隆 https://github.com/wjwithagen/ceph,检查 wip.freebsd.201707
分支,并通过在检出根目录运行 ./do_freebsd.sh
手动构建。
尚未包含的部分:
KRBD——但是可以使用 rbd-ggate 来代替。
BlueStore——FreeBSD 和 Linux 有不同的 AIO API,这种不兼容问题需要解决。此外,FreeBSD 中还在讨论 aio_cancel 在某些设备类型上无法正常工作。
运行集成测试,查看 FreeBSD 守护进程是否能与 Linux Ceph 平台兼容工作。
调查密钥库,它可以嵌入到 Linux 内核中,但目前阻止了 Cephfs 和其他部分的构建。首先要弄清楚它是否真的需要,还是仅仅 KRBD 需要它。
调度器信息目前没有使用,因为 Linux 和 FreeBSD 的调度器工作方式不同。但到某个时候,这部分将需要关注(在 src/common/Thread.cc
中)。
改进 Ceph 堆栈中 FreeBSD 的初始化脚本,以便在测试和生产环境中运行 Ceph。继续改进 ceph-disk
和 ceph-deploy
使其更兼容 FreeBSD 和 ZFS。
构建一个测试集群并开始运行一些 teuthology 集成测试。Teuthology 想要构建自己的 libvirt,这与 FreeBSD 中已有的一些包不兼容。这里有许多细节需要解决。
设计一个虚拟磁盘实现,可与 bhyve 一起使用并附加到 RBD 映像。
联系人:Emmanuel Vadot <manu@FreeBSD.org>
DTS(设备树源文件)提供了给定计算机系统(例如基于 ARM 或 MIPS 的嵌入式板)的硬件资源的可读源描述。DTS 源表示必须编译成二进制格式,才能链接到内核中,并在运行时用于查找设备。
已更新 FreeBSD 中的 DTS 文件,以匹配来自 Linux 4.11 版本的文件,旨在表示更多现代设备并提供更准确的表示。
联系人:Edward Tomasz Napierała <trasz@FreeBSD.org>
Coda 是一个分布式文件系统,作为卡内基梅隆大学的研究项目开发,源自 Andrew 文件系统的一个旧版本。五年前,它因未被采用为 MPSAFE 世界的一部分而从 FreeBSD 中删除。本项目的重点是将其恢复到足够可用的状态,以便可以重新加入内核。目前,它已经处于工作状态。正在进行的工作包括更好地进行测试,修复发现的问题,并将其提交到 12-CURRENT。
该项目得到了查尔姆斯理工大学的赞助。
进行额外的测试。
更新用户空间组件(net/coda_client 和 net/coda_server)。
联系人:Marcin Wojtas <mw@semihalf.com> 联系人:Michał Krawczyk <mk@semihalf.com>
ENA(Elastic Network Adapter)是一款由 Annapurna Labs 开发的 25G SmartNIC,基于定制的 ARMv8 芯片。它是一款高性能网络卡,可在 AWS 的产品中找到。它在 EC2 机器上引入了网络利用率可扩展性的增强,适用于多种操作系统,尤其是 FreeBSD。
FreeBSD 的目标是提供卓越的性能和广泛的监控与管理功能,如:
多队列模式
硬件卸载(rx 和 tx 校验和)
管理队列
异步通知
强大的硬件访问
可扩展的 MSI-X 向量数量
硬件计数器
看门狗机制
LRO
RSS
该驱动程序自 r318647 起已包含在内核源树中。
该项目得到了 Annapurna Labs(亚马逊公司)的赞助。
从用户空间添加 RSS 配置(通过 sysctls)。
添加对 LLQ 机制的支持。
联系人:Chris Galazka <krzysztof.galazka@intel.com> 联系人:Jeb Cramer <jeb.j.cramer@intel.com>
ix 和 ixv 网络接口驱动程序支持多种 Intel 网络接口,线速为 10 Gbit/秒。
本季度,驱动程序新增了对 X553 网络接口的支持,后者出现在基于 Denverton 平台的系统级芯片设备上。此更新应使 FreeBSD 在新一代硬件平台上更加实用。
同时,工作正在进行中,将这些驱动程序转换为使用 iflib 网络驱动程序库,这将简化驱动程序的未来维护,并有助于整个网络子系统的管理。
联系人:Rick Macklem <rmacklem@FreeBSD.org>
并行 NFS(pNFS)是 NFSv4 协议的一个扩展,允许在单一逻辑挂载内对多个文件服务器进行文件访问,并且数据访问可以并行进行。使用的 pNFS “布局”指定了如何进行划分,元数据操作发生在主服务器上,批量数据操作(读/写/设置属性等)则通过特定布局在客户端与数据服务器之间进行。
我最初尝试使用 GlusterFS 搭建 pNFS 服务器的实验失败了。它能工作,但性能非常差,无法使用。现在我称之为“B 计划”的尝试,完全使用 FreeBSD,其中一台 FreeBSD 服务器处理元数据操作,多个 FreeBSD 服务器配置为提供数据,现已准备好进行第三方测试。如果第三方测试顺利,我预计代码将在 FreeBSD 12 发布时并入 FreeBSD 主分支。较新的 FreeBSD 或 Linux 系统应该能作为 pNFS 客户端进行测试。此服务器支持文件布局,适用于这两个客户端。
目前不支持 Flex Files 布局或镜像。我希望能利用 Flex Files 布局,在未来一年左右添加镜像支持。暂不支持条带化,目前没有实现的计划。
已修补的 FreeBSD 源代码现在可以通过 Subversion 或下载 gzipped tarball 进行测试。这些源代码包含修补过的内核和 nfsd,可以在任何 FreeBSD 11 或更高版本系统上使用。
由于代码已经可用,需要他人进行测试。
联系人:Marcin Wojtas <mw@semihalf.com>
联系人:Zbigniew Bodek <zbb@FreeBSD.org>
目前正在进行工作,旨在将 Marvell Armada38x 平台的支持引入 FreeBSD 主分支。
近期工作的重点包括:
添加网络驱动程序(NETA)
启用所有 ARMv7 SoC 的一致性 busdma 操作
添加各种低级优化,如 L1 缓存预取和 MBUS 奇异现象
启用 PL310 L2 缓存控制器
添加 SDHCI 支持
修复 e6000sw 驱动程序并重新处理其 PHY 处理
支持多端口 PCIe 操作
增强和修复 Marvell 公共代码
修复并启用性能计数器支持(HWPMC)
该项目得到了 Stormshield、Semihalf 和 Netgate 的赞助。
联系人:Andrew Turner <andrew@FreeBSD.org>
已添加对特权访问禁止(PAN)功能的支持。此功能禁止内核访问用户空间内存,除非通过特定指令。这有助于提高安全性,仅允许通过正确的访问器函数访问用户空间。这一功能已在所有实现 ARMv8.1 或更高版本的支持 CPU 上启用。
pmap 代码现在支持页表中的非特权禁止执行(UXN)和特权禁止执行(PXN)位。这些位分别阻止用户空间和内核在任何标记页面上执行指令。
pmap 层的性能得到了提升。许多缓存处理函数调用已被移除,一些是早期为绕过其他已修复的错误而需要的。这些调用的移除带来了显著的性能提升。
内核现在在适当的情况下使用 crc32c 指令。这是一组可选的指令,用于快速执行 crc32c 校验和,无需使用查找表。
现在支持 VM_MEMATTR_WRITE_THROUGH 内存属性。这用于为帧缓冲区分配内存。以前,内核使用缓存内存;然而,这会导致视觉伪影。写通过标志通过将数据写入 RAM 来解决这个问题。
arm64 上的默认链接器现在是 lld。这意味着 FreeBSD 可以仅使用基本系统中的组件构建自己,这是一个重要的里程碑!
联系人:Emmanuel Vadot <manu@FreeBSD.org>
树内的 DTC(设备树编译器)现在默认使用 BSD 许可证版本。(之前默认的 DTC 版本是 GPL 许可证。)当前版本支持覆盖,并且能够编译 FreeBSD arm 版本所使用的所有 DTS(设备树源)。Ports 中的 GPL 版本已更新至最新版本(1.4.4)。树内的 GPL 版本仍然存在,但目标是在 FreeBSD 12.0 之前移除它。
联系人:Rafael Espíndola <rafael.espindola@gmail.com> 联系人:Ed Maste <emaste@FreeBSD.org>
LLD 是 LLVM 项目家族中的链接器。它是一个高性能链接器,支持 ELF、COFF 和 Mach-O 对象格式,并且与常用的链接器(如 ELF 的 GNU Binary File Descriptor(BFD)ld 和 GNU gold)高度兼容。然而,LLD 的作者并不受到严格兼容性的约束,如果这样会影响性能或预期功能的话。
LLD 现在作为 FreeBSD/arm64 的默认系统链接器,并能够链接工作中的内核、内核模块和用户空间。LLD 还可以为 FreeBSD/arm 和 FreeBSD/i386 链接工作中的内核和模块(但不能链接用户空间)。
目前正在进行修复,解决一些无法使用 LLD 作为系统链接器构建的 Port(通过修复 Port 或配置 Port 使用 GNU ld 链接)。
对于 FreeBSD 12.0,我们预计将为与 Clang 默认一起使用的架构(32 位和 64 位 ARM 和 x86)使用 LLD 作为系统链接器。
该项目得到了 FreeBSD 基金会的赞助。
修复 libtool,以便能够检测 LLD,并传递与 GNU ld 和 gold 相同的命令行参数。
调查剩余的 amd64 和 arm64 Port 构建失败问题。
在创建 stable/12 分支之前,调查并改进 i386 和 arm 上的 LLD。
调查并改进其他架构上的 LLD。
进行广泛的测试。
联系人:Tobias Kortkamp <tobik@FreeBSD.org>
FreeBSD Ports 现在通过新的 USES=cargo
设置,支持使用 Rust 包管理器 Cargo 编写的应用程序。这项工作基于 OpenBSD Ports 中的 cargo 模块。
这应该大大简化 Rust 应用程序的移植,因为以前移植者必须创建应用程序依赖项的 tarball,或找到其他手动引入依赖项的方法。
新增了几个使用该设置的 Port,例如:
Alacritty,一款 GPU 加速的终端模拟器
Exa,一个现代化的 ls 替代工具
Ripgrep,一个基于行的搜索工具,结合了 The Silver Searcher 的可用性和 GNU grep 的速度
为新功能添加文档。
联系人:Gerald Pfeifer <gerald@FreeBSD.org> 联系人:Andreas Tobler <andreast@FreeBSD.org>
Ports 中的默认 GCC 版本(通过 USE_GCC=yes 和各种 USES=compiler 调用来请求的版本)已从 GCC 4.9.4 更新为 GCC 5.4。
这个新版本带来了许多新功能和改进,并且有一些变化可能需要进行调整。后一类变化包括许多新的编译器警告、对过程间优化的显著改进,以及链接时优化。
C 的默认模式现在是 -std=gnu11
,而不是 -std=gnu89
。C++ 前端完全支持 C++14 语言特性,包括 C++14 变量模板、C++14 带非静态数据成员初始化的聚合、C++14 扩展的 constexpr 等。标准 C++ 库(libstdc++)完全支持 C++11,并实验性支持 C++14。它默认使用新的 ABI。
Port lang/gcc 现在是一个元 Port,会根据 $GCC_DEFAULT 的设置引入相应的 Port lang/gccX ,并将 gcc、g++ 和 gfortran 定义为指向相应版本化二进制文件的符号链接。
这是建立这项基础设施的漫长过程的结束,现在类似于 Port Python 使用的方式。例如,拥有这项新基础设施使得升级默认版本以及本地调整默认版本变得更加容易。
已添加 gcc8-devel,移除了对 armv6hf 的支持,并且对 FreeBSD 的新版本进行了调整。此外,还进行了一些清理和更改,以提高我们软件包的稳健性,并为许多 Port 添加了对 aarch64 的支持。
感谢 dim@、jbeich@、tijl@、mat@、miwi@、linimon@ 在此项工作中的帮助。
将 GCC 默认版本从 GCC 5.4 更新到 GCC 6.4 的工作不幸停滞。目前,GCC 和基础设施方面的工作已完成,但仍有一些需要调整或修复的损坏 Port。任何帮助都将非常感激;请参阅 PR 219275 获取详细信息。
联系人:FreeBSD GNOME 团队 <FreeBSD-gnome@FreeBSD.org>
FreeBSD GNOME 团队维护着 FreeBSD 上的 GNOME、MATE 和 CINNAMON 桌面环境及图形用户界面。GNOME 3 是 GNU 项目的一部分。MATE 是 GNOME 2 桌面的一个分支。CINNAMON 是一个使用 GNOME 3 技术,但具有 GNOME 2 外观和感觉的桌面环境。
在一段时间没有太多活动后,本季度我们开始尝试一种将开发仓库中的 Port 合并到 FreeBSD Ports 的方式。我们没有一次性合并所有内容,而是逐个或小批量更新 GNOME Port。例如,GTK+ 堆栈和 Evolution 套件是作为一组更新的,而所有 gnome-games 组件则在一次提交中完成。这样做可能需要更多的准备和测试工作,但好处是能够更容易跟踪正在发生的事情,也能更关注细节。这也应该使得提交小规模的更改变得更加容易。
本季度从 GTK+ 3 更新到 3.22.15 开始,底层库也更新到了最新的稳定版本。GTK+ 更新后,工作开始更新其他 GNOME 应用程序的版本。
webkit2-gtk3 Port 首先更新到 2.14 系列,随后又更新到 2.16.3,这是最新的稳定版本。因为 2.16 版本无法在 FreeBSD 10.3 上构建,除非进行一些所需的框架更改,所以必须进行这一步。
harfbuzz-icu 被从主 Port harfbuzz 中分离出来,这样就不再将重的 icu 依赖包含在主 Port harfbuzz 中。
我们修复了一个长期存在的 GLib/gio 错误,该错误曾导致在修改 share/applications
时,gnome-shell 和其他应用程序崩溃,这在 pkg 安装或卸载时会发生。
这些更新中的许多基于 Ruslan Makhmatkhanov、Gustau Perez 和 Koop Mast 在 GNOME 开发分支上之前完成的工作。
Mutter/Gnome-shell/GDM 3.24 的移植已经完成。不幸的是,由于在登录后“交接”会话时存在一个 bug,GDM 阻止了更新。
修复 gnome-control-center 中的打印机子菜单。作为临时解决方法,可以使用 system-config-printer 配置打印机。
MATE 1.18 正在进行 QA 测试,预计将在 7 月初发布。
联系人:KDE 在 FreeBSD 团队 <kde@FreeBSD.org>
KDE 在 FreeBSD 上的团队专注于包装 KDE 和 Qt,并确保它们在 FreeBSD 上的体验尽可能好。
在本季度,除了对 KDE、Qt 和相关 Port 的常规更新外,还有一些幕后变化:我们的开发仓库已迁移到 GitHub,FreeBSD 现在是 KDE 官方持续集成(CI)基础设施的一部分。
继 X.Org 和 GNOME Port 团队之后,KDE 在 FreeBSD 上的团队也将其开发仓库迁移到了 GitHub。这应该使其他人能够通过拉取请求与我们进行更轻松的协作,并且通过将我们所有的更改基于官方 Ports,我们也希望能减少在整个树中处理大更新时出现的冲突和变化。我们要感谢 iXsystems 多年来托管和支持我们的 area51 Subversion 仓库。
FreeBSD 最终加入了 KDE 的 CI(持续集成)系统,成为一级平台。KDE CI 持续构建所有 KDE 源代码——70 个框架、KDE Plasma 桌面和大量 KDE 应用程序——直接从 KDE 的 Git 仓库构建。上游和下游 KDE-FreeBSD 团队都在强烈承诺尽量减少 KDE Port 中的补丁数量。最初的效果体现在扩展单元测试集,以包括 FreeBSD 特定的情况,并扩展 Qt 以更好地处理 FreeBSD 文件系统。除了 KDE 系统管理员,我们还要感谢 Adriaan de Groot,他既是 KDE 提交者,也是 KDE 在 FreeBSD 上团队的一员,领导了这些工作。
本季度,以下几个重大更新进入了 Ports :
CMake 更新至 3.8.0 和 3.8.2
KDE Frameworks 更新至 5.33、5.34 和 5.35
Calligra 办公套件更新至 3.0.1,这是基于 KDE Frameworks 5 的第一个发布版本,也是上游的最新稳定版本
Konversation IRC 客户端更新至 1.7.2,这是最新的上游版本,也是第一个基于 KDE Frameworks 5 的 Port 版本
KchmViewer 更新至 7.7,基于 KDE Frameworks 5
LabPlot 更新至 2.3.0 和 2.4.0,并且现在基于 KDE Frameworks 5
QtCreator 更新至 4.2.2,随后更新至 4.3.0
py-sip 更新至 4.19.2,PyQt4 更新至 4.12,PyQt5 更新至 5.7.1
多个修复已经进入 Port Qt4 和 Qt5 ,以支持 ARMv6——感谢 Mikaël Urankar
经过多轮审核和实验运行后,Tobias Berner (tcberner@) 最终将 Ninja 生成器设为 CMake 基础 Port 的默认生成器,这样 devel/ninja 就能代替 (g)make 被使用。这应该使大多数构建变得更快,即使只是略微加速。Adriaan de Groot 也为这一变化写了一篇博客。
联系人:Olivier Cochard-Labbé <olivier@cochard.me>
FRRouting(FRR),一个基于 Quagga 的分支,是一个为 Linux 和 Unix 平台提供的 IP 路由协议套件,包括 BGP、IS-IS、OSPF 和 RIP 协议守护进程(LPD 和 PIM 在 FreeBSD 上的支持需要修复)。FRR 是一个 Linux 基金会的协作项目,贡献者包括 6WIND、Architecture Technology Corporation、Big Switch Networks、Cumulus Networks、LabN Consulting、NetDEF(OpenSourceRouting)、Orange、Volta Networks 和其他公司。
该项目由 Orange 提供赞助。
联系人:Torsten Zühlsdorff <tz@FreeBSD.org>
作为 PHP Port 的维护者,我首先要感谢大家提供的各种反馈和补丁,这些让我感到非常有趣!
在过去的几个月里,我学到了很多关于各种配置、设置和 bug 的知识。不幸的是,总是有一些 PR、补丁和邮件没有得到回复,因为我个人时间不足。
我希望通过添加更多的自动化 QA 测试来改进这种情况,但我需要帮助来实现这一点。请将你们的非标准 PHP 配置或描述你们的特殊设置发送给我!这些配置可以像更改默认版本一样简单,例如使用 LibreSSL 代替 OpenSSL,或者用于编译的 GCC 版本。例如,我自己总是使用不同于默认的 PostgreSQL 版本(并且总是使用 PHP 7.1)。当然,这也包括以非默认方式设置的 Port 选项,或更改变量以允许多个 PHP 安装的设置等。
我计划在所有受支持的 FreeBSD 版本上进行测试,所以你只需提到你是否使用了不受支持的版本即可。
注意:由于 PHP 7.2 正在发布(希望按计划进行),我也将从一开始就测试 PHP 7.2,并进行所有提供的配置测试。
记录需要测试的各种配置。
设置自动化 QA 基础设施。
联系人:FreeBSD Rust 团队 <rust@FreeBSD.org>
Rust 已更新至 1.18.0,Cargo 更新至 0.19.0,这是写作时的最新版本。
lang/rust 已在 FreeBSD/aarch64 上启用,并且 devel/cargo 的工作仍在继续,以实现相同的目标。我们也在缓慢推进,增加对更多平台的支持。
关于操作系统主要版本之间的 API/ABI 破坏性变更,已经开始了上游讨论。例如,这是为了能够同时支持 FreeBSD 11.x 和 12.x,因为这两个版本的 ABI 更改涉及重要结构。待上游添加了支持,就可以针对特定的 ABI 进行交叉编译。
目前,lang/rust-nightly 被标记为损坏。我们需要重新审视 Port 的构建方式,以便使用上游推荐的 x.py 脚本。
Tobias Kortkamp (tobik@) 创建了 USES=cargo 设置,使得将 Rust 应用程序添加到 Ports 变得更容易。有关此设置的详细信息,请参见本季度报告中的单独条目。
编译器 rustc 有时会在遇到编译错误时崩溃。因此,仍有一些工作需要做,以提高其稳定性。
在 lang/rust* 和 devel/cargo Makefile 之间存在一些代码重复。这些都值得清理,也许创建一个 USES=rust Makefile 辅助工具会有所帮助。
在更多平台上引导 Rust。
调查编译器崩溃问题。
调查如何加速 lang/rust* 的编译时间。
联系人:Tobias Kortkamp <tobik@FreeBSD.org>
sndio 是一个小型音频和 MIDI 框架,属于 OpenBSD 项目。它提供了一个轻量级的音频和 MIDI 服务器 sndiod。它目前支持 OpenBSD、FreeBSD、DragonFly BSD 和 Linux。
到 FreeBSD 和 OSS 的移植工作始于去年,FreeBSD Ports 中的 sndio 后端支持现在已经足够好,适合日常使用。
Sndio 通过 sndiod 提供了网络透明性,它提供了一种轻松共享音频设备与网络中其他机器/虚拟机/jail 的方式。然而,应用程序和库需要支持通过它进行播放和录音。为此,过去一年里我为多个 Port 提交了补丁。
以下是现在在 FreeBSD Ports 中支持 sndio 的一些 Port:
大多数游戏,通过 audio/openal-soft、devel/sdl12 和 devel/sdl20。
基于 GStreamer 的应用程序和基于 WebKit 的浏览器,通过两个新的 GStreamer 插件(audio/gstreamer1-plugins-sndio 和 audio/gstreamer-plugins-sndio)。
Firefox、Firefox ESR、Seamonkey、Chromium 和 Iridium。这些浏览器当前缺少或有一个无法工作的 OSS 后端。Sndio 支持为它们提供了一个 BSD 原生的替代方案,取代 ALSA 和 PulseAudio 后端。
视频播放器,如 VLC、Totem、mpv、mplayer 等。
音频播放器,如 Clementine、cmus、mpd、mpg123、siren、xmp 等。
SoX。
Shairport Sync,通过新实现的后端。
JACK。
PulseAudio,通过 audio/pulseaudio-module-sndio。
提交 Kodi 新的 sndio 后端的回溯修复至 Ports。
如果你维护或使用与音频相关的 Port,请检查它是否包含 sndio 后端,并添加 SNDIO 选项。感谢 OpenBSD 开发者,多个开源项目已经包含了该选项,因此添加它可能非常简单。
联系人:Jov <amutu@amutu.com>
如其网站所述,“TensorFlow™ 是一款开源软件库,用于通过数据流图进行数值计算。图中的节点代表数学运算,而图的边代表在节点之间传递的多维数据数组(张量)。灵活的架构允许你使用单一的 API 将计算部署到桌面、服务器或移动设备的一个或多个 CPU 或 GPU 上。TensorFlow 最初由 Google Brain 团队的研究人员和工程师开发,作为 Google 的机器智能研究组织中的一部分,旨在进行机器学习和深度神经网络研究,但该系统足够通用,也可以应用于许多其他领域。”
TensorFlow 现在是最流行的机器学习和 AI 平台/库。Linux、Mac、Windows 和 Android 上有官方二进制版本,但 FreeBSD 没有官方支持。在过去的几个月里,我做了一些工作,使 TensorFlow 能在 FreeBSD 上运行。一些重要的进展包括:
bazel 被修补,使其在构建时不依赖 /proc
。bazel 是谷歌开发的构建工具,在构建 C++ 代码时使用 /proc
来获取路径,但当以非特权用户身份构建时,通常不允许挂载 /proc
。
现在,TensorFlow 可以通过使用 clang38 作为默认的 bazel 跨平台构建工具,在 FreeBSD 10.x 上进行构建。
修补 bazel 工作空间文件,允许 TensorFlow 使用离线的第三方依赖项进行构建。这项工作是必要的,因为 FreeBSD Ports 框架除 fetch 阶段外不允许网络访问。
修复了 FreeBSD i386 上的构建问题。
使 TensorFlow 能使用 Python 2 或 Python 3 进行构建。
更新到最新版本,即 tensorflow-1.2.0。
TensorFlow 现在可以在 FreeBSD 上以仅 CPU 模式运行。已经在一些 FreeBSD 10.3-RELEASE 和 11.0-RELEASE 的组合上进行了功能测试,支持 amd64 和 i386 以及 Python 2.7 和 Python 3.6。
没有 bapt@、lwhsu@、mat@ 和 koobs@ 的大量帮助,这个 Port 是不可能完成的 —— 感谢你们的建议、审查和帮助!你们非常友好,我从你们那里学到了很多关于 FreeBSD 和 Ports 框架的知识。
审查、测试、评论,最重要的是,将其提交到 Ports。
修复 FreeBSD 上的 OpenCL(GPU 加速)支持。
移植 tensorflow-serving,这是一个灵活的、高性能的机器学习模型服务系统。
为 TensorFlow 在 FreeBSD 上设置 CI,并在其破坏 FreeBSD 上的 TensorFlow 时提前通知上游。
联系人:Mark Linimon <linimon@FreeBSD.org>
我一直在分析所有非 x86 架构的 Port 构建错误日志,包括发布在软件包构建集群上的日志,以及 powerpc64 和 sparc64 的其他构建日志。
通过这项分析,我将几乎所有失败的 Port 标记为 BROKEN 或 NOT_FOR/ONLY_FOR,具体取决于情况。
这项工作的目的是并不是让任何人更难做事,而是相反。通过这些定义,可以扫描 poudriere 批量构建输出(特别是“被忽略的 Port”部分),快速查看哪些 Port 构建失败及其原因。以前,查找构建失败的确切原因需要一些研究(portsmon 只分析 amd64 上的失败信息)。此外,逐个处理几百个只显示“编译失败”、“链接失败”等的日志是极其困难的。
这是为了解识别我们在哪些地方需要进一步工作,以便为例如 armv6 和 aarch64 等架构带来足够的 Port 支持,将其更接近真正的一级架构状态。
为了进一步便于在 Poudriere 输出中找到模式,我已经开始重新编写一些现有的 BROKEN
/NOT_FOR
/ONLY_FOR
消息,以便它们能更容易排序。这包括排序架构出现在列表中的顺序。
许多人在修复各个 Port 方面做了出色的工作。我希望我的工作能让他们的任务变得稍微容易一些。
联系人:FreeBSD Xfce 团队 <xfce@FreeBSD.org> 联系人:Olivier Duchateau <duchateau.olivier@gmail.com>
Xfce 是一款自由的桌面环境,适用于 Unix 和类 Unix 平台,如 FreeBSD。它旨在快速且轻量,同时又具备视觉吸引力和易于使用的特点。
在本季度中,我们更新了以下应用程序:
audio/xfce4-pulseaudio-plugin (0.2.5, PR219357)
deskutils/xfce4-tumbler (0.1.32, PR219848)
deskutils/xfce4-xkb-plugin (0.8.0, PR220071)
textproc/xfce4-dict-plugin (0.8.0, PR220266)
x11/xfce4-terminal (0.8.5.1, PR219312)
x11/xfce4-whiskermenu-plugin (1.7.2, PR219347)
x11-wm/xfce4-desktop (4.12.4, PR220290)
我们创建了一个新的 Subversion 标签(4.13),以跟踪不稳定版本。由于支持 USES=xfce 基础设施的变化,以及对 xfconf API 的一些不兼容修改,单独的标签是必要的。遵循不稳定版本的 Port 包括:
deskutils/xfce4-tumbler (0.1.92.1)
multimedia/xfce4-parole (0.9.2)
sysutils/xfce4-settings (4.13.1)
x11/libexo (0.11.3)
x11/libxfce4menu (4.13.2)
x11/libxfce4util (4.13.1)
x11/xfce4-conf (4.13.2)
x11/xfce4-dashboard (0.7.2)
x11/xfce4-screenshooter (1.9.1)
x11/xfce4-whiskermenu-plugin (2.1.2)
x11-wm/xfce4-desktop (4.13.1)
x11-wm/xfce4-panel (4.13.0)
x11-wm/xfce4-session (4.13.0)
x11-wm/xfce4-wm (4.13.0)
使 Gtk3 的过渡对最终用户更加顺畅。
联系人:Michael Lucas <mwlucas@michaelwlucas.com>
我正在编写《Absolute FreeBSD》的第三版。这将几乎是一次完整的重写,感谢诸如 ZFS、GPT、dma、GELI、新的引导程序、磁盘标签、pkg(8)、blacklistd、jail 等小细节的加入。
我目前的(理想化的)计划是在 2017 年 10 月底之前完成初稿,以便我们能在 BSDCan 2018 上提供印刷版。
完成书籍剩余的 75%。
联系人:Warren Block <wblock@FreeBSD.org>
回顾过去,我们在源文件中的字符串 $FreeBSD$
有些奇怪,就像是一个残余尾巴。版本控制系统将所有这些信息存储在元数据中。然而,我们却在这里,不仅允许版本控制系统在每次提交时修改我们的源文件,还强迫它这么做。
这样做的原因是,之前的版本控制系统就是这么做的。真的是这样。
版本控制字符串对于使用新 PO 工具链的翻译者来说是个麻烦。它是一个不断变化的字符串,对翻译没有任何帮助,但可能会与其早期版本产生冲突。
我们也曾收到关于手册内容总是滞后几个月的抱怨。实际上并非如此……但仅从主文件 book.xml 中的版本字符串来看,给人一种这样的印象。去年我们解决了这个问题,现在构建系统会检查所有源文件的最新提交,但似乎不修复这个问题反而更容易。
当然,这实际上只是一个持续问题的一个方面。我们的文档构建系统在检查源文件中的版本字符串,而不是元数据。在1973年,元数据还没有被发明,像由铁锈组成的汽车一样。因此,我修改了构建系统,从元数据中提取信息(并惊讶地注意到,Git 在这方面比 Subversion 做得更好)。
下一步是从源文件中删除字符串 $FreeBSD$
,并删除强迫 Subversion 在实际文件内容中替换文本的 FreeBSD=%H
属性。版本信息并未丢失。它仍然保存在元数据中,所以检索它就像执行 svn info
一样简单——它完全不需要出现在源文件中。然而,正如任何触及代码或处理未曾触及的过程一样,关于此事有过一些争论。在那时,我提出作为测试,从 FreeBSD 文档项目指南书中删除版本字符串。
这一更改使得 zh_TW
翻译团队能够关闭其翻译中的 FreeBSD=%H
属性,并继续工作,而不再与版本字符串作斗争。书籍的渲染版本仍会显示最后提交者的姓名、最后提交的日期和修订号,但所有这些信息都来自元数据。因此,这些信息更有可能是准确的。
自从这个更改以来,至少没有收到任何投诉,至少没有是我收到的。公平地说,删除版本字符串仅仅是文档项目中的一个小改动。在另一方面看,似乎一些看似必要的事情,更关乎熟悉感的安慰,而非实际的效用。
目前,这只是对文档构建工具链和一本文档书籍的更改。然而,似乎没有任何理由不能将其扩展到其他文档中。它甚至可能作为测试,检验在整个 FreeBSD 树中是否需要扩展 $FreeBSD$ 标签。
联系人:Benedict Reuschling <bcr@FreeBSD.org>
FreeBSD 支持 Xen 虚拟机监控器,自 FreeBSD 8.0 起支持 DomU(来宾)功能,自 FreeBSD 11.0 起支持 Dom0(主机)。FreeBSD 手册中缺少有关如何运行 Xen 主机和虚拟机的说明。这些步骤已在 FreeBSD wiki 中列出,但需要一些来自上游 Xen wiki 的附加文本,才能形成完整的指南。新手册章节简要解释了 Xen 是什么,它与其他虚拟机监控器的区别,以及 FreeBSD 当前支持的功能。接下来,它详细描述了如何设置 Dom0,以及已知的来宾虚拟机支持,即 DomU。
审阅者 Nikolai Lifanov、Roger Pau Monné 和 Warren Block 对 Phabricator 中的初始版本提供了宝贵的反馈。Björn Heidotting 在将该章节翻译成德语时做了额外的修正。
可以为 Dom0 和 DomU 提供更多选项。
人们应在他们的硬件上测试这些说明,并提供反馈。这也将帮助我们更好地测试 FreeBSD 的 Xen Port。
联系人:Mathieu Kerjouan <contact@steepath.eu>
在法国雷恩举办了两场专注于 BSD 系统的聚会。第一次活动在雷恩的 OVH 办公室举行,内容包括多个主题的演讲:FreeNAS 的非技术历史(由 olivier@ 讲解),OVH 如何使用 ZFS,jail 简介,以及 FreeBSD 上使用 BGP/bird 的一个用例。
第二次活动,同样在 OVH 办公室举行,讨论了以下内容:如何创建 FreeBSD Port(由 jadawin@ 讲解),OVH 如何使用有限状态机(Finite State Machines)管理他们的存储系统,FreeBSD 上的网络高可用性,以及通过演示如何使用 Jail 和虚拟网络(vnets)在一台配备 4 个 CPU 核心(1GHz AMD)和 4GB 内存的小型 PC Engines APU2 系统上运行 200 个 OSPF 路由器(使用 net/bird)。
该项目由 OVH 赞助。
许多项目以 FreeBSD 为基础,或将 FreeBSD 组件融入到他们的项目中。由于这些项目可能会引起更广泛 FreeBSD 社区的兴趣,我们有时会在季度报告中简要更新这些项目的进展。FreeBSD 项目对这些提交中任何声明的准确性或真实性不作任何保证。
联系人:Shawn Webb <shawn.webb@hardenedbsd.org> 联系人:Oliver Pinter <oliver.pinter@hardenedbsd.org>
HardenedBSD 是一款基于 FreeBSD 的衍生版本,特别关注安全相关的增强功能和漏洞缓解技术。从最初关注地址空间布局随机化(ASLR),它现在已经扩展到探索其他漏洞缓解技术。
自从 HardenedBSD 上次出现在季度报告中已经有一段时间了,距今已是2015Q4。在此期间,HardenedBSD 新加入了开发者 Bernard Spil 和 Franco Fichtner,引入了 LibreSSL 和 OpenNTPd,分别作为默认的加密库和 NTP 客户端,并引入了 hbsd-update 二进制更新机制。secadm 应用程序被重写,并加入了受信路径执行(TPE)。现在,arm64 和 amd64 的基系统以及大部分 Ports 都启用了 PIE,Ports 还增加了 RELRO 和 BIND_NOW。Integriforce(类似于 NetBSD 的验证执行,veriexec)被引入基系统,还有由 Clang/LLVM 社区开发的 SafeStack 技术,用于防止基于栈的缓冲区溢出。SafeStack 依赖并建立在地址空间布局随机化(ASLR)之上,且通过 PaX NOEXEC 加强保护。一些高影响力的 Port 也启用了 SafeStack。
G2 公司极为慷慨地捐赠了硬件,为专用的软件包构建和二进制更新服务器、开发和测试服务器提供了支持。
2017年3月,我们将控制流完整性(CFI)添加到了基系统。CFI 是一种漏洞缓解技术,可以防止攻击者修改程序的行为并跳转到未定义或任意的内存位置。此类技术正在行业内得到广泛采用——微软已经实现了其变体,称为控制流保护(CFG),PaX 团队也已经花费数年时间完善了他们的重用攻击保护(RAP)。其中,RAP 是最完整和有效的实现,其次是 Clang 的 CFI。RAP 是一个很好的加入 HardenedBSD 的技术,但它需要 GPLv3 工具链,并且仍在申请专利中。
CFI 可以在每个 DSO(动态共享对象)基础上实施,也可以在一个进程中的所有 DSO 中实施。目前只实现了前者,但我们正在努力启用跨 DSO 的 CFI。和 SafeStack 一样,跨 DSO 的 CFI 也需要 ASLR 和 PaX NOEXEC 才能有效。如果攻击者知道应用程序的内存布局,就可能通过数据攻击修改 CFI 控制数据。
若干系统控制(sysctl)节点的行为被加强,限制了写访问并引入了额外的安全检查。内核模块 API 也得到了类似的处理。HardenedBSD 的 PaX SEGVGUARD 实现获得了几次更新,使其更加稳定和高效。
截至2017年3月,HardenedBSD 已通过 Tor 隐藏服务提供访问。主网站、二进制更新和软件包分发都可以通过隐藏服务访问。
我们现在维护自己版本的 drm-next 分支,用于更新的图形支持,并为该分支提供二进制更新。
HardenedBSD 感谢所有慷慨捐赠时间、金钱或其他资源的支持者。
该项目由 SoldierX 和 G2 公司赞助。
将 SafeStack 移植到 arm64。
集成跨 DSO CFI。
为 HardenedBSD 手册添加文档。
开始移植 grsecurity 的 RBAC。