Repository navigation
Modernize to Ubuntu 24.04, Python 3.12, JupyterLab 4, CUDA 12 - #133
Open
Avesh-code wants to merge 1 commit into
Open
Avesh-code wants to merge 1 commit into
Avesh-code wants to merge 1 commit into
Conversation
…sted Docker and Kubernetes use Brings the workspace from its 2021 baseline to current versions and fixes everything found by building and running it end to end. Details: UPDATE.md (modernization), CHANGE.md (all changes), BUILD.md (building), DOCKER_IN_DOCKER.md (nested Docker). Platform - Ubuntu 20.04 -> 24.04, Python 3.8 -> 3.12 (Miniforge instead of Miniconda), JupyterLab 3 -> 4, Notebook 6 -> 7, CUDA 11.2 -> 12.6 with cuDNN 9, Node 24, current ML libraries; packages with no maintained release dropped or replaced by their successors. - Build fixes for 24.04: apt sources wiped by clean-layer.sh, removed packages, git:// clones, changed archive formats, sslh --ssl -> --tls, removed pip/spaCy options, GPU flavor cuDNN/OpenBLAS packages. Workspace - Tooling Jupyter extension ported to jupyter_server; launcher tiles for VS Code, VNC, Ungit, Filebrowser, Netdata, Glances (jupyter_app_launcher). - VS Code (code-server 4) behind the /tools/vscode/ proxy: asset routing and WebSocket Host header fixes. - Jupyter and VS Code run as a real Linux user named after WORKSPACE_AUTH_USER, with sudo; working oh-my-zsh and pyenv. - noVNC 1.7 fixes; VNC desktop as the landing page with Chrome and shortcuts; VNC_PW="" disables the VNC password (VNC and noVNC bound to localhost); a stuck-password bug fixed. - login.log / history_audit.log for auditing; nginx no longer fails to start on bad /workspace permissions. - OMP_NUM_THREADS follows the container's CPU limit on cgroup v2. Nested Docker - Full Docker Engine inside the workspace: fuse-overlayfs (CPU) or vfs (GPU, keeps `docker run --gpus` working), bridge and address pool moved off 172.17.0.0/16, correct --default-address-pool flag. - Runs unprivileged on Kubernetes (capabilities + cgroup v2 setup) or under sysbox with docker compose. Running behind JupyterHub (no effect standalone) - jupyterhub client pinned to 5.x; jupyterhub-singleuser moved off sslh's port; nginx's tool login check works with JupyterHub >= 4.1 cookies and no longer loops; launcher links follow the base URL.
Avesh-code
requested review from
JanKalkan,
lukasmasuch and
raethlein
as code owners
October 23, 2026 04:35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This brings ml-workspace from its 2021 baseline to current versions, and fixes everything that came
up when building and running the result end to end. It's one large commit; I'm happy to split it
into smaller PRs (e.g. modernization first, then nested Docker) if that's easier to review.
What's in it
licensing), JupyterLab 4 / Notebook 7, CUDA 12.6 + cuDNN 9, Node 24, current ML libraries.
Packages with no maintained release were dropped or replaced by their successors.
Full version table and build fixes:
UPDATE.md.jupyter_server; launcher tiles for the tools(JupyterLab 4 has no nbextensions); code-server 4 behind
/tools/vscode/; Jupyter and VS Code runas a real user named after
WORKSPACE_AUTH_USER; noVNC 1.7 fixes;OMP_NUM_THREADSfrom thecgroup v2 CPU limit.
under sysbox (
DOCKER_IN_DOCKER.md).CHANGE.mdlists every change;BUILD.mddescribes building both images.Behaviour changes to be aware of
UPDATE.md)./now opens the VNC desktop instead of Jupyter.VNC_PW=""now disables the VNC password (VNC is bound to localhost and reached via theauthenticated nginx proxy); unset still means the default password.
WORKSPACE_AUTH_USERuser rather than root.Testing
full) and GPU flavors; the CPU image started and all supervisor servicesran; JupyterLab, VS Code and the VNC desktop used in a browser.
nvidia-smiworking; nesteddocker runworking inside the workspace.minimalandlightflavors,docker run --gpusin nested Docker, and theoptional installer scripts under
resources/tools/.