summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_user_context.inc
blob: 99ba4580d8656214b81953579da6304b1e460563 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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