--- /srv/rebuilderd/tmp/rebuilderdgW8SBC/inputs/jupyterhub_5.2.1+ds1-4_all.deb +++ /srv/rebuilderd/tmp/rebuilderdgW8SBC/out/jupyterhub_5.2.1+ds1-4_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-05-28 09:40:25.000000 debian-binary │ --rw-r--r-- 0 0 0 59496 2025-05-28 09:40:25.000000 control.tar.xz │ --rw-r--r-- 0 0 0 1962752 2025-05-28 09:40:25.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 59480 2025-05-28 09:40:25.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 1962320 2025-05-28 09:40:25.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -146,15 +146,15 @@ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/doc/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/ │ │ │ -rw-r--r-- 0 root (0) root (0) 1679 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/README.Debian.md │ │ │ -rw-r--r-- 0 root (0) root (0) 3837 2024-10-21 09:35:53.000000 ./usr/share/doc/jupyterhub/README.md.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 1363 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/changelog.Debian.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 2121 2025-05-28 09:40:25.000000 ./usr/share/doc/jupyterhub/copyright │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/ │ │ │ --rw-r--r-- 0 root (0) root (0) 98384 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ +-rw-r--r-- 0 root (0) root (0) 98386 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/ │ │ │ -rw-r--r-- 0 root (0) root (0) 7427 2024-10-21 09:36:01.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/LICENSE.txt │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-05-28 09:40:25.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/css/ │ │ │ -rw-r--r-- 0 root (0) root (0) 132658 2024-10-21 09:36:00.000000 ./usr/share/jupyterhub/static/components/@fortawesome/fontawesome-free/css/all.css │ │ ├── ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ @@ -997,842 +997,14 @@ │ │ │ # │ │ │ # It should return the new URL to redirect to, or None to preserve current │ │ │ # behavior. │ │ │ # Default: None │ │ │ # c.JupyterHub.user_redirect_hook = None │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ -# Spawner(LoggingConfigurable) configuration │ │ │ -#------------------------------------------------------------------------------ │ │ │ -## Base class for spawning single-user notebook servers. │ │ │ -# │ │ │ -# Subclass this, and override the following methods: │ │ │ -# │ │ │ -# - load_state - get_state - start - stop - poll │ │ │ -# │ │ │ -# As JupyterHub supports multiple users, an instance of the Spawner subclass is │ │ │ -# created for each user. If there are 20 JupyterHub users, there will be 20 │ │ │ -# instances of the subclass. │ │ │ - │ │ │ -## Extra arguments to be passed to the single-user server. │ │ │ -# │ │ │ -# Some spawners allow shell-style expansion here, allowing you to use │ │ │ -# environment variables here. Most, including the default, do not. Consult the │ │ │ -# documentation for your spawner to verify! │ │ │ -# Default: [] │ │ │ -# c.Spawner.args = [] │ │ │ - │ │ │ -## An optional hook function that you can implement to pass `auth_state` to the │ │ │ -# spawner after it has been initialized but before it starts. The `auth_state` │ │ │ -# dictionary may be set by the `.authenticate()` method of the authenticator. │ │ │ -# This hook enables you to pass some or all of that information to your spawner. │ │ │ -# │ │ │ -# Example:: │ │ │ -# │ │ │ -# def userdata_hook(spawner, auth_state): │ │ │ -# spawner.userdata = auth_state["userdata"] │ │ │ -# │ │ │ -# c.Spawner.auth_state_hook = userdata_hook │ │ │ -# Default: None │ │ │ -# c.Spawner.auth_state_hook = None │ │ │ - │ │ │ -## The command used for starting the single-user server. │ │ │ -# │ │ │ -# Provide either a string or a list containing the path to the startup script │ │ │ -# command. Extra arguments, other than this path, should be provided via `args`. │ │ │ -# │ │ │ -# This is usually set if you want to start the single-user server in a different │ │ │ -# python environment (with virtualenv/conda) than JupyterHub itself. │ │ │ -# │ │ │ -# Some spawners allow shell-style expansion here, allowing you to use │ │ │ -# environment variables. Most, including the default, do not. Consult the │ │ │ -# documentation for your spawner to verify! │ │ │ -# Default: ['jupyterhub-singleuser'] │ │ │ -# c.Spawner.cmd = ['jupyterhub-singleuser'] │ │ │ - │ │ │ -## Maximum number of consecutive failures to allow before shutting down │ │ │ -# JupyterHub. │ │ │ -# │ │ │ -# This helps JupyterHub recover from a certain class of problem preventing │ │ │ -# launch in contexts where the Hub is automatically restarted (e.g. systemd, │ │ │ -# docker, kubernetes). │ │ │ -# │ │ │ -# A limit of 0 means no limit and consecutive failures will not be tracked. │ │ │ -# Default: 0 │ │ │ -# c.Spawner.consecutive_failure_limit = 0 │ │ │ - │ │ │ -## Minimum number of cpu-cores a single-user notebook server is guaranteed to │ │ │ -# have available. │ │ │ -# │ │ │ -# If this value is set to 0.5, allows use of 50% of one CPU. If this value is │ │ │ -# set to 2, allows use of up to 2 CPUs. │ │ │ -# │ │ │ -# **This is a configuration setting. Your spawner must implement support for the │ │ │ -# limit to work.** The default spawner, `LocalProcessSpawner`, does **not** │ │ │ -# implement this support. A custom spawner **must** add support for this setting │ │ │ -# for it to be enforced. │ │ │ -# Default: None │ │ │ -# c.Spawner.cpu_guarantee = None │ │ │ - │ │ │ -## Maximum number of cpu-cores a single-user notebook server is allowed to use. │ │ │ -# │ │ │ -# If this value is set to 0.5, allows use of 50% of one CPU. If this value is │ │ │ -# set to 2, allows use of up to 2 CPUs. │ │ │ -# │ │ │ -# The single-user notebook server will never be scheduled by the kernel to use │ │ │ -# more cpu-cores than this. There is no guarantee that it can access this many │ │ │ -# cpu-cores. │ │ │ -# │ │ │ -# **This is a configuration setting. Your spawner must implement support for the │ │ │ -# limit to work.** The default spawner, `LocalProcessSpawner`, does **not** │ │ │ -# implement this support. A custom spawner **must** add support for this setting │ │ │ -# for it to be enforced. │ │ │ -# Default: None │ │ │ -# c.Spawner.cpu_limit = None │ │ │ - │ │ │ -## Enable debug-logging of the single-user server │ │ │ -# Default: False │ │ │ -# c.Spawner.debug = False │ │ │ - │ │ │ -## The URL the single-user server should start in. │ │ │ -# │ │ │ -# `{username}` will be expanded to the user's username │ │ │ -# │ │ │ -# Example uses: │ │ │ -# │ │ │ -# - You can set `notebook_dir` to `/` and `default_url` to `/tree/home/{username}` to allow people to │ │ │ -# navigate the whole filesystem from their notebook server, but still start in their home directory. │ │ │ -# - Start with `/notebooks` instead of `/tree` if `default_url` points to a notebook instead of a directory. │ │ │ -# - You can set this to `/lab` to have JupyterLab start by default, rather than Jupyter Notebook. │ │ │ -# Default: '' │ │ │ -# c.Spawner.default_url = '' │ │ │ - │ │ │ -## Disable per-user configuration of single-user servers. │ │ │ -# │ │ │ -# When starting the user's single-user server, any config file found in the │ │ │ -# user's $HOME directory will be ignored. │ │ │ -# │ │ │ -# Note: a user could circumvent this if the user modifies their Python │ │ │ -# environment, such as when they have their own conda environments / virtualenvs │ │ │ -# / containers. │ │ │ -# Default: False │ │ │ -# c.Spawner.disable_user_config = False │ │ │ - │ │ │ -## List of environment variables for the single-user server to inherit from the │ │ │ -# JupyterHub process. │ │ │ -# │ │ │ -# This list is used to ensure that sensitive information in the JupyterHub │ │ │ -# process's environment (such as `CONFIGPROXY_AUTH_TOKEN`) is not passed to the │ │ │ -# single-user server's process. │ │ │ -# Default: ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ -# c.Spawner.env_keep = ['JUPYTERHUB_SINGLEUSER_APP'] │ │ │ - │ │ │ -## Extra environment variables to set for the single-user server's process. │ │ │ -# │ │ │ -# Environment variables that end up in the single-user server's process come from 3 sources: │ │ │ -# - This `environment` configurable │ │ │ -# - The JupyterHub process' environment variables that are listed in `env_keep` │ │ │ -# - Variables to establish contact between the single-user notebook and the hub (such as JUPYTERHUB_API_TOKEN) │ │ │ -# │ │ │ -# The `environment` configurable should be set by JupyterHub administrators to │ │ │ -# add installation specific environment variables. It is a dict where the key is │ │ │ -# the name of the environment variable, and the value can be a string or a │ │ │ -# callable. If it is a callable, it will be called with one parameter (the │ │ │ -# spawner instance), and should return a string fairly quickly (no blocking │ │ │ -# operations please!). │ │ │ -# │ │ │ -# Note that the spawner class' interface is not guaranteed to be exactly same │ │ │ -# across upgrades, so if you are using the callable take care to verify it │ │ │ -# continues to work after upgrades! │ │ │ -# │ │ │ -# .. versionchanged:: 1.2 │ │ │ -# environment from this configuration has highest priority, │ │ │ -# allowing override of 'default' env variables, │ │ │ -# such as JUPYTERHUB_API_URL. │ │ │ -# Default: {} │ │ │ -# c.Spawner.environment = {} │ │ │ - │ │ │ -## Override specific traitlets based on group membership of the user. │ │ │ -# │ │ │ -# This can be a dict, or a callable that returns a dict. The keys of the dict │ │ │ -# are *only* used for lexicographical sorting, to guarantee consistent ordering │ │ │ -# of the overrides. If it is a callable, it may be async, and will be passed one │ │ │ -# parameter - the spawner instance. It should return a dictionary. │ │ │ -# │ │ │ -# The values of the dict are dicts with the following keys: │ │ │ -# │ │ │ -# - `"groups"` - If the user belongs to *any* of these groups, these overrides are │ │ │ -# applied to their server before spawning. │ │ │ -# - `"spawner_override"` - a dictionary with overrides to apply to the Spawner │ │ │ -# settings. Each value can be either the final value to change or a callable that │ │ │ -# take the `Spawner` instance as parameter and returns the final value. │ │ │ -# If the traitlet being overriden is a *dictionary*, the dictionary │ │ │ -# will be *recursively updated*, rather than overriden. If you want to │ │ │ -# remove a key, set its value to `None`. │ │ │ -# │ │ │ -# Example: │ │ │ -# │ │ │ -# The following example config will: │ │ │ -# │ │ │ -# 1. Add the environment variable "AM_I_GROUP_ALPHA" to everyone in the "group-alpha" group │ │ │ -# 2. Add the environment variable "AM_I_GROUP_BETA" to everyone in the "group-beta" group. │ │ │ -# If a user is part of both "group-beta" and "group-alpha", they will get *both* these env │ │ │ -# vars, due to the dictionary merging functionality. │ │ │ -# 3. Add a higher memory limit for everyone in the "group-beta" group. │ │ │ -# │ │ │ -# :: │ │ │ -# │ │ │ -# c.Spawner.group_overrides = { │ │ │ -# "01-group-alpha-env-add": { │ │ │ -# "groups": ["group-alpha"], │ │ │ -# "spawner_override": {"environment": {"AM_I_GROUP_ALPHA": "yes"}}, │ │ │ -# }, │ │ │ -# "02-group-beta-env-add": { │ │ │ -# "groups": ["group-beta"], │ │ │ -# "spawner_override": {"environment": {"AM_I_GROUP_BETA": "yes"}}, │ │ │ -# }, │ │ │ -# "03-group-beta-mem-limit": { │ │ │ -# "groups": ["group-beta"], │ │ │ -# "spawner_override": {"mem_limit": "2G"} │ │ │ -# } │ │ │ -# } │ │ │ -# Default: traitlets.Undefined │ │ │ -# c.Spawner.group_overrides = traitlets.Undefined │ │ │ - │ │ │ -## Timeout (in seconds) before giving up on a spawned HTTP server │ │ │ -# │ │ │ -# Once a server has successfully been spawned, this is the amount of time we │ │ │ -# wait before assuming that the server is unable to accept connections. │ │ │ -# Default: 30 │ │ │ -# c.Spawner.http_timeout = 30 │ │ │ - │ │ │ -## The URL the single-user server should connect to the Hub. │ │ │ -# │ │ │ -# If the Hub URL set in your JupyterHub config is not reachable from spawned │ │ │ -# notebooks, you can set differnt URL by this config. │ │ │ -# │ │ │ -# Is None if you don't need to change the URL. │ │ │ -# Default: None │ │ │ -# c.Spawner.hub_connect_url = None │ │ │ - │ │ │ -## The IP address (or hostname) the single-user server should listen on. │ │ │ -# │ │ │ -# Usually either '127.0.0.1' (default) or '0.0.0.0'. │ │ │ -# │ │ │ -# The JupyterHub proxy implementation should be able to send packets to this │ │ │ -# interface. │ │ │ -# │ │ │ -# Subclasses which launch remotely or in containers should override the default │ │ │ -# to '0.0.0.0'. │ │ │ -# │ │ │ -# .. versionchanged:: 2.0 │ │ │ -# Default changed to '127.0.0.1', from ''. │ │ │ -# In most cases, this does not result in a change in behavior, │ │ │ -# as '' was interpreted as 'unspecified', │ │ │ -# which used the subprocesses' own default, itself usually '127.0.0.1'. │ │ │ -# Default: '127.0.0.1' │ │ │ -# c.Spawner.ip = '127.0.0.1' │ │ │ - │ │ │ -## Minimum number of bytes a single-user notebook server is guaranteed to have │ │ │ -# available. │ │ │ -# │ │ │ -# Allows the following suffixes: │ │ │ -# - K -> Kilobytes │ │ │ -# - M -> Megabytes │ │ │ -# - G -> Gigabytes │ │ │ -# - T -> Terabytes │ │ │ -# │ │ │ -# **This is a configuration setting. Your spawner must implement support for the │ │ │ -# limit to work.** The default spawner, `LocalProcessSpawner`, does **not** │ │ │ -# implement this support. A custom spawner **must** add support for this setting │ │ │ -# for it to be enforced. │ │ │ -# Default: None │ │ │ -# c.Spawner.mem_guarantee = None │ │ │ - │ │ │ -## Maximum number of bytes a single-user notebook server is allowed to use. │ │ │ -# │ │ │ -# Allows the following suffixes: │ │ │ -# - K -> Kilobytes │ │ │ -# - M -> Megabytes │ │ │ -# - G -> Gigabytes │ │ │ -# - T -> Terabytes │ │ │ -# │ │ │ -# If the single user server tries to allocate more memory than this, it will │ │ │ -# fail. There is no guarantee that the single-user notebook server will be able │ │ │ -# to allocate this much memory - only that it can not allocate more than this. │ │ │ -# │ │ │ -# **This is a configuration setting. Your spawner must implement support for the │ │ │ -# limit to work.** The default spawner, `LocalProcessSpawner`, does **not** │ │ │ -# implement this support. A custom spawner **must** add support for this setting │ │ │ -# for it to be enforced. │ │ │ -# Default: None │ │ │ -# c.Spawner.mem_limit = None │ │ │ - │ │ │ -## Path to the notebook directory for the single-user server. │ │ │ -# │ │ │ -# The user sees a file listing of this directory when the notebook interface is │ │ │ -# started. The current interface does not easily allow browsing beyond the │ │ │ -# subdirectories in this directory's tree. │ │ │ -# │ │ │ -# `~` will be expanded to the home directory of the user, and {username} will be │ │ │ -# replaced with the name of the user. │ │ │ -# │ │ │ -# Note that this does *not* prevent users from accessing files outside of this │ │ │ -# path! They can do so with many other means. │ │ │ -# Default: '' │ │ │ -# c.Spawner.notebook_dir = '' │ │ │ - │ │ │ -## Allowed scopes for oauth tokens issued by this server's oauth client. │ │ │ -# │ │ │ -# This sets the maximum and default scopes │ │ │ -# assigned to oauth tokens issued by a single-user server's │ │ │ -# oauth client (i.e. tokens stored in browsers after authenticating with the server), │ │ │ -# defining what actions the server can take on behalf of logged-in users. │ │ │ -# │ │ │ -# Default is an empty list, meaning minimal permissions to identify users, │ │ │ -# no actions can be taken on their behalf. │ │ │ -# │ │ │ -# If callable, will be called with the Spawner as a single argument. │ │ │ -# Callables may be async. │ │ │ -# Default: traitlets.Undefined │ │ │ -# c.Spawner.oauth_client_allowed_scopes = traitlets.Undefined │ │ │ - │ │ │ -## Allowed roles for oauth tokens. │ │ │ -# │ │ │ -# Deprecated in 3.0: use oauth_client_allowed_scopes │ │ │ -# │ │ │ -# This sets the maximum and default roles │ │ │ -# assigned to oauth tokens issued by a single-user server's │ │ │ -# oauth client (i.e. tokens stored in browsers after authenticating with the server), │ │ │ -# defining what actions the server can take on behalf of logged-in users. │ │ │ -# │ │ │ -# Default is an empty list, meaning minimal permissions to identify users, │ │ │ -# no actions can be taken on their behalf. │ │ │ -# Default: traitlets.Undefined │ │ │ -# c.Spawner.oauth_roles = traitlets.Undefined │ │ │ - │ │ │ -## An HTML form for options a user can specify on launching their server. │ │ │ -# │ │ │ -# The surrounding `