设计
14 篇-
根盘原地扩容:恢复协议与真机验收
状态(2026-11-11):未发布开发版本已实现 barn resize -D,并在 macOS/arm64 的 QEMU/HVF 客机上完成 ext4 与 XFS 验收。已发布 1.1.0 的 resize 仍只修改 CPU/内存。参数优先级见 VM 规格设计,命令契约见 根盘扩容。 使用范围 barn resize -D 128GiB meta BARN_DISK=128GiB barn resize meta 目标是根盘的绝对容量,支持扩容,不支持缩盘。已完成的同目标操作不修改镜像,也不 …
状态(2026-11-11):未发布开发版本已实现 barn resize -D,并在 macOS/arm64 的 QEMU/HVF 客机上完成 ext4 与 XFS 验收。已发布 1.1.0 的 resize 仍只修改 CPU/内存。参数优先级见 VM 规格设计,命令契约见 根盘扩容。 使用范围 barn resize -D 128GiB meta BARN_DISK=128GiB barn resize meta 目标是根盘的绝对容量,支持扩容,不支持缩盘。已完成的同目标操作不修改镜像,也不 …
-
VM 规格参数统一设计:命令、短参数、环境变量与根盘
镜像、架构、CPU、内存、倍数和根盘组成同一组 VM 规格输入,统一名称、取值规则与来源追踪。命令声明自己接收哪些规格,以及允许应用哪些变更;解析过程只实现一份。 状态(2026-11-11):本方案已确认,六项 CLI/环境输入、命令接入、清单生成、来源追踪、SPEC 显示和根盘原地扩容均已实现,尚未发布。工作区清单默认 1 核 / 2 GiB,已发布 Barn 1.1.0 仍默认 2 核 / 4 GiB。 六个参数,一套命名 含义 清单字段 长参数 短参数 环境变量 候选版默认值 镜像 …
镜像、架构、CPU、内存、倍数和根盘组成同一组 VM 规格输入,统一名称、取值规则与来源追踪。命令声明自己接收哪些规格,以及允许应用哪些变更;解析过程只实现一份。 状态(2026-11-11):本方案已确认,六项 CLI/环境输入、命令接入、清单生成、来源追踪、SPEC 显示和根盘原地扩容均已实现,尚未发布。工作区清单默认 1 核 / 2 GiB,已发布 Barn 1.1.0 仍默认 2 核 / 4 GiB。 六个参数,一套命名 含义 清单字段 长参数 短参数 环境变量 候选版默认值 镜像 …
-
Pigsty 宿主初始化:固定域名与 CA 信任
建议提供一个可选的宿主初始化操作:安装固定 Pigsty 域名,并信任实验环境的公共根 CA 证书。 入口地址只有一个,默认 10.10.10.10;普通实验环境重建继续使用同一 CA。名称、地址和 CA 信任状态不变时,重复 setup 直接返回,无需提权。常见情况下,宿主集成只需初始化一次。 状态——2026-11-11:设计提案,尚未实现。 相比此前的 完整宿主 DNS 方案,本方案收敛了首期交付范围。通用清单提取、动态节点/PG/VIP 名称发布、按域转发和常驻 DNS 服务保留为后续选 …
建议提供一个可选的宿主初始化操作:安装固定 Pigsty 域名,并信任实验环境的公共根 CA 证书。 入口地址只有一个,默认 10.10.10.10;普通实验环境重建继续使用同一 CA。名称、地址和 CA 信任状态不变时,重复 setup 直接返回,无需提权。常见情况下,宿主集成只需初始化一次。 状态——2026-11-11:设计提案,尚未实现。 相比此前的 完整宿主 DNS 方案,本方案收敛了首期交付范围。通用清单提取、动态节点/PG/VIP 名称发布、按域转发和常驻 DNS 服务保留为后续选 …
-
Pigsty 使用 Barn 时的宿主 DNS / 域名解析方案
说明 2026-11-11 范围收敛:首期交付改为 固定核心域名与 Pigsty CA 信任。本页保留更广的导出器和解析器研究;通用清单与 split DNS 属于可选扩展,不作为固定配置的实现前提。 当前推荐先做显式启用的 hosts 管理。 Pigsty 计算名称和服务目标,Barn 通过现有 helper 预览并安装一份中性的地址/名称快照。对于地址固定的 Linux 实验环境,这项功能值得做:宿主可以直接打开 portal,通过节点名连接机器,通过集群名或 VIP 名访问数据库。静态地 …
说明 2026-11-11 范围收敛:首期交付改为 固定核心域名与 Pigsty CA 信任。本页保留更广的导出器和解析器研究;通用清单与 split DNS 属于可选扩展,不作为固定配置的实现前提。 当前推荐先做显式启用的 hosts 管理。 Pigsty 计算名称和服务目标,Barn 通过现有 helper 预览并安装一份中性的地址/名称快照。对于地址固定的 Linux 实验环境,这项功能值得做:宿主可以直接打开 portal,通过节点名连接机器,通过集群名或 VIP 名访问数据库。静态地 …
-
Pigsty 用 Barn 替换 Vagrant:资源、域名与迁移清单
Pigsty 可以用同一份主机清单驱动 Barn 与 Ansible。迁移时需要保留拓扑选择、镜像矩阵、资源缩放、固定地址和 SSH 工作流,并清理旧脚本隐含的地址、节点名及销毁行为。 状态(2026-11-10):vm_scale、1 核 / 2 GiB 默认规格、vm_hosts、barn hosts install -f 及 Pigsty 的 bin/sandbox-dns 已在本地工作区实现并完成下述离线验证,尚未发布。Pigsty 的 Makefile 仍使用 Vagrant;本文后半 …
Pigsty 可以用同一份主机清单驱动 Barn 与 Ansible。迁移时需要保留拓扑选择、镜像矩阵、资源缩放、固定地址和 SSH 工作流,并清理旧脚本隐含的地址、节点名及销毁行为。 状态(2026-11-10):vm_scale、1 核 / 2 GiB 默认规格、vm_hosts、barn hosts install -f 及 Pigsty 的 bin/sandbox-dns 已在本地工作区实现并完成下述离线验证,尚未发布。Pigsty 的 Makefile 仍使用 Vagrant;本文后半 …
-
超越 amd64 与 arm64
Barn 当前支持 amd64 与 arm64 Linux 客机。QEMU 可以模拟更多架构,但每个新增 Barn 目标都需要镜像和完整的启动、操作契约。本设计评估复核于 2026-11-08,区分已有运行时策略与未来候选架构。 硬件加速跟随宿主指令集 对于 Barn 当前的 64 位客机,原生虚拟化使用宿主指令集:macOS 使用 HVF,Linux 使用 KVM;跨架构客机由 QEMU TCG 翻译指令。Rosetta 可以在 Arm Linux VM 内翻译 Intel Linux 应用, …
Barn 当前支持 amd64 与 arm64 Linux 客机。QEMU 可以模拟更多架构,但每个新增 Barn 目标都需要镜像和完整的启动、操作契约。本设计评估复核于 2026-11-08,区分已有运行时策略与未来候选架构。 硬件加速跟随宿主指令集 对于 Barn 当前的 64 位客机,原生虚拟化使用宿主指令集:macOS 使用 HVF,Linux 使用 KVM;跨架构客机由 QEMU TCG 翻译指令。Rosetta 可以在 Arm Linux VM 内翻译 Intel Linux 应用, …
-
从 Windows 使用 Barn
Barn 当前的宿主配置与发布二进制覆盖 macOS、Linux 上的 amd64 和 arm64,没有原生 Windows 发行版。Windows 用户可以通过 Linux 宿主操作 Barn;WSL2 和嵌套 Linux VM 是把这层宿主放到 Windows 本机上的候选方式。 本评估复核于 2026-11-08。下述 WSL2 与 Hyper-V 路径仍需完成 Barn 全生命周期实测,才能成为受支持的安装指南。当前平台契约见平台与限制和 internal/platform。 选择 …
Barn 当前的宿主配置与发布二进制覆盖 macOS、Linux 上的 amd64 和 arm64,没有原生 Windows 发行版。Windows 用户可以通过 Linux 宿主操作 Barn;WSL2 和嵌套 Linux VM 是把这层宿主放到 Windows 本机上的候选方式。 本评估复核于 2026-11-08。下述 WSL2 与 Hyper-V 路径仍需完成 Barn 全生命周期实测,才能成为受支持的安装指南。当前平台契约见平台与限制和 internal/platform。 选择 …
-
Barn 可以向 Vagrant 学什么
Barn 已经能从兼容 Pigsty 的主机清单创建多节点 Linux 实验环境,管理生命周期,并提供 SSH 与结构化输出。Vagrant 值得借鉴的是从“建好虚拟机”到“重复一次实验”之间的工作:执行配置步骤、搬运源码与构建产物、记录环境,以及回到已知状态。 本文是基于 2026-11-08 Barn 源码核查形成的设计提案。以下优先级是待实现候选,没有指定发布版本或交付日期。当前可用命令见 CLI 参考。 已有能力与实际缺口 工作流 Barn 当前能力 可改进的方向 定义实验环境 静态清单 …
Barn 已经能从兼容 Pigsty 的主机清单创建多节点 Linux 实验环境,管理生命周期,并提供 SSH 与结构化输出。Vagrant 值得借鉴的是从“建好虚拟机”到“重复一次实验”之间的工作:执行配置步骤、搬运源码与构建产物、记录环境,以及回到已知状态。 本文是基于 2026-11-08 Barn 源码核查形成的设计提案。以下优先级是待实现候选,没有指定发布版本或交付日期。当前可用命令见 CLI 参考。 已有能力与实际缺口 工作流 Barn 当前能力 可改进的方向 定义实验环境 静态清单 …
-
从上游镜像到签名目录
镜像核查回答的问题比镜像发布更窄:它可以找到上游更新文件,但 Barn 只有在制品、运行时配置和启动路径都通过验证后,才能把文件加入签名目录。镜像参考说明用户可见的目录契约;本文记录如何让目录更新可复现。 “更新”有四种含义 如果把四种独立的版本值混为一谈,镜像更新就容易出错: 数值 描述的对象 所需证据 能否单独更新目录 操作系统版本 发行版的版本或点版本,例如 Ubuntu 24.04 LTS 发布元数据与软件包或构建记录 不能 云镜像构建号 某次带日期的上游磁盘构建,例如 YYYYMMDD …
镜像核查回答的问题比镜像发布更窄:它可以找到上游更新文件,但 Barn 只有在制品、运行时配置和启动路径都通过验证后,才能把文件加入签名目录。镜像参考说明用户可见的目录契约;本文记录如何让目录更新可复现。 “更新”有四种含义 如果把四种独立的版本值混为一谈,镜像更新就容易出错: 数值 描述的对象 所需证据 能否单独更新目录 操作系统版本 发行版的版本或点版本,例如 Ubuntu 24.04 LTS 发布元数据与软件包或构建记录 不能 云镜像构建号 某次带日期的上游磁盘构建,例如 YYYYMMDD …
-
repo.yaml 是意图,catalog.json 是证据
本文阐述 Barn 1.1.0 的 Linux 静态镜像仓库契约(Mac 虚拟机的 .ipsw 恢复镜像与 APFS 基础镜像由 barn mac 独立管理)。 一个静态虚拟机镜像仓库包含两类截然不同的元数据:一类是维护者的 策略意图(哪个版本对应 :stable、哪些旧版本标为 deprecated、每个发行版系列支持哪些短别名),另一类是镜像文件的 物理事实(精确字节数、SHA-256 摘要、qcow2 虚拟容量)。如果把这两类信息混在同一份手写 JSON 文件里,不仅手动复制哈希和字节数极 …
本文阐述 Barn 1.1.0 的 Linux 静态镜像仓库契约(Mac 虚拟机的 .ipsw 恢复镜像与 APFS 基础镜像由 barn mac 独立管理)。 一个静态虚拟机镜像仓库包含两类截然不同的元数据:一类是维护者的 策略意图(哪个版本对应 :stable、哪些旧版本标为 deprecated、每个发行版系列支持哪些短别名),另一类是镜像文件的 物理事实(精确字节数、SHA-256 摘要、qcow2 虚拟容量)。如果把这两类信息混在同一份手写 JSON 文件里,不仅手动复制哈希和字节数极 …
-
PID 不是虚拟机身份
本文阐述 Barn 1.1.0 的 Linux 运行时进程身份与崩溃恢复机制。原生 Mac 生命周期独立使用逐实例操作锁与 runner 协议 2。 pidfile 只能记录写入瞬间的进程号(PID)。几分钟甚至几天之后——尤其在经历过进程崩溃或宿主重启后——单凭这一个整数,既无法确认原先的 QEMU 进程是否还活着,也无法排除操作系统内核已经把同一个 PID 分配给了另一个毫不相干的进程,更无法证明它归属哪一个虚拟机节点。 如果仅凭 pidfile 就直接发送 SIGKILL 或删除磁盘,一旦 …
本文阐述 Barn 1.1.0 的 Linux 运行时进程身份与崩溃恢复机制。原生 Mac 生命周期独立使用逐实例操作锁与 runner 协议 2。 pidfile 只能记录写入瞬间的进程号(PID)。几分钟甚至几天之后——尤其在经历过进程崩溃或宿主重启后——单凭这一个整数,既无法确认原先的 QEMU 进程是否还活着,也无法排除操作系统内核已经把同一个 PID 分配给了另一个毫不相干的进程,更无法证明它归属哪一个虚拟机节点。 如果仅凭 pidfile 就直接发送 SIGKILL 或删除磁盘,一旦 …
-
声明式不等于破坏式
本文阐述 Barn 1.1.0 的 Linux 虚拟机收敛模型(Mac 虚拟机独立管理)。 声明式工具通过对比实际状态与配置文件来驱动变更——但在日常开发中,配置文件可能为了调试被临时删减、切换到另一个 Git 分支,或在解决合并冲突时漏掉某个 YAML 主机组。如果本地虚拟机管理工具把“配置中少写了某个节点”直接当成“允许销毁该虚拟机”,一次普通的编辑失误就可能把正在测试的数据库节点连根抹掉。 因此,Barn 在“创建”与“销毁”之间划定了严格的不对称原则: 期望状态可以授权创建节点,也可以描 …
本文阐述 Barn 1.1.0 的 Linux 虚拟机收敛模型(Mac 虚拟机独立管理)。 声明式工具通过对比实际状态与配置文件来驱动变更——但在日常开发中,配置文件可能为了调试被临时删减、切换到另一个 Git 分支,或在解决合并冲突时漏掉某个 YAML 主机组。如果本地虚拟机管理工具把“配置中少写了某个节点”直接当成“允许销毁该虚拟机”,一次普通的编辑失误就可能把正在测试的数据库节点连根抹掉。 因此,Barn 在“创建”与“销毁”之间划定了严格的不对称原则: 期望状态可以授权创建节点,也可以描 …
-
为什么每个 Barn 节点都有两张网卡
本文阐述 Barn 1.1.0 的 Linux 实验环境网络设计(Mac 虚拟机使用每台虚拟机独立的 vmnet NAT 子网)。 Pigsty 主机清单依靠固定 IPv4 地址标识每个数据库节点:PostgreSQL 流复制、Patroni/etcd 共识、HAProxy 后端、keepalived 二层 VIP、Prometheus 采集目标与 Ansible 剧本,都要求 10.10.10.11 始终指向同一个节点。宿主回环端口转发虽然能把 SSH 或 5432 端口暴露给宿主机,却无法让 …
本文阐述 Barn 1.1.0 的 Linux 实验环境网络设计(Mac 虚拟机使用每台虚拟机独立的 vmnet NAT 子网)。 Pigsty 主机清单依靠固定 IPv4 地址标识每个数据库节点:PostgreSQL 流复制、Patroni/etcd 共识、HAProxy 后端、keepalived 二层 VIP、Prometheus 采集目标与 Ansible 剧本,都要求 10.10.10.11 始终指向同一个节点。宿主回环端口转发虽然能把 SSH 或 5432 端口暴露给宿主机,却无法让 …
-
为什么 Barn 没有项目
本文阐述 Barn 1.1.0 的 Linux 实验环境部署模型(Mac 虚拟机作为独立的具名虚拟机管理)。 Barn 的早期原型曾将每个工作目录视为一个独立“项目”:用隐藏目录标记项目身份,用全局注册表记录项目路径,再用宿主级租约表协调私有网段冲突。这套机制虽然能管理多组互不相关的虚拟机,但与 Barn 的核心场景格格不入——在本地拉起一套具有固定 IP 的 Pigsty 数据库实验集群。 由于 Pigsty 主机清单本身已经完整定义了所有节点的 IP 与角色,在它之上再叠一层“按目录划分的虚 …
本文阐述 Barn 1.1.0 的 Linux 实验环境部署模型(Mac 虚拟机作为独立的具名虚拟机管理)。 Barn 的早期原型曾将每个工作目录视为一个独立“项目”:用隐藏目录标记项目身份,用全局注册表记录项目路径,再用宿主级租约表协调私有网段冲突。这套机制虽然能管理多组互不相关的虚拟机,但与 Barn 的核心场景格格不入——在本地拉起一套具有固定 IP 的 Pigsty 数据库实验集群。 由于 Pigsty 主机清单本身已经完整定义了所有节点的 IP 与角色,在它之上再叠一层“按目录划分的虚 …