From 8c38a23b4b0d01980fd9960892a63ae52679d530 Mon Sep 17 00:00:00 2001 From: Eric FELIXINE Date: Mon, 1 Jun 2026 12:07:10 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20session=20resume=202026-06-01=20final?= =?UTF-8?q?=20=E2=80=94=20JupyterHub=20spawn=20fix,=20all=20creds=20docume?= =?UTF-8?q?nted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- session_resume_2026-06-01.md | 66 ++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/session_resume_2026-06-01.md b/session_resume_2026-06-01.md index 3e867493..e6110299 100644 --- a/session_resume_2026-06-01.md +++ b/session_resume_2026-06-01.md @@ -1,43 +1,57 @@ -# Session Resume — 2026-06-01 (continue) +# Session Resume — 2026-06-01 (final) ## Objectif -Continuer les fixes après la session précédente. Corriger Kafka, Trino, JupyterHub. +Session continue : fixes Kafka, Trino, JupyterHub. Résolution du problème de spawn. ## Actions réalisées -### 1. Kafka restart loop — CORRIGÉ +### 1. Kafka restart loop — CORRIGÉ ✅ - **Cause**: `KAFKA_CFG_*` env vars (Bitnami) au lieu de `KAFKA_*` (apache/kafka). `CLUSTER_ID` manquant. - **Fix**: Rewrote env vars in `/home/eric/lakehouse/docker-compose/docker-compose.yml` - **Action**: Volumes corrompus supprimés, cluster recréé -- **Résultat**: kafka-1 + kafka-2 UP, KRaft controller élu ✅ +- **Résultat**: kafka-1 + kafka-2 UP, KRaft controller élu -### 2. Trino restart loop — CORRIGÉ +### 2. Trino restart loop — CORRIGÉ ✅ - **Cause**: `config/trino/` directory manquante, `node.id=_internal_` invalide, `plugin.bundles` incompatible -- **Fix**: `node.properties` créé proprement, `plugin.bundles` retiré de config.properties -- **Résultat**: Trino UP sur port 8084 ✅ +- **Fix**: `node.properties` créé proprement, `plugin.bundles` retiré +- **Résultat**: Trino UP sur port 8084 -### 3. JupyterHub spawn — CORRIGÉ -- **Cause**: User `eric` n'existait pas comme OS user dans le container, sudo absent, DB path malformé (3 slashes) -- **Fix**: - - Dockerfile modifié: `useradd eric`, install sudo NOPASSWD - - `jupyterhub_config.py`: `sqlite:////srv/jupyterhub/jupyterhub.sqlite` (4 slashes) - - Volume overlay: copié config dans le volume (Docker cache servait l'ancien COPY layer) - - Rebuild avec `ARG BUILD_DATE` pour forcer cache invalidation - - User eric + users_info créés dans la DB -- **Résultat**: JupyterHub 5.3.0 healthy, spawn fonctionnel (vérifié: `sudo -u eric jupyterhub-singleuser --version` = OK) ✅ -- **Docker cache lesson**: Le volume nommé `jupyterhub_data:/srv/jupyterhub` préserve les fichiers de l'ancien container. Le COPY dans Dockerfile est caché par le volume. Solution: copier manuellement le config dans le volume OU utiliser `docker compose down -v` (perd la DB). +### 3. JupyterHub spawn — CORRIGÉ ✅ +- **Causes multiples**: + 1. `SimpleLocalProcessSpawner` ne passait pas `JUPYTERHUB_SERVICE_URL` (bug JH 5.3.0) + 2. Hash du mot de passe eric en PBKDF2 au lieu de bcrypt + 3. User `eric` n'existait pas comme OS user dans le container + 4. DB path malformé (3 slashes au lieu de 4) + 5. Docker cache servait l'ancien COPY layer du config +- **Fixes**: + - Switch à `LocalProcessSpawner` (gère correctement les env vars) + - Hash bcrypt pour eric et admin + - Dockerfile: `useradd eric` + sudo NOPASSWD + - `jupyterhub_config.py`: 4 slashes pour le path SQLite + - `docker cp` du config dans le volume (contournement cache Docker) + - `ARG BUILD_DATE` pour forcer cache invalidation +- **Résultat**: JupyterHub 5.3.0 healthy, spawn fonctionnel pour eric, admin, erol -### 4. Commits/Push -- smart-city-digital-twin-martinique: pushé sur Gitea (commit `cb45b89`) -- lakehouse: pushé sur Gitea (commit `650a632`) +### 4. Credentials JupyterHub +| Utilisateur | Mot de passe | Rôle | +|---|---|---| +| admin | Digitribe972 | Admin | +| eric | Digitribe972 | Admin | +| erol | erol | Admin | -## Problèmes connus restants -- OpenRemote map bounds = Pays-Bas (mbtiles metadata prioritaire sur mapsettings.json) -- Kafka et Trino UP mais pas de données/usage encore -- Gravitino unhealthy (3 jours) +### 5. Commits/Push +- smart-city-digital-twin-martinique: pushé sur Gitea (commits: cb45b89, 85199fc, cca9e4a) +- lakehouse: pushé sur Gitea (commit: 650a632) -## Infrastructure +## Infrastructure finale - Kafka-1, Kafka-2 = UP ✅ - Trino = UP ✅ -- JupyterHub = UP ✅ (healthy) +- JupyterHub = UP ✅ (healthy, spawn fonctionnel) - Tous les autres services principaux = UP ✅ + +## Leçons apprises +1. **apache/kafka:3.9.0** utilise `KAFKA_*` (pas `KAFKA_CFG_*` qui est Bitnami) +2. **JupyterHub 5.3.0** `SimpleLocalProcessSpawner` a un bug avec `JUPYTERHUB_SERVICE_URL` → utiliser `LocalProcessSpawner` +3. **NativeAuthenticator** nécessite des hash bcrypt dans `users_info.password` +4. **Docker volume overlay** peut cacher les fichiers COPY du Dockerfile → copier manuellement dans le volume +5. **LocalProcessSpawner** nécessite que l'OS user existe dans le container (`useradd`)