snap: rebase onto core26 (resolute) - #807
Conversation
Resolute ships ceph 20.2.0 (Tentacle) in the Ubuntu archive, so the lmlogiudice/ceph-tentacle-rc PPA is no longer needed. Update python paths from 3.12 to 3.14 (resolute default). Exploration build, not for merge yet. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
dqlite v1.17.0 does not build on resolute: src/lib/serialize.h typedefs float_t as double, which conflicts with the glibc math.h float_t that newer libuv now pulls in. v1.18.4 gets further but trips dqlite's -Werror configure default under gcc 15 (C23 makes const-generic memchr return a const pointer that src/server.c assigns to non-const). v1.18.7 compiles clean. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
core24 provided /usr/bin/python3 from the base; core26 ships the python3.14 stdlib but no interpreter binary. Stage python3.14 in the ceph part so bin/ceph and the other python scripts resolve it via env on the snap PATH, and prime the matching stdlib for its prefix. ceph-mgr's embedded libpython keeps using the base stdlib at /usr. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
The python plugin builds in a venv and finishes by symlinking the venv interpreter to one found in the payload or the base; core26 has no base interpreter and the ceph part's organize moves the staged one out of the paths the plugin searches, so the build fails. The venv was only a build vehicle: install the module and its dependencies straight into site-packages with pip --target, which is what ends up primed either way. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
Resolute's coreutils is a transitional package with no binaries; the tools moved to rust-coreutils (a multicall binary under /usr/lib/cargo/bin/coreutils) with /usr/bin symlinks provided by coreutils-from-uutils. Both must be listed explicitly because snapcraft's essential-package filtering skips them as dependencies. truncate is needed by loop-file OSD creation. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
The core26 build container needs a newer host than jammy: snapcraft fails while setting up the resolute buildd instance because its systemd-resolved cannot start on the 22.04 runner's 5.15 kernel. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
Resolute's radosgw links libboost_process 1.90 and its libcurl-gnutls links libssh2; neither was in the prime list, so the rgw service died at startup with a missing shared library. These are the only two unresolved NEEDED entries across all 207 ELFs in the snap (checked against the snap contents plus the core26 base). Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
ganesha 4.x accepted RecoveryBackend = 'rados_cluster'; the 6.x
config parser rejects the quoted form with "Unknown token
('rados_cluster')" and silently falls back to filesystem v4
recovery, breaking clustered grace. On the fresh CI multinode
cluster the service crash-loops with INVALIDARGUMENT. Verified
against ganesha 6.5: the unquoted token parses clean and the
rados_cluster backend loads and reads the RADOS recovery db.
Also tail ganesha.log in the robot teardown diagnostics; ganesha
logs to a file, so the journal-only dump left these failures
undiagnosable from CI.
Assisted-by: claude-code:claude-fable-5
Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
CI triage: all four matrix failures reviewed
NFS multinodeTwo independent bugs:
Also in 🤖 Generated with Claude Code |
…ests ganesha 6.x calls prctl(PR_SET_IO_FLUSHER) at startup and treats EPERM as fatal; under snap confinement the call needs the process-control interface (CAP_SYS_RESOURCE). This is what crash- looped the multinode NFS suite: single-node installs connect the full interface set, but the multinode inner nodes only connect the minimal one. Set Allow_Set_Io_Flusher_Fail so ganesha degrades gracefully when the capability is absent, and add process-control to the minimal set (the other full-set interfaces cannot connect in nested containers). Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
Round 3 results + the multinode NFS crash explainedThe ganesha.log teardown diagnostics paid off. CI's actual fatal on the ganesha 6.x makes a
Round 3 scorecard (fd84435): everything green except NFS, including The NFS suites this round also confirmed the ceph 20.2.0 client-stack So the ceph-side matrix stands: archive 20.2.0 = crashy client libs / 🤖 Generated with Claude Code |
Root cause of the 20.2.1 (tentacle-rc PPA) mgr
|
Connecting process-control hangs inside the nested img-builder container, timing out suite setup and failing every multinode container suite. The Allow_Set_Io_Flusher_Fail config already lets ganesha run without the capability, so the connect is unnecessary. Assisted-by: claude-code:claude-fable-5 Signed-off-by: Utkarsh Bhatt <utkarsh_bhatt@outlook.com>
Summary
Rebases the snap from core24 onto core26. Resolute ships ceph 20.2.0
(Tentacle) in the Ubuntu archive, so the interim
lmlogiudice/ceph-tentacle-rcPPA is dropped entirely.Five changes, one per commit:
3.12 -> 3.14 (resolute default).
float_ttypedef clasheswith glibc
math.hvia newer libuv, and v1.18.4 still tripsdqlite's
-Werrordefault under gcc 15 (C23 const-genericmemchr). v1.18.7 compiles clean.base but no interpreter binary (core24 shipped both), so
bin/cephand the other python scripts need an in-snap
python3on PATH.finishes by symlinking a base interpreter that no longer exists (and
the ceph part's organize moves the staged one out of the plugin's
search paths). The venv was only a build vehicle; pip installs the
same site-packages content directly.
truncate— resolute'scoreutilsis anempty transitional package after the uutils migration;
truncate(used by loop-file OSD creation) now lives in the rust-coreutils
multicall binary, which snapcraft's essential-package filtering
skips unless listed explicitly.
Testing
Built with snapcraft 9.0.0.post69 (latest/edge), installed
--dangerousin a fresh noble LXD VM with the usual manual plugconnections:
microceph cluster bootstrap-> mon/mgr/mds upmicroceph disk add loop,1G,3-> 3 OSDs up/in,HEALTH_OK(exercises the bundled uutils
truncate)microceph.ceph -sworks (proves theenv python3shebang path)ceph versions: 20.2.0 tentacle across all 6 daemonsceph mgr module enable microceph+ceph orch set backend microceph->Backend: microceph, Available: Yes(proves thepip-installed deps import)
Open questions (why draft)
instead rely on the base stdlib and drop the staged copy (~30M).
patches/loop in the ceph part is not idempotent acrossincremental rebuilds (
patchcreates files in$CRAFT_STAGEthatcraft-parts does not track); any re-stage without a full
snapcraft cleancollides.gnu-coreutils if uutils
truncatebehavior is a concern.🤖 Generated with Claude Code