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
|