From 61ed2b98725e84023b511e5d554a4682be2d2165 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Tue, 21 Jul 2026 16:00:57 +0900 Subject: [PATCH] spindle: exclude microvm engine on non-linux machines This allows spindle build on non-linux machines like darwin. Signed-off-by: Seongmin Lee --- docker-compose.linux.yml | 18 ++++++++++++++++++ docker-compose.yml | 17 ++--------------- localinfra/readme.md | 3 ++- spindle/server.go | 16 ++-------------- spindle/server_engines_linux.go | 33 +++++++++++++++++++++++++++++++++ spindle/server_engines_other.go | 26 ++++++++++++++++++++++++++ 6 files changed, 83 insertions(+), 30 deletions(-) create mode 100644 docker-compose.linux.yml create mode 100644 spindle/server_engines_linux.go create mode 100644 spindle/server_engines_other.go diff --git a/docker-compose.linux.yml b/docker-compose.linux.yml new file mode 100644 index 00000000..784aa031 --- /dev/null +++ b/docker-compose.linux.yml @@ -0,0 +1,18 @@ +# Linux-only overrides: microVM devices/caps that don't exist on macOS. +# Use with: docker compose -f docker-compose.yml -f docker-compose.linux.yml --profile linux up +services: + spindle: + # these two are required for cgroups, uncomment if testing + # privileged: true + # cgroup: host + devices: + - /dev/vsock:/dev/vsock + - /dev/kvm:/dev/kvm + - /dev/vhost-vsock:/dev/vhost-vsock + - /dev/net/tun:/dev/net/tun + cap_add: + - NET_ADMIN + - SYS_ADMIN + security_opt: + - label=disable + - seccomp=unconfined diff --git a/docker-compose.yml b/docker-compose.yml index 79766ef9..d9c9a88b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -163,7 +163,6 @@ services: networks: [tngl] spindle: - profiles: ["linux"] build: context: . dockerfile: localinfra/spindle.Dockerfile @@ -189,20 +188,7 @@ services: SPINDLE_NIX_CACHE_READ_URLS: http://ncps:8501 SPINDLE_NIX_CACHE_TRUSTED_PUBLIC_KEYS: cache.local:F7YqpMzuBdILYd/v+wMZN2YKxCzliXQyFmeezOxw7rU= SPINDLE_NIX_CACHE_UPLOAD_URL: http://ncps:8501/upload - # these two are required for cgroups, uncomment if testing - # privileged: true - # cgroup: host - devices: - - /dev/vsock:/dev/vsock - - /dev/kvm:/dev/kvm - - /dev/vhost-vsock:/dev/vhost-vsock - - /dev/net/tun:/dev/net/tun - cap_add: - - NET_ADMIN - - SYS_ADMIN - security_opt: - - label=disable - - seccomp=unconfined + # microVM devices/caps live in docker-compose.linux.yml (Linux only) volumes: - spindle-data:/var/lib/spindle - spindle-logs:/var/log/spindle @@ -224,6 +210,7 @@ services: condition: service_completed_successfully ncps: condition: service_started + required: false networks: [tngl] knotmirror-tap: diff --git a/localinfra/readme.md b/localinfra/readme.md index e0973aa8..fb0d12a1 100644 --- a/localinfra/readme.md +++ b/localinfra/readme.md @@ -49,7 +49,8 @@ To make that work: ./localinfra/scripts/prepare-spindle-images.sh ``` This writes the image directory under `out/localinfra-spindle-images`. -5. `docker compose up` +5. `docker compose up` (macOS). On Linux, to run spindle's microVM engine + ncps cache: + `docker compose -f docker-compose.yml -f docker-compose.linux.yml --profile linux up` 6. AppView will be running on `127.0.0.1:3000` with two test users: `alice.pds.tngl.boltless.dev` and `bob.pds.tngl.boltless.dev`. Both with password `password`. `TANGLED_APPVIEW_HOST` must be a loopback IP with the mapped port (`127.0.0.1:3000`), not `localhost`: atproto's dev OAuth client requires a loopback IP for the redirect URI. If you remap the published appview port, update `TANGLED_APPVIEW_HOST` in `docker-compose.yml` to match. diff --git a/spindle/server.go b/spindle/server.go index d631c578..77c47021 100644 --- a/spindle/server.go +++ b/spindle/server.go @@ -35,9 +35,6 @@ import ( "tangled.org/core/spindle/config" "tangled.org/core/spindle/db" "tangled.org/core/spindle/engine" - "tangled.org/core/spindle/engines/dummy" - "tangled.org/core/spindle/engines/microvm" - "tangled.org/core/spindle/engines/nixery" "tangled.org/core/spindle/git" "tangled.org/core/spindle/models" "tangled.org/core/spindle/secrets" @@ -347,21 +344,12 @@ func Run(ctx context.Context) error { return fmt.Errorf("failed to setup db: %w", err) } - nixeryEng, err := nixery.New(ctx, cfg) + engines, err := buildEngines(ctx, cfg, d) if err != nil { return err } - microvmEng, err := microvm.New(ctx, cfg, d) - if err != nil { - return err - } - - s, err := New(ctx, cfg, d, map[string]models.Engine{ - "nixery": nixeryEng, - "microvm": microvmEng, - "dummy": dummy.New(log.FromContext(ctx)), - }) + s, err := New(ctx, cfg, d, engines) if err != nil { return err } diff --git a/spindle/server_engines_linux.go b/spindle/server_engines_linux.go new file mode 100644 index 00000000..79a808c8 --- /dev/null +++ b/spindle/server_engines_linux.go @@ -0,0 +1,33 @@ +//go:build linux + +package spindle + +import ( + "context" + + "tangled.org/core/log" + "tangled.org/core/spindle/config" + "tangled.org/core/spindle/db" + "tangled.org/core/spindle/engines/dummy" + "tangled.org/core/spindle/engines/microvm" + "tangled.org/core/spindle/engines/nixery" + "tangled.org/core/spindle/models" +) + +func buildEngines(ctx context.Context, cfg *config.Config, d *db.DB) (map[string]models.Engine, error) { + nixeryEng, err := nixery.New(ctx, cfg) + if err != nil { + return nil, err + } + + microvmEng, err := microvm.New(ctx, cfg, d) + if err != nil { + return nil, err + } + + return map[string]models.Engine{ + "nixery": nixeryEng, + "microvm": microvmEng, + "dummy": dummy.New(log.FromContext(ctx)), + }, nil +} diff --git a/spindle/server_engines_other.go b/spindle/server_engines_other.go new file mode 100644 index 00000000..966f91ca --- /dev/null +++ b/spindle/server_engines_other.go @@ -0,0 +1,26 @@ +//go:build !linux + +package spindle + +import ( + "context" + + "tangled.org/core/log" + "tangled.org/core/spindle/config" + "tangled.org/core/spindle/db" + "tangled.org/core/spindle/engines/dummy" + "tangled.org/core/spindle/engines/nixery" + "tangled.org/core/spindle/models" +) + +func buildEngines(ctx context.Context, cfg *config.Config, _ *db.DB) (map[string]models.Engine, error) { + nixeryEng, err := nixery.New(ctx, cfg) + if err != nil { + return nil, err + } + + return map[string]models.Engine{ + "nixery": nixeryEng, + "dummy": dummy.New(log.FromContext(ctx)), + }, nil +} -- 2.51.2