Skip to content

【Zig 日报】专注于安全的 Zig 开发容器,集成了 zls(Zig 语言服务器)和持久化构建缓存。 #360

Description

@jiacai2050

https://github.com/bare-devcontainer/templates/tree/main/src/zig

选项

选项 ID 描述 类型 默认值
imageVariant Zig 和 Debian 版本(trixie = Debian 13,bookworm = Debian 12)。也可以输入其他已发布的标签。 string 0.16-trixie

入门指南

请参阅仓库 README 中的“入门指南”了解如何应用此模板。

镜像变体

imageVariant 选项用于选择 ghcr.io/bare-devcontainer/zig 基础镜像的标签,该镜像将 Zig 版本与 Debian 版本进行配对:trixie 是 Debian 13,bookworm 是 Debian 12。

应用模板时提供的选项仅供参考,并非封闭列表——您可以输入任何已发布的标签,包括更精确的标签(例如 Zig 补丁版本或带有日期的构建版本,以便进行更严格的版本锁定)。请查看已发布的标签以了解当前可用版本。

安全加固

此模板应用了 Bare Dev Container 模板的共享加固默认设置:

  • 基于 ghcr.io/bare-devcontainer/zig 构建。这是一个来自 bare-devcontainer/images 的精简镜像,具有锁定的摘要(pinned digests)、SLSA 来源证明以及用于供应链透明度的 SPDX SBOM。
  • 以非 root 的 dev 用户身份运行。
  • 剥离所有 Linux 权限(--cap-drop=ALL)并设置 no-new-privileges 安全选项,因此进程无法在容器内部获得提升的权限。如果您需要 su/sudo,请从 securityOpt 中移除 no-new-privileges
  • 启动一个初始化进程("init": true)来回收僵尸进程。

应用模板后,我们建议将镜像锁定到特定的摘要(digest),以便每次重新构建都使用您期望的确切镜像——请参阅“将镜像锁定到摘要”。

持久化缓存

Zig 的全局缓存持久化存储在命名卷中,因此重新构建容器以获取镜像更新时,无需重新下载软件包或重新编译依赖项:

卷 (Volume) 挂载路径 (Mount path) 用途
${devcontainerId}-zig-global-cache /home/dev/.cache/zig Zig 全局缓存

编辑器集成

  • 安装了 ziglang.vscode-zig VS Code 扩展,预配置了镜像中自带的 zigzls 二进制文件路径,并启用了 Zig 语言服务器 (zls)。

提示

  • 要使用调试器,请取消注释 devcontainer.json 中的 "capAdd": ["SYS_PTRACE"]
  • 如果您使用 VS Code,请取消注释 devcontainer.json 中的 remoteEnv 块,以便在 VS Code 标签页中打开 $EDITOR / $VISUAL / $GIT_EDITOR(例如 git commit)。

注意:此文件是由 devcontainer-template.json 自动生成的。请将其他说明添加至 NOTES.md 中。

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群QQ 群QQ 频道Telegram 群组Google Groups 与更多 Zig 爱好者交流

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions