Skip to content
Snippets Groups Projects
create_JupyterLab_kernel.sh 2.64 KiB
Newer Older
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed

# ===========================================================================================================
# title         : create_JupyterLab_kernel.sh
# usage         : ./create_JupyterLab_kernel.sh $INSTALLATION_ROOT $SPACK_ENV $RELEASE_NAME $LAB_KERNEL_ROOT
# description   : creates a spackified JupyterLab kernel conf and places it to the NFS where it can be
#                 loaded by all users.
# ===========================================================================================================
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
SPACK_ENV=$2
RELEASE_NAME=$3
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
LAB_KERNEL_ROOT=$4
cd ~
env >> /tmp/before.txt
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
# load spack
export SPACK_USER_CACHE_PATH=$INSTALLATION_ROOT/spack/.spack
export SPACK_USER_CONFIG_PATH=$INSTALLATION_ROOT/spack/.spack
source $INSTALLATION_ROOT/spack/share/spack/setup-env.sh
# no need to activate as the env is already activated in the context it is used
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
# spack env activate $SPACK_ENV
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
# load modules
source /usr/share/modules/init/sh
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
module use $INSTALLATION_ROOT/spack/share/spack/modules/linux-ubuntu20.04-x86_64/
source $INSTALLATION_ROOT/spack/var/spack/environments/$SPACK_ENV/loads
# also add user's .local python3.8 packages to allow package installation at runtime by the user using pip
export PYTHONPATH=$PYTHONPATH:/opt/app-root/src/.local/lib/python3.8/site-packages
export PATH=$PATH:/opt/app-root/src/.local/bin
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
# and python modules installed in the base docker Collab image
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/dist-packages
# capture the env after spack activation
cd ~
env >> /tmp/after.txt

# kernel name is lowercase release name
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
KERNEL_NAME=$(echo "$RELEASE_NAME" | tr '[:upper:]' '[:lower:]')
# kernel dir is a directory inside LAB_KERNEL_ROOT named after the kernel
KERNEL_PATH=$LAB_KERNEL_ROOT/$KERNEL_NAME

# prepare the env file required for the JupyterLab kernel
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
mkdir -p $KERNEL_PATH/bin

# start of env creation
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
cat <<EOF > $KERNEL_PATH/bin/env.sh
# append the necessary env variables for spack env and tools
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
diff /tmp/before.txt /tmp/after.txt|grep ">"|cut -c 3- |awk '$0="export "$0' >> $KERNEL_PATH/bin/env.sh
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
cat <<EOF >>$KERNEL_PATH/bin/env.sh
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
chmod +x $KERNEL_PATH/bin/env.sh
# create the new kernel's configuration file
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
mkdir -p $KERNEL_PATH/$KERNEL_NAME
cat <<EOF >$KERNEL_PATH/$KERNEL_NAME/kernel.json
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
 "argv": ["$KERNEL_PATH/bin/env.sh", "{connection_file}", "--profile=default"],
 "display_name": "$RELEASE_NAME",
Eleni Mathioulaki's avatar
Eleni Mathioulaki committed
 "name": "$KERNEL_NAME",
 "language": "python",
 "env": { "LAB_KERNEL_NAME": "$RELEASE_NAME", "LAB_KERNEL_RELEASE_DATE": "$(date +"%Y-%m-%d")" }