Bug#1106727: unblock: jupyterhub/5.2.1+ds1-4
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: jupyterhub@packages.debian.org
Control: affects -1 + src:jupyterhub
User: release.debian.org@packages.debian.org
Usertags: unblock
Please unblock package jupyterhub
It fixed a bunch of bugs in order to have a working jupyterhub in trixie.
- Added the alembic dependency
- rebuilt the javascript part in order to provide a working frontend for users.
- use ucf to deal with the jupyterhub config file.
It passe all tests on salsa.debian.org except the reproducible test.
for now the package do not have the test suite activated since a dependency is missing.
https://salsa.debian.org/python-team/packages/jupyterhub/-/pipelines/871348
With these changes, it is now possible to start a jupyterhub (by default it accepts no connetion but listen on all port)
[ Impact ]
(What is the impact for the user if the unblock isn't granted?)
a non working jupyterhub service.
[ Tests ]
(What automated or manual tests cover the affected code?)
I tested all this on my computer and it is in use in our institut with those modifications.
[ Risks ]
(Discussion of the risks involved. E.g. code is trivial or
complex, key package vs leaf package, alternatives available.)
the package is a leaf package, there is no change in the upstream code, only packaging modifications.
[ Checklist ]
[X] all changes are documented in the d/changelog
[X] I reviewed all changes and I approve them
[X] attach debdiff against the package in testing
thanks for considering
unblock jupyterhub/5.2.1+ds1-4
diff -Nru jupyterhub-5.2.1+ds1/debian/changelog jupyterhub-5.2.1+ds1/debian/changelog
--- jupyterhub-5.2.1+ds1/debian/changelog 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/changelog 2025-05-28 11:40:25.000000000 +0200
@@ -1,3 +1,23 @@
+jupyterhub (5.2.1+ds1-4) unstable; urgency=medium
+
+ * use ucf in order to manage the config file
+ * Bug fix: "config.yaml config file that comes in package is never
+ read", thanks to Guillaume Knispel (Closes: #1038110).
+
+ -- Picca Frédéric-Emmanuel <picca@debian.org> Wed, 28 May 2025 11:40:25 +0200
+
+jupyterhub (5.2.1+ds1-3) unstable; urgency=medium
+
+ * Bug fix: "missing python3-alembic dependency", thanks to Picca
+ Frédéric-Emmanuel (Closes: #1104404).
+ * Bug fix: "move from twitter-bootstrap{3,4} to bootstrap-html (v5)",
+ thanks to santiagorr@riseup.net</a>; (Closes: #1088461).
+ * Bug fix: "Could not open static file
+ '/usr/share/jupyterhub/static/components/bootstrap/dist/js/bootstrap>",
+ thanks to Picca Frédéric-Emmanuel (Closes: #1104588).
+
+ -- Picca Frédéric-Emmanuel <picca@debian.org> Wed, 07 May 2025 18:14:37 +0200
+
jupyterhub (5.2.1+ds1-2) unstable; urgency=medium
* Team upload.
diff -Nru jupyterhub-5.2.1+ds1/debian/control jupyterhub-5.2.1+ds1/debian/control
--- jupyterhub-5.2.1+ds1/debian/control 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/control 2025-05-28 11:40:25.000000000 +0200
@@ -9,6 +9,14 @@
debhelper-compat (= 13),
dh-sequence-python3,
help2man,
+ libjs-moment,
+ node-bootstrap,
+ node-fortawesome-fontawesome-free,
+ node-jquery,
+ node-moment,
+ node-node-sass,
+ node-requirejs,
+ pkg-js-tools,
python3-alembic,
python3-all,
python3-async-generator,
@@ -39,8 +47,9 @@
Package: jupyterhub
Architecture: all
Depends:
+ alembic,
fonts-font-awesome,
- libjs-bootstrap,
+ libjs-bootstrap5,
libjs-jquery,
libjs-prototype,
libjs-requirejs,
diff -Nru jupyterhub-5.2.1+ds1/debian/dirs jupyterhub-5.2.1+ds1/debian/dirs
--- jupyterhub-5.2.1+ds1/debian/dirs 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/dirs 2025-05-28 11:40:25.000000000 +0200
@@ -1,2 +1,2 @@
-/etc/jupyterhub/config/jupyterhub_config.d
+/etc/jupyterhub
/var/lib/jupyterhub
diff -Nru jupyterhub-5.2.1+ds1/debian/install jupyterhub-5.2.1+ds1/debian/install
--- jupyterhub-5.2.1+ds1/debian/install 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/install 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-50-use-configurable-http-proxy.py /etc/jupyterhub/config/jupyterhub_config.d
-config.yaml /etc/jupyterhub/config/jupyterhub_config.d
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript 1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript 2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,2 @@
+rm_conffile /etc/jupyterhub/config/jupyterhub_config.d/50-use-configurable-http-proxy.py 5.2.1+ds1-4~
+rm_conffile /etc/jupyterhub/config/jupyterhub_config.d/config.yaml 5.2.1+ds1-4~
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.service jupyterhub-5.2.1+ds1/debian/jupyterhub.service
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.service 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.service 2025-05-28 11:40:25.000000000 +0200
@@ -8,7 +8,7 @@
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
-ExecStart=/usr/bin/python3 -m jupyterhub.app -f /etc/jupyterhub/config/jupyterhub_config.d/config.yaml --upgrade-db
+ExecStart=/usr/bin/python3 -m jupyterhub.app -f /etc/jupyterhub/jupyterhub_config.py --upgrade-db
[Install]
WantedBy=multi-user.target
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf 1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf 2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1 @@
+/usr/share/jupyterhub/jupyterhub_config.py /etc/jupyterhub/jupyterhub_config.py
\ Pas de fin de ligne à la fin du fichier
diff -Nru jupyterhub-5.2.1+ds1/debian/links jupyterhub-5.2.1+ds1/debian/links
--- jupyterhub-5.2.1+ds1/debian/links 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/links 2025-05-28 11:40:25.000000000 +0200
@@ -1,8 +1,4 @@
-/usr/share/fonts/opentype/font-awesome/FontAwesome.otf /usr/share/jupyterhub/static/components/font-awesome/fonts/FontAwesome.otf
-/usr/share/fonts/truetype/font-awesome/fontawesome-webfont.ttf /usr/share/jupyterhub/static/components/font-awesome/fonts/fontawesome-webfont.ttf
-/usr/share/javascript/bootstrap /usr/share/jupyterhub/static/components/bootstrap
-/usr/share/javascript/bootstrap/css/bootstrap.css.map /usr/share/jupyterhub/static/css/style.min.css.map
-/usr/share/javascript/bootstrap/css/bootstrap.min.css /usr/share/jupyterhub/static/css/style.min.css
-/usr/share/javascript/jquery /usr/share/jupyterhub/static/components/jquery
+/usr/share/javascript/bootstrap5 /usr/share/jupyterhub/static/components/bootstrap/dist
+/usr/share/javascript/jquery /usr/share/jupyterhub/static/components/jquery/dist
/usr/share/javascript/moment /usr/share/jupyterhub/static/components/moment
/usr/share/javascript/requirejs /usr/share/jupyterhub/static/components/requirejs
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch 1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-From: Roland Mas <lolando@debian.org>
-Date: Wed, 2 Jun 2021 16:06:35 +0200
-Subject: Add empty config file
-
----
- config.yaml | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 config.yaml
-
-diff --git a/config.yaml b/config.yaml
-new file mode 100644
-index 0000000..ed97d53
---- /dev/null
-+++ b/config.yaml
-@@ -0,0 +1 @@
-+---
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch 1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-From: Roland Mas <lolando@debian.org>
-Date: Tue, 21 Sep 2021 12:08:23 +0200
-Subject: Use configurable-http-proxy instead of Traefik
-
----
- 50-use-configurable-http-proxy.py | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 50-use-configurable-http-proxy.py
-
-diff --git a/50-use-configurable-http-proxy.py b/50-use-configurable-http-proxy.py
-new file mode 100644
-index 0000000..2ae0c29
---- /dev/null
-+++ b/50-use-configurable-http-proxy.py
-@@ -0,0 +1 @@
-+c.JupyterHub.proxy_class = 'jupyterhub.proxy.ConfigurableHTTPProxy'
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch 2025-05-28 11:40:25.000000000 +0200
@@ -3,21 +3,70 @@
Subject: Do not use npm even if available during build
---
- setup.py | 4 ++++
- 1 file changed, 4 insertions(+)
+ setup.py | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/setup.py b/setup.py
-index 611b822..736f958 100755
+index 611b822..20549c0 100755
--- a/setup.py
+++ b/setup.py
-@@ -85,6 +85,10 @@ class NPM(BaseCommand):
+@@ -28,6 +28,8 @@ static = pjoin(share_jupyterhub, 'static')
+
+ is_repo = os.path.exists(pjoin(here, '.git'))
+
++NPM_PATH="pkgjs"
++
+ # Build basic package data, etc.
+
+
+@@ -85,6 +87,9 @@ class NPM(BaseCommand):
bower_dir = pjoin(static, 'components')
def should_run(self):
-+ return False
-+ if not shutil.which('npm'):
++ if not shutil.which(NPM_PATH):
+ print("npm unavailable", file=sys.stderr)
+ return False
if not os.path.exists(self.bower_dir):
return True
if not os.path.exists(self.node_modules):
+@@ -100,7 +105,7 @@ class NPM(BaseCommand):
+
+ print("installing js dependencies with npm")
+ check_call(
+- ['npm', 'install', '--progress=false', '--unsafe-perm'],
++ [NPM_PATH, 'install', '--progress=false', '--unsafe-perm'],
+ cwd=here,
+ shell=shell,
+ )
+@@ -153,7 +158,7 @@ class CSS(BaseCommand):
+ self.run_command('js')
+ print("Building css")
+
+- args = ['npm', 'run', 'css']
++ args = [NPM_PATH, 'run', 'css']
+ try:
+ check_call(args, cwd=here, shell=shell)
+ except OSError as e:
+@@ -190,19 +195,19 @@ class JSX(BaseCommand):
+ print("JSX admin app is up to date")
+ return
+
+- if not shutil.which('npm'):
++ if not shutil.which(NPM_PATH):
+ raise Exception('JSX needs to be updated but npm is not installed')
+
+ print("Installing JSX admin app requirements")
+ check_call(
+- ['npm', 'install', '--progress=false', '--unsafe-perm'],
++ [NPM_PATH, 'install', '--progress=false', '--unsafe-perm'],
+ cwd=self.jsx_dir,
+ shell=shell,
+ )
+
+ print("Building JSX admin app")
+ check_call(
+- ["npm", "run", "build"],
++ [NPM_PATH, "run", "build"],
+ cwd=self.jsx_dir,
+ shell=shell,
+ )
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch 1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch 2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,21 @@
+From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= <picca@debian.org>
+Date: Wed, 7 May 2025 16:52:43 +0200
+Subject: use node-sass
+
+---
+ package.json | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package.json b/package.json
+index 8b651bf..24efde5 100644
+--- a/package.json
++++ b/package.json
+@@ -10,7 +10,7 @@
+ },
+ "scripts": {
+ "postinstall": "python3 ./bower-lite",
+- "css": "sass --style compressed -I share/jupyterhub/static/components --source-map share/jupyterhub/static/scss/style.scss:share/jupyterhub/static/css/style.min.css",
++ "css": "node-sass --output-style compressed --include-path share/jupyterhub/static/components --source-map=true share/jupyterhub/static/scss/style.scss > share/jupyterhub/static/css/style.min.css",
+ "build:watch": "npm run css -- --watch"
+ },
+ "devDependencies": {
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/series jupyterhub-5.2.1+ds1/debian/patches/series
--- jupyterhub-5.2.1+ds1/debian/patches/series 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/series 2025-05-28 11:40:25.000000000 +0200
@@ -1,3 +1,2 @@
-0001-Add-empty-config-file.patch
-0002-Use-configurable-http-proxy-instead-of-Traefik.patch
0003-Do-not-use-npm-even-if-available-during-build.patch
+0004-use-node-sass.patch
diff -Nru jupyterhub-5.2.1+ds1/debian/postinst jupyterhub-5.2.1+ds1/debian/postinst
--- jupyterhub-5.2.1+ds1/debian/postinst 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/postinst 2025-05-28 11:40:25.000000000 +0200
@@ -1,42 +1,16 @@
#!/bin/sh
-# postinst script
-#
-# see: dh_installdeb(1)
-
set -e
-# summary of how this script can be called:
-# * <postinst> `configure' <most-recently-configured-version>
-# * <old-postinst> `abort-upgrade' <new version>
-# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-# <new-version>
-# * <postinst> `abort-remove'
-# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-# <failed-install-package> <version> `removing'
-# <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
#DEBHELPER#
-case "$1" in
- configure)
- config_file=/etc/jupyterhub/jupyterhub_config.py
- if ! [ -e "$config_file" ] ; then
- jupyterhub --generate-config -f "$config_file"
- fi
- ;;
-
- abort-upgrade|abort-remove|abort-deconfigure)
- ;;
-
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 1
- ;;
-esac
-
-exit 0
+if [ "${1}" = "configure" ] && [ ! -z "${2}" ]; then
+ if dpkg --compare-versions ${2} le "5.2.1+ds1-4~"; then
+ if [ -d /etc/jupyterhub/config/jupyterhub_config.d ]; then
+ rmdir --ignore-fail-on-non-empty -p /etc/jupyterhub/config/jupyterhub_config.d
+ fi
+
+ if [ -d /etc/jupyterhub/config ]; then
+ rmdir --ignore-fail-on-non-empty -p /etc/jupyterhub/config
+ fi
+ fi
+fi
diff -Nru jupyterhub-5.2.1+ds1/debian/rules jupyterhub-5.2.1+ds1/debian/rules
--- jupyterhub-5.2.1+ds1/debian/rules 2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/rules 2025-05-28 11:40:25.000000000 +0200
@@ -1,15 +1,23 @@
#!/usr/bin/make -f
-# This file was automatically generated by stdeb 0.10.0 at
-# Wed, 26 May 2021 19:12:50 +0200
-export PYBUILD_NAME=jupyterhub
PYVERS=$(shell py3versions -d)
PYPATH=debian/jupyterhub/usr/lib/$(PYVERS)/dist-packages
+
+export PYBUILD_NAME=jupyterhub
+
%:
dh $@ --buildsystem=pybuild
+execute_before_dh_auto_build:
+ pkgjs-install-minimal
+ -cp -fd node_modules/* share/jupyterhub/static/components
+ mkdir -p share/jupyterhub/static/css
+
execute_after_dh_auto_install:
PYTHONPATH=$(PYPATH) help2man --output=jupyterhub.1 --name="Multi-user server for Jupyter notebooks" --version-string=$$(dpkg-parsechangelog -S Version | sed s/-[^-]*$$//) debian/jupyterhub/usr/bin/jupyterhub
PYTHONPATH=$(PYPATH) help2man --output=jupyterhub-singleuser.1 --name="Single-user server for Jupyter notebooks" --version-string=$$(dpkg-parsechangelog -S Version | sed s/-[^-]*$$//) debian/jupyterhub/usr/bin/jupyterhub-singleuser
+ # generate and install the config file
+ PYTHONPATH=$(PYPATH) debian/jupyterhub/usr/bin/jupyterhub --generate-config -f debian/jupyterhub/usr/share/jupyterhub/jupyterhub_config.py
+
override_dh_auto_test:
diff -Nru jupyterhub-5.2.1+ds1/debian/salsa-ci.yml jupyterhub-5.2.1+ds1/debian/salsa-ci.yml
--- jupyterhub-5.2.1+ds1/debian/salsa-ci.yml 1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/salsa-ci.yml 2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,3 @@
+---
+include:
+ - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
\ Pas de fin de ligne à la fin du fichier
Reply to: