Skip to content

feat: ARM64 runner support and Slurm release line docs - #6

Merged
dennisklein merged 2 commits into
mainfrom
claude/lucid-bohr-bj4kfl
Sep 27, 2026
Merged

dennisklein merged 2 commits into
mainfrom
claude/lucid-bohr-bj4kfl

Conversation

@dennisklein

@dennisklein dennisklein commented Sep 26, 2026 •

Copy link
Copy Markdown
Member

This PR prepares the action for the next sind release, which GSI-HPC/sind#75 and GSI-HPC/sind#76 set up. That release publishes a sind-linux-arm64 binary, and it publishes the sind-node images per Slurm release line (26.05, which is also latest, and 25.11) for linux/amd64 and linux/arm64.

Changes

  • scripts/install.sh:
    • picks sind-linux-amd64 or sind-linux-arm64 from uname -m (x86_64, aarch64/arm64); until now it rejected every runner except Linux x64;
    • on ARM64, fails early with a clear error for sind v0.9.0 and earlier, which publish only the amd64 binary. Today that includes latest.
  • README.md:
    • Requirements: Linux x64 or ARM64 runners, and ARM64 needs a sind release after v0.9.0;
    • new "Slurm Versions" section: clusters default to sind-node:latest, with an example job that runs a matrix over 25.11 and 26.05 by setting defaults.image in an inline cluster config.
  • CLAUDE.md: the install.sh layout entry covers the arm64 binary.

No action inputs or outputs change.

Merge order

Merge after a sind release has published the arm64 binary and the new images. Until then:

  • ARM64 runners get the "no linux/arm64 binary" error, because latest is v0.9.0;
  • sind-node:25.11 and sind-node:26.05 don't exist in the registry;
  • the linked docs anchor (#official-images) is only on the preview site.

Testing

  • shellcheck scripts/*.sh and actionlint are clean.

  • install.sh was run against stub uname and curl on PATH:

    Runner Version Result
    x86_64 v0.9.0 downloads sind-linux-amd64
    aarch64 v0.9.0, v0.8.0, latest → v0.9.0 error: no linux/arm64 binary before the next release
    aarch64 0.10.0, latest → v0.10.0 downloads sind-linux-arm64
    Darwin arm64 — error: only Linux x64 and ARM64 runners
  • create.sh passes inline configs through yq unchanged, so the nested defaults.image needs no script change.

  • Not exercised: a real ARM64 run and the Slurm matrix example. Both need the sind release. An ubuntu-24.04-arm leg for the e2e matrix can be added once that release is out; before then it would fail by design.

🤖 Generated with Claude Code

https://claude.ai/code/session_011NftyNYiF1oHaVJRFsfbNY

- add a "Slurm Versions" section: clusters default to
  sind-node:latest (newest Slurm release line), and sind publishes a
  sind-node:<YY>.<MM> image per supported release line
- example matrix over 25.11 and 26.05 via defaults.image in an inline
  cluster config

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011NftyNYiF1oHaVJRFsfbNY
dennisklein added a commit to GSI-HPC/sind that referenced this pull request Sep 26, 2026
…d64 and arm64 (#76)

This PR publishes an official `sind-node` image for each supported Slurm release line: 26.05 (new, now `latest`) and 25.11 (bumped to 25.11.8). Each image is built for linux/amd64 and linux/arm64. It also fixes `sind ssh` into nodes that run with `apparmor=unconfined`.

Closes #50
Closes #74

### Images and tags

| Slurm | Tags | Platforms |
|---|---|---|
| [26.05.4](https://github.com/SchedMD/slurm/releases/tag/slurm-26-05-4-1) | `latest`, `26.05`, `26.05.4` | linux/amd64, linux/arm64 |
| [25.11.8](https://github.com/SchedMD/slurm/releases/tag/slurm-25-11-8-1) | `25.11`, `25.11.8` | linux/amd64, linux/arm64 |

`latest` is sind's default image. Once the Image workflow runs on `main`, the default moves from Slurm 25.11 to 26.05 for every sind version, including older binaries. `sind-node:25.11` keeps the 25.11 line available.

### Changes

- **`Dockerfile`:**
  - `SLURM_VERSION` and `SLURM_SHA256` are build args without defaults, so one Dockerfile builds every release.
  - `/etc/shadow` and `/etc/gshadow` are mode `0400` instead of Rocky's `0000` (#74). Root then reads them as their owner, without `CAP_DAC_OVERRIDE`. On `apparmor=unconfined` nodes, the host's `unix-chkpwd` AppArmor profile denies that capability, so `pam_unix`'s account check failed and sshd refused root.
- **`docker-bake.hcl`:** `SLURM_RELEASES` lists one release per line with its tarball checksum, newest first. Each entry becomes a target `slurm-<YY>-<MM>` for both platforms, tagged `<version>` and `<YY>.<MM>`. The first entry is also tagged `latest`.
- **`.github/workflows/image.yml`:**
  - builds each target and platform on a native runner (`ubuntu-24.04-arm` for arm64) and pushes it by digest;
  - merges the digests into one multi-platform image per release line under the bake tags;
  - takes `latest` from the bake file, which replaces the registry lookup (it parsed the removed `ARG SLURM_VERSION=` default).
- **`.github/workflows/ci.yml`:**
  - the integration tests run per target and platform, four jobs listed from the bake file with `docker/bake-action/subaction/matrix`;
  - `Integration Test` now aggregates those jobs, so the check name stays stable when release lines or platforms change;
  - each job runs `sind doctor` first, because the tests skip rather than fail when Docker or cgroup nsdelegate are missing;
  - the image under test is tagged `ghcr.io/gsi-hpc/sind-node:latest` locally. The mesh's SSH relay runs that image, and the published one is amd64-only until this ships.
- **`pkg/slurm/version_test.go`:** `TestDiscoverVersionLifecycle` runs against `sind-node:latest`, now the image under test. It accepts any `X.Y.Z` version instead of expecting 25.11.
- **`Makefile`:** `make image` builds all release lines for the host platform only (`--set '*.platform=local'`). A cross-platform build would compile the whole stack under emulation.
- **Docs:**
  - `building-images.md`: tag table, how to pick a release line, how to build a single target, platforms, and the shadow-file requirement for custom images;
  - `installation.md`, `quickstart.md`, `development-setup.md`, `DESIGN.md` and `README.md`;
  - the `steward` and `bump-image-deps` skills, including how to add or drop a release line.

### Slurm 26.05 review

- The 26.05 release notes remove none of the options sind writes to `slurm.conf` or `cgroup.conf`.
- The `configure` flags the Dockerfile passes and the required build dependencies are the same as in 25.11. The new llhttp and libjwt checks only fail when those libraries are requested or installed, and the image builds neither slurmrestd nor JWT support.

### Testing

- **CI:** all four integration jobs pass: Slurm 25.11 and 26.05, each on linux/amd64 and linux/arm64. Each job builds its image from source and runs 1282 integration tests, with none skipped. arm64 runs natively on `ubuntu-24.04-arm`, and `sind doctor` passes there.
- **Build times:** from a cold cache, a full image build took about 10 minutes on arm64. With the per-target cache, each integration job took 1–3 minutes.
- **Tags:** `docker buildx bake --print` shows the expected targets, platforms, build args and tags.
- **Checksums:** computed from download.schedmd.com. The previously pinned 25.11.6 checksum matched.
- **Local checks:** `make test`, `make lint`, `go vet -tags integration ./...`, `make lint-docs` and `actionlint` pass.
- **Not exercised:** the Image workflow's push-by-digest and merge path, which only runs on `main`.

### Notes

- **CI cost:** integration tests double (two release lines × two platforms), and each job builds its image from source. The GitHub Actions cache is scoped per target and platform.
- **Old tags:** existing tags such as `25.11.6` stay in the registry but are no longer rebuilt, so they don't get the #74 fix.
- **sind-action:** it installs `sind-linux-amd64` only, so using arm64 runners needs an architecture switch there. The companion README change is GSI-HPC/sind-action#6, which should merge after a sind release has published these images.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_011NftyNYiF1oHaVJRFsfbNY
- select sind-linux-amd64 or sind-linux-arm64 from uname -m (x86_64,
  aarch64/arm64) instead of rejecting every runner but Linux x64
- fail early with a clear error on ARM64 for sind v0.9.0 and earlier,
  which publish only the amd64 binary
- document ARM64 runners in the README requirements and CLAUDE.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011NftyNYiF1oHaVJRFsfbNY
@dennisklein dennisklein changed the title docs: show how to pin or matrix the Slurm release line feat: ARM64 runner support and Slurm release line docs Sep 26, 2026
@dennisklein
dennisklein merged commit 2da7082 into main Sep 27, 2026
3 checks passed
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.

2 participants