diff options
| author | root | 2016-05-25 10:35:26 +0200 |
|---|---|---|
| committer | root | 2016-05-25 10:35:26 +0200 |
| commit | 111adbfe6603cf7122b57d092abe9553e2815913 (patch) | |
| tree | decdd0e7b241ce0f37033a468f5e54a649f5f7da /remote/modules/run-virt/data | |
| parent | [rfs-stage32] Use proper variable in conf (diff) | |
| parent | [pvs-fr] Konfig -114 (diff) | |
| download | tm-scripts-111adbfe6603cf7122b57d092abe9553e2815913.tar.gz tm-scripts-111adbfe6603cf7122b57d092abe9553e2815913.tar.xz tm-scripts-111adbfe6603cf7122b57d092abe9553e2815913.zip | |
Merge branch 'master' of git://git.openslx.org/openslx-ng/tm-scripts
Diffstat (limited to 'remote/modules/run-virt/data')
6 files changed, 226 insertions, 68 deletions
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 |
