Unverified Commit 0d2fc3ad authored by Alexander Smolyakov's avatar Alexander Smolyakov Committed by GitHub

[python] Change the `sudo_if` function to avoid issues with Bash (#694)

* [python] Updated `sudo_if` function

- Remove double quotes to avoid issues with string tokenization

* Add test scenario

* Revert "Add test scenario"

This reverts commit 9e62a3797a8f5eddf5c24a6b5fd30bd2c4be8c54.

* Update `jupyterlab git` package name

* Bump feature version

* Test: Install jupyterlab under root user

* Refactor changes

* Bump patch version

* Address review points
parent e7f7d194
{ {
"id": "python", "id": "python",
"version": "1.1.0", "version": "1.2.0",
"name": "Python", "name": "Python",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/python", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/python",
"description": "Installs the provided version of Python, as well as PIPX, and other common Python utilities. JupyterLab is conditionally installed with the python feature. Note: May require source code compilation.", "description": "Installs the provided version of Python, as well as PIPX, and other common Python utilities. JupyterLab is conditionally installed with the python feature. Note: May require source code compilation.",
......
...@@ -304,25 +304,31 @@ sudo_if() { ...@@ -304,25 +304,31 @@ sudo_if() {
if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then
su - "$USERNAME" -c "$COMMAND" su - "$USERNAME" -c "$COMMAND"
else else
"$COMMAND" $COMMAND
fi fi
} }
install_user_package() { install_user_package() {
PACKAGE="$1" INSTALL_UNDER_ROOT="$1"
PACKAGE="$2"
if [ "$INSTALL_UNDER_ROOT" = true ]; then
sudo_if "${PYTHON_SRC}" -m pip install --upgrade --no-cache-dir "$PACKAGE"
else
sudo_if "${PYTHON_SRC}" -m pip install --user --upgrade --no-cache-dir "$PACKAGE" sudo_if "${PYTHON_SRC}" -m pip install --user --upgrade --no-cache-dir "$PACKAGE"
fi
} }
add_user_jupyter_config() { add_user_jupyter_config() {
CONFIG_DIR="/home/$USERNAME/.jupyter" CONFIG_DIR="$1"
CONFIG_FILE="$CONFIG_DIR/jupyter_server_config.py" CONFIG_FILE="$2"
# Make sure the config file exists or create it with proper permissions # Make sure the config file exists or create it with proper permissions
test -d "$CONFIG_DIR" || sudo_if mkdir "$CONFIG_DIR" test -d "$CONFIG_DIR" || sudo_if mkdir "$CONFIG_DIR"
test -f "$CONFIG_FILE" || sudo_if touch "$CONFIG_FILE" test -f "$CONFIG_FILE" || sudo_if touch "$CONFIG_FILE"
# Don't write the same config more than once # Don't write the same config more than once
grep -q "$1" "$CONFIG_FILE" || echo "$1" >> "$CONFIG_FILE" grep -q "$3" "$CONFIG_FILE" || echo "$3" >> "$CONFIG_FILE"
} }
install_python() { install_python() {
...@@ -461,13 +467,26 @@ if [ "${INSTALL_JUPYTERLAB}" = "true" ]; then ...@@ -461,13 +467,26 @@ if [ "${INSTALL_JUPYTERLAB}" = "true" ]; then
exit 1 exit 1
fi fi
install_user_package jupyterlab INSTALL_UNDER_ROOT=true
install_user_package jupyterlab-git if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then
INSTALL_UNDER_ROOT=false
fi
install_user_package $INSTALL_UNDER_ROOT jupyterlab
install_user_package $INSTALL_UNDER_ROOT jupyterlab-git
# Configure JupyterLab if needed # Configure JupyterLab if needed
if [ -n "${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}" ]; then if [ -n "${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}" ]; then
add_user_jupyter_config "c.ServerApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" # Resolve config directory
add_user_jupyter_config "c.NotebookApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'" CONFIG_DIR="/root/.jupyter"
if [ "$INSTALL_UNDER_ROOT" = false ]; then
CONFIG_DIR="/home/$USERNAME/.jupyter"
fi
CONFIG_FILE="$CONFIG_DIR/jupyter_server_config.py"
add_user_jupyter_config $CONFIG_DIR $CONFIG_FILE "c.ServerApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'"
add_user_jupyter_config $CONFIG_DIR $CONFIG_FILE "c.NotebookApp.allow_origin = '${CONFIGURE_JUPYTERLAB_ALLOW_ORIGIN}'"
fi fi
fi fi
......
...@@ -17,7 +17,7 @@ packages="$(python3 -m pip list)" ...@@ -17,7 +17,7 @@ packages="$(python3 -m pip list)"
check "location" grep jupyter <<< "$packages" check "location" grep jupyter <<< "$packages"
# Check for git extension # Check for git extension
check "jupyterlab-git" grep jupyterlab-git <<< "$packages" check "jupyterlab_git" grep jupyterlab_git <<< "$packages"
# Check for correct JupyterLab configuration # Check for correct JupyterLab configuration
check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py
......
...@@ -17,7 +17,7 @@ packages="$(python3 -m pip list)" ...@@ -17,7 +17,7 @@ packages="$(python3 -m pip list)"
check "location" grep jupyter <<< "$packages" check "location" grep jupyter <<< "$packages"
# Check for git extension # Check for git extension
check "jupyterlab-git" grep jupyterlab-git <<< "$packages" check "jupyterlab_git" grep jupyterlab_git <<< "$packages"
# Check for correct JupyterLab configuration # Check for correct JupyterLab configuration
check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py check "config" grep ".*.allow_origin = '*'" /home/vscode/.jupyter/jupyter_server_config.py
......
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Check for an installation of JupyterLab
check "version" jupyter lab --version
# Check location of JupyterLab installation
packages="$(python3 -m pip list)"
check "location" grep jupyter <<< "$packages"
# Check for git extension
check "jupyterlab_git" grep jupyterlab_git <<< "$packages"
# Check for correct JupyterLab configuration
check "config" grep ".*.allow_origin = '*'" /root/.jupyter/jupyter_server_config.py
# Report result
reportResults
#!/bin/bash
set -e
# Optional: Import test library
source dev-container-features-test-lib
# Check for an installation of JupyterLab
check "version" jupyter lab --version
# Check location of JupyterLab installation
packages="$(python3 -m pip list)"
check "location" grep jupyter <<< "$packages"
# Check for git extension
check "jupyterlab_git" grep jupyterlab_git <<< "$packages"
# Check for correct JupyterLab configuration
check "config" grep ".*.allow_origin = '*'" /root/.jupyter/jupyter_server_config.py
# Report result
reportResults
...@@ -53,5 +53,25 @@ ...@@ -53,5 +53,25 @@
"features": { "features": {
"python": "3.10" "python": "3.10"
} }
},
"install_jupyterlab_debian": {
"image": "debian:bullseye-slim",
"features": {
"python": {
"version": "3.11",
"installJupyterlab": true,
"configureJupyterlabAllowOrigin": "*"
}
}
},
"install_jupyterlab_ubuntu": {
"image": "ubuntu:focal",
"features": {
"python": {
"version": "3.11",
"installJupyterlab": true,
"configureJupyterlabAllowOrigin": "*"
}
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment