Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ The name comes from **金継ぎ**, the Japanese art of repairing pottery with go

## Installation

The current release is [v0.4.6](https://github.com/rcarmo/kintsugi/releases/tag/v0.4.6); see the [release notes](https://github.com/rcarmo/kintsugi/releases/tag/v0.4.6). Releases publish app, System and workspace images and advance `latest`; `stable` is promoted separately. Publishing does not update or restart an installation.
The current release is [v0.4.7](https://github.com/rcarmo/kintsugi/releases/tag/v0.4.7); see the [release notes](release_notes/v0.4.7.md). Releases publish app, System and workspace images and advance `latest`; `stable` is promoted separately. Publishing does not update or restart an installation.

Use a dedicated Linux server with Docker. The installer defaults to `ghcr.io/rcarmo/kintsugi` and `ghcr.io/rcarmo/kintsugi-system`; matching images must be available before installation.

Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/version.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const kintsugiVersion = "v0.4.6";
export const kintsugiVersion = "v0.4.7";
2 changes: 1 addition & 1 deletion images/system/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG RUNTIME_IMAGE=ghcr.io/rcarmo/kintsugi-docker@sha256:927bea2d5276f87de04d7934b19124c48f9bd1c877743cace382bd5271ffbfe4
ARG RUNTIME_IMAGE=ghcr.io/rcarmo/kintsugi-docker@sha256:7ccb0ce9fb643060ef1eb54162f7e42db000f8c7b0a7f716d8ce684369899018
FROM oven/bun:1.4.4@sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d AS bun
FROM ghcr.io/tailscale/tailscale:v1.102.3@sha256:8c42c4574ab066384fcb72f69e086a2ff1dd3652eb6f56856cee34bcf0d2f680 AS tailscale
FROM ${RUNTIME_IMAGE}
Expand Down
2 changes: 1 addition & 1 deletion packages/workspace-image/runtime-image
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ghcr.io/rcarmo/kintsugi-docker@sha256:927bea2d5276f87de04d7934b19124c48f9bd1c877743cace382bd5271ffbfe4
ghcr.io/rcarmo/kintsugi-docker@sha256:7ccb0ce9fb643060ef1eb54162f7e42db000f8c7b0a7f716d8ce684369899018
24 changes: 24 additions & 0 deletions release_notes/v0.4.7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Kintsugi v0.4.7

## Workspace exec with delegated cgroups

Fixes `docker exec failed` / `error starting setns process: exec: already started` in systemd-based workspaces after the Go 1.26 runtime rebuild.

Systemd moves its init process into a child cgroup and enables controllers in the parent. Linux then rejects runc's `CLONE_INTO_CGROUP` launch into that parent with `EBUSY`. runc 1.4.0 tried its fallback using the same `exec.Cmd`; Go 1.26 forbids calling `Start` twice, even after a failed launch. This prevented otherwise healthy workspaces from starting their helpers or accepting terminal commands.

The pinned Ubuntu runc source and distribution patches are retained, with the complete upstream [runc #5091](https://github.com/opencontainers/runc/pull/5091) source fix backported: check command-construction errors and use a fresh command for the fallback. The runtime reports `1.4.0-0ubuntu1+kintsugi-exec-retry` and retains Go **1.26.10**, seccomp and the existing resource/network boundaries. No cgroup controllers are disabled and no policy limits or stored formats change.

## Verification

- Full fix PR [#11](https://github.com/rcarmo/kintsugi/pull/11) CI passed before exact-head merge.
- Exact Ubuntu-plus-fix `libcontainer` tests, module generation, lint and TypeScript passed locally.
- On the affected Orange Pi 6 Plus (CIX P1 ARM64, 12 cores, approximately 14.85 GiB usable RAM, Debian Trixie/Linux 6.6.89-cix, OverlayFS), the old binary failed in all five running workspace namespaces. The fixed binary succeeded in each without restarting the workspaces.
- A disposable cgroup-v2 fixture reproduced the original failure by moving init into a child and enabling the parent's memory controller; repeated fixed execs joined the correct child. The same regression is now part of both native runtime smoke gates.
- [Verified runtime run 40082057502](https://github.com/rcarmo/kintsugi/actions/runs/40082057502) passed on **AMD64 and ARM64**, including shipped-binary Go toolchain checks, the cgroup exec regression, EROFS cache/build/restart smoke tests and manifest assembly. The outer fixture uses the same host cgroup namespace as production System ([#12](https://github.com/rcarmo/kintsugi/pull/12)). System and workspace now pin `ghcr.io/rcarmo/kintsugi-docker@sha256:7ccb0ce9fb643060ef1eb54162f7e42db000f8c7b0a7f716d8ce684369899018`.
- The tagged release then runs full checks and native System/workspace/app verification before publication. A source note or tag is not proof of successful publication; consult the workflow receipts.

## Update scope

A paired installation update is needed: the System image provides the runtime that executes workspace processes. Updating only the app does not fix this failure. Existing workspace containers, data, configuration and saved parked intent are retained; the installation update interrupts running workspaces.

Publication advances `latest` and does not move `stable` or update an installation automatically. The local installation is upgraded separately through the supported updater after verified publication. No fresh physical-host reboot or sustained stress acceptance is implied.