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

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"
Dieses sollte jeweils geändert werden zu "/var/lib/virt/vmware/vmware55" (VM-Player 1) oder "/var/lib/virt/vmware/vmware65" (VM-Player 2.5) ...

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:

SessionChooser Usage:
    {-p |--path=} path to vmware (.xml) files
    {-l |--lpath=} path to linux session (.desktop) files
    {-s |--size=} [widthxheight]
    {-v |--version} print out version
    {-h |--help} prints help

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