Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:leoclient2]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

anwenderwiki:leoclient2 [2018/10/29 09:04] (aktuell)
roesslerrr [Leoclient 2 - Ergänzungen]
Zeile 1: Zeile 1:
 +{{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 ''/<​MASCHINENPFAD>/<​MACHINENNAME>​.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:<​code>#​ sudo leoclient2-snapshot-create -m winxp1 -s Software2015</​code>​ oder für den standard-Snapshot<​code>#​ sudo leoclient2-snapshot-create -m winxp1</​code>​
 +Damit gibt es nun einen neuen Snapshot mit dem Namen "​Software2015"​ im Auswahlmenü des Snapshotstarters.
 +<code text /​usr/​bin/​leoclient2-snapshot-create>​
 +#!/bin/bash
 +#
 +# /​usr/​bin/​leoclient2-snapshot-create
 +#
 +# Usage: ​ leoclient2-snapshot-create -m <​VM-name>​ -s <​Snapshot-name>​
 +# 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
 +</​code>​
 +
 +===== 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
 +<code text /​usr/​bin/​leoclient2-directstart>​
 +#! /bin/bash
 +#
 +#  /​usr/​bin/​leoclient2-directstart -m <VM> -s <​Snapshot>​ -r <RAM>
 +#
 +#  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
 +
 +</​code>​
 +
 +Zum bequemen Starten kann man einen Desktop-Starter anlegen, z.B. für die VM "​winxp"​ mit 1024 MB RAM und "​standard"​-Snapshot:​
 +
 +<code text leoclient2-directstart.desktop>​
 +[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
 +</​code>​
 +//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/''​**.
 +
 +<code text /​etc/​linuxmuster-client/​post-mount.d/​015-leoclient2>​
 +#!/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
 +</​code>​
 +
 +
 +===== 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:
 +<​code>​
 +#  /etc/fstab: static file system information.
 +#
 +
 +...
 +
 +/​dev/​sda3 ​  /​var/​virtual ​   ext4   ​defaults ​ 0  0
 +
 +</​code>​
 +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 ''<​lokaler Maschinenpfad>/​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 ''<​Maschinennamen>​.vbox''​ wird der aktuell gültige Snapshotnamen {...}.vdi aufgeführt.
 +
 +**Problem:​** Unter ''<​Maschinenpfad>/​Snapshots''​ liegt ein alter Snapshot, der Name passt nicht. VirtualBox startet deshalb nicht.\\
 +**Lösung:​** Den Snapshot in ''<​Maschinenpfad>/​Snapshots''​ manuell löschen und dann einen Snapshot mit dem aktuellen Namen aus ''<​Maschinenpfad>/​snapshot-store/​standard/''​ in das Verzeichnis ''<​Maschinenpfad>/​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 ''<​Maschinenpfad>/​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 ''<​Maschinenname>​.vbox''​-Datei ermitteln.
 [[anwenderwiki:leoclient2]] anwenderwiki/leoclient2.txt · Zuletzt geändert: 2018/10/29 09:04 von roesslerrr