From 98233024c9696ab8321bbbe19d4a5a72a7e75874 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Mon, 15 Nov 2021 16:36:46 +0100 Subject: [run-virt-docker] add data-container; restructure init; introduce docker-archive as container-context - clients now able to create a data volume from a specified data-container -- REQURIES openslx-sat commit 4bd355c8b9724dec6268e71e9a18a326978d4317 --- .../vmchooser/plugins/docker/.bwlp-user-conf | 12 -- .../openslx/vmchooser/plugins/docker/docker-init | 147 ++++++++++++++++++++- .../vmchooser/plugins/docker/docker-init.desktop | 2 +- .../plugins/docker/includes/init_bind_mount.inc | 88 ++++++++++-- .../plugins/docker/includes/init_user_context.inc | 46 ++++--- 5 files changed, 246 insertions(+), 49 deletions(-) (limited to 'core/modules/run-virt-docker') diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/.bwlp-user-conf b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/.bwlp-user-conf index fd398929..b4761599 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/.bwlp-user-conf +++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/.bwlp-user-conf @@ -9,15 +9,3 @@ function writelog () { echo $1 } -export DOCKER_PLUGIN_DIR="" -export DOCKER_INCLUDE_DIR="" -export TMPDIR="" -export RUNSCRIPT="" - -export VM_DISKFILE_RO="" - -export CONTAINER_REPO_NAME="" -export CONTAINER_BUILD_CONTEXT="" -export CONTAINER_IMAGE_NAME="" -export CONTAINER_RUN_OPTIONS="" -export CONTAINER_RUN_COMMAND="" diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init index ea37582b..c903e5a6 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init +++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init @@ -1,6 +1,6 @@ #!/bin/bash -USER_CONTAINER_CONFIG="" +USER_CONTAINER_CONFIG="$HOME/.local/docker/.bwlp-user-conf" echo "+ source user_config $USER_CONTAINER_CONFIG" source $USER_CONTAINER_CONFIG @@ -9,11 +9,8 @@ load_image () { IMAGE_SIZE=$(stat --printf="%s" $VM_DISKFILE_RO) # check file size of VM_DISKFILE_RO is equals to 4096 = 4kB (because of padding) - if [[ $IMAGE_SIZE -eq 4096 ]]; then - echo "+ build container image with build_context" - echo "+ docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT" - docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT - else + + if [[ $CONTAINER_IMAGE_CONTEXT == "DOCKER_ARCHIVE" ]]; then # In this case a pre build container image (tar archive from "docker save ...") # will be loaded into the local docker daemon. echo "+ load container image... (please be patient)" @@ -29,15 +26,151 @@ load_image () { # rename image docker tag "$REPO_TAG" "$CONTAINER_IMAGE_NAME" rm -f -- "$TMP_FILE" + + elif [[ "$CONTAINER_IMAGE_CONTEXT" == "DOCKERFILE" || "$CONTAINER_IMAGE_CONTEXT" == "GIT_REPO" ]]; then + echo "+ build container image with build_context" + echo "+ docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT" + docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT fi retval=$? return $retval } +function build_container_image() +{ + echo "+ build container image with build_context" + echo "+ docker build --tag $CONTAINER_IMAGE_TAG $CONTAINER_IMAGE_BUILD_CONTEXT" + docker build --tag $CONTAINER_IMAGE_TAG $CONTAINER_IMAGE_BUILD_CONTEXT +} + +function load_container_image() +{ + # load a pre build container image (tar archive from "docker save ...") + # into the local docker daemon. + echo "+ load container image... (please be patient)" + # create TMP_FILE for docker load output + local TMP_FILE=$(mktemp) + + # TODO no progress output for docker load + # load image from tar file + pv -cN "Image Transfer" < $DATA_CONTAINER_DNBD3_IMAGE | docker load -q > $TMP_FILE + retval=$? + echo "+ $(cat $TMP_FILE)" + local REPO_TAG=$(head -n 1 $TMP_FILE | cut -d" " -f3) + # rename image and remove old tag + writelog "docker tag $REPO_TAG $CONTAINER_IMAGE_TAG" + docker tag "$REPO_TAG" "$CONTAINER_IMAGE_TAG" + docker rmi "$REPO_TAG" > /dev/null + rm -f -- "$TMP_FILE" + return $retval +} + +function prepare_dnbd3_mount() +{ + # prepare dnbd3 mount + DATA_CONTAINER_DNBD3_MOUNT="${DATA_CONTAINER_DIR}/dnbd3.fuse" + DATA_CONTAINER_DNBD3_LOG="${DATA_CONTAINER_DIR}/dnbd3.log" + DATA_CONTAINER_DNBD3_IMAGE="${DATA_CONTAINER_DNBD3_MOUNT}/img" + + mkdir -p $DATA_CONTAINER_DNBD3_MOUNT + # check DNBD3_MOUNT dir exists and is not used + + if [[ -d $DATA_CONTAINER_DNBD3_MOUNT ]]; then + if [[ -n "$(ls -A $DATA_CONTAINER_DNBD3_MOUNT)" ]]; then + writelog "+ mount directory not empty" + umount "$DATA_CONTAINER_DNBD3_MOUNT" + find "$DATA_CONTAINER_DNBD3_MOUNT" -mindepth 1 -delete + fi + fi + + source /opt/openslx/config + writelog "dnbd3-fuse --host $SLX_DNBD3_SERVERS --image $BWLP_IMAGE_PATH $DATA_CONTAINER_DNBD3_MOUNT" + dnbd3-fuse --log $DATA_CONTAINER_DNBD3_LOG --host "${SLX_DNBD3_SERVERS}" --image $BWLP_IMAGE_PATH $DATA_CONTAINER_DNBD3_MOUNT > /dev/null 2>&1 + echo "RETVAL $?" + if [[ ! -f $DATA_CONTAINER_DNBD3_IMAGE ]]; then + writelog "+ -FAIL- dnbd3-fuse failed to mount image" + return 1 + fi + + return 0 +} + + +function prepare_data_volume() +{ + local display_name=$( jq -r '.displayname' ${DATA_CONTAINER_METADATA} ) + + echo "+ prepare data container $display_name" + local build_context_method=$( jq -r '.build_context_method' ${DATA_CONTAINER_METADATA} ) + local image_file_size=$( jq -r '.filesize' ${DATA_CONTAINER_METADATA} ) + if [[ "$build_context_method" == "0" ]]; then + writelog "+ container_build_context: dockerfile" + CONTAINER_IMAGE_BUILD_CONTEXT="$DATA_CONTAINER_DIR" + CONTAINER_IMAGE_TAG="$(echo ${display_name} | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]')" + DATA_CONTAINER_IMAGE_NAME=$CONTAINER_IMAGE_TAG + build_container_image + retval=$? + elif [[ "$build_context_method" == "1" ]]; then + writelog "+ container_build_context: git url" + CONTAINER_IMAGE_BUILD_CONTEXT=$( jq -r '.build_context_url' ${DATA_CONTAINER_METADATA} ) + CONTAINER_IMAGE_TAG="$(echo ${display_name} | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]')" + DATA_CONTAINER_IMAGE_NAME=$CONTAINER_IMAGE_TAG + build_container_image + retval=$? + elif [[ "$build_context_method" == "2" ]]; then + writelog "+ pull data container" + DATA_CONTAINER_REPO=$( jq -r '.image_repo' ${DATA_CONTAINER_METADATA} ) + DATA_CONTAINER_IMAGE_NAME="$DATA_CONTAINER_REPO" + docker pull "$DATA_CONTAINER_REPO" + retval=$? + elif [[ "$build_context_method" == "3" ]]; then + CONTAINER_IMAGE_TAG="$(echo ${display_name} | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]')" + DATA_CONTAINER_IMAGE_NAME=$CONTAINER_IMAGE_TAG + BWLP_IMAGE_PATH=$( jq -r '.imagepath' ${DATA_CONTAINER_METADATA}) + prepare_dnbd3_mount && load_container_image + retval=$? + else + writelog "+ no proper build_context_method (=$build_context_method)" + return 1 + fi + + ## create the volume + if [[ $retval == 0 ]]; then + VOLUME_NAME="volume_$(echo ${display_name} | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]')" + echo "+ create volume VOLUME_NAME=$VOLUME_NAME" + docker volume create $VOLUME_NAME + + # TODO assumption: every data container stores data at /data/ + writelog "+ populate volume with container data" + writelog "+ docker run -it --rm -v $VOLUME_NAME:/data/ $DATA_CONTAINER_IMAGE_NAME" + docker run -itd --rm -v $VOLUME_NAME:/data/ $DATA_CONTAINER_IMAGE_NAME + + source $DATA_CONTAINER_MOUNT_INFO + CONTAINER_BIND_MOUNT_STRING+=" --mount type=volume,source=${VOLUME_NAME},target=$MOUNT_TARGET" + fi +} + +function process_volume_mount_info() +{ + for DATA_CONTAINER_DIR in $VOLUME_MOUNT_INFO; do + echo $DATA_CONTAINER_DIR + DATA_CONTAINER_METADATA="${DATA_CONTAINER_DIR}/metadata" + DATA_CONTAINER_MOUNT_INFO="${DATA_CONTAINER_DIR}/mount_info" + + prepare_data_volume + done +} + + main () { - if [[ -n $CONTAINER_REPO_NAME ]]; then + if [[ -n "$VOLUME_MOUNT_INFO" ]]; then + echo "+ prepare volumes from data container" + process_volume_mount_info + fi + + if [[ "$CONTAINER_IMAGE_CONTEXT" == "CONTAINER_REPO" ]]; then echo "pull container $CONTAINER_REPO_NAME" docker pull $CONTAINER_REPO_NAME diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init.desktop b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init.desktop index 87d418ea..8ed7a48c 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init.desktop +++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/docker-init.desktop @@ -3,7 +3,7 @@ Version=1.0 Encoding=UTF-8 Name=docker-init Type=Application -Exec= +Exec="/opt/openslx/vmchooser/plugins/docker/docker-init" Icon= Terminal=true StartupNotify=true diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_bind_mount.inc b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_bind_mount.inc index ad82ef51..b3c9d660 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_bind_mount.inc +++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/includes/init_bind_mount.inc @@ -9,24 +9,46 @@ BIND_MOUNT_FILE="$CONFDIR/container_meta.json" # TODO: Maybe make this an array to support spaces BIND_MOUNT_STRING="" +VOLUME_MOUNT_INFO="" +function cleanup_container_mount() +{ + for directory in "$VOLUME_MOUNT_INFO"; do + umount "$directory/dnbd3.fuse" + find $directory -delete + done +} -BIND_MOUNT_COUNT="$( cat "$BIND_MOUNT_FILE" | jq '.bind_mount_config | length' )" +function prepare_container_mount() +{ + local image_uuid="$BIND_MOUNT_SOURCE" + local openslx_config="/opt/openslx/config" -for (( index=0; index < "$BIND_MOUNT_COUNT"; index++ )); do + local data_container_dir="${CONFDIR}/${image_uuid}" + local data_container_metadata="${data_container_dir}/metadata" + local data_container_mount_info="${data_container_dir}/mount_info" + mkdir -p "$data_container_dir" - BIND_MOUNT_INFO="$( jq .bind_mount_config["$index"] "$BIND_MOUNT_FILE" )" + echo "MOUNT_TARGET=${BIND_MOUNT_TARGET}" > "${data_container_mount_info}" + echo "MOUNT_OPTION=${BIND_MOUNT_OPTION}" >> "${data_container_mount_info}" - # expecting source to be a MOUNT_LETTER, wich must replaced with the directory - BIND_MOUNT_SOURCE="$( jq -r .source <<< "$BIND_MOUNT_INFO" )" - BIND_MOUNT_TARGET="$( jq -r .target <<< "$BIND_MOUNT_INFO" )" - BIND_MOUNT_OPTION="$( jq -r .option <<< "$BIND_MOUNT_INFO" )" + # get SLX_PXE_SERVER_IP (sat ip) + source "$openslx_config" + curl --silent ${SLX_PXE_SERVER_IP}/vmchooser/lecture/${image_uuid}/imagemeta --output "$data_container_metadata" - if [[ -z "$BIND_MOUNT_SOURCE" || -z "$BIND_MOUNT_TARGET" ]]; then - writelog "+ no proper bind mount option provided!" - continue + retval=$? + [ "$retval" != "0" ] && writelog "+ request for data container metadata not successful" && return $retval + + if [[ -z "$VOLUME_MOUNT_INFO" ]]; then + VOLUME_MOUNT_INFO+="${data_container_dir}" + else + VOLUME_MOUNT_INFO+=" ${data_container_dir}" fi +} + +function prepare_default_mount() +{ # USER_HOME is selected if [[ "$BIND_MOUNT_SOURCE" == "USER_HOME" ]]; then if [[ -d "$HOME/PERSISTENT" ]]; then @@ -40,7 +62,7 @@ for (( index=0; index < "$BIND_MOUNT_COUNT"; index++ )); do elif [[ "$BIND_MOUNT_SOURCE" == "USER_TMP" ]]; then # DOCKER_TMP created and cleand in opt/openslx/pam/hooks/auth-final-exec.d/30-add-to-docker.sh DOCKER_TMP="/tmp/docker" - DOCKER_USER_TMP="$DOCKER_TMP/$(id -u)" + DOCKER_USER_TMP="$DOCKER_TMP/$(id -un)" [ ! -e $DOCKER_USER_TMP ] && mkdir -p $DOCKER_USER_TMP && chmod 0700 $DOCKER_USER_TMP BIND_MOUNT_STRING+=" --mount type=bind,source=$DOCKER_USER_TMP,target=$BIND_MOUNT_TARGET" @@ -48,10 +70,48 @@ for (( index=0; index < "$BIND_MOUNT_COUNT"; index++ )); do writelog "+ no bind mount mapping for letter $BIND_MOUNT_SOURCE found!" continue else - BIND_MOUNT_STRING+=" --mount type=bind,\\\"source=${NETSHARE_DIR[$BIND_MOUNT_SOURCE]}\\\",target=$BIND_MOUNT_TARGET" + BIND_MOUNT_STRING+=" --mount type=bind,\\\"source=${NETSHARE_DIR[$BIND_MOUNT_SOURCE]}\\\",target=$BIND_MOUN T_TARGET" + fi +} + +BIND_MOUNT_COUNT="$( cat "$BIND_MOUNT_FILE" | jq '.bind_mount_config | length' )" + +for (( index=0; index < "$BIND_MOUNT_COUNT"; index++ )); do + + BIND_MOUNT_INFO="$( jq .bind_mount_config["$index"] "$BIND_MOUNT_FILE" )" + + # expecting source to be a MOUNT_LETTER, wich must replaced with the directory + MOUNT_TYPE="$( jq -r .mount_type <<< "$BIND_MOUNT_INFO" )" + BIND_MOUNT_SOURCE="$( jq -r .source <<< "$BIND_MOUNT_INFO" )" + BIND_MOUNT_TARGET="$( jq -r .target <<< "$BIND_MOUNT_INFO" )" + BIND_MOUNT_OPTION="$( jq -r .options <<< "$BIND_MOUNT_INFO" )" + + + if [[ -z "$BIND_MOUNT_SOURCE" || -z "$BIND_MOUNT_TARGET" ]]; then + writelog "+ no proper bind mount option provided!" + continue fi + if [[ -z "$MOUNT_TYPE" || "$MOUNT_TYPE" == "DEFAULT" ]]; then + writelog "+ prepare bind mount option with SOURCE=$BIND_MOUNT_SOURCE (label) and target=$BIND_MOUNT_TARGET" + prepare_default_mount + continue + elif [[ "$MOUNT_TYPE" == "CONTAINER_IMAGE" ]]; then + writelog "+ prepare docker volume" + prepare_container_mount + fi + + if [[ -n "$VOLUME_MOUNT_INFO" ]]; then + add_cleanup cleanup_gio_mount + fi done -writelog "+ write final CONTAINER_BIND_MOUNT_STRING $BIND_MOUNT_STRING in config $USER_CONTAINER_CONFIG" -echo "CONTAINER_BIND_MOUNT_STRING=\"${BIND_MOUNT_STRING}\"" >> ${USER_CONTAINER_CONFIG} +if [[ -n "${BIND_MOUNT_STRING}" ]]; then + writelog "+ write final CONTAINER_BIND_MOUNT_STRING ${BIND_MOUNT_STRING} in config ${USER_CONTAINER_CONFIG}" + echo "CONTAINER_BIND_MOUNT_STRING=\"${BIND_MOUNT_STRING}\"" >> ${USER_CONTAINER_CONFIG} +fi + +if [[ -n "${VOLUME_MOUNT_INFO}" ]]; then + writelog "+ write VOLUME_MOUNT_INFO=${VOLUME_MOUNT_INFO} in config" + echo "VOLUME_MOUNT_INFO=\"${VOLUME_MOUNT_INFO}\"" >> ${USER_CONTAINER_CONFIG} +fi 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 index 4751880a..75816cb4 100644 --- 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 @@ -15,13 +15,19 @@ function process_container_meta() 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_IMAGE_CONTEXT="DOCKERFILE" export CONTAINER_BUILD_CONTEXT="$CONFDIR/" elif [[ "$build_context_method" == "1" ]]; then writelog "+ container_build_context: git url" + export CONTAINER_IMAGE_CONTEXT="GIT_REPO" export CONTAINER_BUILD_CONTEXT=$( jq -r '.build_context_url' "$CONFDIR/container_meta.json" ) elif [[ "$build_context_method" == "2" ]]; then writelog "+ pull public container" + export CONTAINER_IMAGE_CONTEXT="CONTAINER_REPO" export CONTAINER_REPO_NAME=$( jq -r '.image_repo' "$CONFDIR/container_meta.json" ) + elif [[ "$build_context_method" == "3" ]]; then + writelog "+ load docker archive" + export CONTAINER_IMAGE_CONTEXT="DOCKER_ARCHIVE" else writelog "+ no proper build_context_method!" cleanexit 1 @@ -33,10 +39,8 @@ 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" } @@ -46,7 +50,6 @@ 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" } @@ -60,25 +63,38 @@ function init_user_container_config() 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" + echo "export DOCKER_PLUGIN_DIR=\"$DOCKER_PLUGIN_DIR\"" >> "$USER_CONTAINER_CONFIG" + echo "export DOCKER_INCLUDE_DIR=\"$DOCKER_INCLUDE_DIR\"" >> "$USER_CONTAINER_CONFIG" + echo "export TMPDIR=\"$TMPDIR\"" >> "$USER_CONTAINER_CONFIG" - sed -i "s#export CONTAINER_REPO_NAME=".*"#export CONTAINER_REPO_NAME=\"$CONTAINER_REPO_NAME\"#" "$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" - sed -i "s#export CONTAINER_RUN_COMMAND=".*"#export CONTAINER_RUN_COMMAND=\"$CONTAINER_RUN_COMMAND\"#" "$USER_CONTAINER_CONFIG" + echo "export VM_DISKFILE_RO=\"$VM_DISKFILE_RO\"" >> "$USER_CONTAINER_CONFIG" + + echo "export CONTAINER_REPO_NAME=\"$CONTAINER_REPO_NAME\"" >> "$USER_CONTAINER_CONFIG" + echo "export CONTAINER_BUILD_CONTEXT=\"$CONTAINER_BUILD_CONTEXT\"" >> "$USER_CONTAINER_CONFIG" + echo "export CONTAINER_IMAGE_NAME=\"$CONTAINER_IMAGE_NAME\"" >> "$USER_CONTAINER_CONFIG" + echo "export CONTAINER_RUN_OPTIONS=\"$CONTAINER_RUN_OPTIONS\"" >> "$USER_CONTAINER_CONFIG" + echo "export CONTAINER_RUN_COMMAND=\"$CONTAINER_RUN_COMMAND\"" >> "$USER_CONTAINER_CONFIG" + echo "export CONTAINER_IMAGE_CONTEXT=\"$CONTAINER_IMAGE_CONTEXT\"" >> "$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_REPO_NAME=".*"#export CONTAINER_REPO_NAME=\"$CONTAINER_REPO_NAME\"#" "$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" + # sed -i "s#export CONTAINER_RUN_COMMAND=".*"#export CONTAINER_RUN_COMMAND=\"$CONTAINER_RUN_COMMAND\"#" "$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" + echo "export RUNSCRIPT=\"$RUNSCRIPT\"" >> "$USER_CONTAINER_CONFIG" + #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" } -- cgit v1.2.3-55-g7522