olex2c needs libreadline.so.8 (RHEL8 has .so.7, vendor lib/ only .so.6),
so the Ra build node could not complete the post-install ld.so --list and
the guard aborted. Add Fedora 40 readline-8.2 to the sysroot rpms (needs
only the host libtinfo.so.6) and make step 7 print the listing, warn on
host libs missing on the build node, and die only on a genuine
patchelf/sysroot failure.
The 2026 upstream Linux binaries (olex2c, olex2, unirun, NoSpherA2,
openblas, cctbx ext) need GLIBC_2.38 / GLIBCXX_3.4.32; RHEL9 has 2.34 /
3.4.29 so they cannot run natively and a newer libc cannot be supplied
via LD_LIBRARY_PATH. Fetch frozen Fedora 40 glibc/libstdc++/libgcc rpms
from kojipkgs plus a static patchelf (all sha256-pinned), extract them
into PREFIX/sysroot and set interpreter + DT_RPATH on the dynamic
executables. Host keeps providing GTK2/X11/GL. Launcher sets C.UTF-8 and
never exposes the sysroot on LD_LIBRARY_PATH. Install verifies with
ld.so --list that olex2c resolves through the bundled glibc.
First build failed in install: cp -a onto /opt/psi logs 'failed to
preserve ownership ... Permission denied' for every file (chown refused)
and exits non-zero, which tripped the die-guard although the copy itself
was fine. Use cp -r --preserve=mode,timestamps,links instead. Record the
pitfall in the new-module skill guardrails.
The official olex2-linux64.zip already ships both the GUI (olex2) and the
console build (olex2c) plus cctbx and a private CPython 3.8, so nothing is
compiled. Default prep downloads + sha256-verifies the zip (rolling file,
version carries the upstream SVN revision), install copies the vendor tree
flat into PREFIX and adds bin/olex2 + bin/olex2c launchers that reproduce
the vendor start env without running the unirun auto-updater.