Skip to content
prefix.extract - step 1 of 3

Start here. The foundation.

A locked-down machine, no root, and nothing installed. One command and a few hours later it has its own self-contained toolbox that neither touches nor depends on anything already on the box. Everything the next two stations build lands inside it.

The extraction
Files in the repo. Pull it and run - nothing to unpack.

Generic prefix install (with EasyBuild)

prefix-install 12 files 46 KB extracted from prefix.ndexr.io + eb.ndexr.io
In plain terms

Turns a bare Linux machine into one that can build scientific software - without needing administrator rights. One command and a few hours later the machine has its own self-contained toolbox, kept in a single folder, that neither touches nor depends on anything already installed on the machine.

One command builds a self-contained software foundation for the machine's architecture - ARM/aarch64 included - inside the extraction directory: a Gentoo Prefix, then EasyBuild + Lmod layered on top of it. Background build with the log tailed; every script refuses root. Lmod is emerged by the prefix's own portage and EasyBuild lives in a venv built from the prefix python, so nothing touches the host beyond reading its compiler.

What it is

activate.sh bin install.sh manifest prefix README.md run.R

Needs
  • An unprivileged user - every script refuses UID 0
  • gcc, g++, make, patch, tar, xz on the host image (preflight lists anything missing)
  • Network for source fetches (portage tree, distfiles, PyPI)
  • ~20 GB free and 2-6 h for the prefix stage; the EasyBuild layer is minutes
  • A stable absolute path (e.g. /opt/prefix-install) - the tree is not relocatable
Get it
# from R, via the rxedn catalogue
rxedn::rxedn_install_module("prefix.extract.ndexr.io")

# the extraction lands at <domains_dir>/prefix.extract.ndexr.io/prefix-install/

No archive to unpack and no checksum to compare: rxedn publishes each repo as an immutable <host>-<sha7>.tar.gz and records its sha256 in the catalogue index, so the commit is the identity. Pull it, and the files are simply there.

Run it
# the extraction is a directory in this repo - copy it somewhere stable
cp -r prefix-install /opt/ && cd /opt/prefix-install   # see README on why the path must be stable

# from R (Workbench session) - session-core-aware kickoff:
#   source('run.R'); kickoff(); build_status(); tail_log()

./install.sh          # shell lane: prefix, then EasyBuild
bin/status.sh         # re-attach to the log any time

source activate.sh    # when done: eb + module on PATH
eb --rpath --robot GCC-13.3.0.eb

Output stays put, in prefix/<triple>/ and eb/ inside the extraction directory - nothing is copied out.

Every file - 12
  • activate.sh
  • bin/bootstrap.sh
  • bin/easybuild.sh
  • bin/pack.sh
  • bin/run.sh
  • bin/status.sh
  • bin/stop.sh
  • bin/triple.sh
  • install.sh
  • manifest/pins.txt
  • README.md
  • run.R
Declared inputs
What each extraction will build.
Generic prefix install (with EasyBuild)

Carried in manifest/ , verbatim - the declared set this extraction will build. It travels in the repo, so a copy taken to a machine with no route back here still knows the full list.

File Records Size
pins.txt 7 entries 1 KB