`./install/build_offline_bundle_docker.sh` on Windows died with "No Docker
socket at /var/run/docker.sock. Set NOMAD_DOCKER_SOCKET if yours lives
elsewhere." — advice that cannot be followed, because there is no socket path
to point at. Docker Desktop is reached over a named pipe.
The docs claimed "Linux, macOS and Windows build machines all produce the same
bundle", which is not true of Windows' native shells and is what sent the user
down this path.
Relaxing the `-S` guard would not fix it. The build starts further containers
whose bind mounts are resolved by the host daemon, and MSYS rewrites the
Unix-looking paths in every -v argument — so the socket mount, the repo mount
and the output mount each need different treatment. Dropping the check just
moves the failure somewhere less obvious.
So: detect MSYS/MinGW/Cygwin and fail immediately with the actual remedy (build
from WSL2, Linux or macOS), and correct the Windows claim in the docs. Real
Git Bash support would mean reworking mount-path construction and is a separate
piece of work.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
management_compose.yaml pins the published Command Center image and the
builder pulls it unconditionally, so a bundle always carries the *released*
admin application. That makes an admin-side change impossible to test on an
air-gapped target until it ships in an image — including the Easy Setup
offline fixes in this branch.
With --use-local-images, an image already in the daemon is bundled as-is.
Anything not present locally is still pulled, so the flag cannot quietly
produce a bundle with a gap in it. It is opt-in because it deliberately does
not verify that a local image resembles the tag it claims.
Bundles built this way record USED_LOCAL_IMAGES=1 in the manifest and carry a
"not for distribution" note in README.txt. The manifest is read key-by-key by
the installer, so the added key needs no format bump.
The docker wrapper forwards the flag through its existing catch-all, and
`docker image inspect` inside the build container resolves against the host
daemon via the mounted socket, so host-built images are visible.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
An air-gapped host installed from an artifact bundle could not use Easy
Setup at all, which defeated the point: the bundle had already put the app
images on disk.
Two independent faults.
The Wikipedia catalog was the only one of the page's four catalogs that
threw on a failed fetch rather than degrading, so GET /api/zim/wikipedia
returned 500 offline and the UI showed "An internal error occurred". It now
reads the manifest through CollectionManifestService like the curated
categories, maps and creator packs already do — refresh when reachable,
cached copy when not, empty list when neither. The second, laxer schema for
the same remote file is deleted; having two is what let the offline path
diverge in the first place.
Navigation and completion were gated on a blanket !isOnline check. Stepping
through the wizard needs nothing from the network, and installing an app
whose image is already in the local Docker daemon works air-gapped because
the install path skips the registry pull. The gate is now per-selection:
- The page reports which services have a local image, so offline the
capability cards offer exactly those and badge the rest "Needs internet"
rather than queuing an install that would fail mid-pull.
- Map regions, content tiers, creator packs, AI models and Wikipedia are
genuinely remote, so those steps stay unselectable — but they now say why
instead of leaving dead cards.
- Complete Setup is blocked offline only when a selection actually needs a
download, and names which ones.
The offline decision logic is a pure module with unit tests.
Two gaps found and documented rather than changed here: an AMD host still
can't install Ollama offline (the install swaps to ollama/ollama:rocm, which
--with-apps doesn't bundle), and remote Ollama can't be configured from the
wizard offline since its checkbox lives behind the AI capability card.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Add admin/docs/offline-install.md covering the build-and-carry workflow,
bundle layout and manifest, how artifact mode stays offline, GPU support,
bundling Supply Depot apps, updating an air-gapped install, troubleshooting,
and an explicit statement of what is and is not covered.
Link it from the README and soften the two "stable internet connection
required during install" lines to point at it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>