News Hacker|极客洞察

🚀IncusOS:不可变Linux系统,为Incus提供轻量容器+VM集群运行时(ZFS优化、无shell)
不让进 shell、又不易整备份,这叫可信?

🎯 讨论背景

IncusOS 是一个以不可变 Linux 为基础、专门用来运行 Incus(一个源自 LXD 的容器/VM 管理器)的系统镜像。讨论围绕 Incus 相对于 Proxmox/LXD 的使用体验、部署与安全差异展开,涵盖非特权容器的 UID 映射(shift=true)、预构建镜像、集群与多架构调度、以及 ZFS 相关的备份/迁移特性。社区背景中 LXD 被迁入 Canonical 后的许可(AGPLv3)与打包(snap)策略导致部分用户对治理与自动更新的不信任,Incus 的分叉与 IncusOS 的不可变设计正是在此语境下被讨论。评论者多为在家用/开发/嵌入式测试场景下运行容器或小型集群的从业者,关心上手流程、备份策略与运维逃生口。

📌 讨论焦点

作为 Proxmox/LXD 替代的优势

多位用户将 Proxmox 换成 Incus 并报告显著体验提升:Incus 在非特权容器(unprivileged containers)方面通过简单的配置(如 shift=true)避免了繁琐的 UID/GID 映射操作,profiles 功能被形容为“像 cloud-init 的增强版”,能大量去重配置。它有工作中的 terraform provider、易用的 CLI、预构建的 LXC 与 VM 镜像,以及对多种存储驱动(dir、btrfs、ceph、zfs)的支持,用户指出运行在任意发行版上比 Proxmox 只限 Debian 更灵活。评论也提到默认安全配置更好(例如预构建镜像启用 secureboot、可配置的 ACL),项目维护活跃且社区响应快;唯一常被提及的不足是缺少像 PBS 那样的集中备份解决方案。

[来源1] [来源2] [来源3] [来源4] [来源5]

统一容器与VM管理与多架构调度

Incus 被描述为把系统容器、OCI 容器和 QEMU/KVM VM 用一致的 API/CLI 语言管理起来:同一套工具可以管理 systemd 控制的系统容器、OCI 容器和完整虚拟机,镜像服务器会尽可能为两种类型构建镜像(创建 VM 时需指定 -vm)。集群特性支持“架构标签”(architecture tagging),用户可以在同一集群里同时存在双路 x86 大服务器和 Raspberry Pi,按标签把 ARM 工作负载限定在 Pi 上或选择在 x86 上通过 QEMU 模拟运行。开发者表示这套方案对本地并行测试真实 OS 非常友好(ephemeral 容器可快速销毁),且支持在线迁移等企业/同好场景。

[来源1] [来源2] [来源3] [来源4] [来源5]

不可变 OS 的运维权衡(无 shell、备份与逃生口)

IncusOS 作为“不可变”发行版选择尽量最小化用户空间且默认不提供 shell 访问,用户必须通过 Incus 的 CLI/API 做大多数运维操作,这带来可维护性与安全性好处但也引发担忧。多个评论指出,目前没有简单的整机增量备份流程:虽然可以用 incus export 备份单个实例或卷(看起来底层用到了 zfs send),但对整台系统做增量 zfs send 尚不方便。评论里有人提出更加可操作的不可变设计思路:用只读基线加可选 overlay、启动时做加密/签名验证并结合 TPM/attestation,这样既能在需要时调试又能回退。另外有用户讨论硬件层面的不可变方案(ROM、CPU fuse、Intel Boot Guard),但工具不友好且历史漏洞多,显示出实务中的权衡。

[来源1] [来源2] [来源3] [来源4]

社区、许可与打包引发的分叉与信任问题

多条评论回顾了 Incus 从 LXD 分叉的背景:虽然 LXD 仍然开源,但迁入 Canonical 后的治理和打包策略(把 LXD 改为 AGPLv3、要求贡献者签 CLA、并通过 snap 发布)让社区产生不安。具体问题包括 snap 的强制更新曾导致集群停机、不同打包方式导致配置路径不一致、以及许可/CLA 政策让某些社区成员担心贡献与代码可见性。正因这些可预见性与治理问题,部分用户选择 Incus 以避免 snap 强制更新和贡献流程带来的限制。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6]

上手与镜像制作的 UX 障碍

有用户遇到镜像制作的“鸡与蛋”问题:image customizer 需要事先放入通过 incus remote get-client-certificate 生成的客户端证书,但初始环境上如何生成证书不明确。回应者指出可以从 GitHub releases 下载 CLI 客户端以完成此步骤,并已在仓库为此类流程提 issue。评论建议把这些关键的安装与镜像制作步骤写入 README,以降低新用户的上手门槛並避免误操作。

[来源1] [来源2] [来源3]

📚 术语解释

immutable OS(不可变操作系统): 以只读或原子镜像为主的发行方式,系统文件不可直接在运行时修改,更新通过替换镜像或 overlay 实现,旨在提高一致性与可回滚性。

ZFS: 一种 copy-on-write 文件系统,提供快照、克隆和高效的 send/receive 同步,常用于容器与虚拟化环境的存储与备份。

zfs send: ZFS 的子命令,可把快照数据流式导出用于复制或增量备份,评论中提到 incus export 似乎在底层利用了它。

unprivileged containers(非特权容器): 容器中的进程在宿主上以映射后的非 root 用户运行,降低逃逸后带来的宿主破坏风险,需要 UID/GID 映射(ID mapping)。

shift=true: Incus/LXD 的配置选项,用以启用自动 UID/GID 位移(user namespace shifting),简化非特权容器的 ID 映射配置。

snap: Canonical 推出的打包与分发系统,支持自动更新;被部分用户诟病因强制更新和不同打包导致的路径/行为差异。

AGPLv3 & CLA: AGPLv3 是一种较严格的开源许可证,CLA(Contributor License Agreement)为贡献者协议,二者在评论中被提及为 LXD 转向 Canonical 后引发社区担忧的原因。

QEMU/KVM: 用于运行完整虚拟机的虚拟化技术栈,Incus 可管理基于 QEMU/KVM 的 VM 与系统容器。