vmchooser plugin

Ist ein OpenSLX Plugin. Es dient der Auswahl von Desktop-Sessions in virtualisierten Umgebungen. Alternativ zu einer Linux Gnome- oder KDE-Session kann eine Virtualisierungsumgebung wie VMware, (QEMU, Virtual Box, ...) gestartet werden, die einen eigenen Desktop zur Verfügung stellt.

Kurzbeschreibung

Erstellt eine Standard-Sitzung, in dem die verfügbaren Sitzungen und Virtualisierte Maschinen (wozu Images und Konfigurationsdateien vorliegen müssen) zur Auswahl angezeigt werden. Bei Doppelklick / klick auf den Button wird die Sitzung / das Image mit dem Kommando in der .desktop-Datei von /usr/share/xsessions via /var/opt/openslx/bin/run-virt.sh gestartet.

Die Liste der angezeigten VM-Sessions wird durch das Skript xmlfilter.sh bestimmt. Dieses nimmt in "$1" den Pfad zur Liste der beschreibenden XMLs und gibt als Ergebnis eine Liste zu interpretierender XML-Dateien mit vollem Pfad aus. Es kann daher in weitem Rahmen an eigene Bedürfnisse angepasst werden.

Das Plugin stellt neben dem vmchooser Binary eine Reihe von internen Skripten (z.B. run-virt.sh) zur Verfügung, die jedoch nicht separat funktionieren. vmchooser kann in zwei Modi laufen:
  1. Bereitstellen einer Auswahlliste
  2. Direktes Starten einer bestimmten virtuellen Maschine: vmchooser /var/lib/virt/vmware/vmware65/winxp-img.xml

Das interne Skript run-virt.sh (enthält abstrakte, für alle Virtualisierer gemeinsamen Komponenten) nutzt Plugin-Komponenten, die vom jeweiligen Virtualisierungs-Plugin bereitgestellt werden und unterhalb von /etc/opt/openslx/run-{vmware,qemu-kvm,virtualbox}.include abgelegt sind. Hier werden alle virtualisierer-spezifischen Dinge abgehandelt (siehe hierzu die jeweiligen run-virt.include Dateien der einzelnen Plugins).

Zusätzlich zur Auswahl der Sessions kann der vmchoser dazu verwendet werden, einige Grundparameter des Pool Video Switch Clients (pvs) zu setzen. Das kann mit der Option "--pvs" eingeschaltet werden.

Abhängigkeit

Dieses Plugin benötigt das desktop Plugin. Sinnvollerweise ist mindestens ein Virtualisierungs-Plugin zusätzlich installiert.

Optionen

active

Beschreibung:
Aktiviert das Plugin: Bei der Aktivierung in Stage3 wird die .desktop-Datei in das Verzeichnis /etc/X11/session plaziert. Die Aufgabe des Desktop Plugins ist es, dieses Verzeichnis der Session-Suche hinzuzufügen.

Werte:

  • 1: aktiviert
  • 0: deaktiviert

Standard: 1 (Plugin aktiviert)

env

Beschreibung:
Env(ironment) Option hinzugefügt. Diese ist nicht zwingend notwendig und zeigt nur Images an, die zu dieser bestimmten Gruppe gehören.

Werte:

  • String

Standard: "default"

xmlpath

Beschreibung:
Pfad zu den XMLs in Stage4 (im hochgefahrenen Netzwerk-Client). Hier wird nach beschreibenden XMLs gesucht. Die XMLs werden dann angezeigt und auf Benutzereingabe das asoziierte VM-Image gestartet. Die Syntax der XMLs muss der von

Werte:

  • String

Standard: "/var/lib/virt"

to-be-defined

Beschreibung:
InPlanung: Es soll mehrere Möglichkeiten geben, den Redo-File-Bereich für die Virtualisierer festzulegen. Standardmäßig liegt alles im /tmp/virt. Hier könnte entweder direkt die darunterliegende ID44 Partition, ein speziell auf das Verzeichnis gemountetes TempFS (mit Überbuchung) oder eine RAID-Konfiguration aus TempFS-Virt-Blockdevice und Netzwerk-Blockdevice (hier wiederum NBD, iSCSI, Virtuelles Blockdevice im NFS) genutzt werden.

Werte:

  • String

Standard: "TempFS"

Installation

Der Aufruf zur Installation:

slxos-export export <vendorOS> <exportType>
slxconfig-demuxer

Anwendung

Das Plugin setzt sich als Standard-Sitzung in die Login-Manager und bietet eine Auswahl an verfügbaren Sitzungen. Als besonderes Feature reicht es den Benutzernamen (in dem XML-Element <username>) und den Hostname (XML-Element <hostname> und <computername>) in die XML weiter, die durch das vmware-plugin in das virtuelle System weitergereicht wird. Durch Tools wie bootpgm kann man damit beispielsweise den Hostname unter der virtuellen Maschine dynamisch setzen. Mit der Benutzer-Information könnte man weitere Aktionen starten, wie z.B. die richtigen Home-Verzeichnisse einbinden.

Allgemeine Information

Dieses Plugin kopiert die default.desktop-Datei nach /etc/X11/session, welche von den Display-Managern geladen wird. Bei Aufruf des Wrapper-Skript wird zur Zeit nur die Option xmlpath an das vmchooser-Programm übergeben.

Entwickler-Information (vmchooser Programm)

Das vmchooser-Plugin hat ein grafisches Hilfprogramm, das den phantasievollen Namen vmchoooser trägt und in /opt/openslx/plugin-repo/vmchooser/ liegt.

Bei Aufruf des vmchooser-Hilfsprogramm kann man --help oder -h als Parameter angeben, um sich die Hilfe anzeigen zu lassen.

Aktuell sieht die Ausgabe dann so aus:

Usage: vmchooser [ OPTIONS ]

  -d, --default    name of default session
  -f, --file       direct boot FILE
  -P, --pool       name of the environment
  -p, --path       path to vmware .xml files
  -x, --xpath      path of X Session .desktop files
  -s, --size       window size <width>x<height>
  -t, --theme      theme
  -b, --pvs        show pvs options
  -D, --debug      print debug information
  -v, --version    print version and exit
  -h, --help       print usage information and exit

FILE can be a vmware .xml or an X .desktop file

Der Chooser benutzt Skripte von /var/lib/vmware/runscripts/{printers,scannners}.sh, um die Drucker und Scanner in die jeweilige XML-Datei einzufügen (näheres in "_addPrinters.cxx_":source:openslx-src-tools/vmchooser/trunk/vmchooser/addPrinters.cxx und "_addScanners_":source:openslx-src-tools/vmchooser/trunk/vmchooser/addScanners.cxx). In "_addInfo.cxx_":source:openslx-src-tools/vmchooser/trunk/vmchooser/addInfo.cxx wird der Computername und Benutzer in die XML eingefügt.

Bei der Filterung wird das Skript "_xmlfilter.sh_":source:openslx/trunk/os-plugins/plugins/vmchooser/files/xmlfilter.sh (im selben Verzeichnis wie der vmchooser) ausgeführt, um die XML-Dateien zu filtern. Hier kann beispielsweise unter anderem auch nach dem aktuellen Poolnamen gefiltert werden. Die Ausgabe dieses Skripts sollte ähnlich "ls -1" sein, d.h. eine XML-Datei mit absolutem Pfad in jeder Zeile. Diese XML-Dateien werden dann zur Auswahl angezeigt.

Standardmäßig filtert das "_xmlfilter.sh_":source:openslx/trunk/os-plugins/plugins/vmchooser/files/xmlfilter.sh-Skript die XML-Dateien nach dem XML-Element <slxgroup>, die in Stage3 über das Initramfs übergeben wird (siehe Plugin-Option env). Dieses Element sollte demnach in der XML vorhanden sein, damit der vmchooser überhaupt etwas anzeigt.

Allgemein kann man dieses Filter-Skript als Ersetzung und Erweiterung zu der Option -p[XML-Ordner] sehen. Mit diesem Skript ist es leichter, die Filterkriterien auszuwählen und ermöglicht es auch, mehrere Ordner als XML-Quellen anzugeben.

Mit -l[Linux Session Pfad] können die verfügbaren Linux-Sessions durch Angabe des Pfads bestimmt werden.

Daten für den Start einer virtuellen Maschine

Die dem vmchooser vorliegende XML-Datei sollte verschiedene Parameter beinhalten, um einen reibungslosen Start der virtuellen Maschine zu ermöglichen. Hier werden zunächst verschiedene Daten vorgestellt, die in einer validen XML-Datei schon vorhanden sind:

short_description

Beschreibung:
Dieser Parameter ist obligatorisch für die Auswahl im vmchooser. Die Daten werden aus dem Attribut param herausgelesen und für den Titel der Session in der Auswahlliste verwendet.

Wert: String

long_description

Beschreibung:
Dieser Parameter ist freiwillig. Die Daten werden aus dem Attribut param herausgelesen und für eine Informationsanzeige als Tooltip in der Auswahlliste verwendet.

Wert: String

os

Beschreibung: Dieser Wert ist für vmware Pflicht. Vom vmchooser wird es nur ausgelesen, aber nicht verändert. Dieser Wert wird direkt in die vmx-Konfiguration von vmplayer übernommen. Bei unterschiedlichen vmplayer-Versionen treten hier unterschiedliche Werte auf.

Wert: String

Beispiel: winxppro

priority

Beschreibung: Falls dieser Wert nicht gefunden wird, wir eine Standardpriorität von 5 angenommen. Hier kann beinflußt werden, auf welcher Position die Image-Einträge angezeigt werden. Ein niedrigerer Wert bedeutet höhere Position in der Auswahlliste im vmchooser.

Wert: Integer

image_name

Beschreibung: Der Dateinamen für die Vmware-Image-Datei. Der absolute Pfad vom XML wird vom vmchooser hinzugefügt. Es ist also eine gute Idee, die XML mit relativem Pfadnamen auf die vmware-Images zu versehen. Am besten, die Vmware-Image-Datei befindet sich im selben Ordner wie die XML-Datei.

Wert: String

creator

Beschreibung: Der Ersteller des Images. Rein für Informationszwecke. Nicht notwendig für den Betrieb.

Wert: String

email

Beschreibung: Die Email des Erstellers. Rein für Informationszwecke. Nicht notwendig für den Betrieb.

Wert: String

phone

Beschreibung: Telefon des Erstellers. Rein für Informationszwecke. Nicht notwendig für den Betrieb.

Wert: String

h3.enable3d

Beschreibung: Konfiguration für vmware (virtualbox). Aktiviert die 3D-Unterstützung in den virtuellen Maschinen.

Wert: Bool (true|false)

virtualmachine

Beschreibung: Welche virtuelle Maschine soll für das Image verwendet werden. Üblicherweise vmware beim vmware-plugin.

Wert: String (vmware|virtualbox|...)

active

Beschreibung: Wert, ob das Image aktiv ist. Nicht in vmchooser berücksichtigt, kann aber leicht in xmlfilter.sh hinzugefügt werden.

Wert: Bool (true|false)

pools

Beschreibung: Eine durch Leerzeichen getrennte Liste der Umgebungen, in denen dieses Image zur Auswahl angezeigt werden soll. (siehe auch Option vmchooser::env)

Wert: String

icon

Beschreibung: Das Icon zum Anzeigen. Falls der Eintrag in <os param="*[wW]in*"/> existiert, wird ein Windows(tm)-Symbol angezeigt. Andernfalls gibt es die selbsterklärenden Möglichkeiten, das Symbol zu ändern (siehe Werte). Ausnahme: Falls <os param="linux"/> eingetragen ist, wird ein Linux-Symbol angezeigt, es sei denn, im <icon>-Wert steht eines von "ubuntu","suse","gentoo".

Wert: String (Eines aus {"ubuntu","suse","gentoo","macos","bsd"}).

Die folgenden Werte werden beim Ausführen von vmchooser in eine dynamisch generierte XML-Datei hineingeschrieben (/tmp/runXXXXX.xml). Die neuen Werte werden dabei abhängig von Hostnamen, Benutzer und verschiedene Skripte generiert und sind für die Weitergabe in die Images gedacht.

printers-Knoten

Beschreibung: Enthält eine Menge von Kind-Knoten namens printer, die jeweils ein Attribut name - einen Druckernamen - und path - meist den öffentlichen Freigabe-Pfad zum Drucker - beinhalten. Als Knoten-Inhalt kann noch eine Beschreibung eingegeben werden.

vmchooser ruft zur Beschaffung der notwendigen Daten das Skript /etc/opt/openslx/printer.sh auf. Schon vorhandene Knoten werden aber einfach übernommen. Das Skript printer.sh in /etc/opt/openslx/ sollte dem vmchooser folgendes Format übergeben (wobei [TAB] ein Tabulator-Zeichen bedeutet):

PFAD[TAB]DRUCKER[TAB]BESCHREIBUNG

Wert: <printer name="Druckername" path="\\Pfad\zu\Drucker">Beschreibung</printer>-Knoten

scanners-Knoten

Beschreibung: Enthält eine Menge von Kind-Knoten namens scanner, die jeweils ein Attribut name - einen Scannernamen - und path - meist den öffentlichen Freigabe-Pfad zum Scanner - beinhalten. Als Knoten-Inhalt kann noch eine Beschreibung eingegeben werden. Das Skript scanner.sh in /etc/opt/openslx/ sollte dem vmchooser folgendes Format übergeben (wobei [TAB] ein Tabulator-Zeichen bedeutet):

PFAD[TAB]SCANNER[TAB]BESCHREIBUNG

vmchooser ruft zur Beschaffung der notwendigen Daten das Skript /etc/opt/openslx/printer.sh auf. Schon vorhandene Knoten werden aber einfach übernommen.

Wert: <scanner name="Scannername" path="\\Pfad\zu\Scanner">Beschreibung</scanner>-Knoten

username

Beschreibung: Benutzernamen zur Weitergabe in die virtuelle Maschine

Wert: aktueller Benutzername

hostname

Beschreibung: Hostname zur Weitergabe in die virtuelle Maschine

Wert: aktueller Hostname

XML-Datei

Siehe auch folgende Seite für os param bei VMware.

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <entry>
    <!-- like the names of the virtualization plugins "vmware", "virtualbox", "qemukvm" -->
    <virtualmachine param="vmware"/>
    <!-- VM-name with ending .vmdk, .img, .vdi, .qcow2 -->    
    <image_name param="vm-image.vmdk"/>
    <!-- sort after parameters then alphabet, values 0(top) - 9(bottom) -->    
    <priority param="5"/>
    <!-- title shown in the menu -->
    <title param="My VM Image"/>
    <!-- description shown when image is chosen -->
    <description>Image for lectures with a lot of software: office, ...
    </description>
    <!-- if active="true" the image is selectable via vmchooser -->
    <active param="true"/>
    <!-- in which environment/domain this image will be selectable via vmchooser -->
    <environment param="default"/>
    <!-- image locked with a password? -->
    <locked param="false"/>
    <creator param="Your Name"/>
    <email param="your@e-mail.add"/>
    <phone param="0123-12345678"/>
    <!-- when should this image be deactivated automatically -->
    <valid_until param="DD-MM-YY"/>
    <!-- type of the OS: if you do not know use "other" -->
    <!-- vmware refer to: http://sanbarrow.com/vmx/vmx-guestos.html -->
    <os param="winxppro"/>
    <!-- "nat", "bridged", "hostonly" -->
    <network param="nat"/>
    <!-- use a different virtual network card than default, see VM for available types and names -->
    <netcard param="e1000"/>
    <!-- activate serial port: "ttyS0", "auto" (recommended) -->
    <serialport param="false"/>
    <!-- activate parallel port: "parport0" (recommended) -->
    <parport param="false"/>
    <!-- enable 3D support -->
    <enable3d param="true"/>
    <!-- which shared folders should be connected -->
    <shared_folders param="true">
      <!--  name="Home" path="/home/$USER" for internal VMware sf -->
      <shared_folder name="" path="" pass=""></shared_folder>
    </shared_folders>
    <!-- which printers should be connected -->
    <printers>
      <printer name="" path="">Human readable description</printer>
    </printers>
    <!-- which scanners should be connected -->
    <scanners>
      <scanner name="" path="">Description</scanner>
    </scanners>
    <!-- added automatically through vmchooser when started
      <username param="user-id"/>
    -->
    <!-- obsolete, maybe for future implementations
      <xdm param="false">
      </xdm>
    -->
    <!-- recently added - Icon to display in list 
        values: macos,bsd,gentoo,ubuntu,suse
            vmware images with <os param="*[Ww]in*"/> get windows symbol
            vmware images with <os param="linux"/> defaults to linux symbol, overridden by <icon> (ubuntu/suse/gentoo)
            vmware images with <os param="xyz"/> defaults to vmware symbol, overridden by <icon> (all values)
    -->
    <icon param="*****"/>
  </entry>
</settings>

Beispiele zum Aufruf

Das vmchooser-Programm kann durch einen einfachen Aufruf mit der XML-Datei als Argument aufgerufen werden (vmchooser --file foo.xml), um beispielsweise eine Vmware-Image einfach auszuführen. Dabei werden alle Optionen herausgelesen und wichtige Informationen in eine temporäre XML-Datei geschrieben, um sie in das virtuelle System weiterzugeben. Es kann somit jegliche Art von Information in das Gast-System weitergegeben werden (B:\config.xml unter Windows).

Bei dieser Art von Aufruf wird keine Auswahlliste angezeigt.

/var/opt/openslx/bin/vmchooser --file /pfad/zu/mein_img_config.xml

Wenn man die Auswahlliste testen will - mit seinem Image -, muss man die Datei /etc/opt/openslx/vmchooser-stage3.conf anpassen, damit der Wert vmchooser_xmlpath auf den gewollten Pfad zeigt. Bemerke: vmchooser_env muss auch auf die richtige Gruppe gestellt sein (die Gruppe, die auch in dem <env>-Wert in der XML steht. Alternativ kann man für den Pfad einfach nur die p|path-Option verwenden

/var/opt/openslx/bin/vmchooser --path=/pfad/zu/meinen_xmls/