Bazel缓存、远程执行和glibc版本不兼容导致生产环境崩溃

2025-09-21
Bazel缓存、远程执行和glibc版本不兼容导致生产环境崩溃

本文讲述了一个由于Bazel缓存、远程执行和不同环境中glibc版本差异导致生产环境崩溃的案例。开发人员在本地构建和测试通过后,CI系统利用缓存构建发布版本,但在生产环境部署时却因缺少'GLIBC_2.28'版本而崩溃。文章分析了glibc版本差异如何破坏构建可重复性,并提出了几种解决方案:一种临时方案是捕获本地和远程glibc版本,选择较高版本作为C++工具链输入;更完善的方案是限制对Action缓存的写入,强制构建操作始终在远程执行器上运行;最终的解决方案是使用sysroots,在所有环境中安装多个glibc版本,并明确指定使用哪个版本。文章强调了保证构建可重复性的重要性,并建议根据实际情况选择合适的解决方案。

阅读更多
开发

sandboxfs:一个夭折的Bazel macOS沙盒加速方案

2025-06-13
sandboxfs:一个夭折的Bazel macOS沙盒加速方案

谷歌工程师曾尝试通过sandboxfs项目提升Bazel在macOS上的沙盒性能。sandboxfs利用用户态文件系统,以更快的速度创建虚拟文件层次结构,替代Bazel原有的符号链接方式。然而,由于macOS的符号链接性能并非主要瓶颈,以及项目本身的实现问题和macOS生态变化等原因,sandboxfs最终被放弃。尽管如此,作者仍然认为其核心思想——高效创建沙盒——对解决Bazel在macOS上的沙盒性能问题依然具有价值。

阅读更多
开发

Bonanza:Bazel 的云原生未来?

2025-04-10
Bonanza:Bazel 的云原生未来?

Bazel 十周年之际,一个名为 Bonanza 的项目引发关注。它旨在彻底重构 Bazel,将构建过程完全迁移到云端,解决 Bazel 在大型项目和小型项目上的不足。Bonanza 通过远程执行所有操作,包括依赖管理和构建图构建,实现真正的增量构建,并显著提升构建速度。虽然目前仍处于概念验证阶段,但其设计理念和技术潜力为未来构建系统的发展提供了新的方向,预示着云原生构建时代的到来。

阅读更多
开发

无X11的动手图形编程:NetBSD的wscons框架

2025-01-17
无X11的动手图形编程:NetBSD的wscons框架

本文介绍了如何在NetBSD系统上,无需X11或Wayland,直接使用wscons框架进行底层图形编程。作者通过编写程序,访问和操作帧缓冲区,实现了在终端上绘制图形,并结合键盘输入,演示了如何绕过传统图形系统,直接与硬件交互。这对于嵌入式系统等资源受限的环境尤其有用,能够实现更快的启动速度和更低的资源消耗。

阅读更多
开发 wscons

代码审查:一个成功案例

2025-01-15
代码审查:一个成功案例

一位工程师X在Google参与了两个项目的开发,分别经历了两种不同的代码审查流程。第一个项目代码审查流于形式,导致上线后出现大量bug。第二个项目则采用了严格细致的代码审查流程,尽管耗时较长,但最终一次性通过测试,并让工程师X受益匪浅,甚至提升了其职业发展。文章强调代码审查本身并非问题,关键在于参与者的态度和方法,以及如何合理利用这个工具提升代码质量和培养新人。

阅读更多
开发

NetBSD构建系统再探:古老而强大的系统构建利器

2024-12-31
NetBSD构建系统再探:古老而强大的系统构建利器

作者回顾了NetBSD的构建系统,一个基于BSD make和shell脚本的强大而独特的系统。它允许在任何POSIX平台上,无需root权限,构建完整的NetBSD系统,并支持多种硬件架构的交叉编译。文章详细介绍了构建过程,包括工具链生成、构建结构、destdir机制、无权限构建以及发行版媒体创建等。尽管NetBSD构建系统存在一些不足,例如增量构建效率低和依赖关系管理不完善,但其设计理念依然值得学习。作者最后提到正在使用NetBSD开发一个嵌入式项目,并考虑将NetBSD的构建系统迁移到Bazel,以提升构建效率。

阅读更多
开发

Synology DS923+ 与 FreeBSD/ZFS 家庭 NAS 对比评测

2024-12-19
Synology DS923+ 与 FreeBSD/ZFS 家庭 NAS 对比评测

博主Julio Merino对比评测了Synology DS923+和基于FreeBSD/ZFS的自制NAS。自制NAS采用高性能ThinkStation工作站,拥有强大的CPU和内存,运行FreeBSD 14和ZFS文件系统;DS923+则是一款专为文件共享设计的紧凑型设备,运行Synology的DSM系统和btrfs文件系统。两者在IOPS和网络性能方面不相上下,但DS923+在噪音和功耗方面更胜一筹。在易用性和维护方面,DS923+的DSM系统提供了更便捷的操作体验和更完善的备份解决方案,而FreeBSD/ZFS则需要更多的手动配置和维护。最终,博主更倾向于DS923+,因为它提供了更令人安心的数据存储体验。

阅读更多
硬件 Synology

重温DOS内存模型

2024-11-26
重温DOS内存模型

本文回顾了DOS系统中的各种内存模型,包括Tiny、Small、Medium、Compact、Large和Huge,并解释了它们与8086架构、分段机制以及指针类型之间的关系。文章详细介绍了不同指针类型(短指针、近指针、远指针、巨指针)的特点和适用场景,以及各内存模型如何组合使用这些指针类型来管理代码和数据,以克服早期x86真实模式下内存限制。最后,文章还提到了代码密度与性能的关系,并暗示了这些知识与现代64位系统的关联性,将在后续文章中探讨。

阅读更多
未分类 8086架构

BazelCon 2024 大会回顾

2024-10-23
BazelCon 2024 大会回顾

本文回顾了 BazelCon 2024 大会和 Build Meetup 的内容,涵盖了 Bazel 的社区和应用、远程执行、IDE 支持、内部循环开发、工具链、沙盒、monorepo 问题、blzmod 和外部依赖、安全和可审计构建、符号宏、查询、代码规范和测试等主题。此外,还介绍了 Aspect.dev 发布的 rules_lint 工具,用于代码格式化和问题检测。文章最后列举了一些缺失的 Bazel 周边工具,并提供了 BazelCon 的详细笔记链接。

阅读更多
未分类

i386 到 x86-64 升级的成本

2024-10-08
i386 到 x86-64 升级的成本

这篇文章探讨了从 32 位 (i386) 到 64 位 (x86-64) 架构升级的成本和收益。作者深入研究了代码密度、指令集和内存使用等技术细节,并分析了 64 位指针对性能的影响。文章还介绍了 x32 ABI,这是一种混合方法,试图结合 64 位地址空间和 32 位代码密度的优势,但最终被弃用。

阅读更多
未分类 代码密度

运行时选择 glibc 版本

2024-09-24
运行时选择 glibc 版本

这篇文章探讨了如何在运行时选择不同的glibc版本。由于glibc和动态链接器ld-linux.so紧密耦合,直接使用LD_LIBRARY_PATH切换glibc会导致程序崩溃。文章提出了两种解决方案:一是使用特定版本的ld-linux.so启动程序;二是通过修改链接参数或使用patchelf工具修改二进制文件,使其链接到指定的ld-linux.so。文章还讨论了glibc版本兼容性问题,建议使用版本化的sysroot目录来管理不同版本的glibc,并强调了避免过度依赖容器化技术。

阅读更多
未分类 动态链接器

Rust 并不能解决 CrowdStrike 宕机问题

2024-07-23
Rust 并不能解决 CrowdStrike 宕机问题

本文分析了 CrowdStrike 宕机事件,指出其根源在于配置变更的部署流程问题,而非代码或 Rust 语法本身。作者认为,尽管 Rust 的内存安全特性可以减少某些类型的错误,但过度强调 Rust 的作用,忽视更深层次的系统设计和部署问题,对 Rust 的推广并无益处。文章还探讨了将安全软件运行于内核空间的风险,以及依赖单一供应商的潜在问题,呼吁企业在选择技术方案时要更加谨慎,并做好充分的风险评估和应对措施。

阅读更多
未分类