diff options
author | ralph isenmann | 2021-08-13 10:49:32 +0200 |
---|---|---|
committer | ralph isenmann | 2021-08-13 11:03:40 +0200 |
commit | f967d493f53587566df2ffb7aaea699eeedb26e2 (patch) | |
tree | ce5df34ee35f78eacd8a1ba06a081eec1302af50 /core/modules/run-virt-docker | |
parent | [vbox-src] explicit '--system' option (diff) | |
download | mltk-f967d493f53587566df2ffb7aaea699eeedb26e2.tar.gz mltk-f967d493f53587566df2ffb7aaea699eeedb26e2.tar.xz mltk-f967d493f53587566df2ffb7aaea699eeedb26e2.zip |
[run-virt-docker] update plugin
- pull images directly if an image repository is specified
- docker load directly into daemon, use pv (pipeview) to display transfere progress
- use specified command for container run (CONTAINER_RUN_COMMAND)
Diffstat (limited to 'core/modules/run-virt-docker')
7 files changed, 38 insertions, 15 deletions
diff --git a/core/modules/run-virt-docker/data/opt/openslx/pam/hooks/auth-final-exec.d/30-add-to-docker.sh b/core/modules/run-virt-docker/data/opt/openslx/pam/hooks/auth-final-exec.d/30-add-to-docker.sh index f5db36e4..5490380a 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/pam/hooks/auth-final-exec.d/30-add-to-docker.sh +++ b/core/modules/run-virt-docker/data/opt/openslx/pam/hooks/auth-final-exec.d/30-add-to-docker.sh @@ -8,8 +8,9 @@ DOCKER_TMP="/tmp/docker" [ -e $DOCKER_TMP ] && rm -rf -- $DOCKER_TMP [ ! -e $DOCKER_TMP ] && mkdir -p $DOCKER_TMP && chmod 0777 $DOCKER_TMP -# TODO Check if same user logs on to the system. -# if prev_user != curr_user then delete existing /tmp/virt/docker/prev_user_uid:prev_user_gid/ +# remove all leftovers in docker_home from previous users +DOCKER_HOME="/tmp/virt/docker" +rm -r -- "$DOCKER_HOME"/* # This changes the subuid and subgid for the dockremap(user) to the current user and restards the docker daemon. # Because off this change in the docker daemon, for each userns will be a directory under /tmp/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 ae6cb288..fd398929 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 @@ -16,6 +16,8 @@ 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 5f52a16d..ea37582b 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 @@ -16,15 +16,16 @@ load_image () { else # 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" - # create TMP_FILE for image + echo "+ load container image... (please be patient)" + # create TMP_FILE for docker load output local TMP_FILE=$(mktemp) - # write currently existing image ids into TMP_FILE - cp $VM_DISKFILE_RO $TMP_FILE - # recieve the RepoTag form the manifest.json inside the tar - local REPO_TAG=$(tar -axf $TMP_FILE manifest.json -O | jq -r '.[].RepoTags[0]') + + # TODO no progress output for docker load # load image from tar file - docker load --input $TMP_FILE + pv -cN "Image Transfer" < $VM_DISKFILE_RO | docker load -q > $TMP_FILE + echo "+ $(cat $TMP_FILE)" + + local REPO_TAG=$(head -n 1 $TMP_FILE | cut -d" " -f3) # rename image docker tag "$REPO_TAG" "$CONTAINER_IMAGE_NAME" rm -f -- "$TMP_FILE" @@ -35,8 +36,18 @@ load_image () { main () { - # TODO only check by image name could be bad, images whith a same name could exist + if [[ -n $CONTAINER_REPO_NAME ]]; then + echo "pull container $CONTAINER_REPO_NAME" + docker pull $CONTAINER_REPO_NAME + + [ "$?" != 0 ] && echo ".. docker pull not successful ...giving up..." && exit -1 + + CONTAINER_IMAGE_NAME="$CONTAINER_REPO_NAME" + fi + + # TODO only check by image name could be bad, images whith a same name could exist + # check if the container_image_name already loaded in docker daemon if [[ -z $(docker images $CONTAINER_IMAGE_NAME -q) ]]; then echo "+ Image unknown by docker daemon ..." @@ -54,8 +65,8 @@ main () fi echo "+ start container..." - echo "+ docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME" - docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME + echo "+ docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME $CONTAINER_RUN_COMMAND" + docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME $CONTAINER_RUN_COMMAND if [[ "$?" != "0" ]]; then echo "...container start failed!...giving up..." @@ -64,7 +75,8 @@ main () if [[ -n $RUNSCRIPT ]]; then echo "+ execute user runscript" - /bin/bash $RUNSCRIPT + NOHUP_TMP=$(mktemp) + nohup /bin/bash $RUNSCRIPT > "$NOHUP_TMP" & tail -f "$NOHUP_TMP" 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 99ba4580..4751880a 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 @@ -8,6 +8,7 @@ function process_container_meta() 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" ) + export CONTAINER_RUN_COMMAND=$( jq -r '.run_command' "$CONFDIR/container_meta.json" ) # set build context @@ -18,6 +19,9 @@ function process_container_meta() 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" ) + elif [[ "$build_context_method" == "2" ]]; then + writelog "+ pull public container" + export CONTAINER_REPO_NAME=$( jq -r '.image_repo' "$CONFDIR/container_meta.json" ) else writelog "+ no proper build_context_method!" cleanexit 1 @@ -62,9 +66,11 @@ function init_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" diff --git a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/run-virt.include b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/run-virt.include index 610c7814..55f89e01 100755 --- a/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/run-virt.include +++ b/core/modules/run-virt-docker/data/opt/openslx/vmchooser/plugins/docker/run-virt.include @@ -8,7 +8,7 @@ # See https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html # # If you have any feedback please consult https://bwlehrpool.de and -# send your feedback to support@bwlehrpool.de. +# send your feedback to bwlehrpool@hs-offenburg.de. # # General information about bwLehrpool can be found at https://bwlehrpool.de # diff --git a/core/modules/run-virt-docker/module.conf b/core/modules/run-virt-docker/module.conf index 8811668a..749da396 100644 --- a/core/modules/run-virt-docker/module.conf +++ b/core/modules/run-virt-docker/module.conf @@ -1,4 +1,4 @@ #!/bin/bash -REQUIRED_BINARIES="" +REQUIRED_BINARIES="pv" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" diff --git a/core/modules/run-virt-docker/module.conf.ubuntu b/core/modules/run-virt-docker/module.conf.ubuntu new file mode 100644 index 00000000..f2880ae5 --- /dev/null +++ b/core/modules/run-virt-docker/module.conf.ubuntu @@ -0,0 +1,2 @@ +#!/bin/bash +REQUIRED_INSTALLED_PACKAGES="pv" |