summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc')
-rw-r--r--core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc92
1 files changed, 92 insertions, 0 deletions
diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc
new file mode 100644
index 00000000..99ba4580
--- /dev/null
+++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc
@@ -0,0 +1,92 @@
+#!/bin/bash
+
+
+function process_container_meta()
+{
+ writelog "+ process container_meta.json"
+ # Try to make a valid CONTAINER_IMAGE_NAME
+ export CONTAINER_IMAGE_NAME=$( jq -r '.image_name' "$CONFDIR/container_meta.json" | \
+ tr '[:upper:]' '[:lower:]' | sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*$//g' | sed -e 's/[[:space:]]/_/g')
+ export CONTAINER_RUN_OPTIONS=$( jq -r '.run_options' "$CONFDIR/container_meta.json" )
+
+
+ # set build context
+ build_context_method=$( jq -r '.build_context_method' "$CONFDIR/container_meta.json" )
+ if [[ "$build_context_method" == "0" ]]; then
+ writelog "+ container_build_context: dockerfile"
+ export CONTAINER_BUILD_CONTEXT="$CONFDIR/"
+ elif [[ "$build_context_method" == "1" ]]; then
+ writelog "+ container_build_context: git url"
+ export CONTAINER_BUILD_CONTEXT=$( jq -r '.build_context_url' "$CONFDIR/container_meta.json" )
+ else
+ writelog "+ no proper build_context_method!"
+ cleanexit 1
+ fi
+}
+
+
+function setup_user_container_context()
+{
+ mkdir -p "$USER_CONTAINER_CONTEXT"
+ # init user directory with scripts
+ cp "$DOCKER_PLUGIN_DIR/docker-init" "$USER_CONTAINER_CONTEXT/"
+ cp "$DOCKER_PLUGIN_DIR/remount" "$USER_CONTAINER_CONTEXT/"
+ cp "$DOCKER_PLUGIN_DIR/.bwlp-user-conf" "$USER_CONTAINER_CONFIG"
+ chmod u+x "$USER_CONTAINER_CONTEXT/docker-init"
+ chmod u+x "$USER_CONTAINER_CONTEXT/remount"
+}
+
+
+function setup_user_container_autostart()
+{
+ # TODO: maybe there is a better way to load and start the container which is used in the current lecture
+ mkdir -p "$HOME/.config/autostart/"
+ cp -f "$DOCKER_PLUGIN_DIR/docker-init.desktop" "$HOME/.config/autostart/"
+ sed -i "s:Exec=:Exec=$USER_CONTAINER_CONTEXT/docker-init:" "$HOME/.config/autostart/docker-init.desktop"
+}
+
+
+function init_user_container_config()
+{
+ if [[ ! -f "$USER_CONTAINER_CONFIG" ]]; then
+ writelog "+ USER_CONTAINER_CONFIG: $USER_CONTAINER_CONFIG does not exist!"
+ cleanexit 1
+ fi
+
+ process_container_meta
+
+ writelog "+ init USER_CONTAINER_CONFIG: $USER_CONTAINER_CONFIG"
+ sed -i "s#export DOCKER_PLUGIN_DIR=".*"#export DOCKER_PLUGIN_DIR=\"$DOCKER_PLUGIN_DIR\"#" "$USER_CONTAINER_CONFIG"
+ sed -i "s#export DOCKER_INCLUDE_DIR=".*"#export DOCKER_INCLUDE_DIR=\"$DOCKER_INCLUDE_DIR\"#" "$USER_CONTAINER_CONFIG"
+ sed -i "s#export TMPDIR=".*"#export TMPDIR=\"$TMPDIR\"#" "$USER_CONTAINER_CONFIG"
+
+ sed -i "s#export VM_DISKFILE_RO=".*"#export VM_DISKFILE_RO=\"$VM_DISKFILE_RO\"#" "$USER_CONTAINER_CONFIG"
+
+ sed -i "s#export CONTAINER_BUILD_CONTEXT=".*"#export CONTAINER_BUILD_CONTEXT=\"$CONTAINER_BUILD_CONTEXT\"#" "$USER_CONTAINER_CONFIG"
+ sed -i "s#export CONTAINER_IMAGE_NAME=".*"#export CONTAINER_IMAGE_NAME=\"$CONTAINER_IMAGE_NAME\"#" "$USER_CONTAINER_CONFIG"
+ sed -i "s#export CONTAINER_RUN_OPTIONS=".*"#export CONTAINER_RUN_OPTIONS=\"$CONTAINER_RUN_OPTIONS\"#" "$USER_CONTAINER_CONFIG"
+
+ local RUNSCRIPT="$CONFDIR/runscript"
+ # check if runscript file contains more than default line "ext=;visibility=1;soundMuted=-1"
+ if [[ "$( < "$RUNSCRIPT" wc -l )" -gt "1" ]]; then
+ sed -i "s#export RUNSCRIPT=".*"#export RUNSCRIPT=\"$RUNSCRIPT\"#" "$USER_CONTAINER_CONFIG"
+ fi
+
+ sed -i "s#USER_CONTAINER_CONFIG=".*"#USER_CONTAINER_CONFIG=\"$USER_CONTAINER_CONFIG\"#" "$USER_CONTAINER_CONTEXT/docker-init"
+}
+
+
+function cleanup_user_container_context()
+{
+ [ -d "$USER_CONTAINER_CONTEXT" ] && rm -rf -- "$USER_CONTAINER_CONTEXT"
+ [ -f "$HOME/.config/autostart/docker-init.desktop" ] && rm "$HOME/.config/autostart/docker-init.desktop"
+
+ # force remove all containers
+ [ -n "$(docker ps -aq)" ] && docker rm -f $(docker ps -aq) > /dev/null
+}
+
+
+setup_user_container_context
+setup_user_container_autostart
+init_user_container_config
+add_cleanup cleanup_user_container_context