mirror of
https://github.com/YunoHost-Apps/jupyterlab_ynh.git
synced 2024-09-03 19:26:35 +02:00
version 1.0.4
This commit is contained in:
parent
e297aaccd5
commit
8753adc46c
19 changed files with 793 additions and 795 deletions
|
@ -9,7 +9,7 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to
|
||||||
## Overview
|
## Overview
|
||||||
JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter Notebook.
|
JupyterLab is the next-generation user interface for Project Jupyter offering all the familiar building blocks of the classic Jupyter Notebook (notebook, terminal, text editor, file browser, rich outputs, etc.) in a flexible and powerful user interface. JupyterLab will eventually replace the classic Jupyter Notebook.
|
||||||
|
|
||||||
**Shipped version:** v0.35.4
|
**Shipped version:** v1.0.4
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
# See here for more informations
|
|
||||||
# https://github.com/YunoHost/package_check#syntax-check_process-file
|
|
||||||
;; Test complet
|
;; Test complet
|
||||||
; Manifest
|
; Manifest
|
||||||
domain="domain.tld" (DOMAIN)
|
domain="domain.tld" (DOMAIN)
|
||||||
path="/jupyterlab" (PATH)
|
path="/jupyterlab" (PATH)
|
||||||
admin="john" (USER)
|
admin="john" (USER)
|
||||||
is_public=1 (PUBLIC|public=1|private=0)
|
is_public=1 (PUBLIC|public=1|private=0)
|
||||||
password="pass"
|
|
||||||
port="666" (PORT)
|
|
||||||
; Checks
|
; Checks
|
||||||
pkg_linter=1
|
pkg_linter=1
|
||||||
setup_sub_dir=1
|
setup_sub_dir=1
|
||||||
|
@ -18,22 +14,10 @@
|
||||||
upgrade=1
|
upgrade=1
|
||||||
backup_restore=1
|
backup_restore=1
|
||||||
multi_instance=1
|
multi_instance=1
|
||||||
incorrect_path=1
|
|
||||||
port_already_use=1
|
port_already_use=1
|
||||||
change_url=1
|
change_url=1
|
||||||
;;; Levels
|
;;; Levels
|
||||||
Level 1=auto
|
|
||||||
Level 2=auto
|
|
||||||
Level 3=auto
|
|
||||||
# Level 4:
|
|
||||||
Level 4=1
|
|
||||||
# Level 5:
|
|
||||||
Level 5=auto
|
Level 5=auto
|
||||||
Level 6=auto
|
|
||||||
Level 7=auto
|
|
||||||
Level 8=0
|
|
||||||
Level 9=0
|
|
||||||
Level 10=0
|
|
||||||
;;; Options
|
;;; Options
|
||||||
Email=
|
Email=
|
||||||
Notification=none
|
Notification=none
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
SOURCE_URL=https://github.com/jjhelmus/berryconda/releases/download/v__VERSION__/Berryconda3-__VERSION__-Linux-armv7l.sh
|
|
||||||
SOURCE_SUM=__MD5_SUM__
|
|
||||||
SOURCE_SUM_PRG=md5sum
|
|
||||||
SOURCE_FILENAME=Berryconda3-__VERSION__-Linux-armv7l.sh
|
|
||||||
SOURCE_EXTRACT=false
|
|
||||||
SOURCE_FORMAT=sh
|
|
|
@ -90,7 +90,7 @@
|
||||||
## The base URL for the notebook server.
|
## The base URL for the notebook server.
|
||||||
#
|
#
|
||||||
# Leading and trailing slashes can be omitted, and will automatically be added.
|
# Leading and trailing slashes can be omitted, and will automatically be added.
|
||||||
#c.NotebookApp.base_url = ''
|
#c.NotebookApp.base_url = '/'
|
||||||
|
|
||||||
## Specify what command to use to invoke a web browser when opening the notebook.
|
## Specify what command to use to invoke a web browser when opening the notebook.
|
||||||
# If not specified, the default browser will be determined by the `webbrowser`
|
# If not specified, the default browser will be determined by the `webbrowser`
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
# completely without authentication. These services can disable all
|
# completely without authentication. These services can disable all
|
||||||
# authentication and security checks, with the full knowledge of what that
|
# authentication and security checks, with the full knowledge of what that
|
||||||
# implies.
|
# implies.
|
||||||
c.NotebookApp.disable_check_xsrf = True
|
#c.NotebookApp.disable_check_xsrf = False
|
||||||
|
|
||||||
## Whether to enable MathJax for typesetting math/TeX
|
## Whether to enable MathJax for typesetting math/TeX
|
||||||
#
|
#
|
||||||
|
@ -549,6 +549,10 @@ c.NotebookApp.terminals_enabled = bool(__ENABLE_TERMINAL__)
|
||||||
|
|
||||||
## A KernelManager that handles notebook mapping and HTTP error handling
|
## A KernelManager that handles notebook mapping and HTTP error handling
|
||||||
|
|
||||||
|
## White list of allowed kernel message types. When the list is empty, all
|
||||||
|
# message types are allowed.
|
||||||
|
#c.MappingKernelManager.allowed_message_types = []
|
||||||
|
|
||||||
## Whether messages from kernels whose frontends have disconnected should be
|
## Whether messages from kernels whose frontends have disconnected should be
|
||||||
# buffered in-memory.
|
# buffered in-memory.
|
||||||
#
|
#
|
||||||
|
@ -588,6 +592,23 @@ c.NotebookApp.terminals_enabled = bool(__ENABLE_TERMINAL__)
|
||||||
##
|
##
|
||||||
#c.MappingKernelManager.root_dir = ''
|
#c.MappingKernelManager.root_dir = ''
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# KernelSpecManager(LoggingConfigurable) configuration
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
## If there is no Python kernelspec registered and the IPython kernel is
|
||||||
|
# available, ensure it is added to the spec list.
|
||||||
|
#c.KernelSpecManager.ensure_native_kernel = True
|
||||||
|
|
||||||
|
## The kernel spec class. This is configurable to allow subclassing of the
|
||||||
|
# KernelSpecManager for customized behavior.
|
||||||
|
#c.KernelSpecManager.kernel_spec_class = 'jupyter_client.kernelspec.KernelSpec'
|
||||||
|
|
||||||
|
## Whitelist of allowed kernel names.
|
||||||
|
#
|
||||||
|
# By default, all installed kernels are allowed.
|
||||||
|
#c.KernelSpecManager.whitelist = set()
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ContentsManager(LoggingConfigurable) configuration
|
# ContentsManager(LoggingConfigurable) configuration
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
@ -686,8 +707,8 @@ c.NotebookApp.terminals_enabled = bool(__ENABLE_TERMINAL__)
|
||||||
# log : logging.Logger
|
# log : logging.Logger
|
||||||
|
|
||||||
## By default notebooks are saved on disk on a temporary file and then if
|
## By default notebooks are saved on disk on a temporary file and then if
|
||||||
# succefully written, it replaces the old ones. This procedure, namely
|
# successfully written, it replaces the old ones. This procedure, namely
|
||||||
# 'atomic_writing', causes some bugs on file system whitout operation order
|
# 'atomic_writing', causes some bugs on file system without operation order
|
||||||
# enforcement (like some networked fs). If set to False, the new notebook is
|
# enforcement (like some networked fs). If set to False, the new notebook is
|
||||||
# written directly on the old one which could fail (eg: full filesystem or quota
|
# written directly on the old one which could fail (eg: full filesystem or quota
|
||||||
# )
|
# )
|
||||||
|
@ -748,18 +769,87 @@ c.NotebookApp.terminals_enabled = bool(__ENABLE_TERMINAL__)
|
||||||
#c.NotebookNotary.store_factory = traitlets.Undefined
|
#c.NotebookNotary.store_factory = traitlets.Undefined
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# KernelSpecManager(LoggingConfigurable) configuration
|
# GatewayKernelManager(MappingKernelManager) configuration
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
## If there is no Python kernelspec registered and the IPython kernel is
|
## Kernel manager that supports remote kernels hosted by Jupyter Kernel or
|
||||||
# available, ensure it is added to the spec list.
|
# Enterprise Gateway.
|
||||||
#c.KernelSpecManager.ensure_native_kernel = True
|
|
||||||
|
|
||||||
## The kernel spec class. This is configurable to allow subclassing of the
|
#------------------------------------------------------------------------------
|
||||||
# KernelSpecManager for customized behavior.
|
# GatewayKernelSpecManager(KernelSpecManager) configuration
|
||||||
#c.KernelSpecManager.kernel_spec_class = 'jupyter_client.kernelspec.KernelSpec'
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
## Whitelist of allowed kernel names.
|
#------------------------------------------------------------------------------
|
||||||
#
|
# GatewayClient(SingletonConfigurable) configuration
|
||||||
# By default, all installed kernels are allowed.
|
#------------------------------------------------------------------------------
|
||||||
#c.KernelSpecManager.whitelist = set()
|
|
||||||
|
## This class manages the configuration. It's its own singleton class so that we
|
||||||
|
# can share these values across all objects. It also contains some helper methods
|
||||||
|
# to build request arguments out of the various config options.
|
||||||
|
|
||||||
|
## The authorization token used in the HTTP headers. (JUPYTER_GATEWAY_AUTH_TOKEN
|
||||||
|
# env var)
|
||||||
|
#c.GatewayClient.auth_token = None
|
||||||
|
|
||||||
|
## The filename of CA certificates or None to use defaults.
|
||||||
|
# (JUPYTER_GATEWAY_CA_CERTS env var)
|
||||||
|
#c.GatewayClient.ca_certs = None
|
||||||
|
|
||||||
|
## The filename for client SSL certificate, if any. (JUPYTER_GATEWAY_CLIENT_CERT
|
||||||
|
# env var)
|
||||||
|
#c.GatewayClient.client_cert = None
|
||||||
|
|
||||||
|
## The filename for client SSL key, if any. (JUPYTER_GATEWAY_CLIENT_KEY env var)
|
||||||
|
#c.GatewayClient.client_key = None
|
||||||
|
|
||||||
|
## The time allowed for HTTP connection establishment with the Gateway server.
|
||||||
|
# (JUPYTER_GATEWAY_CONNECT_TIMEOUT env var)
|
||||||
|
#c.GatewayClient.connect_timeout = 60.0
|
||||||
|
|
||||||
|
## A comma-separated list of environment variable names that will be included,
|
||||||
|
# along with their values, in the kernel startup request. The corresponding
|
||||||
|
# `env_whitelist` configuration value must also be set on the Gateway server -
|
||||||
|
# since that configuration value indicates which environmental values to make
|
||||||
|
# available to the kernel. (JUPYTER_GATEWAY_ENV_WHITELIST env var)
|
||||||
|
#c.GatewayClient.env_whitelist = ''
|
||||||
|
|
||||||
|
## Additional HTTP headers to pass on the request. This value will be converted
|
||||||
|
# to a dict. (JUPYTER_GATEWAY_HEADERS env var)
|
||||||
|
#c.GatewayClient.headers = '{}'
|
||||||
|
|
||||||
|
## The password for HTTP authentication. (JUPYTER_GATEWAY_HTTP_PWD env var)
|
||||||
|
#c.GatewayClient.http_pwd = None
|
||||||
|
|
||||||
|
## The username for HTTP authentication. (JUPYTER_GATEWAY_HTTP_USER env var)
|
||||||
|
#c.GatewayClient.http_user = None
|
||||||
|
|
||||||
|
## The gateway API endpoint for accessing kernel resources
|
||||||
|
# (JUPYTER_GATEWAY_KERNELS_ENDPOINT env var)
|
||||||
|
#c.GatewayClient.kernels_endpoint = '/api/kernels'
|
||||||
|
|
||||||
|
## The gateway API endpoint for accessing kernelspecs
|
||||||
|
# (JUPYTER_GATEWAY_KERNELSPECS_ENDPOINT env var)
|
||||||
|
#c.GatewayClient.kernelspecs_endpoint = '/api/kernelspecs'
|
||||||
|
|
||||||
|
## The gateway endpoint for accessing kernelspecs resources
|
||||||
|
# (JUPYTER_GATEWAY_KERNELSPECS_RESOURCE_ENDPOINT env var)
|
||||||
|
#c.GatewayClient.kernelspecs_resource_endpoint = '/kernelspecs'
|
||||||
|
|
||||||
|
## The time allowed for HTTP request completion. (JUPYTER_GATEWAY_REQUEST_TIMEOUT
|
||||||
|
# env var)
|
||||||
|
#c.GatewayClient.request_timeout = 60.0
|
||||||
|
|
||||||
|
## The url of the Kernel or Enterprise Gateway server where kernel specifications
|
||||||
|
# are defined and kernel management takes place. If defined, this Notebook
|
||||||
|
# server acts as a proxy for all kernel management and kernel specification
|
||||||
|
# retrieval. (JUPYTER_GATEWAY_URL env var)
|
||||||
|
#c.GatewayClient.url = None
|
||||||
|
|
||||||
|
## For HTTPS requests, determines if server's certificate should be validated or
|
||||||
|
# not. (JUPYTER_GATEWAY_VALIDATE_CERT env var)
|
||||||
|
#c.GatewayClient.validate_cert = True
|
||||||
|
|
||||||
|
## The websocket url of the Kernel or Enterprise Gateway server. If not
|
||||||
|
# provided, this value will correspond to the value of the Gateway url with 'ws'
|
||||||
|
# in place of 'http'. (JUPYTER_GATEWAY_WS_URL env var)
|
||||||
|
#c.GatewayClient.ws_url = None
|
|
@ -64,19 +64,29 @@
|
||||||
# API.
|
# API.
|
||||||
#c.JupyterHub.api_tokens = {}
|
#c.JupyterHub.api_tokens = {}
|
||||||
|
|
||||||
|
## Authentication for prometheus metrics
|
||||||
|
#c.JupyterHub.authenticate_prometheus = True
|
||||||
|
|
||||||
## Class for authenticating users.
|
## Class for authenticating users.
|
||||||
#
|
#
|
||||||
# This should be a class with the following form:
|
# This should be a subclass of :class:`jupyterhub.auth.Authenticator`
|
||||||
#
|
#
|
||||||
# - constructor takes one kwarg: `config`, the IPython config object.
|
# with an :meth:`authenticate` method that:
|
||||||
#
|
|
||||||
# with an authenticate method that:
|
|
||||||
#
|
#
|
||||||
# - is a coroutine (asyncio or tornado)
|
# - is a coroutine (asyncio or tornado)
|
||||||
# - returns username on success, None on failure
|
# - returns username on success, None on failure
|
||||||
# - takes two arguments: (handler, data),
|
# - takes two arguments: (handler, data),
|
||||||
# where `handler` is the calling web.RequestHandler,
|
# where `handler` is the calling web.RequestHandler,
|
||||||
# and `data` is the POST form data from the login page.
|
# and `data` is the POST form data from the login page.
|
||||||
|
#
|
||||||
|
# .. versionchanged:: 1.0
|
||||||
|
# authenticators may be registered via entry points,
|
||||||
|
# e.g. `c.JupyterHub.authenticator_class = 'pam'`
|
||||||
|
#
|
||||||
|
# Currently installed:
|
||||||
|
# - default: jupyterhub.auth.PAMAuthenticator
|
||||||
|
# - dummy: jupyterhub.auth.DummyAuthenticator
|
||||||
|
# - pam: jupyterhub.auth.PAMAuthenticator
|
||||||
#c.JupyterHub.authenticator_class = 'jupyterhub.auth.PAMAuthenticator'
|
#c.JupyterHub.authenticator_class = 'jupyterhub.auth.PAMAuthenticator'
|
||||||
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
|
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
|
||||||
|
|
||||||
|
@ -175,6 +185,24 @@ c.JupyterHub.bind_url = 'http://:__PORT____PATH__'
|
||||||
# By default, redirects users to their own server.
|
# By default, redirects users to their own server.
|
||||||
#c.JupyterHub.default_url = ''
|
#c.JupyterHub.default_url = ''
|
||||||
|
|
||||||
|
## Dict authority:dict(files). Specify the key, cert, and/or ca file for an
|
||||||
|
# authority. This is useful for externally managed proxies that wish to use
|
||||||
|
# internal_ssl.
|
||||||
|
#
|
||||||
|
# The files dict has this format (you must specify at least a cert)::
|
||||||
|
#
|
||||||
|
# {
|
||||||
|
# 'key': '/path/to/key.key',
|
||||||
|
# 'cert': '/path/to/cert.crt',
|
||||||
|
# 'ca': '/path/to/ca.crt'
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# The authorities you can override: 'hub-ca', 'notebooks-ca', 'proxy-api-ca',
|
||||||
|
# 'proxy-client-ca', and 'services-ca'.
|
||||||
|
#
|
||||||
|
# Use with internal_ssl
|
||||||
|
#c.JupyterHub.external_ssl_authorities = {}
|
||||||
|
|
||||||
## Register extra tornado Handlers for jupyterhub.
|
## Register extra tornado Handlers for jupyterhub.
|
||||||
#
|
#
|
||||||
# Should be of the form ``("<regex>", Handler)``
|
# Should be of the form ``("<regex>", Handler)``
|
||||||
|
@ -190,6 +218,9 @@ c.JupyterHub.bind_url = 'http://:__PORT____PATH__'
|
||||||
## Extra log handlers to set on JupyterHub logger
|
## Extra log handlers to set on JupyterHub logger
|
||||||
#c.JupyterHub.extra_log_handlers = []
|
#c.JupyterHub.extra_log_handlers = []
|
||||||
|
|
||||||
|
## Generate certs used for internal ssl
|
||||||
|
#c.JupyterHub.generate_certs = False
|
||||||
|
|
||||||
## Generate default config file
|
## Generate default config file
|
||||||
#c.JupyterHub.generate_config = False
|
#c.JupyterHub.generate_config = False
|
||||||
|
|
||||||
|
@ -254,7 +285,7 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
#
|
#
|
||||||
# See `hub_connect_ip` for cases where the bind and connect address should
|
# See `hub_connect_ip` for cases where the bind and connect address should
|
||||||
# differ, or `hub_bind_url` for setting the full bind URL.
|
# differ, or `hub_bind_url` for setting the full bind URL.
|
||||||
#c.JupyterHub.hub_ip = '0.0.0.0'
|
#c.JupyterHub.hub_ip = '127.0.0.1'
|
||||||
|
|
||||||
## The internal port for the Hub process.
|
## The internal port for the Hub process.
|
||||||
#
|
#
|
||||||
|
@ -264,7 +295,19 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
# conflict.
|
# conflict.
|
||||||
#
|
#
|
||||||
# See also `hub_ip` for the ip and `hub_bind_url` for setting the full bind URL.
|
# See also `hub_ip` for the ip and `hub_bind_url` for setting the full bind URL.
|
||||||
#c.JupyterHub.hub_port = 80
|
#c.JupyterHub.hub_port = 8081
|
||||||
|
|
||||||
|
## The location to store certificates automatically created by JupyterHub.
|
||||||
|
#
|
||||||
|
# Use with internal_ssl
|
||||||
|
#c.JupyterHub.internal_certs_location = 'internal-ssl'
|
||||||
|
|
||||||
|
## Enable SSL for all internal communication
|
||||||
|
#
|
||||||
|
# This enables end-to-end encryption between all JupyterHub components.
|
||||||
|
# JupyterHub will automatically create the necessary certificate authority and
|
||||||
|
# sign notebook certificates as they're created.
|
||||||
|
#c.JupyterHub.internal_ssl = False
|
||||||
|
|
||||||
## The public facing ip of the whole JupyterHub application (specifically
|
## The public facing ip of the whole JupyterHub application (specifically
|
||||||
# referred to as the proxy).
|
# referred to as the proxy).
|
||||||
|
@ -275,7 +318,7 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
#
|
#
|
||||||
# .. deprecated: 0.9
|
# .. deprecated: 0.9
|
||||||
# Use JupyterHub.bind_url
|
# Use JupyterHub.bind_url
|
||||||
#c.JupyterHub.ip = '0.0.0.0'
|
#c.JupyterHub.ip = ''
|
||||||
|
|
||||||
## Supply extra arguments that will be passed to Jinja environment.
|
## Supply extra arguments that will be passed to Jinja environment.
|
||||||
#c.JupyterHub.jinja_environment_options = {}
|
#c.JupyterHub.jinja_environment_options = {}
|
||||||
|
@ -295,6 +338,14 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
## Specify path to a logo image to override the Jupyter logo in the banner.
|
## Specify path to a logo image to override the Jupyter logo in the banner.
|
||||||
#c.JupyterHub.logo_file = ''
|
#c.JupyterHub.logo_file = ''
|
||||||
|
|
||||||
|
## Maximum number of concurrent named servers that can be created by a user at a
|
||||||
|
# time.
|
||||||
|
#
|
||||||
|
# Setting this can limit the total resources a user can consume.
|
||||||
|
#
|
||||||
|
# If set to 0, no limit is enforced.
|
||||||
|
#c.JupyterHub.named_server_limit_per_user = 0
|
||||||
|
|
||||||
## File to write PID Useful for daemonizing JupyterHub.
|
## File to write PID Useful for daemonizing JupyterHub.
|
||||||
#c.JupyterHub.pid_file = ''
|
#c.JupyterHub.pid_file = ''
|
||||||
|
|
||||||
|
@ -305,7 +356,7 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
#
|
#
|
||||||
# .. deprecated: 0.9
|
# .. deprecated: 0.9
|
||||||
# Use JupyterHub.bind_url
|
# Use JupyterHub.bind_url
|
||||||
#c.JupyterHub.port = 80
|
#c.JupyterHub.port = 8000
|
||||||
|
|
||||||
## DEPRECATED since version 0.8 : Use ConfigurableHTTPProxy.api_url
|
## DEPRECATED since version 0.8 : Use ConfigurableHTTPProxy.api_url
|
||||||
#c.JupyterHub.proxy_api_ip = ''
|
#c.JupyterHub.proxy_api_ip = ''
|
||||||
|
@ -319,12 +370,29 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
## Interval (in seconds) at which to check if the proxy is running.
|
## Interval (in seconds) at which to check if the proxy is running.
|
||||||
#c.JupyterHub.proxy_check_interval = 30
|
#c.JupyterHub.proxy_check_interval = 30
|
||||||
|
|
||||||
## Select the Proxy API implementation.
|
## The class to use for configuring the JupyterHub proxy.
|
||||||
|
#
|
||||||
|
# Should be a subclass of :class:`jupyterhub.proxy.Proxy`.
|
||||||
|
#
|
||||||
|
# .. versionchanged:: 1.0
|
||||||
|
# proxies may be registered via entry points,
|
||||||
|
# e.g. `c.JupyterHub.proxy_class = 'traefik'`
|
||||||
|
#
|
||||||
|
# Currently installed:
|
||||||
|
# - default: jupyterhub.proxy.ConfigurableHTTPProxy
|
||||||
|
# - configurable-http-proxy: jupyterhub.proxy.ConfigurableHTTPProxy
|
||||||
#c.JupyterHub.proxy_class = 'jupyterhub.proxy.ConfigurableHTTPProxy'
|
#c.JupyterHub.proxy_class = 'jupyterhub.proxy.ConfigurableHTTPProxy'
|
||||||
|
|
||||||
## DEPRECATED since version 0.8. Use ConfigurableHTTPProxy.command
|
## DEPRECATED since version 0.8. Use ConfigurableHTTPProxy.command
|
||||||
#c.JupyterHub.proxy_cmd = []
|
#c.JupyterHub.proxy_cmd = []
|
||||||
|
|
||||||
|
## Recreate all certificates used within JupyterHub on restart.
|
||||||
|
#
|
||||||
|
# Note: enabling this feature requires restarting all notebook servers.
|
||||||
|
#
|
||||||
|
# Use with internal_ssl
|
||||||
|
#c.JupyterHub.recreate_internal_certs = False
|
||||||
|
|
||||||
## Redirect user to server (if running), instead of control panel.
|
## Redirect user to server (if running), instead of control panel.
|
||||||
#c.JupyterHub.redirect_to_server = True
|
#c.JupyterHub.redirect_to_server = True
|
||||||
|
|
||||||
|
@ -361,9 +429,21 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
# ]
|
# ]
|
||||||
#c.JupyterHub.services = []
|
#c.JupyterHub.services = []
|
||||||
|
|
||||||
|
## Shuts down all user servers on logout
|
||||||
|
#c.JupyterHub.shutdown_on_logout = False
|
||||||
|
|
||||||
## The class to use for spawning single-user servers.
|
## The class to use for spawning single-user servers.
|
||||||
#
|
#
|
||||||
# Should be a subclass of Spawner.
|
# Should be a subclass of :class:`jupyterhub.spawner.Spawner`.
|
||||||
|
#
|
||||||
|
# .. versionchanged:: 1.0
|
||||||
|
# spawners may be registered via entry points,
|
||||||
|
# e.g. `c.JupyterHub.spawner_class = 'localprocess'`
|
||||||
|
#
|
||||||
|
# Currently installed:
|
||||||
|
# - simple: jupyterhub.spawner.SimpleLocalProcessSpawner
|
||||||
|
# - default: jupyterhub.spawner.LocalProcessSpawner
|
||||||
|
# - localprocess: jupyterhub.spawner.LocalProcessSpawner
|
||||||
#c.JupyterHub.spawner_class = 'jupyterhub.spawner.LocalProcessSpawner'
|
#c.JupyterHub.spawner_class = 'jupyterhub.spawner.LocalProcessSpawner'
|
||||||
|
|
||||||
## Path to SSL certificate file for the public facing interface of the proxy
|
## Path to SSL certificate file for the public facing interface of the proxy
|
||||||
|
@ -430,6 +510,24 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
# of checking authentication tokens.
|
# of checking authentication tokens.
|
||||||
#c.JupyterHub.trust_user_provided_tokens = False
|
#c.JupyterHub.trust_user_provided_tokens = False
|
||||||
|
|
||||||
|
## Names to include in the subject alternative name.
|
||||||
|
#
|
||||||
|
# These names will be used for server name verification. This is useful if
|
||||||
|
# JupyterHub is being run behind a reverse proxy or services using ssl are on
|
||||||
|
# different hosts.
|
||||||
|
#
|
||||||
|
# Use with internal_ssl
|
||||||
|
#c.JupyterHub.trusted_alt_names = []
|
||||||
|
|
||||||
|
## Downstream proxy IP addresses to trust.
|
||||||
|
#
|
||||||
|
# This sets the list of IP addresses that are trusted and skipped when
|
||||||
|
# processing the `X-Forwarded-For` header. For example, if an external proxy is
|
||||||
|
# used for TLS termination, its IP address should be added to this list to
|
||||||
|
# ensure the correct client IP addresses are recorded in the logs instead of the
|
||||||
|
# proxy server's IP address.
|
||||||
|
#c.JupyterHub.trusted_downstream_ips = []
|
||||||
|
|
||||||
## Upgrade the database automatically on start.
|
## Upgrade the database automatically on start.
|
||||||
#
|
#
|
||||||
# Only safe if database is regularly backed up. Only SQLite databases will be
|
# Only safe if database is regularly backed up. Only SQLite databases will be
|
||||||
|
@ -468,7 +566,7 @@ c.ConfigurableHTTPProxy.api_url = 'http://127.0.0.1:__PORT_HTTP_PROXY__'
|
||||||
# Some spawners allow shell-style expansion here, allowing you to use
|
# Some spawners allow shell-style expansion here, allowing you to use
|
||||||
# environment variables. Most, including the default, do not. Consult the
|
# environment variables. Most, including the default, do not. Consult the
|
||||||
# documentation for your spawner to verify!
|
# documentation for your spawner to verify!
|
||||||
c.Spawner.cmd = ['__FINAL_PATH__/bin/jupyter-labhub']
|
#c.Spawner.cmd = ['jupyterhub-singleuser']
|
||||||
|
|
||||||
## Maximum number of consecutive failures to allow before shutting down
|
## Maximum number of consecutive failures to allow before shutting down
|
||||||
# JupyterHub.
|
# JupyterHub.
|
||||||
|
@ -520,7 +618,7 @@ c.Spawner.cmd = ['__FINAL_PATH__/bin/jupyter-labhub']
|
||||||
# navigate the whole filesystem from their notebook server, but still start in their home directory.
|
# 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.
|
# - 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.
|
# - You can set this to `/lab` to have JupyterLab start by default, rather than Jupyter Notebook.
|
||||||
#c.Spawner.default_url = '/user/%U/lab'
|
c.Spawner.default_url = '/lab'
|
||||||
|
|
||||||
## Disable per-user configuration of single-user servers.
|
## Disable per-user configuration of single-user servers.
|
||||||
#
|
#
|
||||||
|
@ -675,6 +773,8 @@ c.Spawner.notebook_dir = '~/'
|
||||||
#
|
#
|
||||||
# This can be set independent of any concrete spawner implementation.
|
# This can be set independent of any concrete spawner implementation.
|
||||||
#
|
#
|
||||||
|
# This maybe a coroutine.
|
||||||
|
#
|
||||||
# Example::
|
# Example::
|
||||||
#
|
#
|
||||||
# from subprocess import check_call
|
# from subprocess import check_call
|
||||||
|
@ -685,6 +785,15 @@ c.Spawner.notebook_dir = '~/'
|
||||||
# c.Spawner.pre_spawn_hook = my_hook
|
# c.Spawner.pre_spawn_hook = my_hook
|
||||||
#c.Spawner.pre_spawn_hook = None
|
#c.Spawner.pre_spawn_hook = None
|
||||||
|
|
||||||
|
## List of SSL alt names
|
||||||
|
#
|
||||||
|
# May be set in config if all spawners should have the same value(s), or set at
|
||||||
|
# runtime by Spawner that know their names.
|
||||||
|
#c.Spawner.ssl_alt_names = []
|
||||||
|
|
||||||
|
## Whether to include DNS:localhost, IP:127.0.0.1 in alt names
|
||||||
|
#c.Spawner.ssl_alt_names_include_local = True
|
||||||
|
|
||||||
## Timeout (in seconds) before giving up on starting of single-user server.
|
## Timeout (in seconds) before giving up on starting of single-user server.
|
||||||
#
|
#
|
||||||
# This is the timeout for start to return, not the timeout for the server to
|
# This is the timeout for start to return, not the timeout for the server to
|
||||||
|
@ -693,66 +802,6 @@ c.Spawner.notebook_dir = '~/'
|
||||||
# and its location is known.
|
# and its location is known.
|
||||||
#c.Spawner.start_timeout = 60
|
#c.Spawner.start_timeout = 60
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# LocalProcessSpawner(Spawner) configuration
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
## A Spawner that uses `subprocess.Popen` to start single-user servers as local
|
|
||||||
# processes.
|
|
||||||
#
|
|
||||||
# Requires local UNIX users matching the authenticated users to exist. Does not
|
|
||||||
# work on Windows.
|
|
||||||
#
|
|
||||||
# This is the default spawner for JupyterHub.
|
|
||||||
#
|
|
||||||
# Note: This spawner does not implement CPU / memory guarantees and limits.
|
|
||||||
|
|
||||||
## Seconds to wait for single-user server process to halt after SIGINT.
|
|
||||||
#
|
|
||||||
# If the process has not exited cleanly after this many seconds, a SIGTERM is
|
|
||||||
# sent.
|
|
||||||
#c.LocalProcessSpawner.interrupt_timeout = 10
|
|
||||||
|
|
||||||
## Seconds to wait for process to halt after SIGKILL before giving up.
|
|
||||||
#
|
|
||||||
# If the process does not exit cleanly after this many seconds of SIGKILL, it
|
|
||||||
# becomes a zombie process. The hub process will log a warning and then give up.
|
|
||||||
#c.LocalProcessSpawner.kill_timeout = 5
|
|
||||||
|
|
||||||
## Extra keyword arguments to pass to Popen
|
|
||||||
#
|
|
||||||
# when spawning single-user servers.
|
|
||||||
#
|
|
||||||
# For example::
|
|
||||||
#
|
|
||||||
# popen_kwargs = dict(shell=True)
|
|
||||||
#c.LocalProcessSpawner.popen_kwargs = {}
|
|
||||||
|
|
||||||
## Specify a shell command to launch.
|
|
||||||
#
|
|
||||||
# The single-user command will be appended to this list, so it sould end with
|
|
||||||
# `-c` (for bash) or equivalent.
|
|
||||||
#
|
|
||||||
# For example::
|
|
||||||
#
|
|
||||||
# c.LocalProcessSpawner.shell_cmd = ['bash', '-l', '-c']
|
|
||||||
#
|
|
||||||
# to launch with a bash login shell, which would set up the user's own complete
|
|
||||||
# environment.
|
|
||||||
#
|
|
||||||
# .. warning::
|
|
||||||
#
|
|
||||||
# Using shell_cmd gives users control over PATH, etc.,
|
|
||||||
# which could change what the jupyterhub-singleuser launch command does.
|
|
||||||
# Only use this for trusted users.
|
|
||||||
#c.LocalProcessSpawner.shell_cmd = []
|
|
||||||
|
|
||||||
## Seconds to wait for single-user server process to halt after SIGTERM.
|
|
||||||
#
|
|
||||||
# If the process does not exit cleanly after this many seconds of SIGTERM, a
|
|
||||||
# SIGKILL is sent.
|
|
||||||
#c.LocalProcessSpawner.term_timeout = 5
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Authenticator(LoggingConfigurable) configuration
|
# Authenticator(LoggingConfigurable) configuration
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
@ -773,6 +822,15 @@ c.Spawner.notebook_dir = '~/'
|
||||||
# Defaults to an empty set, in which case no user has admin access.
|
# Defaults to an empty set, in which case no user has admin access.
|
||||||
c.Authenticator.admin_users = ["__ADMIN__"]
|
c.Authenticator.admin_users = ["__ADMIN__"]
|
||||||
|
|
||||||
|
## The max age (in seconds) of authentication info before forcing a refresh of
|
||||||
|
# user auth info.
|
||||||
|
#
|
||||||
|
# Refreshing auth info allows, e.g. requesting/re-validating auth tokens.
|
||||||
|
#
|
||||||
|
# See :meth:`.refresh_user` for what happens when user auth info is refreshed
|
||||||
|
# (nothing by default).
|
||||||
|
#c.Authenticator.auth_refresh_age = 300
|
||||||
|
|
||||||
## Automatically begin the login process
|
## Automatically begin the login process
|
||||||
#
|
#
|
||||||
# rather than starting with a "Login with..." link at `/hub/login`
|
# rather than starting with a "Login with..." link at `/hub/login`
|
||||||
|
@ -812,6 +870,49 @@ c.Authenticator.admin_users = ["__ADMIN__"]
|
||||||
# New in JupyterHub 0.8
|
# New in JupyterHub 0.8
|
||||||
#c.Authenticator.enable_auth_state = False
|
#c.Authenticator.enable_auth_state = False
|
||||||
|
|
||||||
|
## An optional hook function that you can implement to do some bootstrapping work
|
||||||
|
# during authentication. For example, loading user account details from an
|
||||||
|
# external system.
|
||||||
|
#
|
||||||
|
# This function is called after the user has passed all authentication checks
|
||||||
|
# and is ready to successfully authenticate. This function must return the
|
||||||
|
# authentication dict reguardless of changes to it.
|
||||||
|
#
|
||||||
|
# This maybe a coroutine.
|
||||||
|
#
|
||||||
|
# .. versionadded: 1.0
|
||||||
|
#
|
||||||
|
# Example::
|
||||||
|
#
|
||||||
|
# import os, pwd
|
||||||
|
# def my_hook(authenticator, handler, authentication):
|
||||||
|
# user_data = pwd.getpwnam(authentication['name'])
|
||||||
|
# spawn_data = {
|
||||||
|
# 'pw_data': user_data
|
||||||
|
# 'gid_list': os.getgrouplist(authentication['name'], user_data.pw_gid)
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# if authentication['auth_state'] is None:
|
||||||
|
# authentication['auth_state'] = {}
|
||||||
|
# authentication['auth_state']['spawn_data'] = spawn_data
|
||||||
|
#
|
||||||
|
# return authentication
|
||||||
|
#
|
||||||
|
# c.Authenticator.post_auth_hook = my_hook
|
||||||
|
#c.Authenticator.post_auth_hook = None
|
||||||
|
|
||||||
|
## Force refresh of auth prior to spawn.
|
||||||
|
#
|
||||||
|
# This forces :meth:`.refresh_user` to be called prior to launching a server, to
|
||||||
|
# ensure that auth state is up-to-date.
|
||||||
|
#
|
||||||
|
# This can be important when e.g. auth tokens that may have expired are passed
|
||||||
|
# to the spawner via environment variables from auth_state.
|
||||||
|
#
|
||||||
|
# If refresh_user cannot refresh the user auth data, launch will fail until the
|
||||||
|
# user logs in again.
|
||||||
|
#c.Authenticator.refresh_pre_spawn = False
|
||||||
|
|
||||||
## Dictionary mapping authenticator usernames to JupyterHub users.
|
## Dictionary mapping authenticator usernames to JupyterHub users.
|
||||||
#
|
#
|
||||||
# Primarily used to normalize OAuth user names to local users.
|
# Primarily used to normalize OAuth user names to local users.
|
||||||
|
@ -834,77 +935,6 @@ c.Authenticator.admin_users = ["__ADMIN__"]
|
||||||
# If empty, does not perform any additional restriction.
|
# If empty, does not perform any additional restriction.
|
||||||
#c.Authenticator.whitelist = set()
|
#c.Authenticator.whitelist = set()
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# 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
|
|
||||||
#
|
|
||||||
# For each element in the list, the string USERNAME will be replaced with the
|
|
||||||
# user's username. The username will also be appended as the final argument.
|
|
||||||
#
|
|
||||||
# For Linux, the default value is:
|
|
||||||
#
|
|
||||||
# ['adduser', '-q', '--gecos', '""', '--disabled-password']
|
|
||||||
#
|
|
||||||
# To specify a custom home directory, set this to:
|
|
||||||
#
|
|
||||||
# ['adduser', '-q', '--gecos', '""', '--home', '/customhome/USERNAME', '--
|
|
||||||
# disabled-password']
|
|
||||||
#
|
|
||||||
# This will run the command:
|
|
||||||
#
|
|
||||||
# adduser -q --gecos "" --home /customhome/river --disabled-password river
|
|
||||||
#
|
|
||||||
# when the user 'river' is created.
|
|
||||||
#c.LocalAuthenticator.add_user_cmd = []
|
|
||||||
|
|
||||||
## If set to True, will attempt to create local system users if they do not exist
|
|
||||||
# already.
|
|
||||||
#
|
|
||||||
# Supports Linux and BSD variants only.
|
|
||||||
#c.LocalAuthenticator.create_system_users = False
|
|
||||||
|
|
||||||
## Whitelist all users from this UNIX group.
|
|
||||||
#
|
|
||||||
# This makes the username whitelist ineffective.
|
|
||||||
#c.LocalAuthenticator.group_whitelist = set()
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# PAMAuthenticator(LocalAuthenticator) configuration
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
## Authenticate local UNIX users with PAM
|
|
||||||
|
|
||||||
## Whether to check the user's account status via PAM during authentication.
|
|
||||||
#
|
|
||||||
# The PAM account stack performs non-authentication based account management.
|
|
||||||
# It is typically used to restrict/permit access to a service and this step is
|
|
||||||
# needed to access the host's user access control.
|
|
||||||
#
|
|
||||||
# Disabling this can be dangerous as authenticated but unauthorized users may be
|
|
||||||
# granted access and, therefore, arbitrary execution on the system.
|
|
||||||
#c.PAMAuthenticator.check_account = True
|
|
||||||
|
|
||||||
## The text encoding to use when communicating with PAM
|
|
||||||
#c.PAMAuthenticator.encoding = 'utf8'
|
|
||||||
|
|
||||||
## Whether to open a new PAM session when spawners are started.
|
|
||||||
#
|
|
||||||
# This may trigger things like mounting shared filsystems, loading credentials,
|
|
||||||
# etc. depending on system configuration, but it does not always work.
|
|
||||||
#
|
|
||||||
# If any errors are encountered when opening/closing PAM sessions, this is
|
|
||||||
# automatically set to False.
|
|
||||||
#c.PAMAuthenticator.open_sessions = True
|
|
||||||
|
|
||||||
## The name of the PAM service to use for authentication
|
|
||||||
#c.PAMAuthenticator.service = 'login'
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# CryptKeeper(SingletonConfigurable) configuration
|
# CryptKeeper(SingletonConfigurable) configuration
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
@ -917,7 +947,7 @@ c.Authenticator.admin_users = ["__ADMIN__"]
|
||||||
#c.CryptKeeper.keys = []
|
#c.CryptKeeper.keys = []
|
||||||
|
|
||||||
## The number of threads to allocate for encryption
|
## The number of threads to allocate for encryption
|
||||||
#c.CryptKeeper.n_threads = 4
|
#c.CryptKeeper.n_threads = 8
|
||||||
|
|
||||||
c.LDAPAuthenticator.bind_dn_template = [ "uid={username},ou=users,dc=yunohost,dc=org" ]
|
c.LDAPAuthenticator.bind_dn_template = [ "uid={username},ou=users,dc=yunohost,dc=org" ]
|
||||||
c.LDAPAuthenticator.server_address = 'localhost'
|
c.LDAPAuthenticator.server_address = 'localhost'
|
||||||
|
|
13
conf/systemd.service
Normal file
13
conf/systemd.service
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Jupyterlab
|
||||||
|
After=syslog.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment="PATH=__NODE_PATH__:__FINALPATH__/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;JUPYTER_CONFIG_DIR=__FINALPATH__/config"
|
||||||
|
ExecStart=/usr/local/bin/pipenv run jupyterhub -f __FINALPATH__/config/jupyterhub_config.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
WorkingDirectory=__FINALPATH__
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -1,14 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Jupyterlab
|
|
||||||
After=syslog.target network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Environment="PATH=__FINALPATH__/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
ExecStart=__FINALPATH__/bin/jupyterhub -f __CONFIGPATH__/jupyterhub_config.py
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
WorkingDirectory=__FINALPATH__
|
|
||||||
LimitNOFILE=49152
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
|
@ -1,6 +0,0 @@
|
||||||
SOURCE_URL=https://repo.continuum.io/miniconda/Miniconda3-__VERSION__-Linux-x86_64.sh
|
|
||||||
SOURCE_SUM=__MD5_SUM__
|
|
||||||
SOURCE_SUM_PRG=md5sum
|
|
||||||
SOURCE_FILENAME=Miniconda3-__VERSION__-Linux-x86_64.sh
|
|
||||||
SOURCE_EXTRACT=false
|
|
||||||
SOURCE_FORMAT=sh
|
|
|
@ -1,6 +0,0 @@
|
||||||
SOURCE_URL=https://repo.continuum.io/miniconda/Miniconda3-__VERSION__-Linux-x86.sh
|
|
||||||
SOURCE_SUM=__MD5_SUM__
|
|
||||||
SOURCE_SUM_PRG=md5sum
|
|
||||||
SOURCE_FILENAME=Miniconda3-__VERSION__-Linux-x86.sh
|
|
||||||
SOURCE_EXTRACT=false
|
|
||||||
SOURCE_FORMAT=sh
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "JupyterLab",
|
"name": "JupyterLab",
|
||||||
"id": "jupyterlab",
|
"id": "jupyterlab",
|
||||||
"packaging_format": 1,
|
"packaging_format": 1,
|
||||||
"version": "0.35.4~ynh4",
|
"version": "1.0.4~ynh1",
|
||||||
"description": {
|
"description": {
|
||||||
"en": "JupyterLab for Yunohost, an extensible environment for interactive and reproducible computing (notebook, terminal, text editor, file browser, rich outputs, etc.)",
|
"en": "JupyterLab for Yunohost, an extensible environment for interactive and reproducible computing (notebook, terminal, text editor, file browser, rich outputs, etc.)",
|
||||||
"fr": "JupyterLab pour YunoHost, un environnement informatique extensible, interactif et reproductible (bloc-notes, terminal, éditeur de texte, explorateur de fichiers, texte enrichi, etc.)"
|
"fr": "JupyterLab pour YunoHost, un environnement informatique extensible, interactif et reproductible (bloc-notes, terminal, éditeur de texte, explorateur de fichiers, texte enrichi, etc.)"
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
"email": ""
|
"email": ""
|
||||||
},
|
},
|
||||||
"requirements": {
|
"requirements": {
|
||||||
"yunohost": ">> 3.0.0"
|
"yunohost": ">= 3.5"
|
||||||
},
|
},
|
||||||
"multi_instance": true,
|
"multi_instance": true,
|
||||||
"services": [
|
"services": [
|
||||||
|
@ -38,8 +38,8 @@
|
||||||
"en": "Choose a path for JupyterLab",
|
"en": "Choose a path for JupyterLab",
|
||||||
"fr": "Choisissez un chemin pour JupyterLab"
|
"fr": "Choisissez un chemin pour JupyterLab"
|
||||||
},
|
},
|
||||||
"example": "/",
|
"example": "/jupyterlab",
|
||||||
"default": "/"
|
"default": "/jupyterlab"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "admin",
|
"name": "admin",
|
||||||
|
|
|
@ -1,179 +1,20 @@
|
||||||
#=================================================
|
#!/bin/bash
|
||||||
# SET ALL CONSTANTS
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
|
||||||
config_path="/etc/$app"
|
|
||||||
final_path="/opt/$app"
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# DETECT THE SYSTEM ARCHITECTURE
|
# COMMON VARIABLES
|
||||||
#=================================================
|
#=================================================
|
||||||
# Detect the system architecture to download the right file
|
|
||||||
# NOTE: `uname -m` is more accurate and universal than `arch`
|
# dependencies used by the app
|
||||||
# See https://en.wikipedia.org/wiki/Uname
|
pkg_dependencies="python3-pip"
|
||||||
if [ -n "$(uname -m | grep 64)" ]; then
|
|
||||||
miniconda_architecture="x86-64"
|
|
||||||
elif [ -n "$(uname -m | grep 86)" ]; then
|
|
||||||
miniconda_architecture="x86"
|
|
||||||
elif [ -n "$(uname -m | grep arm)" ]; then
|
|
||||||
miniconda_architecture="arm"
|
|
||||||
else
|
|
||||||
ynh_die "Unable to detect your achitecture, please open a bug describing \
|
|
||||||
your hardware and the result of the command \"uname -m\"." 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CREATE FOLDERS
|
# PERSONAL HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
create_dir() {
|
|
||||||
mkdir -p "$config_path"
|
|
||||||
}
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CONFIGURATION FILES FOR JUPYTERLAB
|
# EXPERIMENTAL HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
config_jupyterlab() {
|
|
||||||
ynh_print_info "Configuring JupyterLab..."
|
|
||||||
|
|
||||||
create_dir
|
|
||||||
|
|
||||||
jupyterlab_conf_path="$config_path/jupyterhub_config.py"
|
|
||||||
|
|
||||||
ynh_backup_if_checksum_is_different $jupyterlab_conf_path
|
|
||||||
|
|
||||||
# JupyterLab configuration
|
|
||||||
cp -f ../conf/jupyterhub_config.py $jupyterlab_conf_path
|
|
||||||
|
|
||||||
ynh_replace_string "__URL__" "https://$domain" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__PATH__" "${path_url%/}" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__PORT__" "$port" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__PORT_HUB__" "$port_hub" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__PORT_HTTP_PROXY__" "$port_http_proxy" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__FINAL_PATH__" "$final_path" $jupyterlab_conf_path
|
|
||||||
ynh_replace_string "__ADMIN__" "$admin" $jupyterlab_conf_path
|
|
||||||
|
|
||||||
ynh_store_file_checksum $jupyterlab_conf_path
|
|
||||||
}
|
|
||||||
|
|
||||||
config_jupyter_notebook() {
|
|
||||||
ynh_print_info "Configuring Jupyter Notebook..."
|
|
||||||
|
|
||||||
jupyter_notebook_conf_path="$final_path/etc/jupyter/jupyter_notebook_config.py"
|
|
||||||
|
|
||||||
ynh_backup_if_checksum_is_different $jupyter_notebook_conf_path
|
|
||||||
|
|
||||||
# Jupyter notebook configuration
|
|
||||||
cp -f ../conf/jupyter_notebook_config.py $jupyter_notebook_conf_path
|
|
||||||
|
|
||||||
ynh_replace_string "__ENABLE_TERMINAL__" "$enable_terminal" $jupyter_notebook_conf_path
|
|
||||||
|
|
||||||
ynh_store_file_checksum $jupyter_notebook_conf_path
|
|
||||||
}
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CREATE A DEDICATED SYSTEMD CONFIG
|
# FUTURE OFFICIAL HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
add_systemd_config() {
|
|
||||||
ynh_print_info "Adding Jupyterlab as a service..."
|
|
||||||
|
|
||||||
sudo cp ../conf/systemd.service.default ../conf/systemd.service
|
|
||||||
tempsystemdconf="../conf/systemd.service"
|
|
||||||
|
|
||||||
if test -n "${config_path:-}"; then
|
|
||||||
ynh_replace_string "__CONFIGPATH__" "$config_path" "$tempsystemdconf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ynh_add_systemd_config
|
|
||||||
}
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# REMOVE THE CONFIGURATION FILE FOR JUPYTERLAB
|
|
||||||
#=================================================
|
|
||||||
remove_config_jupyterlab() {
|
|
||||||
ynh_print_info "Removing the configuration file..."
|
|
||||||
|
|
||||||
ynh_secure_remove "$config_path/jupyterhub_config.py"
|
|
||||||
}
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# UPDATE SOURCES FILES
|
|
||||||
#=================================================
|
|
||||||
update_src_version() {
|
|
||||||
source ./upgrade.d/upgrade.sh
|
|
||||||
cp ../conf/arm.src.default ../conf/arm.src
|
|
||||||
ynh_replace_string "__VERSION__" "$berryconda3_version" "../conf/arm.src"
|
|
||||||
ynh_replace_string "__MD5_SUM__" "$berryconda3_arm_source_md5" "../conf/arm.src"
|
|
||||||
|
|
||||||
cp ../conf/x86-64.src.default ../conf/x86-64.src
|
|
||||||
ynh_replace_string "__VERSION__" "$miniconda3_version" "../conf/x86-64.src"
|
|
||||||
ynh_replace_string "__MD5_SUM__" "$miniconda3_x86_64_source_md5" "../conf/x86-64.src"
|
|
||||||
|
|
||||||
cp ../conf/x86.src.default ../conf/x86.src
|
|
||||||
ynh_replace_string "__VERSION__" "$miniconda3_version" "../conf/x86.src"
|
|
||||||
ynh_replace_string "__MD5_SUM__" "$miniconda3_x86_source_md5" "../conf/x86.src"
|
|
||||||
}
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# INSTALL JUPYTERLAB
|
|
||||||
#=================================================
|
|
||||||
# This function is inspired by the ynh_setup_source function, adapted to deal with .sh files
|
|
||||||
setup_source() {
|
|
||||||
local src_id=${1:-app} # If the argument is not given, source_id equals "app"
|
|
||||||
|
|
||||||
update_src_version # Update source file
|
|
||||||
|
|
||||||
# Load value from configuration file (see above for a small doc about this file
|
|
||||||
# format)
|
|
||||||
local src_url=$(grep 'SOURCE_URL=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_sum=$(grep 'SOURCE_SUM=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_sumprg=$(grep 'SOURCE_SUM_PRG=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_format=$(grep 'SOURCE_FORMAT=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_extract=$(grep 'SOURCE_EXTRACT=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_in_subdir=$(grep 'SOURCE_IN_SUBDIR=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
local src_filename=$(grep 'SOURCE_FILENAME=' "$YNH_CWD/../conf/${src_id}.src" | cut -d= -f2-)
|
|
||||||
|
|
||||||
# Default value
|
|
||||||
src_sumprg=${src_sumprg:-sha256sum}
|
|
||||||
src_in_subdir=${src_in_subdir:-true}
|
|
||||||
src_format=${src_format:-tar.gz}
|
|
||||||
src_format=$(echo "$src_format" | tr '[:upper:]' '[:lower:]')
|
|
||||||
src_extract=${src_extract:-true}
|
|
||||||
if [ "$src_filename" = "" ]; then
|
|
||||||
src_filename="${src_id}.${src_format}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! test -e "$final_path"; then
|
|
||||||
|
|
||||||
local local_src="/opt/yunohost-apps-src/${YNH_APP_ID}/${src_filename}"
|
|
||||||
|
|
||||||
ynh_print_info "Downloading anaconda files (used by JupyterLab)..."
|
|
||||||
|
|
||||||
if test -e "$local_src"; then # Use the local source file if it is present
|
|
||||||
cp $local_src $src_filename
|
|
||||||
else # If not, download the source
|
|
||||||
wget -q --show-progress -O $src_filename $src_url
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check the control sum
|
|
||||||
echo "${src_sum} ${src_filename}" | ${src_sumprg} -c --status ||
|
|
||||||
ynh_die "Corrupt source"
|
|
||||||
|
|
||||||
ynh_print_info "Installing anaconda (used by JupyterLab)..."
|
|
||||||
|
|
||||||
bash $src_filename -b -p $final_path
|
|
||||||
fi
|
|
||||||
|
|
||||||
export "PATH=$final_path/bin/:$PATH"
|
|
||||||
|
|
||||||
ynh_print_info "Installing JupyterLab..."
|
|
||||||
|
|
||||||
if [ "$src_id" = "arm" ]; then
|
|
||||||
conda install jupyterlab=$jupyterlab_version notebook nodejs pyyaml -y
|
|
||||||
pip install jupyterhub jupyterhub-ldapauthenticator
|
|
||||||
else
|
|
||||||
conda install -c conda-forge jupyterlab=$jupyterlab_version jupyterhub notebook jupyterhub-ldapauthenticator nodejs pyyaml -y
|
|
||||||
fi
|
|
||||||
|
|
||||||
npm install -g configurable-http-proxy
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,59 +6,71 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Source YunoHost helpers
|
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
||||||
source /usr/share/yunohost/helpers
|
|
||||||
|
|
||||||
# Load common variables and helpers
|
|
||||||
source ../settings/scripts/_common.sh
|
source ../settings/scripts/_common.sh
|
||||||
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_clean_setup() {
|
ynh_clean_setup () {
|
||||||
|
ynh_clean_check_starting
|
||||||
true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..." --time --weight=1
|
||||||
|
|
||||||
# Copy NGINX configuration
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
domain=$(ynh_app_setting_get "$app" domain)
|
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD BACKUP STEPS
|
# STANDARD BACKUP STEPS
|
||||||
|
#=================================================
|
||||||
|
# STOP SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="stop"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP THE APP MAIN DIR
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up the main app directory..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_backup --src_path="$final_path"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP THE NGINX CONFIGURATION
|
# BACKUP THE NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up nginx web server configuration..." --time --weight=1
|
||||||
|
|
||||||
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
|
ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP JUPYTERLAB
|
# SPECIFIC BACKUP
|
||||||
#=================================================
|
|
||||||
|
|
||||||
ynh_print_info "Backuping of JupyterLab..."
|
|
||||||
|
|
||||||
ynh_backup "$final_path/jupyterhub.sqlite"
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# BACKUP CONF FILES
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
ynh_print_info "Backuping configuration files of JupyterLab..."
|
|
||||||
|
|
||||||
ynh_backup "$config_path/jupyterhub_config.py"
|
|
||||||
ynh_backup "$final_path/etc/jupyter/jupyter_notebook_config.py"
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP SYSTEMD
|
# BACKUP SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up systemd configuration..." --time --weight=1
|
||||||
|
|
||||||
ynh_backup "/etc/systemd/system/$app.service"
|
ynh_backup --src_path="/etc/systemd/system/$app.service"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --line_match="JupyterHub is now running at" --log_path="systemd"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --time --last
|
||||||
|
|
|
@ -1,20 +1,13 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC START
|
# GENERIC STARTING
|
||||||
#=================================================
|
#=================================================
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# IMPORT GENERIC HELPERS
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source ./experimental_helper.sh
|
|
||||||
|
|
||||||
# Exit if an error occurs during the execution of the script
|
|
||||||
ynh_abort_if_errors
|
|
||||||
|
|
||||||
# Import common cmd
|
|
||||||
source ./_common.sh
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RETRIEVE ARGUMENTS
|
# RETRIEVE ARGUMENTS
|
||||||
|
@ -31,56 +24,52 @@ app=$YNH_APP_INSTANCE_NAME
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..." --time --weight=1
|
||||||
|
|
||||||
admin=$(ynh_app_setting_get "$app" admin)
|
# Needed for helper "ynh_add_nginx_config"
|
||||||
port=$(ynh_app_setting_get "$app" port)
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
port_hub=$(ynh_app_setting_get "$app" port_hub)
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
port_http_proxy=$(ynh_app_setting_get "$app" port_http_proxy)
|
port_hub=$(ynh_app_setting_get --app=$app --key=port_hub)
|
||||||
|
port_http_proxy=$(ynh_app_setting_get --app=$app --key=port_http_proxy)
|
||||||
#=================================================
|
admin=$(ynh_app_setting_get --app=$app --key=admin)
|
||||||
# CHECK PATHS SYNTAX
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
test -n "$old_path" || old_path="/"
|
|
||||||
test -n "$new_path" || new_path="/"
|
|
||||||
new_path=$(ynh_normalize_url_path $new_path)
|
|
||||||
old_path=$(ynh_normalize_url_path $old_path)
|
|
||||||
|
|
||||||
domain="$new_domain"
|
|
||||||
path_url="$new_path"
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CHECK WHICH PARTS SHOULD BE CHANGED
|
# CHECK WHICH PARTS SHOULD BE CHANGED
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
change_domain=0
|
change_domain=0
|
||||||
if [ "$old_domain" != "$new_domain" ]; then
|
if [ "$old_domain" != "$new_domain" ]
|
||||||
|
then
|
||||||
change_domain=1
|
change_domain=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
change_path=0
|
change_path=0
|
||||||
if [ "$old_path" != "$new_path" ]; then
|
if [ "$old_path" != "$new_path" ]
|
||||||
|
then
|
||||||
change_path=1
|
change_path=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD MODIFICATIONS
|
# STANDARD MODIFICATIONS
|
||||||
#=================================================
|
#=================================================
|
||||||
# STOP SERVICE
|
# STOP SYSTEMD SERVICE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping a systemd service..." --time --weight=1
|
||||||
|
|
||||||
yunohost service stop jupyterlab
|
ynh_systemd_action --service_name=$app --action="stop"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MODIFY URL IN NGINX
|
# MODIFY URL IN NGINX CONF
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Updating nginx web server configuration..." --time --weight=1
|
||||||
|
|
||||||
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf
|
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf
|
||||||
|
|
||||||
if [ $change_path -eq 1 ]; then
|
# Change the path in the nginx config file
|
||||||
ynh_print_info "Changing path..."
|
if [ $change_path -eq 1 ]
|
||||||
|
then
|
||||||
# Make a backup of the original nginx config file if modified
|
# Make a backup of the original nginx config file if modified
|
||||||
ynh_backup_if_checksum_is_different "$nginx_conf_path"
|
ynh_backup_if_checksum_is_different --file="$nginx_conf_path"
|
||||||
# Set global variables for nginx helper
|
# Set global variables for nginx helper
|
||||||
domain="$old_domain"
|
domain="$old_domain"
|
||||||
path_url="$new_path"
|
path_url="$new_path"
|
||||||
|
@ -89,32 +78,55 @@ if [ $change_path -eq 1 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Change the domain for nginx
|
# Change the domain for nginx
|
||||||
if [ $change_domain -eq 1 ]; then
|
if [ $change_domain -eq 1 ]
|
||||||
ynh_print_info "Changing domain..."
|
then
|
||||||
|
|
||||||
# Delete file checksum for the old conf file location
|
# Delete file checksum for the old conf file location
|
||||||
ynh_delete_file_checksum "$nginx_conf_path"
|
ynh_delete_file_checksum --file="$nginx_conf_path"
|
||||||
mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
|
mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
|
||||||
# Store file checksum for the new config file location
|
# Store file checksum for the new config file location
|
||||||
ynh_store_file_checksum "/etc/nginx/conf.d/$new_domain.d/$app.conf"
|
ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC MODIFICATIONS
|
||||||
#=================================================
|
#=================================================
|
||||||
# CONFIGURE JUPYTERLAB
|
# CONFIGURE JUPYTERLAB
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
config_jupyterlab
|
ynh_backup_if_checksum_is_different --file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
|
domain=$new_domain
|
||||||
|
path_url=$new_path
|
||||||
|
|
||||||
|
cp -f ../conf/jupyterhub_config.py $final_path/config/jupyterhub_config.py
|
||||||
|
ynh_replace_string --match_string="__URL__" --replace_string="https://$domain" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PATH__" --replace_string="${path_url%/}" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HUB__" --replace_string="$port_hub" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HTTP_PROXY__" --replace_string="$port_http_proxy" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__FINAL_PATH__" --replace_string="$final_path" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
|
ynh_store_file_checksum --file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALISATION
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --line_match="JupyterHub is now running at" --log_path="systemd"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
|
||||||
|
|
||||||
systemctl reload nginx
|
ynh_systemd_action --service_name=nginx --action=reload
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# START SERVICE
|
# END OF SCRIPT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_systemd_action -n $app -a restart -l "JupyterHub is now running at" -p "systemd"
|
ynh_script_progression --message="Change of URL completed for $app" --time --last
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started
|
|
||||||
#
|
|
||||||
# usage: ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ]
|
|
||||||
# | arg: -n, --service_name= - Name of the service to reload. Default : $app
|
|
||||||
# | arg: -a, --action= - Action to perform with systemctl. Default: start
|
|
||||||
# | arg: -l, --line_match= - Line to match - The line to find in the log to attest the service have finished to boot.
|
|
||||||
# If not defined it don't wait until the service is completely started.
|
|
||||||
# | arg: -p, --log_path= - Log file - Path to the log file. Default : /var/log/$app/$app.log
|
|
||||||
# | arg: -t, --timeout= - Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.
|
|
||||||
# | arg: -e, --length= - Length of the error log : Default : 20
|
|
||||||
ynh_systemd_action() {
|
|
||||||
|
|
||||||
# Declare an array to define the options of this helper.
|
|
||||||
declare -Ar args_array=([n]=service_name= [a]=action= [l]=line_match= [p]=log_path= [t]=timeout= [e]=length=)
|
|
||||||
local service_name
|
|
||||||
local action
|
|
||||||
local line_match
|
|
||||||
local length
|
|
||||||
local log_path
|
|
||||||
local timeout
|
|
||||||
|
|
||||||
# Manage arguments with getopts
|
|
||||||
ynh_handle_getopts_args "$@"
|
|
||||||
|
|
||||||
local service_name="${service_name:-$app}"
|
|
||||||
local action=${action:-start}
|
|
||||||
local log_path="${log_path:-/var/log/$service_name/$service_name.log}"
|
|
||||||
local length=${length:-20}
|
|
||||||
local timeout=${timeout:-300}
|
|
||||||
|
|
||||||
ynh_print_info "Waiting for a response from $service_name..."
|
|
||||||
|
|
||||||
# Start to read the log
|
|
||||||
if [[ -n "${line_match:-}" ]]; then
|
|
||||||
local templog="$(mktemp)"
|
|
||||||
# Following the starting of the app in its log
|
|
||||||
if [ "$log_path" == "systemd" ]; then
|
|
||||||
# Read the systemd journal
|
|
||||||
journalctl -u $service_name -f -n0 >"$templog" &
|
|
||||||
else
|
|
||||||
# Read the specified log file
|
|
||||||
tail -F -n0 "$log_path" >"$templog" &
|
|
||||||
fi
|
|
||||||
# Get the PID of the tail command
|
|
||||||
local pid_tail=$!
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${action^} the service $service_name" >&2
|
|
||||||
systemctl $action $service_name ||
|
|
||||||
(
|
|
||||||
journalctl --lines=$length -u $service_name >&2 \
|
|
||||||
;
|
|
||||||
test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 \
|
|
||||||
;
|
|
||||||
false
|
|
||||||
)
|
|
||||||
|
|
||||||
# Start the timeout and try to find line_match
|
|
||||||
if [[ -n "${line_match:-}" ]]; then
|
|
||||||
local i=0
|
|
||||||
for i in $(seq 1 $timeout); do
|
|
||||||
# Read the log until the sentence is found, that means the app finished to start. Or run until the timeout
|
|
||||||
if grep --quiet "$line_match" "$templog"; then
|
|
||||||
echo "The service $service_name has correctly started." >&2
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
echo -n "." >&2
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if [ $i -eq $timeout ]; then
|
|
||||||
echo "The service $service_name didn't fully started before the timeout." >&2
|
|
||||||
journalctl --lines=$length -u $service_name >&2
|
|
||||||
test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
ynh_clean_check_starting
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Clean temporary process and file used by ynh_check_starting
|
|
||||||
# (usually used in ynh_clean_setup scripts)
|
|
||||||
#
|
|
||||||
# usage: ynh_clean_check_starting
|
|
||||||
ynh_clean_check_starting() {
|
|
||||||
# Stop the execution of tail.
|
|
||||||
kill -s 15 $pid_tail 2>&1
|
|
||||||
ynh_secure_remove "$templog" 2>&1
|
|
||||||
}
|
|
212
scripts/install
212
scripts/install
|
@ -6,144 +6,200 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source ./experimental_helper.sh
|
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# MANAGE SCRIPT FAILURE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_clean_setup () {
|
||||||
|
ynh_clean_check_starting
|
||||||
|
}
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
# Load common variables and helpers
|
|
||||||
source ./_common.sh
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RETRIEVE ARGUMENTS
|
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Retrieve arguments
|
|
||||||
domain=$YNH_APP_ARG_DOMAIN
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
path_url=$YNH_APP_ARG_PATH
|
path_url=$YNH_APP_ARG_PATH
|
||||||
is_public=$YNH_APP_ARG_IS_PUBLIC
|
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||||
admin=$YNH_APP_ARG_ADMIN
|
admin=$YNH_APP_ARG_ADMIN
|
||||||
enable_terminal=$YNH_APP_ARG_ENABLE_TERMINAL
|
enable_terminal=$YNH_APP_ARG_ENABLE_TERMINAL
|
||||||
|
|
||||||
#=================================================
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
# REGISTER DOMAIN
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Normalize the url path syntax
|
|
||||||
test -n "$path_url" || path_url="/"
|
|
||||||
path_url=$(ynh_normalize_url_path $path_url)
|
|
||||||
|
|
||||||
# This function check also the availability of this one
|
|
||||||
ynh_webpath_register $app $domain $path_url
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REGISTER DOMAIN
|
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Validating installation parameters..." --weight=1
|
||||||
|
|
||||||
# Check user parameter
|
final_path=/opt/$app
|
||||||
ynh_user_exists "$admin" ||
|
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
|
||||||
ynh_die "The chosen admin user does not exist."
|
|
||||||
|
# Register (book) web path
|
||||||
|
ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STORE SETTINGS FROM MANIFEST
|
# STORE SETTINGS FROM MANIFEST
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Storing installation settings..." --weight=1
|
||||||
|
|
||||||
ynh_app_setting_set $app admin $admin
|
ynh_app_setting_set --app=$app --key=domain --value=$domain
|
||||||
ynh_app_setting_set $app domain $domain
|
ynh_app_setting_set --app=$app --key=path --value=$path_url
|
||||||
ynh_app_setting_set $app path_url $path_url
|
ynh_app_setting_set --app=$app --key=admin --value=$admin
|
||||||
ynh_app_setting_set $app is_public $is_public
|
ynh_app_setting_set --app=$app --key=is_public --value=$is_public
|
||||||
ynh_app_setting_set $app enable_terminal $enable_terminal
|
ynh_app_setting_set --app=$app --key=enable_terminal --value=$enable_terminal
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD MODIFICATIONS
|
# STANDARD MODIFICATIONS
|
||||||
#=================================================
|
#=================================================
|
||||||
# FIND AND OPEN PORTS
|
# FIND AND OPEN A PORT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring firewall..." --weight=1
|
||||||
|
|
||||||
ynh_print_info "Getting ports..."
|
# Find a free port
|
||||||
|
port=$(ynh_find_port --port=8080)
|
||||||
|
port_hub=$(ynh_find_port --port=$(($port + 1)))
|
||||||
|
port_http_proxy=$(ynh_find_port --port=$(($port_hub + 1)))
|
||||||
|
|
||||||
# Find free ports
|
# Open this port
|
||||||
port=$(ynh_find_port 8080)
|
#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port
|
||||||
port_hub=$(ynh_find_port $(($port + 1)))
|
#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port_hub
|
||||||
port_http_proxy=$(ynh_find_port $(($port_hub + 1)))
|
#ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port_http_proxy
|
||||||
|
ynh_app_setting_set --app=$app --key=port --value=$port
|
||||||
|
ynh_app_setting_set --app=$app --key=port_hub --value=$port_hub
|
||||||
|
ynh_app_setting_set --app=$app --key=port_http_proxy --value=$port_http_proxy
|
||||||
|
|
||||||
yunohost firewall allow --no-upnp TCP $port 2>&1
|
#=================================================
|
||||||
yunohost firewall allow --no-upnp TCP $port_hub 2>&1
|
# INSTALL DEPENDENCIES
|
||||||
yunohost firewall allow --no-upnp TCP $port_http_proxy 2>&1
|
#=================================================
|
||||||
ynh_app_setting_set $app port $port
|
ynh_script_progression --message="Installing dependencies..." --weight=23
|
||||||
ynh_app_setting_set $app port_hub $port_hub
|
|
||||||
ynh_app_setting_set $app port_http_proxy $port_http_proxy
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
|
||||||
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=8
|
||||||
|
|
||||||
|
pip3 install pipenv
|
||||||
|
|
||||||
|
npm install -g configurable-http-proxy
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Setting up source files..." --weight=64
|
||||||
|
|
||||||
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
|
|
||||||
|
source ./upgrade.d/upgrade.sh
|
||||||
|
|
||||||
|
mkdir -p $final_path
|
||||||
|
|
||||||
|
pushd $final_path
|
||||||
|
|
||||||
|
export PIPENV_VENV_IN_PROJECT="enabled"
|
||||||
|
|
||||||
|
ynh_exec_warn_less pipenv install jupyterlab==$jupyterlab_version jupyterhub notebook jupyterhub-ldapauthenticator --three
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# NGINX CONFIGURATION
|
# NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring nginx web server..." --weight=1
|
||||||
|
|
||||||
# Create a dedicated nginx config
|
# Create a dedicated nginx config
|
||||||
ynh_add_nginx_config
|
ynh_add_nginx_config
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CONFIGURE JUPYTERLAB
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Configure jupyterlab with jupyterhub_config.py file
|
|
||||||
config_jupyterlab
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# DOWNLOAD, CHECK AND INSTALL JUPYTERLAB
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
setup_source $miniconda_architecture
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SPECIFIC SETUP
|
# SPECIFIC SETUP
|
||||||
#=================================================
|
|
||||||
# ADD HUB EXTENSION
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
jupyter labextension install @jupyterlab/hub-extension
|
|
||||||
jupyter lab build
|
|
||||||
|
|
||||||
chown $admin -R $final_path/share/jupyter
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CONFIGURE JUPYTER NOTEBOOK
|
|
||||||
#=================================================
|
|
||||||
config_jupyter_notebook
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SYSTEMD
|
# SETUP SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring a systemd service..." --weight=3
|
||||||
|
|
||||||
# Create a dedicated systemd config
|
# Create a dedicated systemd config
|
||||||
add_systemd_config
|
ynh_replace_string --match_string="__NODE_PATH__" --replace_string="$nodejs_path" --target_file="../conf/systemd.service"
|
||||||
|
|
||||||
|
ynh_add_systemd_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SSOWAT
|
# MODIFY A CONFIG FILE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# If app is public, add url to SSOWat conf as skipped_uris
|
mkdir -p "$final_path/config"
|
||||||
if [[ $is_public -eq 1 ]]; then
|
|
||||||
# unprotected_uris allows SSO credentials to be passed anyway.
|
# JupyterHub configuration
|
||||||
ynh_app_setting_set "$app" unprotected_uris "/"
|
cp -f ../conf/jupyterhub_config.py $final_path/config/jupyterhub_config.py
|
||||||
fi
|
|
||||||
|
ynh_replace_string --match_string="__URL__" --replace_string="https://$domain" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PATH__" --replace_string="${path_url%/}" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HUB__" --replace_string="$port_hub" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HTTP_PROXY__" --replace_string="$port_http_proxy" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__FINAL_PATH__" --replace_string="$final_path" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
|
# Jupyter notebook configuration
|
||||||
|
cp -f ../conf/jupyter_notebook_config.py $final_path/config/jupyter_notebook_config.py
|
||||||
|
|
||||||
|
ynh_replace_string --match_string="__ENABLE_TERMINAL__" --replace_string="$enable_terminal" --target_file="$final_path/config/jupyter_notebook_config.py"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALISATION
|
# STORE THE CONFIG FILE CHECKSUM
|
||||||
#=================================================
|
|
||||||
# RELOAD NGINX
|
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
systemctl reload nginx
|
# Calculate and store the config file checksum into the app settings
|
||||||
|
ynh_store_file_checksum --file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_store_file_checksum --file="$final_path/config/jupyter_notebook_config.py"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
|
#=================================================
|
||||||
|
# SECURE FILES AND DIRECTORIES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Set permissions to app files
|
||||||
|
chown -R root: $final_path
|
||||||
|
chown -R $admin: $final_path/.venv/share
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# ADVERTISE SERVICE IN ADMIN PANEL
|
# ADVERTISE SERVICE IN ADMIN PANEL
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
yunohost service add $app --log "systemd"
|
yunohost service add $app --description "$app daemon" --log_type "systemd" --log "$app"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# START SERVICE
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --weight=3
|
||||||
|
|
||||||
|
# Start a systemd service
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --line_match="JupyterHub is now running at" --log_path="systemd"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SSOWAT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring SSOwat..." --weight=4
|
||||||
|
|
||||||
|
# Make app public if necessary
|
||||||
|
if [ $is_public -eq 1 ]
|
||||||
|
then
|
||||||
|
# unprotected_uris allows SSO credentials to be passed anyway.
|
||||||
|
ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RELOAD NGINX
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reloading nginx web server..." --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=nginx --action=reload
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_systemd_action -n $app -a start -l "JupyterHub is now running at" -p "systemd"
|
ynh_script_progression --message="Installation of $app completed" --last
|
||||||
|
|
101
scripts/remove
101
scripts/remove
|
@ -6,86 +6,93 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Source YunoHost helpers
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
# Load common variables and helpers
|
|
||||||
source ./_common.sh
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..." --weight=1
|
||||||
|
|
||||||
# See comments in install script
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
domain=$(ynh_app_setting_get "$app" domain)
|
|
||||||
port=$(ynh_app_setting_get "$app" port)
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
port_hub=$(ynh_app_setting_get "$app" port_hub)
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
port_http_proxy=$(ynh_app_setting_get "$app" port_http_proxy)
|
port_hub=$(ynh_app_setting_get --app=$app --key=port_hub)
|
||||||
|
port_http_proxy=$(ynh_app_setting_get --app=$app --key=port_http_proxy)
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD REMOVE
|
# STANDARD REMOVE
|
||||||
#=================================================
|
|
||||||
# STOP AND REMOVE SERVICE
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Remove the dedicated systemd config
|
|
||||||
ynh_remove_systemd_config
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE SERVICE FROM ADMIN PANEL
|
# REMOVE SERVICE FROM ADMIN PANEL
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Remove a service from the admin panel, added by `yunohost service add`
|
# Remove a service from the admin panel, added by `yunohost service add`
|
||||||
if yunohost service status | grep -q $app; then
|
if ynh_exec_warn_less yunohost service status $app >/dev/null
|
||||||
echo "Remove $app service"
|
then
|
||||||
|
ynh_script_progression --message="Removing $app service..." --weight=2
|
||||||
yunohost service remove $app
|
yunohost service remove $app
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE CONF FILE
|
# STOP AND REMOVE SERVICE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping and removing the systemd service..." --weight=2
|
||||||
|
|
||||||
# Remove Config
|
# Remove the dedicated systemd config
|
||||||
remove_config_jupyterlab
|
ynh_remove_systemd_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing dependencies..." --weight=4
|
||||||
|
|
||||||
|
# Remove metapackage and its dependencies
|
||||||
|
ynh_remove_app_dependencies
|
||||||
|
|
||||||
|
ynh_remove_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE APP MAIN DIR
|
# REMOVE APP MAIN DIR
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing app main directory..." --weight=1
|
||||||
|
|
||||||
ynh_print_info "Removing JupyterLab..."
|
# Remove the app directory securely
|
||||||
|
ynh_secure_remove --file="$final_path"
|
||||||
ynh_secure_remove "$final_path"
|
|
||||||
ynh_secure_remove "$config_path"
|
|
||||||
|
|
||||||
# Remove the log files
|
|
||||||
ynh_secure_remove "/var/log/$app.log"
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CLOSE PORTS
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
if yunohost firewall list | grep -q "\- $port$"; then
|
|
||||||
echo "Close port $port" >&2
|
|
||||||
yunohost firewall disallow TCP $port 2>&1
|
|
||||||
fi
|
|
||||||
if yunohost firewall list | grep -q "\- $port_hub$"; then
|
|
||||||
echo "Close port $port_hub" >&2
|
|
||||||
yunohost firewall disallow TCP $port_hub 2>&1
|
|
||||||
fi
|
|
||||||
if yunohost firewall list | grep -q "\- $port_http_proxy$"; then
|
|
||||||
echo "Close port $port_http_proxy" >&2
|
|
||||||
yunohost firewall disallow TCP $port_http_proxy 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE NGINX CONFIGURATION
|
# REMOVE NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing nginx web server configuration..." --weight=1
|
||||||
|
|
||||||
|
# Remove the dedicated nginx config
|
||||||
ynh_remove_nginx_config
|
ynh_remove_nginx_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# REMOVE LOGROTATE CONFIGURATION
|
# CLOSE A PORT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
#ynh_remove_logrotate
|
if yunohost firewall list | grep -q "\- $port$"
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Closing port $port..."
|
||||||
|
ynh_exec_warn_less yunohost firewall disallow TCP $port
|
||||||
|
fi
|
||||||
|
|
||||||
|
if yunohost firewall list | grep -q "\- $port_hub$"
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Closing port $port_hub..."
|
||||||
|
ynh_exec_warn_less yunohost firewall disallow TCP $port_hub
|
||||||
|
fi
|
||||||
|
|
||||||
|
if yunohost firewall list | grep -q "\- $port_http_proxy$"
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Closing port $port_http_proxy..."
|
||||||
|
ynh_exec_warn_less yunohost firewall disallow TCP $port_http_proxy
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_script_progression --message="Removal of $app completed" --last
|
||||||
|
|
115
scripts/restore
115
scripts/restore
|
@ -6,52 +6,41 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# Source YunoHost helpers
|
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
# Exit if an error occurs during the execution of the script
|
|
||||||
ynh_abort_if_errors
|
|
||||||
|
|
||||||
if [ ! -e _common.sh ]; then
|
|
||||||
# Get the _common.sh file if it's not in the current directory
|
|
||||||
cp ../settings/scripts/_common.sh ./_common.sh
|
|
||||||
cp ../settings/scripts/experimental_helper.sh ./experimental_helper.sh
|
|
||||||
mkdir ./upgrade.d
|
|
||||||
mkdir ../conf
|
|
||||||
cp ../settings/scripts/upgrade.d/*.sh ./upgrade.d/
|
|
||||||
cp ../settings/conf/*.default ../conf/
|
|
||||||
chmod a+rx _common.sh experimental_helper.sh upgrade.d/*
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load common variables and helpers
|
|
||||||
source _common.sh
|
|
||||||
source experimental_helper.sh
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_clean_setup() {
|
ynh_clean_setup () {
|
||||||
|
ynh_clean_check_starting
|
||||||
true
|
|
||||||
}
|
}
|
||||||
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading settings..." --time --weight=1
|
||||||
|
|
||||||
# Copy NGINX configuration
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
domain=$(ynh_app_setting_get "$app" domain)
|
|
||||||
path_url=$(ynh_app_setting_get "$app" path_url)
|
admin=$(ynh_app_setting_get --app=$app --key=admin)
|
||||||
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
|
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CHECK IF THE APP CAN BE RESTORED
|
# CHECK IF THE APP CAN BE RESTORED
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Validating restoration parameters..." --time --weight=1
|
||||||
|
|
||||||
ynh_webpath_available $domain $path_url ||
|
ynh_webpath_available --domain=$domain --path_url=$path_url \
|
||||||
ynh_die "Path not available: ${domain}${path_url}"
|
|| ynh_die --message="Path not available: ${domain}${path_url}"
|
||||||
test ! -d $final_path ||
|
test ! -d $final_path \
|
||||||
ynh_die "There is already a directory: $final_path "
|
|| ynh_die --message="There is already a directory: $final_path "
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD RESTORATION STEPS
|
# STANDARD RESTORATION STEPS
|
||||||
|
@ -59,51 +48,71 @@ test ! -d $final_path ||
|
||||||
# RESTORE THE NGINX CONFIGURATION
|
# RESTORE THE NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
|
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# REINSTALL DEPENDENCIES
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
ynh_install_app_dependencies openssh-server
|
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# RESTORE CONF FILES
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
ynh_print_info "Restoring configuration files of JupyerLab..."
|
|
||||||
|
|
||||||
create_dir
|
|
||||||
|
|
||||||
ynh_restore_file "$config_path/jupyterhub_config.py"
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RESTORE THE APP MAIN DIR
|
# RESTORE THE APP MAIN DIR
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Restoring the app main directory..." --time --weight=1
|
||||||
|
|
||||||
ynh_print_info "Restoring JupyterLab..."
|
ynh_restore_file --origin_path="$final_path"
|
||||||
|
|
||||||
setup_source $miniconda_architecture
|
#=================================================
|
||||||
|
# RESTORE USER RIGHTS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
ynh_restore_file "$final_path/etc/jupyter/jupyter_notebook_config.py"
|
# Restore permissions on app files
|
||||||
|
chown -R root: $final_path
|
||||||
|
chown -R $admin: $final_path/.venv/share
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SPECIFIC RESTORATION
|
# SPECIFIC RESTORATION
|
||||||
|
#=================================================
|
||||||
|
# REINSTALL DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1
|
||||||
|
|
||||||
|
# Define and install dependencies
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
|
||||||
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=8
|
||||||
|
|
||||||
|
pip3 install pipenv
|
||||||
|
|
||||||
|
npm install -g configurable-http-proxy
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RESTORE SYSTEMD
|
# RESTORE SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Restoring the systemd configuration..." --time --weight=1
|
||||||
|
|
||||||
ynh_restore_file "/etc/systemd/system/$app.service"
|
ynh_restore_file --origin_path="/etc/systemd/system/$app.service"
|
||||||
systemctl enable $app.service
|
systemctl enable $app.service
|
||||||
|
|
||||||
yunohost service add $app --log "systemd"
|
#=================================================
|
||||||
|
# ADVERTISE SERVICE IN ADMIN PANEL
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
yunohost service add $app --description "$app daemon" --log_type "systemd" --log "$app"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --line_match="JupyterHub is now running at" --log_path="systemd"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALIZATION
|
# GENERIC FINALIZATION
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
|
||||||
|
|
||||||
systemctl reload nginx
|
ynh_systemd_action --service_name=nginx --action=reload
|
||||||
|
|
||||||
ynh_systemd_action -n $app -a start -l "JupyterHub is now running at" -p "systemd"
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_script_progression --message="Restoration completed for $app" --time --last
|
||||||
|
|
195
scripts/upgrade
195
scripts/upgrade
|
@ -6,124 +6,201 @@
|
||||||
# IMPORT GENERIC HELPERS
|
# IMPORT GENERIC HELPERS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# IMPORT GENERIC HELPERS
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source ./experimental_helper.sh
|
|
||||||
|
|
||||||
# Load common variables and helpers
|
|
||||||
source ./_common.sh
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..." --time --weight=1
|
||||||
|
|
||||||
app=$YNH_APP_INSTANCE_NAME
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
# Retrieve app settings
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
domain=$(ynh_app_setting_get "$app" domain)
|
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||||
path_url=$(ynh_app_setting_get "$app" path_url)
|
admin=$(ynh_app_setting_get --app=$app --key=admin)
|
||||||
admin=$(ynh_app_setting_get "$app" admin)
|
is_public=$(ynh_app_setting_get --app=$app --key=is_public)
|
||||||
is_public=$(ynh_app_setting_get "$app" is_public)
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
port=$(ynh_app_setting_get "$app" port)
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
port_hub=$(ynh_app_setting_get "$app" port_hub)
|
port_hub=$(ynh_app_setting_get --app=$app --key=port_hub)
|
||||||
port_http_proxy=$(ynh_app_setting_get "$app" port_http_proxy)
|
port_http_proxy=$(ynh_app_setting_get --app=$app --key=port_http_proxy)
|
||||||
enable_terminal=$(ynh_app_setting_get "$app" enable_terminal)
|
enable_terminal=$(ynh_app_setting_get --app=$app --key=enable_terminal)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CHECK VERSION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
upgrade_type=$(ynh_check_app_version_changed)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# ENSURE DOWNWARD COMPATIBILITY
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Ensuring downward compatibility..." --time --weight=1
|
||||||
|
|
||||||
|
# Fix is_public as a boolean value
|
||||||
|
if [ "$is_public" = "Yes" ]; then
|
||||||
|
ynh_app_setting_set --app=$app --key=is_public --value=1
|
||||||
|
is_public=1
|
||||||
|
elif [ "$is_public" = "No" ]; then
|
||||||
|
ynh_app_setting_set --app=$app --key=is_public --value=0
|
||||||
|
is_public=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If final_path doesn't exist, create it
|
||||||
|
if [ -z "$final_path" ]; then
|
||||||
|
final_path=/opt/$app
|
||||||
|
|
||||||
|
mkdir -p $final_path
|
||||||
|
|
||||||
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --time --weight=1
|
||||||
|
|
||||||
# TODO Add backup/restore scripts
|
# Backup the current version of the app
|
||||||
## Backup the current version of the app
|
ynh_backup_before_upgrade
|
||||||
#ynh_backup_before_upgrade
|
ynh_clean_setup () {
|
||||||
#ynh_clean_setup () {
|
ynh_clean_check_starting
|
||||||
# # restore it if the upgrade fails
|
|
||||||
# ynh_restore_upgradebackup
|
|
||||||
#}
|
|
||||||
|
|
||||||
|
# restore it if the upgrade fails
|
||||||
|
ynh_restore_upgradebackup
|
||||||
|
}
|
||||||
# Exit if an error occurs during the execution of the script
|
# Exit if an error occurs during the execution of the script
|
||||||
ynh_abort_if_errors
|
ynh_abort_if_errors
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# CHECK THE PATH
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
# Normalize the URL path syntax
|
|
||||||
path_url=$(ynh_normalize_url_path $path_url)
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# STANDARD UPGRADE STEPS
|
# STANDARD UPGRADE STEPS
|
||||||
|
#=================================================
|
||||||
|
# STOP SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="stop"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# NGINX CONFIGURATION
|
# NGINX CONFIGURATION
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading nginx web server configuration..." --time --weight=1
|
||||||
|
|
||||||
# Modify Nginx configuration file and copy it to Nginx conf directory
|
# Create a dedicated nginx config
|
||||||
ynh_add_nginx_config
|
ynh_add_nginx_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CONFIGURE JUPYTERLAB
|
# UPGRADE DEPENDENCIES
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading dependencies..." --time --weight=1
|
||||||
|
|
||||||
# Configure jupyterlab with jupyterhub_config.py file
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
config_jupyterlab
|
|
||||||
|
ynh_exec_warn_less ynh_install_nodejs --nodejs_version=8
|
||||||
|
|
||||||
|
npm install -g configurable-http-proxy
|
||||||
|
|
||||||
|
pip3 install pipenv
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# DOWNLOAD, CHECK AND INSTALL JUPYTERLAB
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
setup_source $miniconda_architecture
|
if [ "$upgrade_type" == "UPGRADE_APP" ]
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Upgrading source files..." --time --weight=1
|
||||||
|
|
||||||
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
|
source ./upgrade.d/upgrade.sh
|
||||||
|
|
||||||
|
mkdir -p $final_path
|
||||||
|
|
||||||
|
pushd $final_path
|
||||||
|
|
||||||
|
export PIPENV_VENV_IN_PROJECT="enabled"
|
||||||
|
|
||||||
|
ynh_exec_warn_less pipenv install jupyterlab==$jupyterlab_version jupyterhub notebook jupyterhub-ldapauthenticator --three
|
||||||
|
|
||||||
|
ynh_exec_warn_less pipenv run jupyterhub upgrade-db
|
||||||
|
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SPECIFIC SETUP
|
# SPECIFIC UPGRADE
|
||||||
#=================================================
|
#=================================================
|
||||||
# ADD HUB EXTENSION
|
# STORE THE CONFIG FILE CHECKSUM
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
jupyter labextension install @jupyterlab/hub-extension
|
ynh_backup_if_checksum_is_different --file="$final_path/config/jupyterhub_config.py"
|
||||||
jupyter lab build
|
|
||||||
|
|
||||||
jupyterhub upgrade-db
|
cp -f ../conf/jupyterhub_config.py $final_path/config/jupyterhub_config.py
|
||||||
|
ynh_replace_string --match_string="__URL__" --replace_string="https://$domain" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PATH__" --replace_string="${path_url%/}" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HUB__" --replace_string="$port_hub" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__PORT_HTTP_PROXY__" --replace_string="$port_http_proxy" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__FINAL_PATH__" --replace_string="$final_path" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin" --target_file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
chown $admin -R $final_path/share/jupyter
|
# Recalculate and store the checksum of the file for the next upgrade.
|
||||||
|
ynh_store_file_checksum --file="$final_path/config/jupyterhub_config.py"
|
||||||
|
|
||||||
#=================================================
|
ynh_backup_if_checksum_is_different --file="$final_path/config/jupyter_notebook_config.py"
|
||||||
# CONFIGURE JUPYTER NOTEBOOK
|
|
||||||
#=================================================
|
cp -f ../conf/jupyter_notebook_config.py $final_path/config/jupyter_notebook_config.py
|
||||||
config_jupyter_notebook
|
|
||||||
|
ynh_replace_string --match_string="__ENABLE_TERMINAL__" --replace_string="$enable_terminal" --target_file="$final_path/config/jupyter_notebook_config.py"
|
||||||
|
|
||||||
|
ynh_store_file_checksum --file="$final_path/config/jupyter_notebook_config.py"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SYSTEMD
|
# SETUP SYSTEMD
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading systemd configuration..." --time --weight=1
|
||||||
|
|
||||||
# Create a dedicated systemd config
|
# Create a dedicated systemd config
|
||||||
add_systemd_config
|
ynh_replace_string --match_string="__NODE_PATH__" --replace_string="$nodejs_path" --target_file="../conf/systemd.service"
|
||||||
|
|
||||||
|
ynh_add_systemd_config
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# GENERIC FINALIZATION
|
# GENERIC FINALIZATION
|
||||||
#=================================================
|
#=================================================
|
||||||
# SETUP SSOWAT
|
# SECURE FILES AND DIRECTORIES
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
# If app is public, add url to SSOWat conf as skipped_uris
|
# Set permissions on app files
|
||||||
if [[ $is_public -eq 1 ]]; then
|
chown -R root: $final_path
|
||||||
# See install script
|
chown -R $admin: $final_path/.venv/share
|
||||||
ynh_app_setting_set "$app" unprotected_uris "/"
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SSOWAT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading SSOwat configuration..." --time --weight=1
|
||||||
|
|
||||||
|
# Make app public if necessary
|
||||||
|
if [ $is_public -eq 1 ]
|
||||||
|
then
|
||||||
|
# unprotected_uris allows SSO credentials to be passed anyway
|
||||||
|
ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..." --time --weight=1
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --line_match="JupyterHub is now running at" --log_path="systemd"
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RELOAD NGINX
|
# RELOAD NGINX
|
||||||
#=================================================
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
|
||||||
|
|
||||||
systemctl reload nginx
|
ynh_systemd_action --service_name=nginx --action=reload
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# ADVERTISE SERVICE IN ADMIN PANEL
|
# END OF SCRIPT
|
||||||
#=================================================
|
#=================================================
|
||||||
|
|
||||||
yunohost service add $app --log "systemd"
|
ynh_script_progression --message="Upgrade of $app completed" --time --last
|
||||||
|
|
||||||
#=================================================
|
|
||||||
# START SERVICE
|
|
||||||
#=================================================
|
|
||||||
|
|
||||||
ynh_systemd_action -n $app -a restart -l "JupyterHub is now running at" -p "systemd"
|
|
||||||
|
|
|
@ -1,11 +1 @@
|
||||||
jupyterlab_version="0.35.4"
|
jupyterlab_version="1.0.4"
|
||||||
|
|
||||||
miniconda3_version="4.5.11"
|
|
||||||
|
|
||||||
miniconda3_x86_64_source_md5="e1045ee415162f944b6aebfe560b8fee"
|
|
||||||
|
|
||||||
miniconda3_x86_source_md5="d8c3ea1bd25cf02c4ea92df4d31ef652"
|
|
||||||
|
|
||||||
#For ARM
|
|
||||||
berryconda3_version="2.0.0"
|
|
||||||
berryconda3_arm_source_md5="1d8a60a9e201e3c30d927b5bf93b441d"
|
|
||||||
|
|
Loading…
Reference in a new issue