返回

文章详情

死去的软件:relayd(8) 和 httpd(8) 正在进行的进化

Hacker News2026年8月1日 12:03

从为什么开始 # 正如我在 OpenBSD 7.8 精华文章中提到的,relayd(8) 和 httpd(8) 的开发停滞不前。许多不同贡献者在 tech@ 邮件列表上出现了很多差异补丁,但很少被提交到代码库。主要原因很简单:已经成熟的 OpenBSD 开发者对这些守护进程不再感兴趣。可以说是惯性或时机。在此期间,kirill@ 和我开始更积极地工作于这些守护进程。我们都定期使用它们,并有现实的使用案例。我支持使用 OpenBSD 设置的客户,这通常涉及复杂的 httpd(8) 和 relayd(8) 配置。这种实际需求在多方面激励了我。但最大动力是 LLMs。多年来,我专业编写现代 C++ 代码。最终,我逐渐远离开发工作,专注于解决方案架构、平台工程和团队建设。我写的实际代码很少,主要是声明性 YAML。唯一的编码工作是阅读和移植 OpenBSD ports(7) 的代码。然后 LLMs 出现了。随着技术兄弟声称“编码已解决”,我意识到我想再次挑战自己进行编码。我认为在这个知识被外包的时代,拥有这些知识比以往任何时候都更重要!C 一直是让我感到最害怕的语言。C++ 和 Rust 为你处理难题。C 不这样做。这正是我想要的:这种挑战。因此,我决定开始为 relayd(8) 和 httpd(8) 贡献代码。征服自我胜过赢得千场战斗。— 佛陀 纪律胜过动力 # 我故意用这个标题写了这一部分。我们正在谈论开源。尽管我做出了贡献的决定,但几周后可能会以挫折结束。“我为什么要这么折磨自己?”但我认为我已经过了那一点。痛苦实际上感觉很好。起初,我被动地通读代码库,并对许多部分感到沮丧。也许这就是 C 代码的写法。也许是缺少注释。也许是某些地方设计不佳。真正的意大利面代码。或者也许只是我。时间会证明一切。我与一些 OpenBSD 守护进程的维护者交谈,并决定开始对手工制作的 imsg 消息系统进行现代化。我首先专注于 relayd(8),httpd(8) 将随后进行。在这方面工作是理解代码库的好方法。我的下一个步骤是浏览 2024 年至 2026 年的 tech@ 邮件列表档案。我收集了所有的开放差异和问题。我认为我已经解决了大部分问题。如果有人有未解决的问题,请联系我。relayd 和 httpd(8) 最初由 Reyk Floeter(reyk@)开发。他现在已经从 OpenBSD 退休。我祝愿他一切顺利。Reyk 还维护着一个 GitHub 镜像:https://github.com/reyk/relayd。我也浏览了那里的旧问题。所有内容都可以关闭、修复或不再相关。那个镜像激励我创建自己的镜像。我希望为新的年轻贡献者简化流程。我还想让社区超越 OpenBSD 邮件列表。此外,我还在 CVS 树上工作了一个 git 镜像。(CVS 和我永远不会成为朋友。我是从 SVN 开始我的职业生涯的,这已经够痛苦了。不会再有版本控制的痛苦。)开发主要在 Gothub 实例上进行。其他位置保持同步:主要:https://rsadowski.gothub.org/ 镜像:https://codeberg.org/rsadowski/relayd 镜像:https://github.com/sizeofvoid/relayd httpd(8) 也是如此。我写了一个详细的 README.md,涵盖了您需要知道的所有内容。httpd(8) 和 relayd(8) 的成就 # 一切都应该以积极的方式结束。让我们看看 OpenBSD 团队在 httpd(8) 和 relayd(8) 中取得了什么成就:relayd(8) # 现代化和代码质量 # 将 imsg 系统转换为使用新的更安全的获取器(imsg_get_data,imsg_get_type,imsgbuf_get) 在整个 imsg 负载读取过程中添加了适当的错误处理 与 bgpd 进行了日志记录和注释的标准化以保持一致 将 HTTP 起始行逻辑移动到专用函数以更好地组织代码 添加了适当的 knfmt 格式 安全性改进 # 将默认的 TLS 密码集从“HIGH:!aNULL”切换为“secure” 向 CA privsep 引擎添加了 ECDSA 支持 拒绝重复的 Content-Length 标头并以 HTTP 400 响应拒绝 拒绝 obs-fold 标头以防止解析器差异(RFC 9112 5.2) 将 IMSG_CTL_PROCFD 限制为带有 ID 检查的父进程 使用 explicit_bzero 处理敏感的密码数据 错误修复和稳定性 # 修复了引起崩溃的 relayd 重新加载竞争条件 删除了多个内存泄漏(X509_dup,config_purge,tls_cfg) 修复了 NULL 检查和边界测试 为 OpenSSL 失败添加了适当的错误处理 在 TLS 失败时排空 OpenSSL 错误队列 新特性 # 添加了对 MKCALENDAR HTTP 方法的支持 支持多个监听者的 TLS 支持多个可解析地址 允许为证书、密钥和 OCSP 托管设置显式路径 为 HTTP 健康检查设置 User-Agent 正确处理没有主体的 HTTP 响应 httpd(8) # 现代化

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡