summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/data/linux')
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH30
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README20
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc7
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc41
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc7
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc35
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc13
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares6
-rwxr-xr-xcore/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer8
9 files changed, 119 insertions, 48 deletions
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
index cf5dbc5d..54a30955 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/LIESMICH
@@ -8,15 +8,15 @@ Binaries in der genutzen virtuellen Maschine enthalten sind.
Folgende Programme werden benötigt:
-awk, cat, chmod, chown, cut, cvt, find, grep, head, hexdump, ln, logger,
-mkdir, mount, mount.cifs, mv, ping, printf, ps, rmdir, sed, sleep, su,
-systemctl, timeout, unlink, xdg-user-dir, xrandr, xterm.
+awk, cat, chmod, chown, cut, cvt, find, fusermount, grep, head, hexdump,
+ln, logger, mkdir, mount, mount.cifs, mv, ping, printf, ps, rmdir, sed,
+sleep, su, systemctl, timeout, unlink, xdg-user-dir, xrandr, xterm.
-Als mitunter fehlend haben sich insbesondere mount.cifs (wenn SMB-Laufwerke
-nicht eingebunden werden und xdg-user-dir (wenn keine Icons auf dem Desktop
-erscheinen) erwiesen. Zur Ermittlung eventuell fehlender binaries ist
-hilfreich, das Skript openslx mit root-Rechten von Hand zu starten und auf
-"…not found" u.ä. zu achten.
+Als mitunter fehlend haben sich insbesondere mount.cifs, mount.davfs (wenn
+SMB- bzw. Webdav-Laufwerke nicht eingebunden werden) und xdg-user-dir
+(wenn keine Icons auf dem Desktop erscheinen) erwiesen. Zur Ermittlung
+eventuell fehlender binaries ist hilfreich, das Skript openslx mit root-
+Rechten von Hand zu starten und auf "…not found" u.ä. zu achten.
Logeinträge:
@@ -28,14 +28,20 @@ die Einträge sind zudem wie folgt aufgeschlüsselt:
'openslx utility script': openslx-Hauptskript
'openslx sharemapper': Dienstskript zum Einhängen der Netzlaufwerke,
'openslx resolution utility': Dienstskript zur Bildschirmauflösung.
+'openslx umounter': Dienstskript zum Unmounten eingehängter Netzlauf-
+ werke bei Shutdown. (Anmerkung: besonders bei per
+ Userspace über fusermount eingehängten Webdav-
+ laufwerken wichtig, da es sonst zu Wartezeiten
+ beim Shutdown der VM kommen kann.)
Enthaltene Skripte:
vm_installer: Dieses Skript einmalig in einer lokalen, permanenten (also
nicht innerhalb des Poolsystems) Virtuellen Maschine ausführen.
- Es schreibt zwei systemd-Servicedateien und verlinkt diese,
- um beim Systemstart folgende Skripte zu starten:
+ Eine vorherige Installation sollte erkannt und korrigiert
+ werden. Es schreibt zwei systemd-Servicedateien und verlinkt
+ diese, um beim Systemstart folgende Skripte zu starten:
openslx: Das Skript openslx wird von einem durch vm_installer
erzeugten systemd-Dienst gestartet. Es ruft die Funktionen
@@ -51,8 +57,8 @@ resolution_standalone: Einzelstehende Version des resolution-Skriptes, die
Einbindung innerhalb der VM (Xsetup/Xreset) muss daher
selbst gesorgt werden.
- Anmerkung: Dieses Skript wird nur unstetig gewartet, die
- Nutzung von openslx wird daher empfohlen.
+ Anmerkung: Dieses Skript wird nicht mehr bzw. nur unstetig
+ gewartet, die Nutzung von openslx wird daher sehr mpfohlen.
Veraltet als Einzelskripte:
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
index 6a58e448..885fba7e 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/README
@@ -8,13 +8,14 @@ check the usual log files, of course).
These programs are needed:
-awk, cat, chmod, chown, cut, cvt, find, grep, head, hexdump, ln, logger,
-mkdir, mount, mount.cifs, mv, ping, printf, ps, rmdir, sed, sleep, su,
-systemctl, timeout, unlink, xdg-user-dir, xrandr, xterm.
+awk, cat, chmod, chown, cut, cvt, find, fusermount, grep, head, hexdump,
+ln, logger, mkdir, mount, mount.cifs, mv, ping, printf, ps, rmdir, sed,
+sleep, su, systemctl, timeout, unlink, xdg-user-dir, xrandr, xterm.
-Two likely candidates are in particular mount.cifs and xdg-user-dir. Do
-detect missing binaries it is helpful to start the script openslx with root
-permissions by hand and check for "…not found" messages.
+Some likely candidates are in particular mount.cifs, mount.davfs and
+xdg-user-dir. To detect missing binaries it is helpful to start the script
+openslx in the virtual machine with root permissions by hand and check for
+"... not found" messages.
Log file entries:
@@ -25,12 +26,14 @@ distinguished by a preceding 'openslx'; the entries are further itemised by:
'openslx utility script': openslx main script,
'openslx sharemapper': utility to mount network shares,
'openslx resolution utility': utility to set monitor resolution.
+'openslx umounter': utility for unmounting previously script-mounted network
+ drives at shutdown. (Ann.: This is important at userspace
+ mounted (fusermount) webdav shares, as it else may lead
+ to waiting time at shutdown of the virtual machine.)
Included scripts:
-This package consists of following scripts:
-
vm_installer: This script is to be started once in a local, permanent (so
not within the pool system environment) virtual machine. It
writes two systemd service files and links them, so following
@@ -44,6 +47,7 @@ openslx: The script openslx will be started via systemd service written
umnt_shares: (before shutdown.target): Unmounts given network shares at
virtual machine shutdown.
+
resolution_standalone: Standalone version of resolution sctipt. Needs no
preliminary work done by systemd or vm_runtime. It has to be
embedded/startedt via adequate means by hand (eg.
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
index 3cee7944..cf6592f1 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
@@ -6,7 +6,7 @@ SLXCONFIGFILE="$DISKMOUNTDIR"/openslx.ini
CONFIGFILE="$DISKMOUNTDIR"/shares.dat
LOGINUSER=$(grep '^username=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
-##### User related#################
+##### User related #################
LOCALUSER=student
USERHOME=/home/"$LOCALUSER"
USERHOMEDIR=/home/"$LOCALUSER"/PERSISTENT
@@ -34,11 +34,14 @@ MOUNTCIFSPRAE="-v -t cifs -o "
MOUNTCIFSOPTS="uid=$(id --user "$LOCALUSER"),gid=$(id --group "$LOCALUSER"),forceuid,forcegid,file_mode=0700,dir_mode=0700,nobrl,noacl"
MOUNTNFSPRAE="-v -t nfs4 -o "
MOUNTNFSOPTS="rw,nosuid,nodev,nolock,intr,hard,sloppy"
+MOUNTDAVPRAE="-t davfs -o "
+MOUNTDAVOPTS="uid=$(id --user "$LOCALUSER"),gid=$(id --group "$LOCALUSER")"
NATADDR=$(head -n 1 "$CONFIGFILE" | cut -f 1 -d$'\t')
PORT=$(head -n 1 "$CONFIGFILE" | cut -f 2 -d$'\t')
SCHLUESSEL=$(head -n 1 "$CONFIGFILE" | cut -f 4 -d$'\t')
GLOBALDOMAINUSER=$(head -n 1 "$CONFIGFILE" | cut -f 5 -d$'\t')
+GLOBALDOMAIN=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 1)
GLOBALUSER=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 2)
##### Remap #######################
@@ -54,5 +57,7 @@ SCRIPTEXT=$(grep scriptExt "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=")
MUTESOUND=$(grep muteSound "$DISKMOUNTDIR/openslx.ini" | cut -f 2 -d "=")
SOUNDVOL="100%"
+##### Programs interfering with resolution setting #####
+KILLRESPROGS="kscreen_backend_launcher"
### Variablen Ende ################################
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
index 33ccf686..c7db1971 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
@@ -23,45 +23,64 @@ function already_mounted()
function mounter()
{
+ MOUNTPARAM="$1"
+ MOUNTOPTS="$2"
+ SHAREPATH="$3"
+ MOUNTDIR="$4"
+
# Ausgabe: konnte mounten: 0, konnte nicht mounten: 1, schon gemountet 2
- already_mounted "$4"
+ already_mounted "$MOUNTDIR"
ERR=$?
if [ "$ERR" -eq 0 ]; then
- logger "openslx sharemapper: $3 already mounted."
+ logger "openslx sharemapper: $SHAREPATH already mounted."
AUSGANG=2
else
case "$MOUNTER" in
nfs) AUSGANG=0
x=2
- while ! mount $1 $2 $3 $4 2>/dev/null 1>&2; do
- logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying."
+ while ! mount $MOUNTPARAM "${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
+ logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying."
sleep $x
if [ "$x" -gt 6 ]; then
AUSGANG=1
- logger "openslx sharemapper: timeout, could not mount ${3} to ${4}. mount.nfs installed?"
+ logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR}. mount.nfs installed?"
break
fi
let x=x+2
done
- [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (nfs)." # Todo: Schöner schreiben:)
+ [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${SHAREPATH} mounted to ${MOUNTDIR} (nfs)." # Todo: Schöner schreiben:)
;;
cifs) AUSGANG=0
x=2
+ [ -n "$GLOBALDOMAIN" ] && MOUNTOPTS="${MOUNTOPTS},domain=$GLOBALDOMAIN"
for VERSION in $CIFSVERSIONS; do
AUSGANG=0
- while ! mount $1 "$VERSION",${2} $3 $4 2>/dev/null 1>&2; do
- logger "openslx sharemapper: could not mount ${3} to ${4}, waited another $x seconds, retrying."
+ while ! mount $MOUNTPARAM "${VERSION}","${MOUNTOPTS}" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
+ logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying."
sleep $x
if [ "$x" -gt 4 ]; then
AUSGANG=1
- logger "openslx sharemapper: timeout, could not mount ${3} to ${4} cifs v${VERSION}."
+ logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR} cifs v${VERSION}."
break
fi
let x=x+2
done
[ "$AUSGANG" -eq 0 ] && break
done
- [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${3} mounted to ${4} (cifs $VERSION)."
+ [ "$AUSGANG" -eq 0 ] && logger "openslx sharemapper: ${SHAREPATH} mounted to ${MOUNTDIR} (cifs $VERSION)."
+ ;;
+ dav) AUSGANG=0
+ x=2
+ while ! echo -e "${USER}\n${PASSWD}" | mount $MOUNTPARAM "$MOUNTOPTS" "$SHAREPATH" "$MOUNTDIR" 2>/dev/null 1>&2; do
+ logger "openslx sharemapper: could not mount ${SHAREPATH} to ${MOUNTDIR}, waited another $x seconds, retrying."
+ sleep x
+ if [ "$x" -gt 4 ]; then
+ AUSGANG=1
+ logger "openslx sharemapper: timeout, could not mount ${SHAREPATH} to ${MOUNTDIR}. mount.davfs installed?"
+ break
+ fi
+ let x=x+2
+ done
;;
*) logger "openslx sharemapper: unknown mounter ${MOUNTER}!"
;;
@@ -97,7 +116,7 @@ function mount_share()
ERR=$? # ERR merken wg. Links aus USERSHAREDIR
if [ "$ERR" -eq 1 ]; then
logger "openslx sharemapper: Could not mount ${USERSHAREDIR} even using user credentials; giving up."
- echo "Konnte Laufwerk ${SHAREPATH} nicht einhängen." >> "$USERLOGFILE"
+ echo "Konnte Laufwerk ${SHAREPATH} nicht einhängen. mount.cifs / mount.davfs installiert?" >> "$USERLOGFILE"
fi
unset USER
unset PASSWD
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
index c5d37105..c6bdc8c9 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
@@ -9,7 +9,12 @@ function mount_shares()
SHAREPASS=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 5 -d$'\t') # User-PW, bei Userhome nicht vorhanden
# Sharetyp bestimmen:
- if [ "${SHAREPATH:0:2}" == '\\' ] || [ "${SHAREPATH:0:2}" == '//' ]; then
+ if [ "${SHAREPATH:0:4}" == 'http' ]; then
+ SHAREPATH="${SHAREPATH//\\//}" # shouldn't be needed, but who knows what windows users do...
+ MOUNTER=dav
+ MOUNTPARAM="$MOUNTDAVPRAE"
+ MOUNTOPTS="$MOUNTDAVOPTS"
+ elif [ "${SHAREPATH:0:2}" == '\\' ] || [ "${SHAREPATH:0:2}" == '//' ]; then
USER=$(echo "$SHAREUSER"|cut -d '\' -f 2)
SHAREPATH="${SHAREPATH//\\//}" # '\' --> `/` :-)
MOUNTER=cifs
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc
index e161b961..dc92061a 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc
@@ -1,12 +1,29 @@
-umount_home() {
- umount /home/"${LOCALUSER}"/PERSISTENT && logger "openslx unmounter: umounted home (PERSISTENT)." \
- || logger "openslx unmounter: could not home (PERSISTENT)!"
-}
+umount_all() {
+ local HOME
+ local WEBDAV="(webdav) "
+ local UMOUNT
+ get_shares # fills array ROHSHARES; row 1+ share infos from (shares-)CONFIGFILE
+
+ for (( CONFIGROW = 1; CONFIGROW < ${#ROHSHARES[@]}; CONFIGROW++ )); do # row 1 is homedir, 2+ shares
+ SHAREPATH=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 1 -d$'\t') # Could be a webdav share...
+ SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 3 -d$'\t' | sed 's/ /_/g')
+ if [ "${SHARENAME:0:5}" == "Home-" ]; then
+ HOME="home "
+ UMOUNT="${USERHOMEDIR}"
+ else
+ HOME=""
+ # if there's no sharename let's at least try with SHARELETTER:
+ [ -z "${SHARENAME}" ] && SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 2 -d$'\t' | sed 's/://g')
+ UMOUNT="${USERHOME}/${SHARENAME}"
+ fi
-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}!"
+ if [ "${SHAREPATH:0:4}" == 'http' ]; then
+ fusermount -u "$UMOUNT" && logger "openslx umounter: umounted ${HOME}${WEBDAV} ${UMOUNT}." \
+ || logger "openslx umounter: could not umount ${HOME}${WEBDAV} ${UMOUNT}!"
+ else
+ umount "${UMOUNT}" && logger "openslx umounter: umounted $HOME ${UMOUNT}." \
+ || logger "openslx umounter: could not umount ${HOME}${UMOUNT}!"
+ fi
done
}
+
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
index a3e6c746..62c2f313 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/60_resolution.inc
@@ -11,11 +11,24 @@ get_xauthfile()
logger "openslx resolution utility: XAUTHFILE found."
}
+kill_resprogs() {
+ for i in $KILLRESPROGS; do
+ if [ -n "$(ps aux|grep $i|grep -v grep)" ]; then
+ logger "openslx resolution utility: Interfering program $i detecting, trying to kill."
+ killall $i
+ ERR=$?
+ if [ $ERR -ne 0 ]; then
+ logger "openslx resolution utility: couldn't kill interfering program $i."
+ fi
+ fi
+ done
+}
check_resolution() {
ACTRES=$(DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr|grep '*'|tr -s " "|cut -f 2 -d " ")
if [ "$ACTRES" != "$RESOLUTION" ]; then
logger "openslx resolution utility: resolution changed; re-changing."
+ kill_resprogs
DISPLAY="${DISPLAY}" XAUTHORITY="${XAUTHORITY}" xrandr --output ${AUSGABE} --mode ${RESOLUTION}
else
logger "openslx resolution utility: resolution unchanged."
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares
index b028cf76..1da5c460 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/umnt_shares
@@ -17,13 +17,11 @@ case "$REMAPMODE" in
exit 0
;;
1) logger "openslx sharemapper: umounter: remapMode 1 (native mode) detected."
- umount_shares
- umount_home
+ umount_all
postliminaries_native
;;
2) logger "openslx sharemapper: umounter: remapMode 2 (fallback mode) detected."
- umount_shares
- umount_home
+ umount_all
postliminaries_native
exit 0
;;
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
index 91f5b6d2..bf995a66 100755
--- a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/vm_installer
@@ -75,7 +75,6 @@ case $(${PS} --pid 1 -o comm h) in
[Unit]
Description=openSLX umount utility
Before=shutdown.target
- Requires=${SERVICEDISKMOUNT}
DefaultDependencies=no
[Service]
@@ -88,9 +87,14 @@ case $(${PS} --pid 1 -o comm h) in
[ ! -d "$SERVICEDIR"/"${TARGET}".wants ] && mkdir "$SERVICEDIR"/"${TARGET}".wants 2>/dev/null
[ ! -d "$SERVICEDIR"/shutdown.target.wants ] && mkdir "$SERVICEDIR"/shutdown.target.wants 2>/dev/null
-
+ # some distr. eg. Suse seem to want these:
+ # [ ! -d "$SERVICEDIR"/reboot.target.wants ] && mkdir "$SERVICEDIR"/reboot.target.wants 2>/dev/null
+ # [ ! -d "$SERVICEDIR"/halt.target.wants ] && mkdir "$SERVICEDIR"/halt.target.wants 2>/dev/null
+
ln -s "${SERVICEDIR}"/"${SERVICEUTIL}" "$SERVICEDIR"/"${TARGET}".wants/"${SERVICEUTIL}"
ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/shutdown.target.wants/"${SERVICEUMOUNT}"
+ # ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/reboot.target.wants/"${SERVICEUMOUNT}"
+ # ln -s "${SERVICEDIR}"/"${SERVICEUMOUNT}" "$SERVICEDIR"/halt.target.wants/"${SERVICEUMOUNT}"
echo "openslx praeinstaller: doing systemd reload."
systemctl daemon-reload