--- /srv/reproducible-results/rbuild-debian/r-b-build.7wLqSkT5/b1/jupyterhub_5.2.1+ds1-4_arm64.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.7wLqSkT5/b2/jupyterhub_5.2.1+ds1-4_arm64.changes ├── Files │ @@ -1,2 +1,2 @@ │ │ - fa24e76a73d93d9d431b6f6775723d64 2022696 python optional jupyterhub_5.2.1+ds1-4_all.deb │ + e96b11a4809b1bf046f713b6e2c3a86d 2022328 python optional jupyterhub_5.2.1+ds1-4_all.deb ├── 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 1963008 2025-05-28 09:40:25.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 59492 2025-05-28 09:40:25.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 1962644 2025-05-28 09:40:25.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── ./usr/share/jupyterhub/jupyterhub_config.py │ │ │ │┄ Ordering differences only │ │ │ │ @@ -1350,210 +1350,14 @@ │ │ │ │ # c.Authenticator.username_pattern = '' │ │ │ │ │ │ │ │ ## Deprecated, use `Authenticator.allowed_users` │ │ │ │ # Default: set() │ │ │ │ # c.Authenticator.whitelist = set() │ │ │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ │ -# NullAuthenticator(Authenticator) configuration │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ -## Null Authenticator for JupyterHub │ │ │ │ -# │ │ │ │ -# For cases where authentication should be disabled, e.g. only allowing access │ │ │ │ -# via API tokens. │ │ │ │ -# │ │ │ │ -# .. versionadded:: 2.0 │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.admin_users │ │ │ │ -# c.NullAuthenticator.admin_users = set() │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.allow_all │ │ │ │ -# c.NullAuthenticator.allow_all = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.allow_existing_users │ │ │ │ -# c.NullAuthenticator.allow_existing_users = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.allowed_users │ │ │ │ -# c.NullAuthenticator.allowed_users = set() │ │ │ │ - │ │ │ │ -## Is there any allow config? │ │ │ │ -# See also: Authenticator.any_allow_config │ │ │ │ -# c.NullAuthenticator.any_allow_config = False │ │ │ │ - │ │ │ │ -## The max age (in seconds) of authentication info │ │ │ │ -# See also: Authenticator.auth_refresh_age │ │ │ │ -# c.NullAuthenticator.auth_refresh_age = 300 │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.auto_login_oauth2_authorize │ │ │ │ -# c.NullAuthenticator.auto_login_oauth2_authorize = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.blocked_users │ │ │ │ -# c.NullAuthenticator.blocked_users = set() │ │ │ │ - │ │ │ │ -## Delete any users from the database that do not pass validation │ │ │ │ -# See also: Authenticator.delete_invalid_users │ │ │ │ -# c.NullAuthenticator.delete_invalid_users = False │ │ │ │ - │ │ │ │ -## Enable persisting auth_state (if available). │ │ │ │ -# See also: Authenticator.enable_auth_state │ │ │ │ -# c.NullAuthenticator.enable_auth_state = False │ │ │ │ - │ │ │ │ -## Let authenticator manage user groups │ │ │ │ -# See also: Authenticator.manage_groups │ │ │ │ -# c.NullAuthenticator.manage_groups = False │ │ │ │ - │ │ │ │ -## Let authenticator manage roles │ │ │ │ -# See also: Authenticator.manage_roles │ │ │ │ -# c.NullAuthenticator.manage_roles = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.otp_prompt │ │ │ │ -# c.NullAuthenticator.otp_prompt = 'OTP:' │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.post_auth_hook │ │ │ │ -# c.NullAuthenticator.post_auth_hook = None │ │ │ │ - │ │ │ │ -## Force refresh of auth prior to spawn. │ │ │ │ -# See also: Authenticator.refresh_pre_spawn │ │ │ │ -# c.NullAuthenticator.refresh_pre_spawn = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.request_otp │ │ │ │ -# c.NullAuthenticator.request_otp = False │ │ │ │ - │ │ │ │ -## Reset managed roles to result of `load_managed_roles()` on startup. │ │ │ │ -# See also: Authenticator.reset_managed_roles_on_startup │ │ │ │ -# c.NullAuthenticator.reset_managed_roles_on_startup = False │ │ │ │ - │ │ │ │ -## Dictionary mapping authenticator usernames to JupyterHub users. │ │ │ │ -# See also: Authenticator.username_map │ │ │ │ -# c.NullAuthenticator.username_map = {} │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Authenticator.username_pattern │ │ │ │ -# c.NullAuthenticator.username_pattern = '' │ │ │ │ - │ │ │ │ -## Deprecated, use `Authenticator.allowed_users` │ │ │ │ -# See also: Authenticator.whitelist │ │ │ │ -# c.NullAuthenticator.whitelist = set() │ │ │ │ - │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ -# Proxy(LoggingConfigurable) configuration │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ -## Base class for configurable proxies that JupyterHub can use. │ │ │ │ -# │ │ │ │ -# A proxy implementation should subclass this and must define the following │ │ │ │ -# methods: │ │ │ │ -# │ │ │ │ -# - :meth:`.get_all_routes` return a dictionary of all JupyterHub-related routes │ │ │ │ -# - :meth:`.add_route` adds a route - :meth:`.delete_route` deletes a route │ │ │ │ -# │ │ │ │ -# In addition to these, the following method(s) may need to be implemented: │ │ │ │ -# │ │ │ │ -# - :meth:`.start` start the proxy, if it should be launched by the Hub │ │ │ │ -# instead of externally managed. │ │ │ │ -# If the proxy is externally managed, it should set :attr:`should_start` to False. │ │ │ │ -# - :meth:`.stop` stop the proxy. Only used if :meth:`.start` is also used. │ │ │ │ -# │ │ │ │ -# And the following method(s) are optional, but can be provided: │ │ │ │ -# │ │ │ │ -# - :meth:`.get_route` gets a single route. │ │ │ │ -# There is a default implementation that extracts data from :meth:`.get_all_routes`, │ │ │ │ -# but implementations may choose to provide a more efficient implementation │ │ │ │ -# of fetching a single route. │ │ │ │ - │ │ │ │ -## Additional routes to be maintained in the proxy. │ │ │ │ -# │ │ │ │ -# A dictionary with a route specification as key, and a URL as target. The hub │ │ │ │ -# will ensure this route is present in the proxy. │ │ │ │ -# │ │ │ │ -# If the hub is running in host based mode (with JupyterHub.subdomain_host set), │ │ │ │ -# the routespec *must* have a domain component (example.com/my-url/). If the hub │ │ │ │ -# is not running in host based mode, the routespec *must not* have a domain │ │ │ │ -# component (/my-url/). │ │ │ │ -# │ │ │ │ -# Helpful when the hub is running in API-only mode. │ │ │ │ -# Default: {} │ │ │ │ -# c.Proxy.extra_routes = {} │ │ │ │ - │ │ │ │ -## Should the Hub start the proxy │ │ │ │ -# │ │ │ │ -# If True, the Hub will start the proxy and stop it. │ │ │ │ -# Set to False if the proxy is managed externally, │ │ │ │ -# such as by systemd, docker, or another service manager. │ │ │ │ -# Default: True │ │ │ │ -# c.Proxy.should_start = True │ │ │ │ - │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ -# ConfigurableHTTPProxy(Proxy) configuration │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ -## Proxy implementation for the default configurable-http-proxy. │ │ │ │ -# │ │ │ │ -# This is the default proxy implementation for running the nodejs proxy │ │ │ │ -# `configurable-http-proxy`. │ │ │ │ -# │ │ │ │ -# If the proxy should not be run as a subprocess of the Hub, (e.g. in a separate │ │ │ │ -# container), set:: │ │ │ │ -# │ │ │ │ -# c.ConfigurableHTTPProxy.should_start = False │ │ │ │ - │ │ │ │ -## The ip (or hostname) of the proxy's API endpoint │ │ │ │ -# Default: '' │ │ │ │ -# c.ConfigurableHTTPProxy.api_url = '' │ │ │ │ - │ │ │ │ -## The Proxy auth token │ │ │ │ -# │ │ │ │ -# Loaded from the CONFIGPROXY_AUTH_TOKEN env variable by default. │ │ │ │ -# Default: '' │ │ │ │ -# c.ConfigurableHTTPProxy.auth_token = '' │ │ │ │ - │ │ │ │ -## Interval (in seconds) at which to check if the proxy is running. │ │ │ │ -# Default: 5 │ │ │ │ -# c.ConfigurableHTTPProxy.check_running_interval = 5 │ │ │ │ - │ │ │ │ -## The command to start the proxy │ │ │ │ -# Default: ['configurable-http-proxy'] │ │ │ │ -# c.ConfigurableHTTPProxy.command = ['configurable-http-proxy'] │ │ │ │ - │ │ │ │ -## The number of requests allowed to be concurrently outstanding to the proxy │ │ │ │ -# │ │ │ │ -# Limiting this number avoids potential timeout errors by sending too many │ │ │ │ -# requests to update the proxy at once │ │ │ │ -# Default: 10 │ │ │ │ -# c.ConfigurableHTTPProxy.concurrency = 10 │ │ │ │ - │ │ │ │ -## Add debug-level logging to the Proxy. │ │ │ │ -# Default: False │ │ │ │ -# c.ConfigurableHTTPProxy.debug = False │ │ │ │ - │ │ │ │ -## │ │ │ │ -# See also: Proxy.extra_routes │ │ │ │ -# c.ConfigurableHTTPProxy.extra_routes = {} │ │ │ │ - │ │ │ │ -## Proxy log level │ │ │ │ -# Choices: any of ['debug', 'info', 'warn', 'error'] (case-insensitive) │ │ │ │ -# Default: 'info' │ │ │ │ -# c.ConfigurableHTTPProxy.log_level = 'info' │ │ │ │ - │ │ │ │ -## File in which to write the PID of the proxy process. │ │ │ │ -# Default: 'jupyterhub-proxy.pid' │ │ │ │ -# c.ConfigurableHTTPProxy.pid_file = 'jupyterhub-proxy.pid' │ │ │ │ - │ │ │ │ -## Should the Hub start the proxy │ │ │ │ -# See also: Proxy.should_start │ │ │ │ -# c.ConfigurableHTTPProxy.should_start = True │ │ │ │ - │ │ │ │ -#------------------------------------------------------------------------------ │ │ │ │ # LocalAuthenticator(Authenticator) configuration │ │ │ │ #------------------------------------------------------------------------------ │ │ │ │ ## Base class for Authenticators that work with local Linux/UNIX users │ │ │ │ # │ │ │ │ # Checks for local users, and can attempt to create them if they exist. │ │ │ │ │ │ │ │ ## The command to use for creating users as a list of strings │ │ │ │ @@ -2685,14 +2489,120 @@ │ │ │ │ # c.SimpleLocalProcessSpawner.start_timeout = 60 │ │ │ │ │ │ │ │ ## │ │ │ │ # See also: LocalProcessSpawner.term_timeout │ │ │ │ # c.SimpleLocalProcessSpawner.term_timeout = 5 │ │ │ │ │ │ │ │ #------------------------------------------------------------------------------ │ │ │ │ +# Proxy(LoggingConfigurable) configuration │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ +## Base class for configurable proxies that JupyterHub can use. │ │ │ │ +# │ │ │ │ +# A proxy implementation should subclass this and must define the following │ │ │ │ +# methods: │ │ │ │ +# │ │ │ │ +# - :meth:`.get_all_routes` return a dictionary of all JupyterHub-related routes │ │ │ │ +# - :meth:`.add_route` adds a route - :meth:`.delete_route` deletes a route │ │ │ │ +# │ │ │ │ +# In addition to these, the following method(s) may need to be implemented: │ │ │ │ +# │ │ │ │ +# - :meth:`.start` start the proxy, if it should be launched by the Hub │ │ │ │ +# instead of externally managed. │ │ │ │ +# If the proxy is externally managed, it should set :attr:`should_start` to False. │ │ │ │ +# - :meth:`.stop` stop the proxy. Only used if :meth:`.start` is also used. │ │ │ │ +# │ │ │ │ +# And the following method(s) are optional, but can be provided: │ │ │ │ +# │ │ │ │ +# - :meth:`.get_route` gets a single route. │ │ │ │ +# There is a default implementation that extracts data from :meth:`.get_all_routes`, │ │ │ │ +# but implementations may choose to provide a more efficient implementation │ │ │ │ +# of fetching a single route. │ │ │ │ + │ │ │ │ +## Additional routes to be maintained in the proxy. │ │ │ │ +# │ │ │ │ +# A dictionary with a route specification as key, and a URL as target. The hub │ │ │ │ +# will ensure this route is present in the proxy. │ │ │ │ +# │ │ │ │ +# If the hub is running in host based mode (with JupyterHub.subdomain_host set), │ │ │ │ +# the routespec *must* have a domain component (example.com/my-url/). If the hub │ │ │ │ +# is not running in host based mode, the routespec *must not* have a domain │ │ │ │ +# component (/my-url/). │ │ │ │ +# │ │ │ │ +# Helpful when the hub is running in API-only mode. │ │ │ │ +# Default: {} │ │ │ │ +# c.Proxy.extra_routes = {} │ │ │ │ + │ │ │ │ +## Should the Hub start the proxy │ │ │ │ +# │ │ │ │ +# If True, the Hub will start the proxy and stop it. │ │ │ │ +# Set to False if the proxy is managed externally, │ │ │ │ +# such as by systemd, docker, or another service manager. │ │ │ │ +# Default: True │ │ │ │ +# c.Proxy.should_start = True │ │ │ │ + │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ +# ConfigurableHTTPProxy(Proxy) configuration │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ +## Proxy implementation for the default configurable-http-proxy. │ │ │ │ +# │ │ │ │ +# This is the default proxy implementation for running the nodejs proxy │ │ │ │ +# `configurable-http-proxy`. │ │ │ │ +# │ │ │ │ +# If the proxy should not be run as a subprocess of the Hub, (e.g. in a separate │ │ │ │ +# container), set:: │ │ │ │ +# │ │ │ │ +# c.ConfigurableHTTPProxy.should_start = False │ │ │ │ + │ │ │ │ +## The ip (or hostname) of the proxy's API endpoint │ │ │ │ +# Default: '' │ │ │ │ +# c.ConfigurableHTTPProxy.api_url = '' │ │ │ │ + │ │ │ │ +## The Proxy auth token │ │ │ │ +# │ │ │ │ +# Loaded from the CONFIGPROXY_AUTH_TOKEN env variable by default. │ │ │ │ +# Default: '' │ │ │ │ +# c.ConfigurableHTTPProxy.auth_token = '' │ │ │ │ + │ │ │ │ +## Interval (in seconds) at which to check if the proxy is running. │ │ │ │ +# Default: 5 │ │ │ │ +# c.ConfigurableHTTPProxy.check_running_interval = 5 │ │ │ │ + │ │ │ │ +## The command to start the proxy │ │ │ │ +# Default: ['configurable-http-proxy'] │ │ │ │ +# c.ConfigurableHTTPProxy.command = ['configurable-http-proxy'] │ │ │ │ + │ │ │ │ +## The number of requests allowed to be concurrently outstanding to the proxy │ │ │ │ +# │ │ │ │ +# Limiting this number avoids potential timeout errors by sending too many │ │ │ │ +# requests to update the proxy at once │ │ │ │ +# Default: 10 │ │ │ │ +# c.ConfigurableHTTPProxy.concurrency = 10 │ │ │ │ + │ │ │ │ +## Add debug-level logging to the Proxy. │ │ │ │ +# Default: False │ │ │ │ +# c.ConfigurableHTTPProxy.debug = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Proxy.extra_routes │ │ │ │ +# c.ConfigurableHTTPProxy.extra_routes = {} │ │ │ │ + │ │ │ │ +## Proxy log level │ │ │ │ +# Choices: any of ['debug', 'info', 'warn', 'error'] (case-insensitive) │ │ │ │ +# Default: 'info' │ │ │ │ +# c.ConfigurableHTTPProxy.log_level = 'info' │ │ │ │ + │ │ │ │ +## File in which to write the PID of the proxy process. │ │ │ │ +# Default: 'jupyterhub-proxy.pid' │ │ │ │ +# c.ConfigurableHTTPProxy.pid_file = 'jupyterhub-proxy.pid' │ │ │ │ + │ │ │ │ +## Should the Hub start the proxy │ │ │ │ +# See also: Proxy.should_start │ │ │ │ +# c.ConfigurableHTTPProxy.should_start = True │ │ │ │ + │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ # CryptKeeper(SingletonConfigurable) configuration │ │ │ │ #------------------------------------------------------------------------------ │ │ │ │ ## Encapsulate encryption configuration │ │ │ │ # │ │ │ │ # Use via the encryption_config singleton below. │ │ │ │ │ │ │ │ # Default: [] │ │ │ │ @@ -2801,7 +2711,97 @@ │ │ │ │ ## │ │ │ │ # See also: Authenticator.username_pattern │ │ │ │ # c.DummyAuthenticator.username_pattern = '' │ │ │ │ │ │ │ │ ## Deprecated, use `Authenticator.allowed_users` │ │ │ │ # See also: Authenticator.whitelist │ │ │ │ # c.DummyAuthenticator.whitelist = set() │ │ │ │ + │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ +# NullAuthenticator(Authenticator) configuration │ │ │ │ +#------------------------------------------------------------------------------ │ │ │ │ +## Null Authenticator for JupyterHub │ │ │ │ +# │ │ │ │ +# For cases where authentication should be disabled, e.g. only allowing access │ │ │ │ +# via API tokens. │ │ │ │ +# │ │ │ │ +# .. versionadded:: 2.0 │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.admin_users │ │ │ │ +# c.NullAuthenticator.admin_users = set() │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.allow_all │ │ │ │ +# c.NullAuthenticator.allow_all = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.allow_existing_users │ │ │ │ +# c.NullAuthenticator.allow_existing_users = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.allowed_users │ │ │ │ +# c.NullAuthenticator.allowed_users = set() │ │ │ │ + │ │ │ │ +## Is there any allow config? │ │ │ │ +# See also: Authenticator.any_allow_config │ │ │ │ +# c.NullAuthenticator.any_allow_config = False │ │ │ │ + │ │ │ │ +## The max age (in seconds) of authentication info │ │ │ │ +# See also: Authenticator.auth_refresh_age │ │ │ │ +# c.NullAuthenticator.auth_refresh_age = 300 │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.auto_login_oauth2_authorize │ │ │ │ +# c.NullAuthenticator.auto_login_oauth2_authorize = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.blocked_users │ │ │ │ +# c.NullAuthenticator.blocked_users = set() │ │ │ │ + │ │ │ │ +## Delete any users from the database that do not pass validation │ │ │ │ +# See also: Authenticator.delete_invalid_users │ │ │ │ +# c.NullAuthenticator.delete_invalid_users = False │ │ │ │ + │ │ │ │ +## Enable persisting auth_state (if available). │ │ │ │ +# See also: Authenticator.enable_auth_state │ │ │ │ +# c.NullAuthenticator.enable_auth_state = False │ │ │ │ + │ │ │ │ +## Let authenticator manage user groups │ │ │ │ +# See also: Authenticator.manage_groups │ │ │ │ +# c.NullAuthenticator.manage_groups = False │ │ │ │ + │ │ │ │ +## Let authenticator manage roles │ │ │ │ +# See also: Authenticator.manage_roles │ │ │ │ +# c.NullAuthenticator.manage_roles = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.otp_prompt │ │ │ │ +# c.NullAuthenticator.otp_prompt = 'OTP:' │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.post_auth_hook │ │ │ │ +# c.NullAuthenticator.post_auth_hook = None │ │ │ │ + │ │ │ │ +## Force refresh of auth prior to spawn. │ │ │ │ +# See also: Authenticator.refresh_pre_spawn │ │ │ │ +# c.NullAuthenticator.refresh_pre_spawn = False │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.request_otp │ │ │ │ +# c.NullAuthenticator.request_otp = False │ │ │ │ + │ │ │ │ +## Reset managed roles to result of `load_managed_roles()` on startup. │ │ │ │ +# See also: Authenticator.reset_managed_roles_on_startup │ │ │ │ +# c.NullAuthenticator.reset_managed_roles_on_startup = False │ │ │ │ + │ │ │ │ +## Dictionary mapping authenticator usernames to JupyterHub users. │ │ │ │ +# See also: Authenticator.username_map │ │ │ │ +# c.NullAuthenticator.username_map = {} │ │ │ │ + │ │ │ │ +## │ │ │ │ +# See also: Authenticator.username_pattern │ │ │ │ +# c.NullAuthenticator.username_pattern = '' │ │ │ │ + │ │ │ │ +## Deprecated, use `Authenticator.allowed_users` │ │ │ │ +# See also: Authenticator.whitelist │ │ │ │ +# c.NullAuthenticator.whitelist = set()