This is the multi-page printable view of this section. .
Release Notes
- 1: Barn 1.2.0: resources, root growth, and host names
- 2: Barn 1.1.0: image selection and live progress
- 3: Barn 1.0.0: the first stable release
- 4: Barn 0.9.3: safer resizing, selected nodes, and recovery
- 5: Barn 0.9.2: signed Barn.app and explicit SSH/exec arguments
- 6: Barn 0.9.1: Go 1.27.3 toolchain and Barn.app rename
- 7: Barn 0.9.0: native macOS guests and smoother Linux recovery
- 8: Barn 0.8.0: clearer recovery and refreshed images
- 9: Barn 0.7.0: simpler test labs and automatic recovery
- 10: Barn 0.6.0: Ubuntu 24.04 and smoother local labs
- 11: Barn 0.5.0: explicit disposal, explicit repositories, reproducible images
- 12: Barn 0.4.0: one command, working data disks, one voice
- 13: Barn 0.3.0: explicit catalogs and actionable readiness
- 14: Barn 0.2.0: selected convergence and release integrity
- 15: RC6 development candidate: owner-scoped Tier-1 delivery
- 16: Development snapshot: the Go 1.27 product surface
Barn 1.1.0 (2026-11-09) is the current stable release. Earlier 0.x builds were GitHub pre-releases. See Install Barn for installation commands and asset verification.
This archive covers every release and validation milestone from the initial 2026-08-24 development snapshot through v1.1.0.
1 - Barn 1.2.0: resources, root growth, and host names
Barn 1.2.0 was released on 2026-11-12 from commit 90f6158. It adds resource overrides, recoverable root-disk growth, configurable lifecycle concurrency, and inventory-based host names. The bilingual command reference covers all 57 operation commands and their options.
Upgrade from 1.1.0
Omitted Linux CPU/memory values now resolve to 1 vCPU / 2 GiB, down from 2 vCPUs / 4 GiB. This also affects existing inventories that omit these fields. To preserve the earlier defaults, set vm_cpu: 2 and vm_mem: 4GiB under all.vars, retain any per-host overrides, and inspect barn plan before applying changes. Existing applied VMs keep their resources until a resource-changing operation is requested. Root and data-disk defaults remain 64 GiB and 128 GiB.
VM resources
Use --cpu/-C, --mem/-M, --scale/-S, and --disk/-D alongside image and architecture selection. Corresponding BARN_* environment variables provide defaults; command-line values take precedence. Generated inventories save the base settings. Plans, validation, status, and lifecycle output display effective resources as SPEC labels such as 1c2g; JSON retains numeric resources, bases, scale, and input sources.
resize --disk/-D grows an existing root disk. Barn stops QEMU before enlarging the disk, verifies its last plain ext4/XFS partition inside the guest, and records recovery stages so an interrupted operation can resume. It preserves VM identity, keys, and data and restores the original running/stopped intent. Shrinking and unsupported layouts are rejected. See root growth and recovery.
Lifecycle concurrency
--parallel/-p controls node concurrency for up, start, stop, restart, reload, recreate, destroy, and purge. The default is the logical CPU count minus two, with a minimum of one. Zero runs all selected nodes concurrently; a positive value sets the limit. Retry commands preserve explicit overrides.
Inventory host names
Declare service names in all.vars.vm_hosts, preview with barn hosts install -f pigsty.yml --json, and apply with barn hosts install -f pigsty.yml --yes. The inventory path works before VM creation; omitting -f continues to use applied node names. Identical mappings merge case-insensitively; conflicting addresses fail. These host-side mappings leave VM identity and guest configuration unchanged. See extra host mappings.
Dependencies and packaging
Source builds, CI, and release artifacts use Go 1.27.4. The dependency refresh updates golang.org/x/sys to 0.50.0, golang.org/x/term to 0.48.0, golang.org/x/text to 0.44.0, and github.com/klauspost/compress to 1.20.4. Packaging uses GoReleaser 2.20.1, bundled nFPM 2.48.0, and Syft 1.57.1. RPM payload verification now requires SOURCE_DATE_EPOCH timestamps. Pins and license inventories are recorded in the release source.
govulncheck found no vulnerabilities in imported packages or reachable symbols. Its module-level report lists GO-2026-5932 in golang.org/x/crypto/openpgp, which Barn does not import.
Image catalog
The embedded signed catalog remains revision 2026110502, with 9 distribution families and 17 architecture-specific stable artifacts. Both official repositories passed signature verification, activation in fresh data roots, embedded-byte comparison, and availability/size checks. Ubuntu 24.04 on the native architecture remains the default image.
Release validation
All 20 published attachments were downloaded again and matched their checksums. Acceptance passed 18 Linux/KVM operations, 15 native Mac lifecycle phases, and desktop, bidirectional clipboard, and window-close checks. The public installers, Homebrew upgrade and formula test, and three-platform Homebrew CI passed. See the release validation record for signing, notarization, upgrade, and recovery evidence.
Install or build
Stop running Mac VMs before replacing Barn.app, then upgrade through Homebrew:
Or install the versioned release:
The installer verifies archive SHA-256. The Darwin arm64 archive includes the signed, notarized CLI, helper, and Barn.app; other archives and Linux DEB/RPM packages contain the CLI and matching helper. Find every platform in the download table, then follow installation or source builds.
2 - Barn 1.1.0: image selection and live progress
Released on 2026-11-09. Barn 1.1.0 adds image and guest-architecture overrides, live progress tables, and more reliable CPU/memory resizing. It embeds signed image catalog revision 2026110502, with 9 distribution releases and 17 architecture-specific artifacts. The default remains Ubuntu 24.04 on the host’s native architecture.
Image and architecture selection
Use --image/-I and --arch/-A with plan, up, reload, recreate, and resize to override the inventory for one command. Image overrides apply to selected nodes, and suggested follow-up commands retain the selections, overrides, and repository. Existing VMs require recreate to change their image or architecture.
init and generated setup templates save the choices into the new inventory; validate accepts the same overrides without changing the file. Image info, pull, and named imports accept -A. Architecture names include amd64 (x86_64, x64), arm64 (aarch64, a64), and native; image info and image pull retain the earlier -a spelling.
Matching guests use HVF or KVM. Foreign guests use QEMU TCG for compatibility testing, with a stable ARM CPU model for UEFI boot. On Linux, install the target QEMU system emulator and matching firmware separately; barn setup prepares native host dependencies. All nodes in a deployment share one guest architecture.
Progress and results
Linux and macOS lifecycle commands, setup, network operations, image transfers, and repository maintenance now share live progress tables and consistent completion summaries. Terminal redraws stop before a prompt or error, and redirected output uses ordinary lines. Validation lists the checks it performed. Status tables and labels use plain ASCII, including [DONE], [FAILED], and [CANCELLED], and barn purge deletes the deployment immediately by default (pass --ask for an interactive confirmation prompt). Use --json or --yaml for structured results.
Recovery fixes
- Offline resize holds the deployment lock across inspection, shutdown, and commit, preserving QEMU process identity when another command tries to start the same node.
- Interrupted online resize retains a recovery marker before hotplugging.
statusreports that live CPU or memory may differ from the applied configuration (stage: "resize",reason: "resize_incomplete"); retryresizeor runup/startto recover. - Plans for deployment-wide changes include new nodes in the recreation scope and avoid suggesting an
upcommand before recreation is complete. - Lifecycle retry commands preserve an explicit official
--repo, even whenBARN_REPOpoints elsewhere. Missing native QEMU programs trigger host preparation; missing foreign Linux emulators name the required dependencies.
YAML parsing uses go.yaml.in/yaml/v4 4.0.0, and flag parsing uses pflag 1.1.0. Existing YAML input/output settings are retained, and unfinished YAML documents report the parser’s EOF line. Packaged licenses and SPDX documents cover the updated dependencies.
Upgrade and downloads
Stop running macOS guests before replacing Barn.app, then upgrade:
Or download and run this release’s installer:
The installer verifies the selected archive against checksums.txt. The Darwin arm64 archive includes the signed, notarized CLI, hosts helper, and Barn.app; the other archives and Linux DEB/RPM packages provide the CLI and matching helper. VM disks, keys, and state remain under BARN_HOME.
See the documentation, full changelog, and changes since 1.0.0.
3 - Barn 1.0.0: the first stable release
Released on 2026-11-05. Barn 1.0.0 is the first stable release. For the latest stable release, see Barn 1.1.0.
Barn 1.0.0 completes a pre-release audit of destructive operations, data-disk recovery, catalog integrity, and process cancellation. It embeds signed image catalog revision 2026110502, including Debian 13 image 20261103.2651.1 for amd64 and arm64.
Install Barn · GitHub release and assets · Changelog
Changes
- Whole-deployment recreate keeps omitted nodes.
barn recreatewithout node selectors refuses an inventory that no longer lists an existing node (conflict, reasonnodes_removed, exit 4) before any VM stops. Earlier releases destroyed the omitted node without recreating it. Runbarn destroy NODEto remove it, or add it back to the inventory. The confirmation lists every node that will be replaced, and the scope is checked again under the destruction lock (deployment_changedwhen the applied state changed during preflight). - Destroying the control node keeps the lab usable. The first remaining node becomes the control node, so
ssh-config,hosts,exec, andprovisionkeep working. Update the inventory’s control role, then runbarn upto install its control SSH access. Barn refuses to destroy the control node, before deleting anything, when the successor has an unfinished prepare record that cannot be completed; the error names the successor. - Data disks are reset only on recognized corruption. Blank disks are initialized. An ext4 or XFS filesystem is reset only when the checker reports recognized corruption, including on a persistent disk. Partition tables, signatures without a UUID, unsupported filesystem features, and unknown checker failures keep their data and produce a warning. Existing guests receive the updated helper on their next
barn up. - One confirmation before host changes. On a terminal,
up,start,restart, andreloadshow the host-preparation plan and ask once before installing packages or the Barn network. Without a terminal they report what is missing; runbarn setup --yesfor unattended preparation. --yesfor destruction.destroy,recreate,mac destroy, andmac recreateaccept--yes.--forcekeeps working, andmac stop --forcestill powers the VM off.- Catalog failures exit 7. A catalog signature or signed revision that does not verify exits 7 (
integrity, reasoncatalog_signatureorcatalog_equivocation). Permission and I/O errors on a cached signature remain runtime failures (exit 1). Both official repositories share the embedded upgrade baseline, and a new trusted signature over identical catalog bytes is accepted. - Cancellation reaches
sudo. Cancelled commands receive SIGTERM, whichsudoforwards, and Barn waits at most 10 seconds for the process and its inherited pipes. - Host networking and Mac images.
barn network uninstallkeeps global networkd unit state when other host links exist (preserve_networkd,checks.networkd). Mac image pruning keeps bases that interrupted recreates still reference. - CLI.
barnwithout a command prints the complete help;--jsonand--yamlkeep theactions[]document. Explicit--json,--yaml, and--verboseoverrideBARN_OUTPUTandBARN_VERBOSE, and help stays available when those variables are invalid. - Dependencies. Go 1.27.3,
golang.org/x/net0.62.0, andgo.yaml.in/yaml/v33.0.6.
Upgrade
Upgrade through the channel you installed with. The installer selects the latest stable release (1.1.0), verifies the archive against the release’s checksums.txt, and installs into ~/.local/bin without sudo; set BARN_VERSION=1.0.0 to pin 1.0.0. DEB and RPM packages are attached to the GitHub release.
Upgrading from 0.9.3 keeps VM disks, SSH keys, state, and configuration under ~/.barn and requires no recreation. Stop macOS VMs before replacing the native component. The Apple Silicon archive and the Homebrew installation include the signed, notarized Barn.app with the CLI and hosts helper; Intel macOS and Linux amd64/arm64 archives provide the CLI and hosts helper.
Check scripts for three changes: catalog signature failures exit 7 instead of 1, a whole-deployment recreate exits 4 when the inventory omits an existing node, and interactive up asks before preparing the host.
Known limitations
- A malformed Mac recovery journal stops
barn mac image ls, the space estimate inbarn mac doctor, and image pruning until it is repaired. - One unreadable Mac machine state stops
barn mac ls; the other machines stay usable by name. - Linux guest shares on macOS hosts need a guest kernel with 9p support.
Security fixes land in the latest 1.x patch release; 0.x releases receive no further fixes. See the Linux quick start and Mac guide.
4 - Barn 0.9.3: safer resizing, selected nodes, and recovery
Released on 2026-10-31. Barn 0.x releases use GitHub’s pre-release channel. For the latest release, see Barn 1.1.0.
Barn 0.9.3 focuses on safer changes to local labs. It adds resource-only VM resize, lets selected nodes converge independently, accepts ordinary user path forms for inventories and shares, and recovers interrupted lifecycle operations.
Install Barn · Download 0.9.3 · Source release notes
Changes
- Edit
vm_cpuorvm_memand runbarn resize [node...]. Supported increases are hot-plugged when QEMU has reserved capacity; decreases and unsupported cases use an automatic stop/start while preserving the VM identity, disks, and SSH keys. Usebarn recreatefor image, disk, network, or share changes. plan,up,reload,recreate, andresizewith selectors retain the applied definitions of unselected peers. Conflicts in addresses, aliases, control-node roles, and deployment-wide settings are checked before a node stops or is deleted.barn init [template] --imageandbarn setup [template] --imageselect an image alias, channel, or version in generated templates without downloading it or rewriting an existing inventory.- Relative paths,
~/, and directory symlinks work forBARN_HOME, local repositories, catalog export, inventories, imported images, and share sources where applicable. Inventory-relative shares resolve beside the inventory’s real file; spaces, Unicode, overlapping sources, and readable directories owned by another user are supported. - Provisioning accepts any positive
--paralleland--timeout. Local images and catalog artifacts with declared sizes can exceed 8 GiB; digest-indexed imports, bounded reads, registry size checks, and cache verification protect the image store.barn mac logs --linesaccepts any positive line count. - The embedded signed catalog is revision
2026102802, with 9 distribution families and 17 architecture-specific artifacts. The default remainsu24:stableon the host architecture. - Interrupted Linux and macOS lifecycle, persistent-disk, and replacement operations leave journaled state for safe recovery. Signals produce the structured
cancelledresult.barn mac up --no-waitreturns when the VM process starts; runbarn mac up NAMEagain before using SSH or exec on a machine whose first boot is still provisioning.
Upgrade
Select 0.9.3 explicitly with the download installer, or upgrade the Homebrew formula / Linux package. Existing VM disks and configuration remain under ~/.barn; no VM recreation is required.
Run barn update when you want to activate the current signed catalog from a repository. Pin vm_image: family@version when a pipeline must remain on one exact image across catalog updates. Stop macOS VMs before replacing the native component. See the Linux quick start and Mac guide.
5 - Barn 0.9.2: signed Barn.app and explicit SSH/exec arguments
Released on 2026-10-30. Barn 0.x releases use GitHub’s pre-release channel.
Barn 0.9.2 includes the complete native macOS guest runtime in the Apple Silicon download and Homebrew installation. You can create Linux and macOS VMs after installing a single package, without installing Go or Xcode.
Install Barn · Download 0.9.2 · Source release notes
Changes
- The Darwin arm64 archive contains
barn,barn-hosts-helper, andBarn.appfrom the same source commit. All three executables use Developer ID signatures and are submitted together for Apple notarization; the app carries a stapled ticket and passes Gatekeeper assessment. brew install pgsty/infra/barninstalls the CLI, QEMU, helper, and native app. The CLI discovers the app under Homebrew’slibexec. macOS guests require Apple Silicon, macOS 27+, and a logged-in desktop session.- The helper is signed before its final SHA-256 is embedded in the CLI. Packaging checks the pair again after attaching the native payload to the release archive.
ssh,exec,mac ssh, andmac execrequire--before remote commands. SSH passes a command line to the guest shell; exec preserves individual arguments. Usesh -cwith exec for pipelines or redirection.- Linux arm64/amd64 and Intel macOS continue to ship the CLI and helper for QEMU Linux guests.
Install and use
The first macOS VM downloads Apple’s restore image and prepares a reusable base installation. Supply an existing compatible IPSW with barn mac setup --ipsw PATH to use a local restore image.
Upgrade
Stop running Mac VMs before replacing the app, then run brew update and brew upgrade pgsty/infra/barn. VM disks and configuration remain in ~/.barn; no recreation is required. Update older SSH/exec scripts to use -- and pass exec programs and arguments separately.
For the download installer, specify BARN_VERSION=0.9.2 because GitHub’s releases/latest endpoint does not select pre-releases. The release includes four platform archives, Linux DEB/RPM packages, SPDX inventories, checksums, the installer, and the generated Homebrew formula. release.json records the exact source commit and pinned build tools.
Path, sharing, node-selection, and limit improvements implemented after this release are documented under Barn 0.9.3 Changes.
6 - Barn 0.9.1: Go 1.27.3 toolchain and Barn.app rename
Released on 2026-10-22. Barn 0.x releases are published via GitHub’s pre-release channel. For the latest release with a signed and notarized Barn.app in the Apple Silicon archive and Homebrew formula, see Barn 1.1.0.
Barn 0.9.1 updates the Go toolchain and dependencies and completes the native Mac app rename to Barn.app. CLI commands, inventory format, image catalog, and existing VM state paths remain compatible with 0.9.0.
Install Barn · Download 0.9.1 · Validation history
Changes
- Go 1.27.3 is the baseline for source builds, CI, and release artifacts. All modules required by
go.mod—including indirect and dependency-test modules—are updated to their latest stable versions as of 2026-10-22, includinggolang.org/x/cryptov0.58.0,x/netv0.61.0,x/sysv0.49.0,x/termv0.47.0, andx/textv0.43.0. - Barn.app replaces the
Barn Mac.appbundle name, using bundle identifiercom.pgsty.barnand updated Barn menu labels. The 0.9.1 CLI continues to discover olderBarn Mac.appbundles if present. Native protocol version 2 and~/.barn/macare unchanged. - The standalone Mac runner uses hardened-runtime signing and requests a secure timestamp when signing with a Developer ID certificate. Payload validation checks the app bundle name, identifier, and executable alongside its version, commit, and content digests. Both the installer and Homebrew template use the new app path.
- Build and verification tools are updated to GoReleaser 2.18.3 (with bundled nFPM 2.47.0), standalone nFPM 2.48.0, Syft 1.55.0, Staticcheck 2026.2.2, deadcode 0.52.0, golangci-lint 2.15.0, and govulncheck 1.9.0. GitHub Actions remain pinned by commit, and dependency-license inventories match the updated modules and toolchain.
Upgrade
Pin 0.9.1 explicitly when running the download installer, or upgrade via the Homebrew formula or Linux package manager (see the installation guide).
Before replacing the native Mac component, stop running Mac VMs and upgrade the CLI, hosts helper, and app together from the same build—the 0.9.0 CLI only looks for the old Barn Mac.app bundle name. Desktop window positions now use ~/Library/Preferences/com.pgsty.barn.plist, so saved window coordinates may reset once. VM disks, credentials, and configuration under ~/.barn/mac are preserved without recreating VMs or refreshing image catalogs.
The 0.9.1 release assets include macOS and Linux (arm64 / amd64) CLI and hosts-helper archives plus Linux DEB and RPM packages. To use barn mac, build the CLI and Barn.app together from tag v0.9.1 with Go 1.27.3 and Xcode 27 as described in the macOS guide.
To build the CLI alone from tag v0.9.1:
See the 0.9.1 validation record for the build, CI, VM acceptance, and signing scope.
7 - Barn 0.9.0: native macOS guests and smoother Linux recovery
Released on 2026-09-30. Barn 0.9.0 manages both Linux labs and native macOS machines from a single CLI, while improving diagnostics and recovery after interrupted operations. For the latest release, see Barn 1.1.0.
Install Barn · Download 0.9.0 assets · Full changelog
macOS machines on Apple Silicon
barn mac creates named macOS 27 virtual machines with a native desktop window, SSH, shared folders, and text clipboard sharing. The first machine installs a shared golden base from Apple’s verified restore image, and subsequent machines clone that base with APFS copy-on-write—each getting its own writable disks, credentials, and private subnet.
Mac guests require Apple Silicon, macOS 27+, and the native app bundle built from the release tag with Xcode 27 (see the macOS guide). In accordance with Apple’s Virtualization.framework limit and software license, up to two macOS VMs can run concurrently per Mac across all tools. Mac VM state lives under ~/.barn/mac, independent of your Linux inventory and untouched by Linux destroy or purge.
Easier Linux lab recovery
Re-running barn up resumes unfinished setup: you can fix an inventory error after a failed first start and retry in place, or resume an interrupted destroy. After a host reboot, if the OS assigns a saved QEMU PID to an unrelated process, Barn detects the mismatched process birth time, marks the VM stopped, and never signals the unrelated process.
Concurrent mutating commands wait up to ten minutes for the deployment lock and report which operation holds it, while read-only status and SSH commands remain available. Execution plans now list each node’s data disks, including the default 128 GiB /data disk.
Diagnostics with a next step
Inventory validation errors report the violated rule, value, and source line, and suggest corrections for mistyped vm_* fields. Failed external commands preserve the relevant tail of stderr, and JSON error responses use a consistent error class with optional reason and next fields.
Host setup explains package and network changes before prompting for sudo. Symlinked ~/.ssh/config files managed by dotfile tools are left untouched; Barn prints the Include line for you to add.
Updated Linux images
Embedded catalog 2026093001 covers 41 artifacts across 9 families. Debian 12/13 and Rocky Linux 8/9 use Barn-normalized images: Debian includes offline XFS tools and a pre-generated en_US.UTF-8 locale while keeping C.UTF-8 as default; Rocky Linux 8 uses its shipped chrony configuration and completes SELinux filesystem labeling during image build to avoid first-boot relabeling delays. Ubuntu retains Canonical’s upstream image bytes, with Ubuntu 24.04 (u24) as the default guest OS.
barn update refreshes the local Linux image catalog without modifying the barn binary or existing VM disks.
Upgrade notes
- The CLI command is
barn, the default inventory filename isbarn.yml, state lives under~/.barn, and environment variables use theBARN_*prefix. - The
rmalias has been removed; runbarn purgeexplicitly to delete an entire Linux deployment including persistent disks and keys. - In JSON output,
recreate_requiredandnodes_removedare nowreasonvalues undererror: "conflict",resource_conflictis renamed toresource, and missing inventories or unknown images exit with code2(usage). See the exit-code reference. stopandstartpreserve all disks, whilerecreatereplaces root and non-persistent data disks. See the storage guide for howuphandles damaged data-disk filesystems during recovery.
Get started with the Linux tutorial or the macOS guide, and report issues in GitHub Issues.
8 - Barn 0.8.0: clearer recovery and refreshed images
Historical release record (0.8.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.8.0 cuts down on manual cleanup after interrupted host setup or partial VM starts, and refreshes the Debian and Ubuntu images while preserving previous catalog artifacts and existing VM identities.
What changed
- Host preparation follows the command. Interactive
start,restart, andreloadcan install missing host tools and bring an inactive Barn network back online. On macOS, first-time network installation locates or installs Homebrew (or downloads and verifies the pinned archive) before prompting for administrator credentials, preventing Homebrew from invalidating an earliersudotoken. - Failed nodes do not block independent peers. During
uporstart, a missing host share fails only the affected node while healthy stopped peers continue to start. Errors report both the missing host source path and guest mount point without creating empty placeholder directories, andrestart,reload, andrecreateverify share paths before stopping running VMs. - Recovery preserves identity. If a deployment public key is missing, Barn derives it from the existing private key; if the private key is lost, Barn prints backup recovery steps rather than generating a replacement keypair that existing guests would reject. macOS
socket_vmnetlog-directory recovery preserves network ownership markers to avoid false subnet-conflict errors. - Failures keep their context. Scoped retry hints preserve custom
-finventory paths,--repooverrides, and command names (a failedstartsuggestsstart). Initial setup and its retry share a single operation ID, bounded event logs can be written and read before deployment state exists, and inspecting uncached image metadata no longer requiresqemu-img. - Accurate cleanup summaries. Deleting persistent disks or running
purgereports the final deleted state without listing the same disks as both retained and removed. Orphaned disks from previously removed nodes no longer blockdestroyof the remaining lab.
September images
Embedded catalog 2026092001 contains 37 artifacts across 9 families, retaining all 27 previous artifacts and adding new amd64 and arm64 stable builds:
| Family | System version | Image catalog version |
|---|---|---|
d12 |
Debian 12.15 | 20260909.2596.1 |
d13 |
Debian 13.7 | 20260914.2601.1 |
u22 |
Ubuntu 22.04.5 | 20260913.0.0 |
u24 |
Ubuntu 24.04.5 | 20260911.0.0 |
u26 |
Ubuntu 26.04.1 | 20260918.0.0 |
Debian images include offline XFS tools and a pre-generated en_US.UTF-8 locale (C.UTF-8 remains default). Ubuntu images preserve Canonical’s upstream bytes and configure accounts and networking via cloud-init. Existing VMs and pinned image versions keep their current base images; see the image reference for catalog update details.
Install or upgrade
For an existing lab, inspect barn plan and run barn up. start powers on existing nodes as-is, while up applies inventory changes and retries unfinished guest bootstrap. See the storage guide for how up handles damaged test data disks during recovery.
Validation and limits
Four hosts—two macOS arm64/HVF machines (m1, m5) and two Linux amd64/KVM machines (m0, m3)—completed the 7-distro pro acceptance pass covering Rocky Linux 9.8/10.2, Debian 12.15/13.7, and Ubuntu 22.04.5/24.04.5/26.04.1. Candidate 6d7870e performed a clean initialization from the LAN repository, and runtime candidate 1c054a0 upgraded in place and passed repeated healthy up, stop/start, two rounds of guest SSH, data-disk checks, Ansible configuration reads, and control-node lateral SSH (plus 7-node Ansible ping on both Macs) while preserving VM UUIDs, image identities, and disk inodes.
Single-run timings from the acceptance pass (the first up includes image download):
| Host | Platform | Clean first up (6d7870e) |
Healthy up (1c054a0) |
Existing-disk start (1c054a0) |
|---|---|---|---|---|
m0 |
Linux amd64 / KVM |
117.915 s | 3.924 s | 36.944 s |
m1 |
macOS arm64 / HVF |
86.309 s | 1.745 s | 39.639 s |
m3 |
Linux amd64 / KVM |
98.443 s | 2.169 s | 44.068 s |
m5 |
macOS arm64 / HVF |
87.946 s | 1.467 s | 38.162 s |
Release tag v0.8.0 (320a32afa8f6fca02592215aa0d5607ca4e852b2) updates only documentation relative to the tested runtime and passed local make check, source CI, the packaging snapshot, and the tag workflow. All 20 release assets (19 payloads plus checksums.txt) were verified against the public pre-release. Earlier regression and image-boot records are archived in the UX audit and image refresh record.
Isolated barn update runs against both official repositories verified signatures and activated catalog 2026092001, with all ten new image objects returning HTTP 200 and matching content lengths. Isolated installer runs on macOS arm64 and Linux amd64 verified 0.8.0 (320a32a) binary delivery, and the Homebrew tap update passed local audits and Homebrew CI.
Known limitations in 0.8.0:
- macOS host directory sharing for Linux guests remains blocked by upstream QEMU
virtfsdirectory-descriptor behavior on Darwin; preflight now diagnoses this earlier. - A missing control-node guest private key is now detected even when an older ready marker exists, though restoring peer SSH still requires recreating the control node. See the validation history for the full dated test matrix.
9 - Barn 0.7.0: simpler test labs and automatic recovery
Historical release record (0.7.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.7.0 streamlines first-run startup and recovery for local test labs: re-running barn up finishes interrupted work, retries guest bootstrap stages, and updates guest helper scripts in place without restarting running VMs.
What changed
- Shorter first run. Interactive
upcan generate the default inventory, install missing host tools, and bring an intact inactive Barn network back online. Fast checks stay quiet while longer tasks display progress and a compact summary. - Independent guest stages. Data disks, host shares, guest hostnames, node-to-node SSH, and private networking initialize independently. If an optional stage fails, Barn reports the specific limitation while keeping management SSH available, and subsequent
upruns skip stages that are already healthy. - Automatic test-disk recovery. Healthy filesystems are mounted as-is; unrecognized or confirmed-corrupt filesystems on test data disks are reformatted and remounted with an explicit data-loss notice. Transient probe failures, missing devices, busy mounts, and host I/O errors never trigger formatting.
- Fewer manual fixes. Unwritable host shares fall back to read-only and recover on the next
uponce permissions are fixed. Occupied automatic SSH forward ports are reassigned for stopped guests. Interrupted image downloads resume automatically and fail over across official repositories while enforcing SHA-256 digest verification. - Clean output and backward-compatible state. Guest warnings are stored in a disposable cache outside the schema-2 VM documents and node directories, so older Barn binaries can still inspect and manage the deployment.
Upgrade notes
- Re-running
upperforms guest recovery (there is no separaterepaircommand), whereasstartpowers on existing nodes without applying inventory changes. Passing--no-waitskips readiness and recovery checks. See the storage guide for data-disk recovery rules. - A guest with working management SSH and optional stage warnings returns exit code
0. Automation that requires every optional feature should inspectnodes[].warningsandnodes[].repairsin--jsonor--yamloutput. - If an earlier 0.6.0 bootstrap failed after deleting the staged control-node private key,
uprestores management SSH and reports acontrol-sshwarning; runbarn planandbarn recreateon the control node if it needs peer-to-peer SSH.
Install or upgrade
The release includes macOS and Linux (amd64/arm64) archives, Linux DEB/RPM packages, the installer script, checksums, SBOMs, and a Homebrew formula.
Validation
Release commit 9c6d4896d93733d1cb60a7e5d8591e9a06659c9d passed source CI, the packaging snapshot, and the tag workflow, producing 20 verified release assets. Public macOS arm64 and Linux amd64 installer runs verified binary delivery for 0.7.0, and macOS validation covered CLI smoke checks and cross-compilation.
On Ubuntu 26.04 amd64 with KVM/QEMU 10.2.1 and Ubuntu 24.04 guests, recovery tests exercised ext4/XFS corruption, retained persistent disks, failed probes, busy mounts, read-only share fallback, and repeated healthy up runs without restarting the QEMU process:
- An interrupted 0.6.0 bootstrap (stopped at the management-egress probe) resumed under 0.7.0 in 3.3 s while preserving its data disk and UUID, and remained manageable by the 0.6.0 binary (
status,stop,start,destroy). - A deliberately corrupted disposable ext4 data disk was reformatted and remounted in 3.2 s with an explicit data-loss notice while keeping the VM process running.
10 - Barn 0.6.0: Ubuntu 24.04 and smoother local labs
Historical release record (0.6.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.6.0 makes Ubuntu 24.04 the default guest image and improves planning, startup, scale-out, and node recreation for local Pigsty labs.
What changed
- Ubuntu 24.04 by default. New inventories and the embedded catalog default to
u24:stable. Catalog revision2026090501also bundles the normalized Debian 12/13 and Rocky Linux 8/9 image updates published in the official repositories. - Run
planbefore host setup.barn planresolves catalog images without requiring QEMU or host networking to be installed first (registeredlocal-*images still useqemu-imgcache inspection). Plans display exact image versions, aggregate CPU/memory/disk totals, pending node starts, modified fields, and disk actions, while preserving custom-finventory paths in suggested next commands. - Clearer status and error reporting.
barn statusincludes image, CPU, and memory columns, and a damaged state file on one node no longer hides healthy peers—corrupt state errors name the exact file and cause. Image digest mismatches return exit code7, SSH exit code255passes through unchanged, and--no-waitexplicitly notes that readiness checks were skipped. - Preflight checks before disruption. Targeted
recreatedetects conflicting peer changes before deleting any disks, andreloadvalidates startup dependencies before stopping running guests.stop,destroy, and runtime cleanup update deployment state consistently under the deployment lock. - Automatic guest
/etc/hostsand SSH updates. Starting or removing nodes refreshes Barn-managed/etc/hostsblocks and control-node SSH configuration inside running guests, so recreated peers remain reachable without manually pruning guestknown_hosts. User-authored SSH config entries and global option scopes remain intact. - Cleaner CLI parsing. Custom
initoutput paths print matching follow-up commands, output flags no longer swallow adjacent option values, malformed integer sizes and multi-document YAML files are rejected rather than truncated, andALL_PROXY/all_proxyacts as a fallback behind scheme-specific proxy variables andNO_PROXY.
Upgrade notes
Upgrading Barn leaves existing VM disks and explicit vm_image settings untouched. If an older inventory relied on the implicit Debian 13 default, add vm_image: d13 under all.vars before running barn up with 0.6.0. Always inspect barn plan before applying changes.
Applying CPU or memory changes requires barn recreate, which replaces root and non-persistent data disks while retaining persistent data disks. Passing --no-wait skips both readiness checks and guest /etc/hosts updates until the next barn up. Automation should consume --json or --yaml output; partial status results return healthy nodes alongside a failures array and exit code 5.
Install or upgrade
The release also provides four platform archives, amd64/arm64 DEB and RPM packages, and a Homebrew formula. See the Linux tutorial to get started.
Validation
The lifecycle and UX changes passed code review and the full local make check suite. An isolated macOS arm64/HVF lab verified Ubuntu 24.04 boot, scale-out, control-to-peer SSH, stop/start, reload, recreate, partial status failure handling, and scale-in, and the guest SSH option-scoping fix was verified against sshd/ssh -G configuration evaluation.
The tag workflow repeated all source checks and verified the release archives, Linux packages, SBOMs, installer script, Homebrew formula, release metadata, and SHA-256 checksums.
11 - Barn 0.5.0: explicit disposal, explicit repositories, reproducible images
Historical release record (0.5.0). Official mirror failover was later added in 0.7.0, and the rm alias was removed in 0.9.0. Old release downloads are retired; see the CLI reference and installation guide for current usage.
Barn 0.5.0 adds an explicit command to dispose of an entire lab at once, lets operators choose between the global and China Mainland image repositories, and introduces a reproducible build pipeline for normalized official guest images while keeping the Pigsty inventory contract, deployment state format, and embedded catalog revision 2026082903.
What changed
barn purge(barn rmin 0.5.0–0.8.0) removes the entire Linux deployment—including persistent data disks, deployment keys, state files, and the default SSH config fragment—without interactive confirmation, while preserving the shared image cache and host-global network. Runningpurgewhen no deployment exists succeeds as a no-op; if residual node directories cannot be verified as Barn-owned,purgestops rather than deleting unknown files.- Explicit repository selection. Released binaries default to
https://repo.pigsty.io/barn, while--mirrorselects the China Mainland mirrorhttps://repo.pigsty.cc/barn. Precedence follows--repo,--mirror,BARN_REPO, and the compiled default, and both official roots verify against the same signed catalog. - Strict repository pulls. Upstream URLs recorded in the image catalog document image provenance and are no longer used as implicit download fallbacks. The selected repository must serve the exact catalog-named
.qcow2artifact, or the pull fails with instructions to switch repositories or import a local file. - Digest-pinned offline image builder. The source repository includes an offline normalization pipeline for Debian 12/13 and Rocky Linux 8/9 across
amd64andarm64, recording the exact package closure, SBOM, provenance, andtestingmanifest so candidate repositories can be assembled for native boot tests and signing. - Toolchain updates. Source and release pins move to Go 1.27.1, GoReleaser 2.18.0, golangci-lint 2.13.2, and updated Go modules.
Image normalization pipeline
The eight-target build matrix prepares normalized guest candidates:
- Debian 12/13: installs offline XFS userspace tools for
xfsdata disks. - Rocky Linux 8: provides
/usr/bin/python3, fixessshd_config.ddrop-in inclusion, and cleans legacy network interface state. - Rocky Linux 9: cleans legacy network interface state to match Rocky Linux 8.
Candidate builds remain unsigned and marked testing until they pass native boot/readiness smoke tests, two-build reproducibility checks, production signing, and catalog publication (published in 0.6.0).
Upgrade and disposal
Upgrading from 0.4.0 requires no state, inventory, or catalog migration, and existing cached images remain valid. Use barn purge only when you want to discard all deployment disks and keys without a prompt; continue to use barn destroy when preserving persistent data disks or removing specific nodes.
Validation
Release commit fc85b65ff6a24b0933b56ae1179be9ada2ba91b1 passed the full local source gate—including module and shell checks, unit and race tests, go vet, Staticcheck, deadcode, errcheck, govulncheck, four-target cross-builds, image-pipeline and installer tests, dependency-license checks, and GoReleaser 2.18.0 validation—and the tag workflow verified all archives, DEB/RPM packages, SBOMs, Homebrew formula, installer script, release metadata, and SHA-256 checksums.
Install or upgrade
Download the installer and assets from the Barn 0.5.0 GitHub Release:
The release also includes the Homebrew formula and amd64/arm64 DEB and RPM packages.
12 - Barn 0.4.0: one command, working data disks, one voice
Historical release record (0.4.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.4.0 turns the first run into a single command, makes default data disks work out of the box on Debian and Ubuntu images, and unifies output formatting across all CLI commands while keeping the Pigsty inventory format, fixed-IP deployment model, state layout, and embedded catalog revision 2026082903.
What changed
- Single-command first run. When run in an interactive terminal on a host where the fixed-IP network has not been installed yet,
barn upautomatically invokesbarn setup: it prints the host preparation plan, asks for confirmation before the privileged step, and continues directly into VM startup.barn initnow points tobarn upas the next command. vm_disks[].fsdefaults toauto. Blank data disks are formatted as XFS when the guest hasmkfs.xfsand fall back to ext4 otherwise, matching Pigsty’s Vagrant workflow. Previously, thexfsdefault failed on upstream Debian and Ubuntu cloud images that shipped withoutxfsprogs. Existing deployments created under the old default are not flagged as configuration drift and keep their persistent disks intact.- Clearer guest bootstrap errors. Guest failure markers now capture the failing command’s last output line, so
upreportsguest bootstrap failed during data-disks: xfs requested but mkfs.xfs is unavailablerather than a bare exit status. - Unified CLI output. Lifecycle commands and
statusprint a consistent node table and, afterup, anext: barn ssh <node>hint.planandvalidateprint a single summary line when no changes are needed, whileimage list,network status,doctor, and preflight errors use plain prose without internal error codes (spec hashand internal metadata remain available via--json). Unknown-node errors list the available node names. - Standard SSH command pass-through.
barn ssh <node> -- 'df -h /data; id'forwards the remote command string to OpenSSH unchanged.
Upgrading
If a Debian 12/13 or Ubuntu node created with 0.3.0 or earlier failed to mount /data, run barn recreate <node> once so the disk formats as ext4. Non-interactive automation running up on an unprepared host without a TTY should still run barn setup --yes beforehand.
Validation
Source commit 8ecb8476c7dbc934d8cbbee935ac53884d00fcdb passed the full local source gate—unit and race tests, go vet, Staticcheck, deadcode, errcheck, govulncheck, shell and module checks, four-target cross-builds, image-pipeline and installer tests, and dependency-license verification—and the tag workflow built and verified every archive, native package, SBOM, and installer script. Dated macOS arm64/HVF and Ubuntu amd64/KVM acceptance records are listed in the validation history.
Install or upgrade
Download the installer and assets from the Barn 0.4.0 GitHub Release:
The release includes the Homebrew formula and amd64/arm64 DEB and RPM packages.
13 - Barn 0.3.0: explicit catalogs and actionable readiness
Historical release record (0.3.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.3.0 replaces implicit catalog refreshes with explicit update commands, reports guest bootstrap failures per node, and streamlines the CLI surface while keeping the Pigsty inventory and fixed-IP deployment model.
What changed
- Explicit catalog updates.
up,plan, and standardimagecommands read the active local catalog snapshot without fetching remote metadata behind the scenes. Runbarn updateto fetch the latest signed catalog from the configured repository, orbarn image syncto activate a specific URL or local file. - Per-node bootstrap diagnostics. Guest initialization records the active bootstrap stage atomically. Partial failures list each failed node, stage, and error message, and readiness timeouts point directly to
barn logs <node>. - In-place readiness rechecks. Running guests can re-run readiness verification without restarting QEMU, and partial lifecycle runs still regenerate the host SSH client config for all committed nodes.
- Native guest interface names. Netplan matches NICs by deterministic MAC address without renaming guest network interfaces, and
vm_disks[].fs: autoprefers XFS with automatic fallback to ext4. - Streamlined CLI. The redundant
sscommand and ambiguous root/flag shorthands are removed, andbarn image resetreplacesreset-manifest(kept as an alias).
Validation
Source commit da6d02426da93c677c94c67fec4eb4fcecf4766a passed the full local source gate and a complete GoReleaser snapshot—covering unit and race tests, go vet, Staticcheck, govulncheck, four-target cross-builds, image-pipeline and installer checks, archive/package parity, dependency licenses, SBOMs, and Linux package verification—and the tag workflow repeated these gates before publication. Dated macOS arm64/HVF and Ubuntu amd64/KVM acceptance records are listed in the validation history.
Install or upgrade
Download the installer and assets from the Barn 0.3.0 GitHub Release:
The release includes the Homebrew formula and amd64/arm64 DEB and RPM packages. Existing 0.1.0 and 0.2.0 deployment and catalog state remains compatible.
14 - Barn 0.2.0: selected convergence and release integrity
Historical release record (0.2.0). Old release downloads are retired; use the installation guide for the current release.
Barn 0.2.0 keeps the Pigsty inventory and on-disk deployment format introduced in 0.1.0 while fixing VPN route preflight false positives and selected-node convergence issues uncovered during native host testing.
What changed
- VPN-aware route preflight. Broad VPN exclusion routes such as
10.0.0.0/8no longer block Barn’s more specific10.10.10.0/24lab subnet. Equal or more-specific foreign routes, overlapping interfaces, occupied IP addresses, or a missing Barn route still fail preflight before any VM starts. - True selected-node scale-out.
barn up <node>downloads images and prepares disks only for the targeted node. Uncreated inventory peers appear asabsent, and SSH config,/etc/hosts, guest provisioning, UUID/port allocation, lifecycle commands, and persistent-disk checks operate strictly on the committed node set while leaving the full inventory intact for later expansion. - Updated
/etc/hostsownership markers. Newly provisioned guests write# barn-deployment-hostand clean up both that marker and the 0.1.0# barn-project-hostmarker when refreshing host entries. - Operational polish. Includes graceful command cancellation, structured JSON/YAML output, interactive confirmations,
barn reload, diagnostic redaction, and a trimmed Go dependency graph.
Native and release evidence
- macOS
arm64/HVF (with MonoProxy active): verified selectedu24-1creation, SSH,stop/start, incremental cachedel9-1scale-out, two-node lateral SSH alongside fiveabsentpeers, and full deploymentdestroy. - Ubuntu 26.04
amd64/KVM: verified read-only inspection and control-node SSH against an existing four-node deployment. - CI and packaging: passed local
make check, source CI, and the release packaging workflow, producing four platform archives,amd64/arm64DEB and RPM packages, SPDX SBOMs, a Homebrew formula,install.sh, SHA-256 checksums, and release metadata. - Image catalog: embeds signed catalog revision
2026082903(9 families, 27 architecture artifacts), withhttps://repo.pigsty.cc/barnas the default repository in 0.2.0 andhttps://repo.pgsty.com/barnverified as an alternate endpoint.
Install or upgrade
Download install.sh and the release assets from the Barn 0.2.0 GitHub Release:
0.1.0 deployment state remains directly readable; running barn status while existing VMs are up records any missing process birth timestamps, and existing guests adopt the new /etc/hosts marker the next time they are recreated.
15 - RC6 development candidate: owner-scoped Tier-1 delivery
Pre-Barn historical archive (Piglet 1.0.0-rc.6, 2026-08-25). This candidate was a local verification milestone and was never published as a GitHub Release or package repository; the SHA-256 digests below record the retained local build artifacts. For current Barn usage and support status, see the documentation and status page.
Piglet 1.0.0-rc.6 was a local development candidate that validated the Quick and four-node full profiles on both Tier-1 native hypervisor platforms (macOS arm64 / HVF and Linux amd64 / KVM) and introduced journaled host-network transactions for crash recovery.
Frozen build identity
| Field | RC6 value |
|---|---|
| Version | 1.0.0-rc.6 |
| Source commit | 7db733184463cc189ffa738335c213fc9a2982de |
| Go | go1.27.0 |
| Source epoch | 1787657920 |
| Build timestamp | 2026-08-25T11:38:40Z |
| Channel | development |
| Signature / attestation | false / false |
Exact full profile SHA-256 |
912fea61bf1602c2a437570561a6ab4d0a5a8c152695147ad9e96ae831bc9336 |
Four native product scenarios
| Host | Scenario | Result | Guest contract |
|---|---|---|---|
macOS arm64 / HVF |
Quick | PASS | Ubuntu 24.04.4, dba UID/GID 88, 2 vCPU, 64 GiB root, 64 GiB /data |
Linux amd64 / KVM |
Quick | PASS | Ubuntu 24.04.4, dba UID/GID 88, 2 vCPU, 64 GiB root, 64 GiB /data |
macOS arm64 / HVF |
Exact full |
PASS | .10–.13, UID 88, 64 GiB roots, 128 GiB data disks, 2/1/1/1 vCPU, 4-way peer mesh |
Linux amd64 / KVM |
Exact full |
PASS | .10–.13, UID 88, 64 GiB roots, 128 GiB data disks, 2/1/1/1 vCPU, 4-way peer mesh |
All eight full-profile guests booted Ubuntu 24.04.4, passed contract assertions, and were cleanly destroyed afterward while retaining shared image caches, project markers, and keys.
Journaled host-network transactions
Network install and uninstall use a root-owned, strict-prefix transaction:
- Root planning produces a token bound to the invoking owner, host identity, and observed prestate.
- Apply re-evaluates the plan under the host-global lock and accepts only that token.
- A typed,
fsync-committed journal is written before any host mutation begins. - Each step records a checkpoint only after verifying its postcondition.
- If a transaction is interrupted, ordinary network changes are blocked until an explicit forward or rollback recovery plan is approved.
macOS completed an interrupted forward-recovery test and converged to a healthy default host network. Linux completed install, rollback/retry, four-node operation, uninstall, and host restoration prior to a final patch that tightened socket-state canonicalization, systemd unit enablement scope, NetworkManager ordering, and recovery field scoping (verified via source checks and -race tests).
macOS shared mode and subnet conflicts
The default macOS mode is socket_vmnet host mode; shared mode also passed a two-node test on an alternate free subnet as an explicit opt-in fallback.
During testing, the default subnet encountered VMNET_SHARING_SERVICE_BUSY (1009) when an older Piglet-created bridge100 interface was still present. Preflight checks interface ownership markers rather than adopting an existing interface just because its .1/24 address matches. When a subnet conflict occurs, operators can either remove the conflicting interface or move the entire lab to a clean RFC 1918 /24 subnet—the runtime never renumbers individual guests or picks a random subnet on its own.
Reproducible local archives
Two independent local RC6 build trees produced byte-identical archives, checksums, release metadata, and Homebrew formula files:
| Archive | SHA-256 |
|---|---|
Darwin amd64 |
1295288ff198b53fcb761a6e8794087d75a46105fc19980fabcd44f0c70fb9ef |
Darwin arm64 |
308310b0f2d179f98c8be78ea09f89d226167072c936387bc42d717a922ec0c6 |
Linux amd64 |
547a61f6cc0768071df349cbf5c17d7ddfe3ab3cea59e6b4026e3e3e616a5550 |
Linux arm64 |
afc9ce1043d377cc3b4ef8bdf77826a8139a8c839685025853e8bee8100c6a2e |
Remaining work before public release
At the close of RC6, the remaining items before public release were:
- Physical host-reboot persistence checks on both Tier-1 platforms
- Native smoke tests on macOS
amd64and Linuxarm64 - Re-running the Linux network install/uninstall/reinstall cycle with the final post-audit patch
- Guest image normalization, hosting, and active/standby manifest signing keys
- Public release tags, Homebrew tap and DEB/RPM package publication, and clean-host installer verification
See the tutorial, architecture guide, and status page for how these items were completed in subsequent Barn releases.
16 - Development snapshot: the Go 1.27 product surface
Pre-Barn historical archive (Piglet, 2026-08-24). At this snapshot there was no public release tag, signed production artifact, or package repository, and all embedded image records were marked testing. For current Barn behavior and support status, see the documentation and status page.
The 2026-08-24 source snapshot turned the initial QEMU prototype into a structured Go 1.27 VM manager with zero-configuration Quick mode, fixed-IP private labs, 13 built-in profiles, Pigsty inventory generation, persistent data disks, schema migration, and reproducible release packaging.
One native runtime
Piglet drives QEMU directly through HVF on macOS and KVM on Linux, running QEMU as the invoking user without falling back to TCG emulation or accepting arbitrary pass-through QEMU flags. It validates image digests and .qcow2 headers, generates pure-Go NoCloud cidata seed images, checks QMP and process identity, verifies SSH readiness, and records atomic state updates, journals, and event logs.
Quick mode on both Tier-1 hosts
Zero-YAML Quick mode runs on macOS arm64 and Linux amd64, provisioning a single meta guest (dba user, 2 vCPU, 4 GiB RAM, 64 GiB root disk, sparse 64 GiB /data disk, user-mode NAT, SSH, and four localhost port forwards) and supporting plan, up, status, ssh/exec, stop/start/restart, drift detection, guarded recreate/destroy, --no-wait, persistent disk retention, key rotation, logs, repair, and redacted debug bundles.
Private labs and host networking
Private mode adds host-network preflight, status, install, and uninstall across both Tier-1 host families:
- macOS uses pinned
socket_vmnetv1.2.2 inhostmode by default (withshared/FD mode also tested). - Linux uses a reversible
systemd-networkd/ NetworkManager /qemu-bridge-helpertransaction.
Both platforms keep QEMU unprivileged and block network uninstallation while a lab lease is active. Operators can replace the default 10.10.10.0/24 subnet with another explicit RFC 1918 /24 subnet, moving the profile, host network, lease, node addresses, and Pigsty inventory together.
Four-node full and MinIO runs on both Tier-1 platforms verified fixed IPs, control-node lateral SSH, management internet access, disk identity, stop/start persistence, crash recovery, 30/30 soak cycles, and 16-disk MinIO storage layouts.
Schema-3 profiles and Pigsty inventory integration
The 13 embedded schema-3 profiles define 85 nodes using the dba account—standard nodes carry a 128 GiB /data disk, while MinIO nodes carry four 32 GiB disks. piglet pigsty inventory reads a Pigsty source tree, validates host/VIP/admin/service addresses, rebases custom subnets, and writes mode-0600 inventory files with ownership markers, while pigsty-vm exposes the same lifecycle through typed environment variables.
Persistence, schema upgrades, and automation
- Persistent disks: disks marked
persistent: truesurvive ordinarydestroyand compatiblerecreateruns; deleting them requires typing a confirmation phrase in a TTY or passingdestroy --force --delete-persistent --yes-delete-persistent. Project key cleanup defaults to dry-run and requiresproject purge-keys --yes. - State migration: schema
0 -> 1upgrades require stopped nodes and no active lease, creating a backup before applying an atomic update viaproject upgrade-state --dry-run|--yes. - Automation surface: includes node selectors,
--no-wait, structured JSON responses, typed exit codes, shell completion, managed SSH and/etc/hostsblocks, per-node logs, and redacted support bundles.
Images and release packaging
The embedded image matrix covers el9, el10, d12, d13, u22, u24, and u26 across amd64 and arm64 (7/7 booted per architecture; el8 was excluded from the initial matrix before being normalized in later Barn releases). The build toolchain produces and verifies four platform archives, a Homebrew formula, Linux amd64/arm64 DEB and RPM packages, SHA-256 checksums, SPDX SBOMs, and Cosign/SLSA signing test fixtures across two-run reproducibility checks.
Follow-up completed in RC6 and Barn 0.x
Because catalog schema-3 and inventory changes landed after the initial full/MinIO runs, exact-profile native replays, custom-subnet /etc/hosts publishing, and storage.data_root / ssh.wait_timeout wiring were completed the following day in the 2026-08-25 RC6 candidate, before the project simplified its model around a single Pigsty-native barn.yml inventory in Barn 0.1.0+. See the tutorial, architecture guide, and status page for current Barn behavior.