#! /bin/bash # # /usr/bin/leoclient2-directstart -m -s -r # # m: Name der lokalen VM # s: Name des lokalen Snapshots, ohne wird "wie vorgefunden" verwendet # r: RAM in MB # # Version 3 - September 2015 etcdir="/etc/leoclient2/machines" OPTIND=1 vm="" S_NAME="" MACHINENAME="" MACHINEPATH="" RAM="1024" while getopts "m:s:r:" opt; do case "$opt" in m) vm=$OPTARG ;; s) S_NAME=$OPTARG ;; r) RAM=$OPTARG ;; esac done shift $((OPTIND-1)) [ "$1" = "--" ] && shift for file in "$etcdir"/*.conf; do pfad=`cat $file` b=$(basename "$pfad") if [ "$b" = "$vm" ] ; then MACHINENAME=$b MACHINEPATH=$pfad fi done if [ "$MACHINENAME" = "" ] ; then echo "ERROR: Die Virtuelle Maschine $vm wurde nicht gefunden!" exit 1 fi sudo /usr/bin/leovirtstarter2 --set-permissions if [ "$S_NAME" != "" ] ; then SNAPSHOTPATH="$MACHINEPATH/snapshot-store/$S_NAME" if [ -d "$SNAPSHOTPATH" ]; then # Name des aktuellen Snapshots aus der VBox-XML-Dstei ermitteln XMLPATH="$MACHINEPATH/defaults/$MACHINENAME.vbox" SNAPSHOTNAME=`sed -n 's|.*location="Snapshots\/\([^"]*\).*|\1|p' $XMLPATH` # echo $SNAPSHOTNAME if [ -f "$SNAPSHOTPATH/$SNAPSHOTNAME.zip" ]; then rm -Rf "$MACHINEPATH/Snapshots"/* unzip "$SNAPSHOTPATH/$SNAPSHOTNAME.zip" -d "$MACHINEPATH/Snapshots" cp -f "$MACHINEPATH/defaults/$MACHINENAME.vbox" "$MACHINEPATH" echo "zip" elif [ -f "$SNAPSHOTPATH/$SNAPSHOTNAME.ZIP" ]; then rm -Rf "$MACHINEPATH/Snapshots"/* unzip "$SNAPSHOTPATH/$SNAPSHOTNAME.ZIP" -d "$MACHINEPATH/Snapshots" cp -f "$MACHINEPATH/defaults/$MACHINENAME.vbox" "$MACHINEPATH" else echo "ERROR: Snapshot $S_NAME wurde nicht gefunden!" exit 1 fi fi fi # Berechtigungen des Snapshots Ueberpruefen if [ -f "$SNAPSHOTPATH/image.conf" ]; then auser=1 ahost=1 buser=0 bhost=0 HOST=$(hostname) ROOM=`groups $HOST | gawk -F" " '{ print $3 }'` GROUP=`groups $USER | gawk -F" " '{ print $3 }'` # echo "---$USER---$GROUP---$HOST---$ROOM---" IFS="=" while read -r name value do liste=${value//\"/} # echo "Inhalt von $name ist $liste" if [ "$name" == "user" ]; then auser=0 IFS="," for u in $liste do if [ "$USER" == "$u" ]; then buser=1 echo "Berechtigung user gefunden: $u" fi done fi if [ "$name" == "group" ]; then auser=0 IFS="," for u in $liste do if [ "$GROUP" == "$u" ]; then buser=1 echo "Berechtigung group gefunden: $u" fi done fi if [ "$name" == "host" ]; then ahost=0 IFS="," for u in $liste do if [ "$HOST" == "$u" ]; then bhost=1 echo "Berechtigung host gefunden: $u" fi done fi if [ "$name" == "room" ]; then ahost=0 IFS="," for u in $liste do if [ "$ROOM" == "$u" ]; then bhost=1 echo "Berechtigung room gefunden: $u" fi done fi IFS="=" done < "$SNAPSHOTPATH/image.conf" if [ $auser = 0 ] && [ $buser = 0 ]; then echo "User/Group hat keine Berechtigung -> ABBRUCH" exit 1 fi if [ $ahost = 0 ] && [ $bhost = 0 ]; then echo "Host/Room hat keine Berechtigung -> ABBRUCH" exit 1 fi fi export VBOX_USER_HOME=$MACHINEPATH /usr/bin/VBoxManage sharedfolder remove "$vm" --name home /usr/bin/VBoxManage sharedfolder add "$vm" --name home --hostpath "$HOME/Home_auf_Server" /usr/bin/VBoxManage modifyvm "$vm" --memory "$RAM" /usr/bin/VBoxManage startvm "$vm" --type gui exit 0