#!/bin/bash
# Script created by Rainer Rössler (roesslerrr-at-web.de)
# License: Free Software (License GPLv3)

# Interaktive Eingabe von MASCHINENNAME
echo
echo "Geben Sie den Namen der neuen virtuellen Maschine ein"
echo "(Keine Leerzeichen - bestätigen mit der Enter-Taste):"
read MACHINENAME
#echo $MACHINENAME
if [ "`echo $MACHINENAME | grep ' '`" != "" ]
then 
 echo
 echo "Es ist ein Leerzeichen enthalten. ABBRUCH!"
 echo
 exit 0
fi

# vordefinierter Pfad für VM
VMPATH="/var/virtual"
#echo $VMPATH

# Abfrage wo die VM angelegt werden soll
YESNO="x"
until [ `echo $YESNO` == "j" ] 
do
  echo
  echo "Soll die virtuelle Maschine im Verzeichnis $VMPATH/$MACHINENAME angelegt werden?"
  echo "(Nach Eingabe von n kann ein anderer Pfad angegeben werden.)"
  read -p "(j/n - Bestätigen mit der Enter-Taste): " YESNO
  
  if [ `echo $YESNO` == "n" ] 
  then
    echo
    echo "Geben Sie den gewünschten Pfad für die virtuelle Maschine an:"
    echo "(Keine Leerzeichen - bestätigen mit der Enter-Taste):"
    read VMPATH
    
    if [ "`echo $VMPATH | grep ' '`" != "" ]
    then 
     echo
     echo "Es ist ein Leerzeichen enthalten. ABBRUCH!"
     echo
     exit 0
    fi
        
    if [ `echo $VMPATH | cut -b 1` != "/" ]
    then
      VMPATH=`echo "/"$VMPATH`
    fi 
  fi

done

if [ -f $VMPATH/$MACHINENAME ]
then
  mv $VMPATH/$MACHINENAME $VMPATH/$MACHINENAME-datei
fi

if [ -d $VMPATH/$MACHINENAME ]
then
 echo
 echo "Diese Maschine gibt es schon. ABBRUCH!"
 echo
 exit 0
else 
 mkdir -p $VMPATH/$MACHINENAME
fi

if [ -f /etc/leoclient2/machines/$MACHINENAME.conf ]
then
 echo
 echo "Die Konfigurationsdatei für diese Maschine gibt es schon. ABBRUCH!"
 exit 0
fi


# Parameter für virtuelle Maschine eingeben
echo
echo "Mit welcher Größe soll die virtuelle Festplatte für die "
echo "virtuelle Maschine $MACHINENAME angelegt werden (Angabe in MB)?"
echo "(Bestätigen mit der Enter-Taste):"
read HDD

echo
echo
echo "Es wird anschließend eine virtuelle Maschine im Verzeichnis"
echo "$VMPATH/$MACHINENAME erzeugt."
echo "Die Festplatte wird eine Größe von $HDD MB haben."  
echo "Außerdem ist USB und eine Soundkarte aktiviert."
echo "Eine Netzwerkkarte ist nicht aktiviert, da ein Zugriff auf das"
echo "persönliche Heimatverzeichnis auf dem Server und zum lokalen" 
echo "Verzeichnis /media für Wechseldatenträger über Laufwerksfreigaben"
echo "möglich ist."
echo "Alle Einstellungen können auf der anschließend startenden Oberfläche"
echo "von VirtualBox auch individuell eingestellt werden. "
echo "Wenn die Einstellungen wunschgemäß sind, wird VirtualBox"
echo "gestartet und das Betriebssystem muss auf der"
echo "eingerichteten virtuellen Maschine installiert werden."
echo "(Änderungen können später noch eingepflegt werden.)"
echo "Ist dies abgeschlossen, müssen Sie die virtuelle Maschine"
echo "heruntergefahren und VirtualBox beenden. "
echo "Erst danach wird dieses Script abgeschlossen."

YESNO="X"
until [ `echo $YESNO` == "jZ" ] 
do
  echo "Soll die virtuelle Maschine jetzt erzeugt und VirtualBox gestartet werden?"
  echo "(j/n - Bestätigen mit der Enter-Taste): "
  read YESNO
  YESNO=`echo $YESNO"Z"`
  echo
  
  if [ `echo $YESNO` == "nZ" ] 
  then
    echo
    echo "Die Vorbereitung einer virtuellen Maschine wird abgebrochen."
    echo 
    exit 0
  fi
done


cd ~

HEIMAT=`pwd`


# Umgebungsvariable für virtuelle Maschine im Verzeichnis setzen
export VBOX_USER_HOME=$VMPATH/$MACHINENAME/

# Variable von VirtualBox setzen, um Standardverzeichnis einzustellen
#VBoxManage setproperty machinefolder $VMPFAD/$MASCHINENNAME
VBoxManage setproperty machinefolder $VMPATH


# Maschine erzeugen
#VBoxManage createvm --name $MACHINENAME
# Maschine in VirtualBox registrieren
#VBoxManage registervm $MACHINENAME.vbox
# beides zusammen
VBoxManage createvm --name $MACHINENAME --register

# Maschine konfigurieren (RAM, LAN, ...)
VBoxManage modifyvm $MACHINENAME --name $MACHINENAME --memory 1024 --accelerate3d on --accelerate2dvideo on --usb on --usbehci on --audio pulse --audiocontroller sb16 --vram 32
# Option "--draganddrop hosttoguest" erst mit VirtualBox 4.3 verfügbar
#VBoxManage modifyvm $MACHINENAME --name $MACHINENAME --memory 1024 --accelerate3d on --accelerate2dvideo on --draganddrop hosttoguest --usb on --usbehci on --audio pulse --audiocontroller sb16 --vram 32

VBoxManage storagectl $MACHINENAME --name $MACHINENAME --add ide --controller PIIX4

VBoxManage createhd --filename $VMPATH/$MACHINENAME/$MACHINENAME.vdi --size $HDD --format VDI

VBoxManage storageattach $MACHINENAME --storagectl $MACHINENAME --port 0 --device 0 --type hdd --medium $VMPATH/$MACHINENAME/$MACHINENAME.vdi

VBoxManage sharedfolder add $MACHINENAME --name media --hostpath /media

VBoxManage sharedfolder add $MACHINENAME --name home --hostpath $HEIMAT


# VirtualBox starten, um Betriebssystem zu installieren
virtualbox


# Anzahl der Snapshots darf max. 1 sein
SNAPSHOTS=`ls -al $VMPATH/$MACHINENAME/Snapshots | wc -l`
while [ "$SNAPSHOTS" -gt "4" ]
do
  echo
  echo "Es darf aber nur ein einziger Sicherungspunkt für die Maschine vorhanden sein,"
  echo "ansonsten kann der Snapshotstarter nicht funktionieren."
  echo 
  echo "Alle bis auf einen Sicherungspunkt löschen!"
  virtualbox
  
  SNAPSHOTS=`ls -al $VMPATH/$MACHINENAME/Snapshots | wc -l`
done


if [ -d $VMPATH/$MACHINENAME/Snapshots ]
then
  SNAPSHOTS=`ls -al $VMPATH/$MACHINENAME/Snapshots | wc -l`
  if [ "$SNAPSHOTS" -gt "3" ]
  then
    echo
    echo "Für diese Maschine gibt es einen Snapshot."
  else
    echo
    echo "Für diese Maschine wird ein Sicherungspunkt erzeugt."
    # Snapshot erzeugen, wenn virtuelle Maschine fertig erzeugt wurde
    VBoxManage snapshot $MACHINENAME take snapshot-$MACHINENAME
  fi
else 
  echo
  echo "Für diese Maschine wird ein Sicherungspunkt erzeugt."
  # Snapshot erzeugen, wenn virtuelle Maschine fertig erzeugt wurde
  VBoxManage snapshot $MACHINENAME take snapshot-$MACHINENAME
fi

# Konfigurationsdatei für die virtuelle Maschie erstellen
if [ -d /etc/leoclient2/machines ]
then
  cd ~
else 
  mkdir -p /etc/leoclient2/machines
fi

echo $VMPATH/$MACHINENAME > /etc/leoclient2/machines/$MACHINENAME.conf

# Verzeichnis in dem die VM liegen muss in Verzeichnis der 
# Maschine ablegen als MACHINENAME.conf
cp /etc/leoclient2/machines/$MACHINENAME.conf $VMPATH/$MACHINENAME/

# Standard-Konfiguration sichern in Unterverzeichnis defaults
if [ -d $VMPATH/$MACHINENAME/defaults ]
then
  cd ~
else 
  mkdir $VMPATH/$MACHINENAME/defaults
fi
cp $VMPATH/$MACHINENAME/compreg.dat $VMPATH/$MACHINENAME/defaults
cp $VMPATH/$MACHINENAME/VirtualBox.xml $VMPATH/$MACHINENAME/defaults
cp $VMPATH/$MACHINENAME/xpti.dat $VMPATH/$MACHINENAME/defaults 
cp $VMPATH/$MACHINENAME/$MACHINENAME.vbox $VMPATH/$MACHINENAME/defaults 

if [ -d $VMPATH/$MACHINENAME/snapshot-store/standard ]
then
  cd ~
else 
  mkdir -p $VMPATH/$MACHINENAME/snapshot-store/standard
fi
cd $VMPATH/$MACHINENAME/Snapshots
SNAPSHOTDATEI=`ls *.vdi`
# gezippt wird nun mit 'leovirtstarter2 --prepare-remote-vm MACHINENAME'
#alt#zip -9 $SNAPSHOTDATEI.zip $SNAPSHOTDATEI
#alt#mv $SNAPSHOTDATEI.zip $VMPATH/$MACHINENAME/snapshot-store/standard/
cp $SNAPSHOTDATEI $VMPATH/$MACHINENAME/snapshot-store/standard/
leovirtstarter2 --prepare-remote-vm $MACHINENAME

chmod -R 777 $VMPATH/$MACHINENAME
chmod -R 755 $VMPATH/$MACHINENAME/snapshot-store/standard
chmod -R 755 $VMPATH/$MACHINENAME/defaults
chmod 755 $VMPATH/$MACHINENAME/$MACHINENAME.vdi

echo
echo
echo "Die Konfiguationsdateien und der Snapshot wurden gesichert."
echo "Die Rechte der Dateien wurden angepasst." 
echo "Die virtuelle Maschine kann nun mit dem Snapshotstarter benutzt werden."
echo 
echo "Wenn Sie die Basis für die virtuelle Maschine und den Snapshot neu"
echo "erzeugen wollen, starten Sie das Script 'leoclient2-base-snapshot-renew'."
echo
echo "Wenn Sie die vollständige virtuelle Maschine in ein anderes Verzeichnis"
echo "umziehen wollen, starten Sie das Script 'leoclient2-vm-move'."
echo

exit 0

