diff options
Diffstat (limited to 'remote/modules')
14 files changed, 283 insertions, 90 deletions
diff --git a/remote/modules/kdm-theme-bwlp/data/opt/openslx/scripts/systemd-kdm_hwinfo_warnings b/remote/modules/kdm-theme-bwlp/data/opt/openslx/scripts/systemd-kdm_hwinfo_warnings index 877a8c73..b542fabb 100755 --- a/remote/modules/kdm-theme-bwlp/data/opt/openslx/scripts/systemd-kdm_hwinfo_warnings +++ b/remote/modules/kdm-theme-bwlp/data/opt/openslx/scripts/systemd-kdm_hwinfo_warnings @@ -20,30 +20,35 @@ build_replacement_xml() { . "/run/hwinfo" local CONTACT_RZ= # Warning: add_replace_xml doesn't escape <>& (XML), and also doesn't escape , and & (sed), so e.g. < should be written as \< + # Also don't use # as it's the sed delimiter if [ "$HW_KVM" = "DISABLED" ]; then - add_replace_xml "ff0000" "64Bit-Gast-Support (VT-x oder AMD-V) ist im BIOS deaktiviert. 64Bit VMs können nicht gestartet werden." + add_replace_xml "ff0000" "* 64Bit-Gast-Support (VT-x oder AMD-V) ist im BIOS deaktiviert. 64Bit VMs können nicht gestartet werden." CONTACT_RZ=jau elif [ "$HW_KVM" = "UNSUPPORTED" ]; then - add_replace_xml "000000" "CPU hat keinen 64Bit-Gast-Support (VT-x oder AMD-V). 64Bit VMs können nicht gestartet werden." + add_replace_xml "000000" "* CPU hat keinen 64Bit-Gast-Support (VT-x oder AMD-V). 64Bit VMs können nicht gestartet werden." fi if [ -n "$HW_MBRAM" ] && [ "$HW_MBRAM" -lt 3400 ]; then local GB=$(( ( HW_MBRAM + 300 ) / 1024 )) - add_replace_xml "000000" "Dieser PC hat wenig RAM (${GB}GB). Die Leistung von VM-Sitzungen wird nicht optimal sein." + add_replace_xml "000000" "* Dieser PC hat wenig RAM (${GB}GB). Die Leistung von VM-Sitzungen wird nicht optimal sein." fi if [ "$HW_ID44" = "0" ]; then - add_replace_xml "000000" "Keine ID44-Partition gefunden. VMs bekommen wenig RAM zugewiesen." + add_replace_xml "000000" "* Keine ID44-Partition gefunden. VMs bekommen wenig RAM zugewiesen." if [ "$HW_HDDCOUNT" = "0" ]; then - add_replace_xml "000000" " * Keine Festplatte erkannt; eine Festplatte wird empfohlen, wenn Sie VMs nutzen wollen" + add_replace_xml "000000" " Keine Festplatte erkannt; eine Festplatte wird empfohlen, wenn Sie VMs nutzen wollen." elif [ -n "$HW_HDDCOUNT" ]; then CONTACT_RZ=klar fi if [ -n "$HW_MBRAM" ] && [ "$HW_MBRAM" -lt 4500 ]; then - add_replace_xml "ff0000" " * Da der PC wenig RAM hat, ist die Einrichtung einer ID44-Partition dringend zu empfehlen" + add_replace_xml "ff0000" " Da der PC wenig RAM hat, ist die Einrichtung einer ID44-Partition dringend zu empfehlen." fi elif [ -n "$HW_ID44" ] && [ "$HW_ID44" -lt 10000 ]; then - add_replace_xml "000000" "Die ID44-Partition ist sehr klein. VM-Sitzungen könnten nach einiger Zeit aus Speichermangel abstürzen." + add_replace_xml "000000" "* Die ID44-Partition ist sehr klein. VM-Sitzungen könnten nach einiger Zeit aus Speichermangel abstürzen." CONTACT_RZ=fjeden fi + if ! awk '{print $2}' /proc/mounts | grep -q '^/mnt/vmstore$'; then + add_replace_xml "ff0000" "* Der VM-Store konnte nicht eingehängt werden. VMs können nicht gestartet werden." + add_replace_xml "ff0000" " Versuchen Sie das Problem zu lösen, indem Sie den Computer neu starten." + fi if [ -n "$CONTACT_RZ" ]; then add_replace_xml "000000" " -- " add_replace_xml "000000" " -- Wenden Sie sich ggf. an den bwLehrpool-Support Ihres Rechenzentrums -- " @@ -52,7 +57,7 @@ build_replacement_xml() { add_replace_xml() { [ -z "$DATA" ] && DATA=$(echo "$TEMPLATE" | sed "s,_COLOR_,#000000,;s,_TEXT_,Hinweise für den Admin/Hardware-Betreuer:,") - DATA="$DATA $(echo "$TEMPLATE" | sed "s,_COLOR_,#$1,;s,_TEXT_,$2,")" + DATA="$DATA $(echo "$TEMPLATE" | sed "s,_COLOR_,#$1,;s#_TEXT_#$2#")" } diff --git a/remote/modules/kernel-vanilla/module.conf b/remote/modules/kernel-vanilla/module.conf index 1fee4ea8..9d057125 100644 --- a/remote/modules/kernel-vanilla/module.conf +++ b/remote/modules/kernel-vanilla/module.conf @@ -1,5 +1,5 @@ REQUIRED_BINARIES="" REQUIRED_LIBRARIES="" REQUIRED_DIRECTORIES="" -REQUIRED_KERNEL="4.4.8" +REQUIRED_KERNEL="4.4.10" REQUIRED_GIT="git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git" diff --git a/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup new file mode 100755 index 00000000..def24a81 --- /dev/null +++ b/remote/modules/pvs2/data/opt/openslx/bin/pvsstartup @@ -0,0 +1,15 @@ +#!/bin/ash + +# TODO UNTESTED! +timediff=5 +while [ $timediff -gt 3 ]; do + start="$(date +%s)" + pvsclient $@ + ret=$? + end="$(date +%s)" + /opt/openslx/pvs2/unlock.sh + [ "$ret" == "0" ] && break + timediff=$(( end - start )) +done + + diff --git a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr index dedb0995..7a6c13d9 100755 --- a/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr +++ b/remote/modules/pvs2/data/opt/openslx/scripts/setup-pvsmgr @@ -1,4 +1,4 @@ #!/bin/ash openbox & -exec /opt/openslx/bin/pvsmgr +exec /opt/openslx/bin/pvsmgr --manager-only diff --git a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient index 0ad739e0..86f26a17 100755 --- a/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient +++ b/remote/modules/pvs2/data/opt/openslx/vmchooser/sessionstart.d/50-PVSclient @@ -19,8 +19,8 @@ if [ -n "${PVSMGR_SESSION_CMD}" ]; then fi # If the ENV var PVS has been set by vmchooser start pvsclient if [ -n "$PVS_AUTO_CONNECT" -a "$PVS_AUTO_CONNECT" == "TRUE" ]; then - pvsclient --auto & + pvsstartup --auto & else - pvsclient & + pvsstartup & fi exit 0 diff --git a/remote/modules/pvs2/module.build b/remote/modules/pvs2/module.build index 8277aa1c..70b88350 100644 --- a/remote/modules/pvs2/module.build +++ b/remote/modules/pvs2/module.build @@ -5,25 +5,33 @@ fetch_source() { } build() { - local SRCDIR="${MODULE_DIR}/src/" - local BUILDDIR="$SRCDIR/build/" - local DESTDIR="$MODULE_BUILD_DIR/opt/openslx/bin" + local BUILDDIR="${SRCDIR}/build/" + local DESTDIR="${MODULE_BUILD_DIR}/opt/openslx/bin" # first activate qt 4 activate_qt 4 - mkdir -p "$DESTDIR" || perror "Could not mkdir $DESTDIR!" - mkdir -p "$BUILDDIR" || perror "Could not mkdir $BUILDDIR!" - cd "$BUILDDIR" || perror "Could not cd to $BUILDDIR!" + mkdir -p "${DESTDIR}" || perror "Could not mkdir ${DESTDIR}!" + mkdir -p "${BUILDDIR}" || perror "Could not mkdir ${BUILDDIR}!" + cd "${BUILDDIR}" || perror "Could not cd to ${BUILDDIR}!" pinfo "Running cmake" cmake .. || perror "'cmake ..' failed." pinfo "Running make" make || perror "'make' failed." - mv pvsmgr pvsclient $DESTDIR + mv pvsmgr pvsclient "${DESTDIR}" cd - > /dev/null + # copy external scripts under 'sample_configuration' + mkdir -p "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" + if [ -d "${SRCDIR}/sample_configuration" ]; then + cp ${SRCDIR}/sample_configuration/*.sh "${MODULE_BUILD_DIR}/opt/openslx/pvs2/" \ + || perror "Could not copy external scripts to '${MODULE_BUILD_DIR}/opt/openslx/pvs2/'!" + chmod +x ${MODULE_BUILD_DIR}/opt/openslx/pvs2/*.sh \ + || perror "Could not set executable bit for external scripts." + fi + # needed for copying REQUIRED_CONTENT_PACKAGES to build/ COPYLIST="list_dpkg_output" [ -e "$COPYLIST" ] && rm "$COPYLIST" diff --git a/remote/modules/pvs2/module.conf b/remote/modules/pvs2/module.conf index 9ef50afd..5e7a9a6f 100644 --- a/remote/modules/pvs2/module.conf +++ b/remote/modules/pvs2/module.conf @@ -2,6 +2,12 @@ REQUIRED_GIT="git://git.openslx.org/pvs2.git" REQUIRED_BINARIES=" pvsmgr pvsclient + xinput + wmctrl +" +REQUIRED_DIRECTORIES=" + /opt/openslx/pvs2/ + /usr/lib/ " REQUIRED_LIBRARIES=" " diff --git a/remote/modules/pvs2/module.conf.ubuntu b/remote/modules/pvs2/module.conf.ubuntu index 4dcf2794..8a48ec93 100644 --- a/remote/modules/pvs2/module.conf.ubuntu +++ b/remote/modules/pvs2/module.conf.ubuntu @@ -1,11 +1,12 @@ REQUIRED_INSTALLED_PACKAGES=" libqt4-dev libvncserver-dev + xinput + wmctrl " REQUIRED_CONTENT_PACKAGES=" libqt4-svg libqtgui4 -" -REQUIRED_DIRECTORIES=" - /usr/lib/ + xinput + wmctrl " diff --git a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store index 9d478918..363e5253 100755 --- a/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store +++ b/remote/modules/run-virt/data/opt/openslx/scripts/systemd-mount_vm_store @@ -13,8 +13,12 @@ OUTFILE=$(mktemp) # no bash, so this is a bit ugly... if [ "${SLX_VM_NFS#//}" = "${SLX_VM_NFS}" ]; then # doesn't start with '//' -> assume NFS - /opt/openslx/bin/timeout -t 10 -s 9 mount -v -t nfs -o ro,async,nolock "$SLX_VM_NFS" /mnt/vmstore + /opt/openslx/bin/timeout -t 6 -s 9 mount -v -t nfs -o ro,async,nolock "$SLX_VM_NFS" /mnt/vmstore RET=$? + if [ "$RET" != "0" ]; then + /opt/openslx/bin/timeout -t 6 -s 9 mount -v -t nfs -o vers=3,ro,async,nolock "$SLX_VM_NFS" /mnt/vmstore + RET=$? + fi else # starts with '//' -> assume CIFS export USER="$SLX_VM_NFS_USER" @@ -25,7 +29,7 @@ else RET=$? fi > "$OUTFILE" 2>&1 -if [ $RET -ne 0 ]; then +if [ "$RET" -ne "0" ]; then if [ -s "$OUTFILE" ]; then slxlog "mount-vmstore-fail" "Mounting '$SLX_VM_NFS' failed. VMs will not boot." "$OUTFILE" sleep 1 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..b028cf76 --- /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: umounter: remapMode 0 (do nothing) detected." + exit 0 + ;; + 1) logger "openslx sharemapper: umounter: remapMode 1 (native mode) detected." + umount_shares + umount_home + postliminaries_native + ;; + 2) logger "openslx sharemapper: umounter: remapMode 2 (fallback mode) detected." + umount_shares + umount_home + postliminaries_native + exit 0 + ;; + 3) logger "openslx sharemapper: umounter: remapMode 3 (vmware mode) detected." + postliminaries_vmware + exit 0 + ;; + *) logger "openslx sharemapper: umounter: 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_installer b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer index 84d52d0a..978cee20 100755 --- a/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer +++ b/remote/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer @@ -1,48 +1,86 @@ #!/bin/bash PS=$(which ps) +GREP=$(which grep) +LOGGER=$(which logger) MKDIR=$(which mkdir) MOUNT=$(which mount) +MOUNTDIR=/mnt/diskmount/ SERVICEFILE=openslx-scriptinstall.service # systemd erkennen case $(${PS} --pid 1 -o comm h) in - systemd) echo "openslx praeinstaller: systemd detected." - if [ -d /etc/systemd/system ]; then - SERVICEDIR=/etc/systemd/system/ - else - SERVICEDIR=/usr/lib/systemd/system/ - fi - echo "openslx praeinstaller: installing systemd service file to ${SERVICEDIR}/${SERVICEFILE}." - - cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEFILE" - [Unit] - Description=openSLX script installer - Before=display-manager.service graphical.target - - [Service] - Type=oneshot - ExecStart=${MKDIR} -p /mnt/diskmount - ExecStart=${MOUNT} /dev/fd1 /mnt/diskmount - ExecStart=/mnt/diskmount/linux/vm_runtime - RemainAfterExit=no - HEREDOC - - [ ! -d /etc/systemd/system/graphical.target.wants ] && mkdir /etc/systemd/system/graphical.target.wants 2>/dev/null - [ ! -d /etc/systemd/system/basic.target.wants ] && mkdir /etc/systemd/system/basic.target.wants 2>/dev/null - - ln -s ${SERVICEDIR}/${SERVICEFILE} /etc/systemd/system/graphical.target.wants/${SERVICEFILE} - ln -s ${SERVICEDIR}/${SERVICEFILE} /etc/systemd/system/basic.target.wants/${SERVICEFILE} - - echo "openslx praeinstaller: doing systemd reload." - - systemctl daemon-reload - ;; - init) echo "openslx praeinstaller: init(V) detected." - ;; - *) echo "openslx praeinstaller: Unbekannter init-Dienst - exiting with error. - exit 1" - ;; + systemd) echo "openslx praeinstaller: systemd detected." + if [ -d /etc/systemd/system ]; then + SERVICEDIR=/etc/systemd/system/ + else + SERVICEDIR=/usr/lib/systemd/system/ + fi + echo "openslx praeinstaller: installing systemd service file to ${SERVICEDIR}/${SERVICEFILE}." + + cat <<-HEREDOC > "$SERVICEDIR"/"$SERVICEFILE" + [Unit] + Description=openSLX script installer + Before=display-manager.service graphical.target + + [Service] + Type=oneshot + ExecStartPre=${MKDIR} -p /mnt/diskmount + ExecStartPre=-${MOUNT} /dev/fd1 /mnt/diskmount + ExecStart=${LOGGER} "openslx service file: started." + ExecStart=${MOUNTDIR}/linux/vm_runtime + ExecStart=${LOGGER} "openslx service file: done." + RemainAfterExit=no + HEREDOC + + [ ! -d /etc/systemd/system/graphical.target.wants ] && mkdir /etc/systemd/system/graphical.target.wants 2>/dev/null + [ ! -d /etc/systemd/system/basic.target.wants ] && mkdir /etc/systemd/system/basic.target.wants 2>/dev/null + + ln -s "${SERVICEDIR}"/"${SERVICEFILE}" /etc/systemd/system/graphical.target.wants/"${SERVICEFILE}" + ln -s "${SERVICEDIR}"/"${SERVICEFILE}" /etc/systemd/system/basic.target.wants/"${SERVICEFILE}" + + echo "openslx praeinstaller: doing systemd reload." + systemctl daemon-reload + ;; + init) echo "openslx praeinstaller: init(V) detected." + SERVICEDIR=/etc/init.d/ + [ ! -d "${SERVICEDIR}" ] && { echo "openslx praeinstaller: No init directory $SERVICEDIR found, exiting."; exit 1; } + SERVICEFILE=openslx-scriptinstall + echo "openslx praeinstaller: installing init service file to ${SERVICEDIR}/${SERVICEFILE}." + cat <<-THEREDOC > "${SERVICEDIR}"/"${SERVICEFILE}" + #!/bin/sh -e + ### BEGIN INIT INFO + # Provides: openSLX_scriptinstaller + # Required-Start: 2 3 4 5 + # Required-Stop: 0 1 6 + # Default-Start: 2 3 4 5 + # Default-Stop: 0 1 6 + # X-Interactive: false + # Short-Description: openSLX script package starter. + ### END INIT INFO + # + # Starts via Xsetup patching the openSLX script package + # to correct screen resolution and mount network shares + # when Xsetup is started. + + case "\$1" in + start) ${LOGGER} "openslx init file: started." + ${MKDIR} -p /mnt/diskmount + ${MOUNT} | ${GREP} -q /mnt/diskmount || ${MOUNT} /dev/fd1 /mnt/diskmount + ${MOUNTDIR}/linux/vm_runtime + ${LOGGER} "openslx init file: done." + ;; + stop|restart|force-reload) exit 0 ;; + *) echo "Usage: $0 {start}" >&2; exit 1 ;; + esac + THEREDOC + chmod +x "${SERVICEDIR}"/"${SERVICEFILE}" + echo "openslx praeinstaller: enabling ${SERVICEFILE}." + update-rc.d "${SERVICEFILE}" defaults + ;; + *) echo "openslx praeinstaller: Could not determine mother-of-all-processes (not systemd, not init)." + echo "openslx praeinstaller: Giving up, exiting." + 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 761a5bf9..0a81c38d 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,45 +9,88 @@ 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) [ ! -f "${RESOLUTIONSCRIPT}" -o ! -f "${SHARESCRIPT}" ] && \ - { logger "openslx vm_runtime: Could not find needed scripts from disk. Exiting." ; exit 1 ; } + { logger "openslx vm_runtime: could not find needed scripts on disk. Exiting." ; exit 1 ; } -case "${DISTRIBUTION}" in - opensuse) logger "openslx vm_runtime: openSuse detected." - if [ -z "${XSETUP}" ]; then - logger "openslx vm_runtime: writing ${XSETUP}..." - XSETUP=/etc/X11/xdm/Xsetup - cat<<-BISHIER > "${XSETUP}" - #!/bin/sh - ${SHARESCRIPT} & - ${RESOLUTIONSCRIPT} & - BISHIER - 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." - 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." - sed "1 a ${RESOLUTIONSCRIPT} \&" -i "${XSETUP}" - sed "1 a ${SHARESCRIPT} \&" -i "${XSETUP}" - fi - fi - ;; - ubuntu) logger "openslx vm_runtime: Ubuntu detected." +write_xsetup() { + logger "openslx vm_runtime: writing ${XSETUP}..." + cat<<-BISHIER > "${XSETUP}" + #!/bin/sh + ${SHARESCRIPT} & + ${RESOLUTIONSCRIPT} & + BISHIER +} +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}" +} - ;; - debian) logger "openslx vm_runtime: Debian detected." +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 "${XRESET}" +} - ;; - *) logger "openslx vm_runtime: Unknown distribution, exiting." - exit 1 +case "${DISTRIBUTION}" in + opensuse) logger "openslx vm_runtime: openSuse detected." + if [ ! -e "${XSETUP}" ]; then + XSETUP=/etc/X11/xdm/Xsetup + write_xsetup + else + logger "openslx vm_runtime: patching ${XSETUP}." + if ! [ grep -c /etc/sysconfig/displaymanager "$XSETUP" 2>/dev/null 1>&2 ]; then + 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: Xsetup: openSuse marker not found, patching after shebang line." + xsetup_patch_shebang + fi + logger "openslx vm_runtime: patching ${RESET}." + patch_xreset_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 + logger "openslx vm_runtime: session-setup-script patched into /etc/lightdm/lightdm.conf.d/50-myconfig.conf."; } + grep -q "session-reset-script=/etc/X11/Xreset" /etc/lightdm/lightdm.conf.d/50-myconfig.conf \ + || { sed "$ a session-reset-script=/etc/X11/Xreset" -i /etc/lightdm/lightdm.conf.d/50-myconfig.conf + logger "openslx vm_runtime: session-reset-script patched into /etc/lightdm/lightdm.conf.d/50-myconfig.conf."; } + if [ ! -e "${XSETUP}" ]; then + XSETUP=/etc/X11/Xsetup + write_xsetup + else + patch_xsetup_shebang + fi + if [ ! -e "${XRESET}" ]; then + XRESETP=/etc/X11/Xreset + write_xreset + else + patch_xreset_shebang + fi + ;; + debian) logger "openslx vm_runtime: Debian detected." + ;; + *) logger "openslx vm_runtime: Unknown distribution, exiting." + exit 1 + ;; esac exit 0 |
