summaryrefslogtreecommitdiffstats
path: root/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes
diff options
context:
space:
mode:
authorJonathan Bauer2016-12-23 13:12:09 +0100
committerJonathan Bauer2016-12-23 13:12:09 +0100
commit6806ae4a850fc7785a8c05304237cf53b5b8f951 (patch)
treeb1dd8413d6c7b9a250251da7f0d49bb52b4ddc57 /core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes
parentwrong kernel version variable used (diff)
downloadmltk-6806ae4a850fc7785a8c05304237cf53b5b8f951.tar.gz
mltk-6806ae4a850fc7785a8c05304237cf53b5b8f951.tar.xz
mltk-6806ae4a850fc7785a8c05304237cf53b5b8f951.zip
merge with latest dev version (tm-scripts commit f5a59daf8d70a9027118292cd40b18c221897408)
Diffstat (limited to 'core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes')
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc29
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc51
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_preliminaries.inc20
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/15_set_trapping.inc14
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc27
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_get_shares.inc22
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc66
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/40_check_fallback.inc8
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc21
-rw-r--r--core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_umounter.inc12
10 files changed, 270 insertions, 0 deletions
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
new file mode 100644
index 00000000..bb7ae3a1
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/00_vars.inc
@@ -0,0 +1,29 @@
+### Variablen #####################################
+LOCALUSER=student
+USERHOME=/home/"$LOCALUSER"
+USERHOMEDIR=/home/"$LOCALUSER"/PERSISTENT
+DISKMOUNTDIR=/mnt/diskmount
+SLXCONFIGFILE="$DISKMOUNTDIR"/openslx.ini
+CONFIGFILE="$DISKMOUNTDIR"/shares.dat
+KEYTEMP=$(mktemp -t XXXXXXXXXX.dat)
+RAWKEYTEMP=$(mktemp -t XXXXXXXXXX.dat)
+BYTES=256
+declare -a ROHSHARES
+
+if [ ! $(mount 2>/dev/null | grep -q "$DISKMOUNTDIR") ]; then
+ [ ! -d "$DISKMOUNTDIR" ] && mkdir -p "$DISKMOUNTDIR"
+ mount /dev/fd1 "$DISKMOUNTDIR" 2>/dev/null 1>&2 # Zu erl.: Fehlerfangen
+fi
+
+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')
+GLOBALUSER=$(echo "$GLOBALDOMAINUSER" | cut -d '\' -f 2)
+
+REMAPMODE=$(grep 'remapMode=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+CREATEMISSING=$(grep 'createMissingRemap=' "$SLXCONFIGFILE" | cut -d '=' -f 2)
+
+MOUNTOPTSCIFS="-v -t cifs -o uid=$(id --user "$LOCALUSER"),gid=$(id --group "$LOCALUSER"),forceuid,forcegid,file_mode=0700,dir_mode=0700,nobrl,noacl"
+MOUNTOPTSNFS="-v -t nfs4 -o rw,nosuid,nodev,nolock,intr,hard,sloppy"
+### 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
new file mode 100644
index 00000000..97767c51
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_functions.inc
@@ -0,0 +1,51 @@
+### Funktionen ####################################
+
+function xor()
+{ local RES=($(echo "$1" | sed "s/../0x& /g"))
+ shift 1
+ while [[ "$1" ]]; do
+ local ONE=($(echo "$1" | sed "s/../0x& /g"))
+ local COUNT1=${#RES[@]}
+ if [ $COUNT1 -lt ${#ONE[@]} ]; then
+ COUNT1=${#ONE[@]}
+ fi
+ for (( i = 0; i < $COUNT1; i++ )); do
+ RES[$i]=$((${ONE[$i]:-0} ^ ${RES[$i]:-0}))
+ done
+ shift 1
+ done
+ printf "%02x" "${RES[@]}"
+}
+
+function already_mounted()
+{
+ # Ausgabe: gemountet = true = 0, nicht gemountet = false = 1
+ local AUSGANG
+ mount | grep -q " ${1} " && AUSGANG=0 || AUSGANG=1
+ return $AUSGANG
+}
+
+function mounter()
+{
+ # Ausgabe: konnte mounten: 0, konnte nicht mounten: 1, schon gemountet 2
+ already_mounted "$3"
+ ERR=$?
+ if [ "$ERR" -eq 0 ]; then
+ logger "openslx sharemapper: $3 already mounted."
+ AUSGANG=2
+ else
+ mount $1 $2 $3 2>/dev/null 1>&2
+ ERR=$?
+ if [ "$ERR" -gt 0 ]; then
+ logger "openslx sharemapper: could not mount ${2} to ${3}."
+ AUSGANG=1
+ else
+ logger "openslx sharemapper: ${2} mounted to ${3}."
+ AUSGANG=0
+ fi
+ fi
+ return $AUSGANG
+}
+
+### Funktionen Ende ###############################
+
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_preliminaries.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_preliminaries.inc
new file mode 100644
index 00000000..bcbd6ec1
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/10_preliminaries.inc
@@ -0,0 +1,20 @@
+preliminaries_native()
+{
+ # USERHOMEDIR=~/PERSISTENT, not ~! ################
+ [ -h "$USERHOMEDIR" ] && unlink "$USERHOMEDIR"
+ [ ! -d "$USERHOMEDIR" ] && mkdir -p "$USERHOMEDIR"
+}
+
+preliminaries_vmware()
+{
+ # USERHOMEDIR=~/PERSISTENT, not ~! ################
+ if [ -d "$USERHOMEDIR" ]; then
+ logger "openslx sharemapper: vmware mode: USERHOMEDIR ${USERHOMEDIR} is a directory, moving to ${USERHOMEDIR}_mov."
+ mv "$USERHOMEDIR" "${USERHOMEDIR}"_mov
+ fi
+
+ [ -h "$USERHOMEDIR" ] && unlink "$USERHOMEDIR"
+ logger "openslx sharemapper: vmware mode: linking $USERHOMEDIR to /mnt/hgfs/home."
+ ln -s /mnt/hgfs/home "$USERHOMEDIR" || \
+ logger "openslx sharemapper: vmware mode: Could not link to vmware hgfs mount dir."
+}
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/15_set_trapping.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/15_set_trapping.inc
new file mode 100644
index 00000000..c49b99ff
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/15_set_trapping.inc
@@ -0,0 +1,14 @@
+function ausgang()
+{ rm -f "$KEYTEMP"
+ rm -f "$RAWKEYTEMP"
+ # umount "$DISKMOUNTDIR" # as mounted by systemd now.
+}
+
+function set_trapping()
+{
+ ### Trap ##########################################
+ trap ausgang EXIT SIGHUP SIGINT SIGTERM
+ ###################################################
+}
+
+set_trapping
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc
new file mode 100644
index 00000000..c6f6ffcb
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/20_get_creds.inc
@@ -0,0 +1,27 @@
+function get_creds()
+{
+ # udp-Socket erzeugen Kanal erzeugen::
+ exec 13<>/dev/udp/"$NATADDR"/"$PORT"
+
+ # temp. Datei - wer hat Angst vor Nullbytes? Ich! Ich! Ich!
+ head -n 1 "$CONFIGFILE" |cut -f3 -d$'\t' | while read -n 2 CODE; do [ -n "$CODE" ] && printf "\x$CODE"; done >"$KEYTEMP"
+ # Auf Socket fuer Grundsystem schreiben:
+ cat "$KEYTEMP" >&13
+
+ # Serverantwort pwdaemon in temp. Datei schreiben:
+ timeout 2s dd bs=$BYTES count=1 of="$RAWKEYTEMP" <&13 2>/dev/null
+
+ # Kanal zu Socket schließen:
+ exec 13<&-
+ exec 13>&-
+
+ # Wieviele Zeichen (Bytes 1 und 2 der Paketnutzlast)?
+ ANZAHL=$((16#$(dd if=$RAWKEYTEMP bs=1 count=2 2>/dev/null|hexdump -e '1/1 "%02x"')))
+
+ # Und raus-xor-en:
+ PW=$( xor $(dd if="$RAWKEYTEMP" bs=1 skip=2 2>/dev/null|hexdump -e '1/1 "%02x"') \
+ $(head -n 1 "$CONFIGFILE" | cut -f 4 -d$'\t') | sed 's/../\\x&/g')
+
+ PW=$(echo -e "$PW") # \x...-Ausdrücke zu ASCII
+ PW="${PW:0:${ANZAHL}}" # ...und Rest nach ANZAHL abhacken.
+}
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_get_shares.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_get_shares.inc
new file mode 100644
index 00000000..70b17236
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_get_shares.inc
@@ -0,0 +1,22 @@
+function get_shares()
+{
+ i=0
+ while read -r LINIE; do
+ ROHSHARES[i]="$LINIE"
+ ((i++))
+ done < "$CONFIGFILE"
+
+# echo "${#ROHSHARES[@]} eingelesen:"
+# for (( i = 0; i < ${#ROHSHARES[@]}; i++ )); do
+# echo -n "$i "
+# echo "${ROHSHARES[i]}"
+# done
+
+ let SHAREZAHL=${#ROHSHARES[@]}-1
+ if [ "$SHAREZAHL" -lt 1 ]; then
+ logger "openslx sharemapper: No shares to map/mount found in config file $CONFIGFILE."
+ exit 0
+ else
+ logger "openslx sharemapper: $SHAREZAHL share(s) found."
+ fi
+}
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
new file mode 100644
index 00000000..b1320d01
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/30_mount_shares.inc
@@ -0,0 +1,66 @@
+function mount_shares()
+{
+ for (( CONFIGROW = 1; CONFIGROW < ${#ROHSHARES[@]}; CONFIGROW++ )); do
+ SHAREPATH=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 1 -d$'\t') # cifs- oder nfs-Share
+ SHARELETTER=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 2 -d$'\t' | \
+ sed 's/://g') # Laufwerksbuchstabe ohne :
+ SHARENAME=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 3 -d$'\t' | sed 's/ /_/g') # Leerzeichen raus.
+ SHAREUSER=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 4 -d$'\t') # Username, bei Userhome nicht vorhanden
+ SHAREPASS=$(echo "${ROHSHARES[CONFIGROW]}" | cut -f 5 -d$'\t') # User-PW, bei Userhome nicht vorhanden
+
+ # Sharetyp bestimmen:
+ if [ "${SHAREPATH:0:2}" == '\\' ]; then
+ USER=$(echo "$SHAREUSER"|cut -d '\' -f 2)
+ MOUNTOPTS="$MOUNTOPTSCIFS"
+ else
+ MOUNTOPTS="$MOUNTOPTSNFS"
+ fi
+
+ # User-Homeverzeichnis?
+ if [ "${SHARENAME:0:5}" == "Home-" ]; then
+ logger "openslx sharemapper: home share \"$SHARENAME\" found (for PERSISTENT)."
+ export USER="${GLOBALUSER}"
+ export PASSWD="${PW}"
+ mounter "${MOUNTOPTS}" ${SHAREPATH} ${USERHOMEDIR} 2>/dev/null 1>&2
+ unset USER
+ unset PASSWD
+ else
+ if [ -z "${SHARELETTER}" ]; then
+ logger "openslx sharemapper: $SHARELETTER not found. Do not know where to mount."
+ continue
+ else
+ USERSHAREDIR="${USERHOME}"/SHARE_"${CONFIGROW}" # ROHSHARES: Zeilennummer; Shares >=1
+ if [ ! -d "$USERSHAREDIR" ]; then
+ mkdir -p "$USERSHAREDIR" 2>/dev/null
+ chown "$LOCALUSER":$(id --group "$LOCALUSER") "$USERSHAREDIR"
+ chmod 700 "$USERSHAREDIR"
+ logger "openslx sharemapper: share mount dir $USERSHAREDIR created."
+ fi
+ fi
+ # Wenn kein Homeverzeichnis, dann share zuerst mit den Credentials aus der share-Konfig
+ # versuchen zu mounten; wenn nicht, dann mit den Hauptcredentials nachversuchen.
+ logger "openslx sharemapper: non-home share \"$SHARENAME\" (${CONFIGROW}) found."
+ export USER="${SHAREUSER}"
+ export PASSWD="${SHAREPASS}"
+ mounter "${MOUNTOPTS}" ${SHAREPATH} ${USERSHAREDIR} 2>/dev/null 1>&2
+ ERR=$?
+ if [ "$ERR" -eq 1 ]; then
+ export USER="${GLOBALUSER}"
+ export PASSWD="${PW}"
+ logger "openslx sharemapper: Could not mount ${USERSHAREDIR}, now trying using user credentials."
+ mounter "${MOUNTOPTS}" ${SHAREPATH} ${USERSHAREDIR} 2>/dev/null 1>&2 \
+ 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."
+ fi
+ unset USER
+ unset PASSWD
+ fi
+ if [ "$ERR" -eq 0 ]; then
+ logger "openslx sharemapper: Linking ${SHARELETTER} and $SHARENAME, if possible."
+ [ -n "${SHARELETTER}" ] && ln -s "$USERSHAREDIR" "${USERHOME}"/"$SHARELETTER"
+ [ -n "${SHARELETTER}" ] && ln -s "$USERSHAREDIR" "${USERHOME}"/"$SHARENAME"
+ fi
+ fi
+ done
+}
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/40_check_fallback.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/40_check_fallback.inc
new file mode 100644
index 00000000..14a13f77
--- /dev/null
+++ b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/40_check_fallback.inc
@@ -0,0 +1,8 @@
+check_fallback() {
+ if [ $(mount | grep -c " $USERHOMEDIR type cifs \| $USERHOMEDIR type nfs") -lt 1 ]; then
+ logger "openslx sharemapper: fallback mode: home share check failed, doing fallback to vmware mode."
+ preliminaries_vmware
+ else
+ logger "openslx sharemapper: fallback mode: home share check passed, no fallback necessary."
+ fi
+}
diff --git a/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc b/core/modules/run-virt/data/opt/openslx/vmchooser/data/linux/includes/50_postliminaries.inc
new file mode 100644
index 00000000..f6f1cf7d
--- /dev/null
+++ b/core/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/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
new file mode 100644
index 00000000..e161b961
--- /dev/null
+++ b/core/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
+}