{{tag> leoclient}} ====== Leoclient 2 - Ergänzungen ====== Installation und Beschreibung siehe -> http://docs.linuxmuster.net/de/latest/clients/leoclient2/index.html ===== VirtualBox starten - ohne VM Start ===== Mit dem Befehl: # leovirtstarter2 --vbox wird die Virtual-Box GUI der ausgewählten VM gestartet, jedoch nicht die VM selbst. Danach kann man z.B. die Hardwarekonfiguration der VM ändern. Diese Änderung landet dann in der ''//.vbox'' - Datei. Beim Zurücksetzen eines Snapshots wird aber auch die Konfiguration zurückgesetzt. Um Änderungen dauerhaft zu übernehmen startet man am Besten das Script: # sudo leoclient2-base-snapshot-renew Dieses setzt alle Konfigurationsdateien dauerhaft im "defaults"-Verzeichnis der entsprechenden VM und verändert auch den "base-Snapshot", d.h. den Basisfestplatten-Zustand. ===== Aktuellen Snapshot/Zustand der VM als neuen auswählbaren Snapshot setzen ===== Nachfolgendes Script legt mit dem aktuellen Snapshot der VM einen neuen auswählbaren Snapshot an. Ohne Angabe eines Snapshot-Namens wird der standard-Snapshot neu gesetzt. Script muss mit root-Rechten gestartet werden, man legt es am besten unter **''/usr/bin/''** ab und macht es ausführbar. Der "base-Snapshot", d.h. die zugrundeliegende Basisfestplatte wird dabei nicht verändert. Eine veränderte Hardwarekonfiguration speichert das Script auch nicht -> ggf. selbst die .vbox-Datei sichern. Vorgehensweise: - Arbeiten als linuxadmin am Ubuntu-Client - Bisherigen base/standard-Snapshot der VM (z.B. hier winxp1) booten - Software installieren und sonstige Veränderungen abarbeiten, VM dann herunterfahren - untenstehendes Script aufrufen:# sudo leoclient2-snapshot-create -m winxp1 -s Software2015 oder für den standard-Snapshot# sudo leoclient2-snapshot-create -m winxp1 Damit gibt es nun einen neuen Snapshot mit dem Namen "Software2015" im Auswahlmenü des Snapshotstarters. #!/bin/bash # # /usr/bin/leoclient2-snapshot-create # # Usage: leoclient2-snapshot-create -m -s # Ohne Snapshot-name wird der standard-Snapshot gesetzt # Script als root ausführen # etcdir="/etc/leoclient2/machines" OPTIND=1 VMPATH="/var/virtual" vm="" S_NAME="standard" MACHINENAME="" MACHINEPATH="" while getopts "m:s:" opt; do case "$opt" in m) vm=$OPTARG ;; s) S_NAME=$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: Virtual Machine $vm wurde nicht gefunden!" exit 1 fi snapshotdir="$MACHINEPATH/Snapshots" s_filepfad=`find $snapshotdir -name "*.vdi" -print -quit` if [ "$s_filepfad" = "" ] ; then echo "ERROR: Kein Snapshot *.vdi gefunden!" exit 1 fi SNAPSHOTPATH="$MACHINEPATH/snapshot-store/$S_NAME" if [ -d "$SNAPSHOTPATH" ]; then rm -Rf $SNAPSHOTPATH/* else mkdir "$SNAPSHOTPATH" fi cp -f "$s_filepfad" "$SNAPSHOTPATH" FILESIZE=$(stat -c%s "$s_filepfad") echo $FILESIZE > "$SNAPSHOTPATH/filesize.vdi" sf=$(basename "$s_filepfad") z_filepfad="$SNAPSHOTPATH/$sf.zip" zip -9 -j $z_filepfad $s_filepfad FILESIZE=$(stat -c%s "$z_filepfad") echo $FILESIZE > "$SNAPSHOTPATH/filesize.vdi.zipped" chmod -R 755 "$SNAPSHOTPATH" echo " OK: Snapshot $sf wurde als $S_NAME gesetzt." exit 0 ===== VM direkt starten ===== Nachfolgendes Script startet direkt ohne Dialog eine VM. Das Script ermittelt den aktuellen Snapshot-Namen "{...}.vdi" aus der VBox-XML-Datei der VM. Dann wird der gezippte-Snapshot verwendet. Starten, "wie vorgefunden" klappt nicht, wenn sich die VM im einem "gespeicherten Zustand" befindet.\\ Script unter **''/usr/bin''** ablegen und ausführbar machen. Die Rechteanpassung erfolgt mit Hilfe des ''leovirtstarter2''. Eine Datei ''network.conf'' wird von dem Script nicht ausgewertet. Bei den Berechtigugen wird nur der Snapshot und die primäre Gruppe des Users überprüft\\ Aufruf z.B.: # leoclient2-directstart -m winxp -r 1024 - s standard #! /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 Zum bequemen Starten kann man einen Desktop-Starter anlegen, z.B. für die VM "winxp" mit 1024 MB RAM und "standard"-Snapshot: [Desktop Entry] Version=1.0 Type=Application Name=VirtualBox Direktstart Comment=Starting Snapshots of VirtualBox Comment[de]=Starten von VirtualBox Snapshots Exec=/usr/bin/leoclient2-directstart -m winxp -r 1024 -s standard Icon=leovirtstarter2 Categories=Graphics;Engineering; Categories=Emulator;System;Application; Terminal=false //Hinweis: Nach Anlegen dieser Datei muss diese ausführbar gesetzt werden.// ===== Rechte an den virtuellen lokalen Maschinen ===== Bei der Anmeldung eines Benutzers werden die Rechte an den virtuellen lokalen Maschinen so gesetzt, dass der Benutzer die Maschine starten kann, Logs anlegen kann und den aktiven Snapshot verändern kann. Legen Sie nachfolgendes Script ab unter **''/etc/linuxmuster-client/post-mount.d/''**. #!/bin/bash # # Script /etc/linuxmuster-client/post-mount.d/015-leoclient2 # Setzt die Rechte für die lokalen VMs auf den aktuellen USER # # etcpfad="/etc/leoclient2/machines" for file in "$etcpfad"/*.conf ; do vmpfad=`cat $file` vmname=$(basename "$vmpfad") chmod ugo+rwt $vmpfad chown -R $USER "$vmpfad/Logs" chown -R $USER "$vmpfad/Snapshots" chown $USER "$vmpfad"/VBoxSVC.log* chown $USER "$vmpfad/$vmname.vbox" chown $USER "$vmpfad/$vmname.vbox-prev" done exit 0 ===== Lokale VMs auf einer zusätzlichen Partition ablegen ===== Standardmäßig werden die Dateien einer lokalen VM unter ''/var/virtual/'' abgelegt, dieses Verzeichnis liegt im normalen Dateisystem des Linuxclients. Um diesen Speicherort auf eine extra Partition auszulagern, kann man diese Partition nach ''/var/virtual'' per fstab mounten. Eine Partition dynamisch unter ''/media'' dafür zu verwenden ist ungeeignet, da sich deren Namen und Zugriffsberechtigung je nach User ändern kann. **Beispiel:** Es existiert eine Partition ''/dev/sda3'' (wie z.B. bei der start.conf zum default-cloop), die mit ext4 formatiert ist. Zunächst den Mountpoint ''/var/virtual/'' leeren bzw. den Inhalt wegsichern. Dann die Datei ''/etc/fstab'' als root editieren und letzte Zeile ergänzen: # /etc/fstab: static file system information. # ... /dev/sda3 /var/virtual ext4 defaults 0 0 Danach als root an der Konsole ausführen, um die Partition zu mounten und das ganze dann noch mit "df" überprüfen: # mount -a # df -h Nun ggf. die weggesicherten Dateien wieder nach ''/var/virtual/'' zurückspielen und von __beiden__ Partitionen ein Image erstellen. **Frage: Wann muss welche Partition geimaged werden?** - Nach dem Anlegen einer neuen VM müssen beide Partitionen geimaged werden. Beim Anlegen einer neuen VM wird diese nämlich unter ''/etc/leoclient2/machines'' registiert. - Nach dem Verändern einer VM muss nur die zusätzliche VM-Partition geimaged werden. ---- ====== Fehlersuche - Fehlerbehebung ====== ===== Log-Datei ===== Am Client findet man unter **''/tmp/leovirtstarter2.log''** die aktuelle log-Datei des leovirtstarters2 zur Fehlersuche. ===== Endlosschleife bei leoclient2-base-snapshot-renew ===== **Problem:** Das Script ''leoclient2-base-snapshot-renew'' läuft in eine Endlosschleife, wenn im Verzeichnis ''/Snapshots/'' eine verweiste Snapshot-Datei übrig bleibt.\\ **Lösung:** Die verweiste Snapshot-Datei manuell löschen, dann ''leoclient2-base-snapshot-renew'' nochmals ausführen. ===== Snapshot passt nicht zur Basisfestplatte ===== Nach einem "''leoclient2-base-snapshot-renew''" werden bisherige Snapshots unbrauchbar und sollten auch nicht mehr verwendet werden. Der Snapshotname wird dabei auch geändert. In der Datei ''.vbox'' wird der aktuell gültige Snapshotnamen {...}.vdi aufgeführt. **Problem:** Unter ''/Snapshots'' liegt ein alter Snapshot, der Name passt nicht. VirtualBox startet deshalb nicht.\\ **Lösung:** Den Snapshot in ''/Snapshots'' manuell löschen und dann einen Snapshot mit dem aktuellen Namen aus ''/snapshot-store/standard/'' in das Verzeichnis ''/Snapshots'' kopieren. ===== network.conf für lokalen Snapshot bereitstellen ===== **Problem:** Aktuell wertet der leovirtstarter2 eine ''network.conf'' im Verzeichnis des lokalen Snapshots nicht aus. (leoclient2-Version: 0.5.4-1)\\ **Lösung:** Wenn man jedoch eine ''network.conf'' im remote-Pfad des Snapshots ablegt, wird diese ausgewertet. Weitere Dateien müssen im remote-Pfad nicht vorhanden sein. Der remote-Pfad muss __nicht__ zwingend remote liegen!\\ Z.B. mit den voreingestellten Standard-Pfaden des Snapshots "physik": * lokaler Snapshot-Pfad: ''/var/virtual/winxp1/snapshot-store/physik/...'' * ergibt network.conf-Pfad: ''/media/leoclient2-vm/winxp1/snapshot-store/physik/network.conf'' ===== leovirtstarter2 zeigt/startet "wie vorgefunden" nicht ===== **Problem:** Im Auswahlmenü wird "wie vorgefunden" nicht angezeigt oder kann nicht gestartet werden.\\ **Ursache 1:** Die VM wurde nicht ausgeschaltet sondern befindet sich in einem gespeicherten Zustand. Im Verzeichnis ''.../Snapshots'' befindet sich eine ''*.sav''-Datei.\\ **Lösung 1:** Den "Standard"-Snapshot starten oder die Maschine direkt mit VirtualBox starten und dann herunterfahren. **Ursache 2:** Im Verzeichnis ''/Snapshots/'' befinden sich überflüssige Dateien.\\ **Lösung 2:** Alle Dateien löschen bis auf den aktuellen Snapshot: ''{...}.vdi''. Der Name/die UUID des aktuellen Snapshots kann man (falls unklar) aus der ''.vbox''-Datei ermitteln.