Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:leoclient2]] 

Leoclient 2 - Ergänzungen

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:

  1. Arbeiten als linuxadmin am Ubuntu-Client
  2. Bisherigen base/standard-Snapshot der VM (z.B. hier winxp1) booten
  3. Software installieren und sonstige Veränderungen abarbeiten, VM dann herunterfahren
  4. 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.

/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

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
/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

Zum bequemen Starten kann man einen Desktop-Starter anlegen, z.B. für die VM „winxp“ mit 1024 MB RAM und „standard“-Snapshot:

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

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/.

/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

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?

  1. 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.
  2. 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