From cd7f652158d33d1660f24be8057f4232aadf6973 Mon Sep 17 00:00:00 2001 From: Christian Rößler Date: Fri, 29 Apr 2016 15:23:03 +0200 Subject: [run-virt] Linux-VMs fd1: Xreset, umounter --- .../data/linux/includes/50_postliminaries.inc | 21 ++++++++++++ .../vmchooser/data/linux/includes/50_umounter.inc | 12 +++++++ .../opt/openslx/vmchooser/data/linux/umnt_shares | 40 ++++++++++++++++++++++ .../opt/openslx/vmchooser/data/linux/vm_runtime | 26 ++++++++++---- 4 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc create mode 100644 remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc create mode 100755 remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares (limited to 'remote/modules') diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc new file mode 100644 index 00000000..f6f1cf7d --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc @@ -0,0 +1,21 @@ +postliminaries_native() +{ + # USERHOMEDIR=~/PERSISTENT, not ~! ################ + rmdir "$USERHOMEDIR" && logger "openslx unmounter: home directory entry (PERSISTENT) deleted." \ + || logger "openslx unmounter: could not delete home directory (PERSISTENT) entry - not empty / unmounted!" +} + +postliminaries_vmware() +{ + unlink "$USERHOMEDIR" + ERR=$? + if [ "$ERR" -ne 0 ]; then + logger "openslx unmounter: vmware mode: could not unlink ${USERHOMEDIR}!" + logger "openslx unmounter: vmware mode: this is a severe problem; I do not know what to do - exiting!" + exit 1 + else + logger "openslx unmounter: vmware mode: ${USERHOMEDIR} unlinked." + # checking whether there was a directory moved out earlier: + [ -d "${USERHOMEDIR}"_mov ] && mv "${USERHOMEDIR}"_mov "${USERHOMEDIR}" + fi +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc new file mode 100644 index 00000000..e161b961 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc @@ -0,0 +1,12 @@ +umount_home() { + umount /home/"${LOCALUSER}"/PERSISTENT && logger "openslx unmounter: umounted home (PERSISTENT)." \ + || logger "openslx unmounter: could not home (PERSISTENT)!" +} + +umount_shares() { + index=0 + for SHARE in $( mount | grep SHARE | tr -s ' ' | cut -f 3 -d " " ); do + umount "${SHARE}" && logger "openslx unmounter: umounted ${SHARE}." \ + || logger "openslx unmounter: could not umount ${SHARE}!" + done +} diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares new file mode 100755 index 00000000..3c03f074 --- /dev/null +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares @@ -0,0 +1,40 @@ +#!/bin/bash + +# set -x + +logger "openslx sharemapper: umounter started." + +OWNDIR=$(dirname $0) +for i in "$(dirname $0)"/includes/*.inc; do + source "$i" +done + +# REMAPMODE (remapMode): 0: None, 1 Native, 2 Native Fallback, 3 vmware +# CREATEMISSING (createMissingRemap): 0: Nichts tun, 1 xdg-Verzeichnisse + +case "$REMAPMODE" in + 0) logger "openslx sharemapper: remapMode 0 (do nothing) detected." + exit 0 + ;; + 1) logger "openslx sharemapper: remapMode 1 (native mode) detected." + umount_shares + umount_home + postliminaries_native + ;; + 2) logger "openslx sharemapper: remapMode 2 (fallback mode) detected." + umount_shares + umount_home + postliminaries_native + exit 0 + ;; + 3) logger "openslx sharemapper: remapMode 3 (vmware mode) detected." + postliminaries_vmware + exit 0 + ;; + *) logger "openslx sharemapper: unknown remapMode in $SLXCONFIGFILE; doing nothing end exiting with error." + exit 1. + ;; +esac + +exit 0 + diff --git a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_runtime b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_runtime index 9dcfbd8e..a238e9a1 100755 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_runtime +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_runtime @@ -9,6 +9,7 @@ VERSION=$(lsb_release -rs) SCRIPTDIR=/mnt/diskmount/linux/ RESOLUTIONSCRIPT="${SCRIPTDIR}"/resolution SHARESCRIPT="${SCRIPTDIR}"/mnt_shares +UMOUNTSCRIPT="${SCRIPTDIR}"/umnt_shares XSETUP=$(find /etc/X* -name "Xsetup" 2>/dev/null) XRESET=$(find /etc/X* -name "Xreset" 2>/dev/null) @@ -17,7 +18,6 @@ XRESET=$(find /etc/X* -name "Xreset" 2>/dev/null) write_xsetup() { logger "openslx vm_runtime: writing ${XSETUP}..." - XSETUP=/etc/X11/xdm/Xsetup cat<<-BISHIER > "${XSETUP}" #!/bin/sh ${SHARESCRIPT} & @@ -26,11 +26,26 @@ write_xsetup() { } patch_xsetup_shebang() { + # Patching after first line, to be exact. logger "openslx vm_runtime: patching ${XSETUP} after shebang line, if necessary." grep -q "${RESOLUTIONSCRIPT}" "${XSETUP}" || sed "1 a ${RESOLUTIONSCRIPT} \&" -i "${XSETUP}" grep -q "${SHARESCRIPT}" "${XSETUP}" || sed "1 a ${SHARESCRIPT} \&" -i "${XSETUP}" } +write_xreset() { + logger "openslx vm_runtime: writing ${XRESET}..." + cat<<-BISHIER > "${XRESET}" + #!/bin/sh + ${UMOUNTSCRIPT} & + BISHIER +} + +patch_xreset_shebang() { + # Patching after first line, to be exact. + logger "openslx vm_runtime: patching ${XRESET} after shebang line, if necessary." + grep -q "${UMOUNTSCRIPT}" "${XRESET}" || sed "1 a ${UMOUNTSCRIPT} \&" -i "${XSETUP}" +} + case "${DISTRIBUTION}" in opensuse) logger "openslx vm_runtime: openSuse detected." if [ ! -e "${XSETUP}" ]; then @@ -39,17 +54,18 @@ case "${DISTRIBUTION}" in else logger "openslx vm_runtime: patching ${XSETUP}." if ! [ grep -c /etc/sysconfig/displaymanager "$XSETUP" 2>/dev/null 1>&2 ]; then - logger "openslx vm_runtime: openSuse marker found, patching." + logger "openslx vm_runtime: Xsetup: openSuse marker found, patching." sed "s#/etc/sysconfig/displaymanager#/etc/sysconfig/displaymanager\n"${SHARESCRIPT}" \&\n${RESOLUTIONSCRIPT} \&#g" \ -i "${XSETUP}" else - logger "openslx vm_runtime: openSuse marker not found, patching after shebang line." + logger "openslx vm_runtime: Xsetup: openSuse marker not found, patching after shebang line." xsetup_patch_shebang fi + logger "openslx vm_runtime: patching ${RESET}." + xsetup_patch_shebang fi ;; ubuntu) logger "openslx vm_runtime: Ubuntu detected, version ${VERSION}." - # Ubuntu has at least in version 14.04 LTS a bug leading to missing Xsetup/Xreset entries: grep -q "session-setup-script=/etc/X11/Xsetup" /etc/lightdm/lightdm.conf.d/50-myconfig.conf \ || { sed "$ a session-setup-script=/etc/X11/Xsetup" -i /etc/lightdm/lightdm.conf.d/50-myconfig.conf @@ -65,8 +81,6 @@ case "${DISTRIBUTION}" in fi ;; debian) logger "openslx vm_runtime: Debian detected." - - ;; *) logger "openslx vm_runtime: Unknown distribution, exiting." exit 1 -- cgit v1.2.3-55-g7522