From 9b8bf87f5e8830fef88a9caadda7ec55be4f5fe0 Mon Sep 17 00:00:00 2001
From: Johannes Sauer <sauer@ient.rwth-aachen.de>
Date: Mon, 27 Jun 2016 16:39:58 +0000
Subject: [PATCH] Skripte hinzugefuegt:  - zur nachtraeglichen Aenderung des
 Isos  - Matlab Lizenzcheckout  - windows shares mounten  - Matlab Desktop
 Symbol hinzugefuegt

---
 tools/licencecheckout.sh |  33 ++++++++
 tools/mount-windows      |  48 ++++++++++++
 tools/rc.local.sh        | 158 +++++++++++++++++++++++++++++++++++++++
 tools/umount-windows     |  11 +++
 4 files changed, 250 insertions(+)
 create mode 100755 tools/licencecheckout.sh
 create mode 100755 tools/mount-windows
 create mode 100644 tools/rc.local.sh
 create mode 100755 tools/umount-windows

diff --git a/tools/licencecheckout.sh b/tools/licencecheckout.sh
new file mode 100755
index 0000000..7d7e1b4
--- /dev/null
+++ b/tools/licencecheckout.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+LMUTIL=/usr/local/bin/lmutil
+MATLAB=/opt/matlab/bin/matlab
+
+if [ ! -f $LMUTIL -o ! -f $MATLAB ]; then
+  echo "Required binaries for licence checkout not available. Exiting..."
+  exit 1
+fi
+
+DATUM=$( date '+%d-%b-%Y' -d '14 days' )
+
+cd /tmp
+cat >lizenzen.m <<EOF
+license checkout MATLAB;
+license checkout Communication_Toolbox;
+license checkout Image_Toolbox;
+license checkout Optimization_Toolbox;
+license checkout Signal_Toolbox;
+license checkout Signal_Blocks;
+quit;
+EOF
+
+$LMUTIL lmborrow MLM $DATUM
+$MATLAB -nosplash -nojvm -nodesktop -nodisplay -r lizenzen
+$LMUTIL lmborrow -clear
+$LMUTIL lmborrow -status
+
+# remove empty license file
+FLEXLM=/home/mindstorms/.flexlmborrow
+if [ ! -s $FLEXLM ]; then
+  rm -f $FLEXLM
+fi
\ No newline at end of file
diff --git a/tools/mount-windows b/tools/mount-windows
new file mode 100755
index 0000000..e852450
--- /dev/null
+++ b/tools/mount-windows
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# script to ease mounting a SMB share
+# (c) 2007 Johannes Ballé
+
+licenseBackup() {
+	# move .flexlmborrow to ~/work and add link to ~/
+	FLEXLM_OLD=~/.flexlmborrow
+	FLEXLM_NEW=~/work/.flexlmborrow
+	[ -d ~/work -a -f $FLEXLM_OLD -a ! -h $FLEXLM_OLD  ] && ( mv -f $FLEXLM_OLD $FLEXLM_NEW )
+	[ -f $FLEXLM_NEW -a ! -f $FLEXLM_OLD  ] && ( ln -s $FLEXLM_NEW $FLEXLM_OLD )
+}
+
+SHARENAME="$1"
+OPTIONS="$2"
+
+if [ "${SHARENAME:0:2}" != "//" -o $# -ge 3 ]; then
+	echo "Syntax: ${0##*/} //{servername}/{sharename} [option1=xxx,option2,...]" >&2
+	exit 1
+fi
+
+# check if work directory already exists
+if [ -e ~/work ]; then
+	echo "Error: MATLAB work directory already exists" >&2
+	licenseBackup
+	exit 1
+fi
+
+mkdir ~/work
+
+# mount Windows share
+# newer Ubuntu releases require root permissions - use sudo
+MACHINE_TYPE=`uname -m`
+if [ "$OPTIONS" ]; then
+	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
+		sudo mount.cifs "$SHARENAME" ~/work -o "$OPTIONS" || rm -rf ~/work
+	else
+		mount.cifs "$SHARENAME" ~/work -o "$OPTIONS" || rm -rf ~/work
+	fi
+else
+	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
+		sudo mount.cifs "$SHARENAME" ~/work -o uid=999,gid=999 || rm -rf ~/work
+	else
+		mount.cifs "$SHARENAME" ~/work || rm -rf ~/work
+	fi
+fi
+
+licenseBackup
diff --git a/tools/rc.local.sh b/tools/rc.local.sh
new file mode 100644
index 0000000..42ff1a7
--- /dev/null
+++ b/tools/rc.local.sh
@@ -0,0 +1,158 @@
+#!/bin/bash
+
+# Link scripts to /usr/local/bin
+echo "Linking scripts to /usr/local/bin ..."
+for i in /opt/mindstorms/tools/*; do
+	ln -s $i /usr/local/bin/
+done
+
+# Try to find a mindstorms.fat file / mindstorms.dir directory
+# in any local partition.
+# If it exists, mount it to /home/mindstorms/work.
+# Also try to find mindstorms.swp files to use as swap space.
+
+mkdir -p /mnt/localfs /home/mindstorms/work
+chmod 700 /mnt
+
+shopt -s nullglob
+
+# HACK: disable gnome's automount functionality for manual mounting
+echo "Disabling gnome's automount functionality for manual mounting..."
+su - mindstorms -c "dbus-launch --exit-with-session gsettings set org.gnome.desktop.media-handling automount 'false'"
+su - mindstorms -c "dbus-launch --exit-with-session gsettings set org.gnome.desktop.media-handling automount-open 'false'"
+
+# Unmount all auto-mounted devices
+shopt -s globstar	# allow '**' path expansion
+echo "Unmounting all auto-mounted devices ..."
+for PART in /media/**/; do
+	if [ ! "$PART" = "/media/cdrom" ]; then
+		umount "$PART" 2>/dev/null
+	fi
+done
+shopt -u globstar	# disallow '**' path expansion
+
+
+
+# Mount all partitions read-only
+echo "Mounting all available partitions read-only ..."
+for PART in /dev/disk/by-id/*; do
+	DEVICE="$( readlink -f "$PART" )"
+	if ! grep -q "^$DEVICE " /etc/mtab; then
+		MOUNTPOINT="/mnt/localfs/${PART##*/}"
+		mkdir "$MOUNTPOINT" || continue
+		# try reading first sector, mount produces a timeout on card reader devices for some reason
+		( dd if="$DEVICE" of=/dev/null bs=512 count=1 && mount -o ro "$DEVICE" "$MOUNTPOINT" ) || rmdir "$MOUNTPOINT"
+	fi
+done
+
+# Try to find mindstorms.dir directory (also on boot medium)
+if ! mountpoint -q /home/mindstorms/work; then
+	echo "Looking for mindstorms.dir directory (also on boot medium) ..."
+	for DIR in /cdrom/mindstorms.dir /mnt/localfs/*/mindstorms.dir; do
+		MOUNTPOINT="${DIR%/*}"
+		[ -d "$DIR" ] || continue
+		echo "Found mindstorms.dir at ${DIR}. Re-mounting as writable ..."
+		if [ "$MOUNTPOINT" = "/cdrom" ]; then
+			mount -o remount,rw /cdrom || continue
+		elif umount "$MOUNTPOINT"; then
+			PART="/dev/disk/by-id/${MOUNTPOINT##*/}"
+			if [ "$( blkid -s TYPE -o value "$PART" )" = "ntfs" ]; then
+				mount -t ntfs-3g -o rw,no_def_opts,umask=077 "$PART" "$MOUNTPOINT" || continue
+			else
+				mount -o rw "$PART" "$MOUNTPOINT" || continue
+			fi
+		fi
+		bindfs --create-as-mounter -u mindstorms -g mindstorms "$DIR" /home/mindstorms/work && break
+	done
+fi
+
+# If this failed, try to find a mindstorms.fat file
+if ! mountpoint -q /home/mindstorms/work; then
+	echo "Looking for mindstorms.fat file (also on boot medium) ..."
+	for FAT in /cdrom/mindstorms.fat /mnt/localfs/*/mindstorms.fat; do
+		MOUNTPOINT="${FAT%/*}"
+		[ "$( blkid -s TYPE -o value "$FAT" )" = "vfat" ] || continue
+		echo "Found mindstorms.fat at ${FAT}. Re-mounting as writable ..."
+		if [ "$MOUNTPOINT" = "/cdrom" ]; then
+			mount -o remount,rw /cdrom || continue
+		elif umount "$MOUNTPOINT"; then
+			PART="/dev/disk/by-id/${MOUNTPOINT##*/}"
+			if [ "$( blkid -s TYPE -o value "$PART" )" = "ntfs" ]; then
+				mount -t ntfs-3g -o rw,no_def_opts,umask=077 "$PART" "$MOUNTPOINT" || continue
+			else
+				mount -o rw "$PART" "$MOUNTPOINT" || continue
+			fi
+		fi
+		mount -t vfat -o loop,rw,uid=999,gid=999,fmask=0133,dmask=0022 "$FAT" /home/mindstorms/work && break
+	done
+fi
+
+# Try to find all mindstorms.swp files
+echo "Looking for mindstorms.swp files ..."
+for SWP in /mnt/localfs/*/mindstorms.swp; do
+	MOUNTPOINT="${SWP%/*}"
+	PART="/dev/disk/by-id/${MOUNTPOINT##*/}"
+	echo "Mounting swap file at ${SWP} as writable ..."
+	if umount "$MOUNTPOINT"; then
+		if [ "$( blkid -s TYPE -o value "$PART" )" = "ntfs" ]; then
+			mount -t ntfs-3g -o rw,no_def_opts,umask=077 "$PART" "$MOUNTPOINT" || continue
+		else
+			mount -o rw "$PART" "$MOUNTPOINT" || continue
+		fi
+	fi
+	# just in case we mount the same disk twice under a different name,
+	# make sure swap space is not yet being used
+	swapoff "$SWP"
+	mkswap "$SWP" || continue
+	swapon "$SWP"
+done
+
+# Try to unmount all unused partitions
+echo "Unmounting all unused partitions ..."
+for PART in /mnt/localfs/*; do
+	echo "Unmounting ${PART}."
+	umount "$PART" 2>/dev/null
+done
+
+# Remove work directory if not mounted
+if ! mountpoint -q /home/mindstorms/work; then
+	echo "Removing work directory as no available mountpoint found."
+	rm -rf /home/mindstorms/work
+fi
+
+# HACK: re-enable gnome's automount functionality.
+echo "Re-enabling gnome's automount functionality ..."
+su - mindstorms -c "dbus-launch --exit-with-session gsettings set org.gnome.desktop.media-handling automount 'true'"
+su - mindstorms -c "dbus-launch --exit-with-session gsettings set org.gnome.desktop.media-handling automount-open 'true'"
+
+# Download or link lmutil
+echo "Downloading lmutil for Matlab license checkout ..."
+LMUTIL=/usr/local/bin/lmutil
+LMUTIL_LOCAL=/opt/matlab/etc/glnxa64/lmutil
+[ -f $LMUTIL_LOCAL -a ! -e $LMUTIL ] && ln -s $LMUTIL_LOCAL $LMUTIL
+[ -e $LMUTIL ] || ( wget -q -O - http://www.ient.rwth-aachen.de/cms/uploads/rwthonly/lehre/mindstorms/lmutil.bz2 | bunzip2 >$LMUTIL )
+[ -e $LMUTIL ] && chmod 755 $LMUTIL
+
+# check out matlab licence
+echo "Checking out Matlab license ..."
+[ -e $LMUTIL ] && su - mindstorms /usr/local/bin/licencecheckout.sh
+
+# backup .flexlmborrow to /home/mindstorms/work and add link to home directory
+echo "Backing up .flexlmborrow to /home/mindstorms/work ..."
+FLEXLM_OLD=/home/mindstorms/.flexlmborrow
+FLEXLM_NEW=/home/mindstorms/work/.flexlmborrow
+[ -d /home/mindstorms/work -a -f $FLEXLM_OLD -a ! -h $FLEXLM_OLD  ] && ( sudo -u mindstorms mv -f $FLEXLM_OLD $FLEXLM_NEW )
+[ -f $FLEXLM_NEW -a ! -f $FLEXLM_OLD  ] && ( sudo -u mindstorms ln -s $FLEXLM_NEW $FLEXLM_OLD )
+
+# add matlab desktop launcher
+cp   /usr/share/applications/matlab.desktop /home/mindstorms/Desktop/
+chmod +x /home/mindstorms/Desktop/matlab.desktop 
+sudo chown mindstorms:mindstorms /home/mindstorms/Desktop/matlab.desktop 
+
+# copy laboratory documentation
+echo "Copying documentation ..."
+DOCUMENTATION_DIR=/home/mindstorms/Desktop/Versuchsunterlagen
+[ ! -d ${DOCUMENTATION_DIR} ] && ( sudo -u mindstorms mkdir -p ${DOCUMENTATION_DIR} )
+wget -q -O - http://www.ient.rwth-aachen.de/cms/uploads/rwthonly/lehre/mindstorms/versuchsunterlagen.tar.gz | tar -xzf - -C ${DOCUMENTATION_DIR}
+sudo chown -R mindstorms:mindstorms ${DOCUMENTATION_DIR}
+
diff --git a/tools/umount-windows b/tools/umount-windows
new file mode 100755
index 0000000..30ab28b
--- /dev/null
+++ b/tools/umount-windows
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# script to ease unmounting a SMB share
+# (c) 2007 Johannes Ballé
+
+if [ $# -ne 0 ]; then
+	echo "Syntax: ${0##*/}" >&2
+	exit 1
+fi
+
+sudo umount ~/work && rm -rf ~/work
-- 
GitLab