Skip to content

PoC: Generate hardcoded jupyter kernels on software ingestion (for every arch) - #288

Draft
Crivella wants to merge 9 commits into
EESSI:mainfrom
Crivella:feature-jupyter_kernels
Draft

Crivella wants to merge 9 commits into
EESSI:mainfrom
Crivella:feature-jupyter_kernels

Conversation

@Crivella

@Crivella Crivella commented Oct 7, 2026 •

Copy link
Copy Markdown

Changes

Use the CLI from https://github.com/Crivella/easybuild_jupyter_kernels to generate hardcoded jupyter kernels for every ARCH of the EESSI version being updated by a software tarball ingenstion

NOTES

I am mimicking what the procedure for updating the Lmod caches does to run once on ingestion for every architecture.

There is some trickery required to get the correct module path for the arch we want but still use binaries from the compat layer (eg uname) to allow module load to work.

For now the kernels are stored under
<CVMFS_REPO>/versions/<CURRENT_VERSION>/software/linux/<ARCH_PATH>/.jupyter/kernels
which means that one would have to add the <CVMFS_REPO>/versions/<CURRENT_VERSION>/software/linux/<ARCH_PATH>/.jupyter to their JUPYTER_PATH to pick them up when starting a server

Time for running the new script is similar to the generation of the Lmod caches since it has to run for every arch (unless we want to assume that the paths addede by the various archs are all the same just swapping the arch part of the path)

Other changes

  • Allow ingest-tarball.sh to be ran in a ~dry-run mode where the cvmfs_server calls are mocked (to test eg locally by mounting an overlayfs on top of EESSI)

TODO

  • Possibly also deal with what we would want to do if specific kernels are made available for accelerators
  • Added a backup of existing kernels.
  • Interaction with site's lmodrc and/or host-injections. Not sure there is a way to cover this without dynamically generating the kernel using the EBKernelSpecManager from https://github.com/Crivella/easybuild_jupyter_kernels
  • For now the kernels are SLIM and only includes the required modules to run. The idea is to use something like this script from jupyterlmod which we could vendor ourselves to modify the environment with module load commands inside the notebook/console itself. See EG what i've done for the AITW docker extension https://github.com/AI-TranspWood/jupyter-notebooks/blob/main/notebooks/SurrogateStiffness.ipynb
  • Having 2 kernel with the same version on 2 different TCs would required a different naming scheme. The kernel would still appear and work since the directory also include the TC specific stuff, but the name would appear the same. This would be confusing to users and might cause pre-generated notebook (where you can select a kernel to use by name) to choose the wrong kernel

@Crivella

Crivella commented Oct 7, 2026 •

Copy link
Copy Markdown
Author

Example of octave's kernel produced for neoverse_v1

Details

{
  "argv": [
    "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Python/3.11.3-GCCcore-12.3.0/bin/python",
    "-m",
    "octave_kernel",
    "-f",
    "{connection_file}"
  ],
  "env": {
    "PATH": "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Octave/10.1.0-foss-2023a/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/GraphicsMagick/1.3.45-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Ghostscript/10.01.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/GTK3/3.24.37-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Wayland/1.22.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Gdk-Pixbuf/2.42.10-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/LibTIFF/4.5.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libdeflate/1.18-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/jbigkit/2.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libsndfile/1.2.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/LAME/3.100-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/FLAC/1.4.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/SuiteSparse/7.1.0-foss-2023a/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/HDF5/1.14.0-gompi-2023a/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PyQt5/5.15.10-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Qhull/2020.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Java/11.0.27:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Java/11.0.27/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/gnuplot/5.4.8-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Lua/5.4.6-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Qt5/5.15.10-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/nodejs/18.17.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/JasPer/4.0.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/NSS/3.89.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/NSPR/4.35-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/graphite2/1.3.14-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Pango/1.50.14-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/FriBidi/1.0.12-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/HarfBuzz/5.3.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/ICU/73.2-GCCcore-12.3.0/sbin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/ICU/73.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libgd/2.3.3-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/cairo/1.17.8-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/GLib/2.77.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PCRE2/10.42-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/GLPK/5.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/FLTK/1.3.8-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/xprop/1.2.6-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libjpeg-turbo/2.1.5.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/NASM/2.16.01-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/LLVM/16.0.6-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/zstd/1.5.5-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/lz4/1.9.4-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/gzip/1.12-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/cURL/8.0.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PCRE/8.45-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/X11/20230603-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/fontconfig/2.14.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/freetype/2.13.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Brotli/1.0.9-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libpng/1.6.39-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/expat/2.5.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/jupyter-server/2.7.2-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/IPython/8.14.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/hatchling/1.18.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libxslt/1.1.38-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/ZeroMQ/4.3.4-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Python-bundle-PyPI/2023.06-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/virtualenv/20.23.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Python/3.11.3-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/SQLite/3.42.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Tcl/8.6.13-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/FFTW/3.3.10-GCC-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/FlexiBLAS/3.3.1-GCC-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/OpenMPI/4.1.5-GCC-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/UCC/1.2.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PMIx/4.2.4-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libfabric/1.18.0-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/UCX/1.14.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libevent/2.1.12-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/OpenSSL/1.1/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/hwloc/2.9.1-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/libxml2/2.11.4-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/numactl/2.0.16-GCCcore-12.3.0/bin:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/GCCcore/12.3.0/bin",
    "LD_LIBRARY_PATH": "",
    "PYTHONPATH": "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/octave-kernel/0.36.0-foss-2023a/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/QScintilla/2.14.1-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PyQt5/5.15.10-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/metakernel/0.30.4-GCC-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/jupyter-server/2.7.2-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/tornado/6.3.2-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PyZMQ/25.1.1-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/PyYAML/6.0-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/IPython/8.14.0-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/BeautifulSoup/4.12.2-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/hatchling/1.18.0-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/lxml/4.9.2-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/Python-bundle-PyPI/2023.06-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/virtualenv/20.23.1-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/cryptography/41.0.1-GCCcore-12.3.0/lib/python3.11/site-packages:/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/neoverse_n1/software/cffi/1.15.1-GCCcore-12.3.0/lib/python3.11/site-packages",
    "EBPYTHONPREFIXES": "",
    "JULIA_DEPOT_PATH": "",
    "JULIA_LOAD_PATH": "",
    "EBJULIA_DEPOT_PATH": "",
    "EBJULIA_LOAD_PATH": "",
    "R_LIBS_SITE": ""
  },
  "display_name": "EESSI/2023.06 - Octave (10.1.0)",
  "language": "octave",
  "interrupt_mode": "signal",
  "metadata": {},
  "kernel_protocol_version": ""
}

Files produced by a run on my workstation using overlayfs and the dryrun mode

Details

crivella@crivella-desktop:/tmp/EESSI_mock-vGTWCk9p$ tree -a upper/
upper/
└── 2023.06
    └── software
        └── linux
            ├── aarch64
            │   ├── a64fx
            │   │   └── .jupyter
            │   │       └── kernels
            │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           └── octave-kernel__0.36.0-foss-2023a
            │   │               ├── kernel.json
            │   │               ├── logo-32x32.png
            │   │               └── logo-64x64.png
            │   ├── generic
            │   │   └── .jupyter
            │   │       └── kernels
            │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           └── octave-kernel__0.36.0-foss-2023a
            │   │               ├── kernel.json
            │   │               ├── logo-32x32.png
            │   │               └── logo-64x64.png
            │   ├── neoverse_n1
            │   │   └── .jupyter
            │   │       └── kernels
            │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           └── octave-kernel__0.36.0-foss-2023a
            │   │               ├── kernel.json
            │   │               ├── logo-32x32.png
            │   │               └── logo-64x64.png
            │   ├── neoverse_v1
            │   │   └── .jupyter
            │   │       └── kernels
            │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
            │   │           │   ├── kernel.json
            │   │           │   ├── logo-32x32.png
            │   │           │   ├── logo-64x64.png
            │   │           │   └── logo-svg.svg
            │   │           └── octave-kernel__0.36.0-foss-2023a
            │   │               ├── kernel.json
            │   │               ├── logo-32x32.png
            │   │               └── logo-64x64.png
            │   └── nvidia
            │       └── grace
            │           └── .jupyter
            │               └── kernels
            │                   ├── jupyter-server__2.14.0-GCCcore-13.2.0
            │                   │   ├── kernel.json
            │                   │   ├── logo-32x32.png
            │                   │   ├── logo-64x64.png
            │                   │   └── logo-svg.svg
            │                   ├── jupyter-server__2.7.2-GCCcore-12.3.0
            │                   │   ├── kernel.json
            │                   │   ├── logo-32x32.png
            │                   │   ├── logo-64x64.png
            │                   │   └── logo-svg.svg
            │                   └── octave-kernel__0.36.0-foss-2023a
            │                       ├── kernel.json
            │                       ├── logo-32x32.png
            │                       └── logo-64x64.png
            └── x86_64
                ├── amd
                │   ├── zen2
                │   │   └── .jupyter
                │   │       └── kernels
                │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                │   │           │   ├── kernel.json
                │   │           │   ├── logo-32x32.png
                │   │           │   ├── logo-64x64.png
                │   │           │   └── logo-svg.svg
                │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                │   │           │   ├── kernel.json
                │   │           │   ├── logo-32x32.png
                │   │           │   ├── logo-64x64.png
                │   │           │   └── logo-svg.svg
                │   │           └── octave-kernel__0.36.0-foss-2023a
                │   │               ├── kernel.json
                │   │               ├── logo-32x32.png
                │   │               └── logo-64x64.png
                │   ├── zen3
                │   │   └── .jupyter
                │   │       └── kernels
                │   │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                │   │           │   ├── kernel.json
                │   │           │   ├── logo-32x32.png
                │   │           │   ├── logo-64x64.png
                │   │           │   └── logo-svg.svg
                │   │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                │   │           │   ├── kernel.json
                │   │           │   ├── logo-32x32.png
                │   │           │   ├── logo-64x64.png
                │   │           │   └── logo-svg.svg
                │   │           └── octave-kernel__0.36.0-foss-2023a
                │   │               ├── kernel.json
                │   │               ├── logo-32x32.png
                │   │               └── logo-64x64.png
                │   └── zen4
                │       └── .jupyter
                │           └── kernels
                │               ├── jupyter-server__2.14.0-GCCcore-13.2.0
                │               │   ├── kernel.json
                │               │   ├── logo-32x32.png
                │               │   ├── logo-64x64.png
                │               │   └── logo-svg.svg
                │               ├── jupyter-server__2.7.2-GCCcore-12.3.0
                │               │   ├── kernel.json
                │               │   ├── logo-32x32.png
                │               │   ├── logo-64x64.png
                │               │   └── logo-svg.svg
                │               └── octave-kernel__0.36.0-foss-2023a
                │                   ├── kernel.json
                │                   ├── logo-32x32.png
                │                   └── logo-64x64.png
                ├── generic
                │   └── .jupyter
                │       └── kernels
                │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                │           │   ├── kernel.json
                │           │   ├── logo-32x32.png
                │           │   ├── logo-64x64.png
                │           │   └── logo-svg.svg
                │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                │           │   ├── kernel.json
                │           │   ├── logo-32x32.png
                │           │   ├── logo-64x64.png
                │           │   └── logo-svg.svg
                │           └── octave-kernel__0.36.0-foss-2023a
                │               ├── kernel.json
                │               ├── logo-32x32.png
                │               └── logo-64x64.png
                └── intel
                    ├── cascadelake
                    │   └── .jupyter
                    │       └── kernels
                    │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           └── octave-kernel__0.36.0-foss-2023a
                    │               ├── kernel.json
                    │               ├── logo-32x32.png
                    │               └── logo-64x64.png
                    ├── haswell
                    │   └── .jupyter
                    │       └── kernels
                    │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           └── octave-kernel__0.36.0-foss-2023a
                    │               ├── kernel.json
                    │               ├── logo-32x32.png
                    │               └── logo-64x64.png
                    ├── icelake
                    │   └── .jupyter
                    │       └── kernels
                    │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           └── octave-kernel__0.36.0-foss-2023a
                    │               ├── kernel.json
                    │               ├── logo-32x32.png
                    │               └── logo-64x64.png
                    ├── sapphirerapids
                    │   └── .jupyter
                    │       └── kernels
                    │           ├── jupyter-server__2.14.0-GCCcore-13.2.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           ├── jupyter-server__2.7.2-GCCcore-12.3.0
                    │           │   ├── kernel.json
                    │           │   ├── logo-32x32.png
                    │           │   ├── logo-64x64.png
                    │           │   └── logo-svg.svg
                    │           └── octave-kernel__0.36.0-foss-2023a
                    │               ├── kernel.json
                    │               ├── logo-32x32.png
                    │               └── logo-64x64.png
                    └── skylake_avx512
                        └── .jupyter
                            └── kernels
                                ├── jupyter-server__2.14.0-GCCcore-13.2.0
                                │   ├── kernel.json
                                │   ├── logo-32x32.png
                                │   ├── logo-64x64.png
                                │   └── logo-svg.svg
                                ├── jupyter-server__2.7.2-GCCcore-12.3.0
                                │   ├── kernel.json
                                │   ├── logo-32x32.png
                                │   ├── logo-64x64.png
                                │   └── logo-svg.svg
                                └── octave-kernel__0.36.0-foss-2023a
                                    ├── kernel.json
                                    ├── logo-32x32.png
                                    └── logo-64x64.png

92 directories, 154 files

@Crivella

Crivella commented Oct 8, 2026

Copy link
Copy Markdown
Author

Starting a jupyter lab server from a venv with EESSI loaded

crivella@crivella-desktop:~$ source /cvmfs/software.eessi.io/versions/2023.06/init/bash 
Found EESSI repo @ /cvmfs/software.eessi.io/versions/2023.06!
archdetect says x86_64/intel/haswell
archdetect found no supported accelerator accel/nvidia/cc120, falling back to accel/nvidia/cc120
No matching path found in x86_64/intel/haswell for accelerator detected by archdetect (accel/nvidia/cc120)
Using x86_64/intel/haswell as software subdirectory.
Found Lmod configuration file at /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/lmodrc.lua
Found Lmod SitePackage.lua file at /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/SitePackage.lua
Using /cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/intel/haswell as the site extension directory for installations.
Using /cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/intel/haswell as the site extension directory for accelerated installations.
Adding Lmod site configuration file path () to /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/.lmod/lmodrc.lua
Using /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/modules/all as the directory to be added to MODULEPATH.
Using /cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/intel/haswell/modules/all as the site extension directory to be added to MODULEPATH.
Initializing Lmod...
Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/intel/haswell/modules/all to $MODULEPATH...
Prepending site path /cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/intel/haswell/modules/all to $MODULEPATH...
Environment set up to use EESSI (2023.06), have fun!

crivella@crivella-desktop:~$ workon jupyter
(jupyter) crivella@crivella-desktop:~$ JUPYTER_PATH=$EESSI_SOFTWARE_PATH/.jupyter/ jupyter lab
image

Launching the 2023b python kernel

image

Comment thread scripts/ingest-tarball.sh

source "${venv_dir}/bin/activate" || error "Failed to activate the Python virtual environment in ${venv_dir}!"
pip install --upgrade pip || error "Failed to upgrade pip in the Python virtual environment in ${venv_dir}!"
pip install "${EB_JPT_PACKAGE}[cli] @ git+${EB_JPT_KERNELS_REPO}@${EB_JPT_KERNELS_COMMIT}"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The script is fine, but this alone makes me very concerned that we are opening a security hole in the ingestion process. We talked a bit about this and it may be better to move a variant of this script to https://github.com/EESSI/software-layer-scripts and have a way to trigger that script there.

The trigger would ideally happen in the software-layer, where we could add CI for a push to main which runs the scripts to see if any new/changed kernels would be created (failing CI if they are, or potentially even opening the PR to fix it)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will try and prepare a PoC with the other approach.
The alternative would be to move the pip install part out of the cvmfs transaction block but that leaves the concern of a supply-chain attack on the package/deps themselves.

In the meanwhile i think the other points in the PR on where we want to put the kernels and how to deal the host injection should still be discussed.
The accelerator handling might be solved by moving to software layer since there we are running in the proper environment and any accel-specific module should already be picked up.

Also i guess the general overview of how the frontend looks like (eg kernel display names) is worth discussing

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