Skip to content

Install unison in the worker images so ow ssh works at all - #78

Open
vohonen wants to merge 1 commit into
longtermrisk:mainfrom
vohonen:feat/unison-in-worker-images
Open

Install unison in the worker images so ow ssh works at all#78
vohonen wants to merge 1 commit into
longtermrisk:mainfrom
vohonen:feat/unison-in-worker-images

Conversation

@vohonen

@vohonen vohonen commented Aug 18, 2026

Copy link
Copy Markdown

What's broken

No ow ssh command works against any published image:

[ow] unison not found on remote. Please install it in your image.

cli/common.py already documents unison as a requirement at both ends, and checks for it on the
remote, but no image installs it. So this is unreachable for everyone, not just me.

Worth stressing that this is not only --sync. The check lives in REMOTE_INIT, which
bootstrap_remote runs in every mode, so plain ow ssh <command> dies on it too. I hit it with
ow ssh --gpu A100S --count 1 whoami on a freshly provisioned pod.

What this changes

  • Installs unison in Dockerfile (unsloth, the --image default) and Dockerfile.vllm. The
    cluster image is untouched, since nothing syncs into it.
  • Pins the upstream static build at 2.54.0 with a sha256, instead of apt install unison.
  • Documents the version and how to bump it in DOCKER_README.md.

Why pinned and not apt: unison refuses to sync between mismatched versions, and the two ends
disagree by default. Homebrew ships 2.54.0; Ubuntu 24.04 apt has 2.53.x. So apt install unison
would give you images that still can't sync with a stock macOS client, which is the majority of
callers. The static tarball is 2 MB, and unison -version at the end of the layer turns a bad
download into a build failure rather than a first-sync failure.

What you need to do

The code fix is inert until the images are rebuilt, so this PR does nothing on its own:

  1. Merge.
  2. Decide on the tag. I deliberately did not touch IMAGE_VERSION (still v0.11). Either
    rebuild v0.11 in place, or bump to v0.12 — but if you bump, openweights/images.py and the
    pushed images have to land together, or every job points at a tag that doesn't exist yet. Your
    release process, your call.
  3. Build and push both, per DOCKER_README.md:
    VERSION=$(python -c "from openweights.images import IMAGE_VERSION; print(IMAGE_VERSION)")
    docker buildx build --platform linux/amd64 -t nielsrolf/ow-unsloth:$VERSION --push .
    docker buildx build --platform linux/amd64 -f Dockerfile.vllm -t nielsrolf/ow-vllm:$VERSION --push .
  4. Sanity check, which should print 2.54.0 twice:
    docker run --rm nielsrolf/ow-unsloth:$VERSION unison -version
    docker run --rm nielsrolf/ow-vllm:$VERSION unison -version

Verified / not verified

  • Verified: the release asset exists, the sha256 matches, and tar --strip-components=1 <dir>/bin
    lands exactly bin/unison and bin/unison-fsmonitor. The binary is a statically linked x86-64
    ELF, so being built on 22.04 is fine on the 24.04 base.
  • Not verified: I have not built the images. No Docker here.

Unrelated, but noticed

DOCKER_README.md claims the unsloth image is built FROM unsloth/unsloth:latest and the vLLM one
FROM vllm/vllm-openai:v0.19.1. Both Dockerfiles are actually on
pytorch/pytorch:2.10.0-cuda12.8-cudnn9-runtime. Not touching it here, but it misled me for a bit.

No `ow ssh` command works against any published image:

    [ow] unison not found on remote. Please install it in your image.

`cli/common.py` already documents unison as a requirement at both ends and checks
for it on the remote, but no image installs it.

This is not only `--sync`: the check lives in `REMOTE_INIT`, which
`bootstrap_remote` runs in every mode, so plain `ow ssh <command>` dies on it too.
Reproduced with `ow ssh --gpu A100S --count 1 whoami` on a fresh pod.

Added to the two images you can `ow ssh` into: unsloth (the `--image` default)
and vllm. The cluster image is left alone, since nothing syncs into it.

Pinned to the upstream static build rather than apt. Unison refuses to sync
between mismatched versions, and the two sides disagree by default: Homebrew
ships 2.54.0 while Ubuntu 24.04 apt has 2.53.x, so `apt install unison` would
produce images that still cannot talk to a stock macOS client. The static tarball
is 2 MB, checksum-pinned, and `unison -version` at the end of the layer makes a
broken download fail the build rather than the first connection.

Both images already build `--platform linux/amd64` only, so the x86_64 asset is
the only one needed.

Needs a build and push to take effect, since the fix is in the images rather than
in the code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant