summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
diff options
context:
space:
mode:
authorSebastian Schmelzer2010-09-02 17:50:49 +0200
committerSebastian Schmelzer2010-09-02 17:50:49 +0200
commit416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 (patch)
tree4715f7d742fec50931017f38fe6ff0a89d4ceccc /os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
parentFix for the problem reported on the list (sed filter forgotten for the (diff)
downloadcore-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.gz
core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.xz
core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.zip
change dir structure
Diffstat (limited to 'os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm')
-rw-r--r--os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm836
1 files changed, 0 insertions, 836 deletions
diff --git a/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm b/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
deleted file mode 100644
index 7e55019c..00000000
--- a/os-plugins/plugins/vmware/OpenSLX/OSPlugin/vmware.pm
+++ /dev/null
@@ -1,836 +0,0 @@
-# Copyright (c) 2008..2010 - OpenSLX GmbH
-#
-# This program is free software distributed under the GPL version 2.
-# See http://openslx.org/COPYING
-#
-# If you have any feedback please consult http://openslx.org/feedback and
-# send your suggestions, praise, or complaints to feedback@openslx.org
-#
-# General information about OpenSLX can be found at http://openslx.org/
-# -----------------------------------------------------------------------------
-# vmware.pm
-# - declares necessary information for the vmware plugin
-# -----------------------------------------------------------------------------
-package OpenSLX::OSPlugin::vmware;
-
-use strict;
-use warnings;
-
-use base qw(OpenSLX::OSPlugin::Base);
-
-use File::Basename;
-use File::Path;
-
-use OpenSLX::Basics;
-use OpenSLX::Utils;
-use OpenSLX::DistroUtils;
-
-sub new
-{
- my $class = shift;
-
- my $self = {
- name => 'vmware',
- };
-
- return bless $self, $class;
-}
-
-sub getInfo
-{
- my $self = shift;
-
- return {
- description => unshiftHereDoc(<<' End-of-Here'),
- Module for enabling services of VMware Inc. on an OpenSLX stateless
- client. This plugin might use pre-existing installations of VMware
- tools or install addional variants and versions.
- End-of-Here
- precedence => 70,
- required => [ qw( desktop ) ],
- };
-}
-
-sub getAttrInfo
-{
- # returns a hash-ref with information about all attributes supported
- # by this specific plugin
- my $self = shift;
-
- # This default configuration will be added as attributes to the default
- # system, such that it can be overruled for any specific system by means
- # of slxconfig.
- return {
- # attribute 'active' is mandatory for all plugins
- 'vmware::active' => {
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- should the 'vmware'-plugin be executed during boot?
- End-of-Here
- content_regex => qr{^(0|1)$},
- content_descr => '1 means active - 0 means inactive',
- default => '1',
- },
- # attribute 'imagesrc' defines where we can find vmware images
- 'vmware::imagesrc' => {
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- Where do we store our vmware images? NFS? Filesystem?
- End-of-Here
- #TODO: check if the input is valid
- #content_regex => qr{^(0|1)$},
- content_descr => 'Allowed values: path or URI',
- default => '',
- },
- # attribute 'bridge' defines if bridged network mode should be
- # switched on
- 'vmware::bridge' => {
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- Should the bridging (direct access of the vmware clients
- to the ethernet the host is connected to) be enabled
- End-of-Here
- content_regex => qr{^(0|1)$},
- content_descr => 'Allowed values: 0 or 1',
- default => '1',
- },
- # attribute 'vmnet1' defines if the host connection network mode
- # should be switched on and NAT should be enabled
- 'vmware::vmnet1' => {
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- Format ServerIP/Netprefix without NAT
- Format ServerIP/Netprefix,NAT enables NAT/Masquerading
- End-of-Here
- #TODO: check if the input is valid
- #content_regex => qr{^(0|1)$},
- content_descr => 'Allowed value: IP/Prefix[,NAT]',
- default => '192.168.101.1/24,NAT',
- },
- # attribute 'vmnet8' defines if vmware specific NATed network mode
- # should be switched on
- 'vmware::vmnet8' => {
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- Format ServerIP/Netprefix. Last octet will be omitted
- End-of-Here
- #TODO: check if the input is valid
- #content_regex => qr{^(0|1)$},
- content_descr => 'Allowed value: IP/Prefix. Last octet will be omitted',
- default => '192.168.102.x/24',
- },
- # attribute 'kind' defines which set of VMware binaries should be
- # activated ('local' provided with the main installation set).
- 'vmware::kind' => {
- applies_to_vendor_os => 0,
- applies_to_systems => 1,
- applies_to_clients => 1,
- description => unshiftHereDoc(<<' End-of-Here'),
- Which set of VMware binaries to use: installed (local) or provided by the
- plugin itself (vmpl1.0, vmpl2.0, vmpl2.5, vmpl3.X)?
- End-of-Here
- # only allow the supported once...
- # TODO: modify if we know which of them work
- #content_regex => qr{^(local|vmws(5\.5|6.0)|vmpl(1\.0|2\.0))$},
- content_regex => qr{^(local|vmpl3\.0||vmpl2\.0|vmpl1\.0|vmpl2\.5)$},
- content_descr => 'Allowed values: local, vmpl2.0',
- #TODO: what if we don't have a local installation. default
- # is still local. Someone has a clue how to test
- # it and change the default value?
- default => 'local',
- },
- ##
- ## only stage1 setup options: different kinds to setup
- 'vmware::local' => {
- applies_to_vendor_os => 1,
- applies_to_system => 0,
- applies_to_clients => 0,
- description => unshiftHereDoc(<<' End-of-Here'),
- Set's up stage1 configuration for a local installed
- vmplayer or vmware workstation
- End-of-Here
- content_regex => qr{^(1|0)$},
- content_descr => '1 means active - 0 means inactive',
- default => '1',
- },
- 'vmware::vmpl2.0' => {
- applies_to_vendor_os => 1,
- applies_to_system => 0,
- applies_to_clients => 0,
- description => unshiftHereDoc(<<' End-of-Here'),
- Install and configure vmplayer v2
- End-of-Here
- content_regex => qr{^(1|0)$},
- content_descr => '1 means active - 0 means inactive',
- default => '0',
- },
- 'vmware::vmpl2.5' => {
- applies_to_vendor_os => 1,
- applies_to_system => 0,
- applies_to_clients => 0,
- description => unshiftHereDoc(<<' End-of-Here'),
- Install and configure vmplayer v2
- End-of-Here
- content_regex => qr{^(1|0)$},
- content_descr => '1 means active - 0 means inactive',
- default => '0',
- },
- 'vmware::vmpl1.0' => {
- applies_to_vendor_os => 1,
- applies_to_system => 0,
- applies_to_clients => 0,
- description => unshiftHereDoc(<<' End-of-Here'),
- Install and configure vmplayer v1
- End-of-Here
- content_regex => qr{^(1|0)$},
- content_descr => '1 means active - 0 means inactive',
- default => '0',
- },
- 'vmware::pkgpath' => {
- applies_to_vendor_os => 1,
- applies_to_system => 0,
- applies_to_clients => 0,
- description => unshiftHereDoc(<<' End-of-Here'),
- Path to VMware packages
- End-of-Here
- #TODO
- #content_regex => qr{^(1|0)$},
- content_descr => '1 means active - 0 means inactive',
- default => '/root/vmware-pkgs',
- },
- # ** set of attributes for the installation of VM Workstation/Player
- # versions. More than one package could be installed in parallel.
- # To be matched to/triggerd by 'vmware::kind'
- };
-}
-
-
-sub preInstallationPhase()
-{
- my $self = shift;
- my $info = shift;
-
- $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
- $self->{pluginTempPath} = $info->{'plugin-temp-path'};
- $self->{openslxBasePath} = $info->{'openslx-base-path'};
- $self->{openslxConfigPath} = $info->{'openslx-config-path'};
- $self->{attrs} = $info->{'plugin-attrs'};
- $self->{vendorOsPath} = $info->{'vendor-os-path'};
-
- my $pkgpath = $self->{attrs}->{'vmware::pkgpath'};
- my $vmpl10 = $self->{attrs}->{'vmware::vmpl1.0'};
- my $vmpl20 = $self->{attrs}->{'vmware::vmpl2.0'};
- my $vmpl25 = $self->{attrs}->{'vmware::vmpl2.5'};
- my $local = $self->{attrs}->{'vmware::local'};
-
- if ($local == 0 && $vmpl10 == 0 && $vmpl20 == 0 && $vmpl25 == 0) {
- print "\n\n * At least one kind needs to get installed/activated:\n";
- print " vmware::local=1 or\n";
- print " vmware::vmpl1.0=1 or\n";
- print " vmware::vmpl2.0=1\n";
- print " vmware::vmpl2.5=1\n";
- print " * vmware plugin was not installed!\n\n";
- exit 1;
- }
-
- if (! -d $pkgpath && ($vmpl10 == 1 || $vmpl20 == 1 || $vmpl25 == 1)) {
- print "\n\n * vmware::pkgpath: no such directory $pkgpath!\n";
- print " See wiki about vmware Plugin\n";
- print " * vmware plugin was not installed!\n\n";
- exit 1;
- }
-
- # test just for the case we only set up local vmware
- if (-d $pkgpath && ($vmpl10 == 1 || $vmpl20 == 1 || $vmpl25 == 1)) {
- # todo: ask oliver about a similiar function
- # like copyFile() just for directorys
- # or fix the manual after checked the source of
- # copyFile() function. check if copyFile etc. perldoc
- # is somewhere in the wiki documented else do it!
- system("cp -r $pkgpath $self->{pluginRepositoryPath}/packages");
- }
-}
-
-sub installationPhase
-{
- my $self = shift;
- my $info = shift;
-
- $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
- $self->{pluginTempPath} = $info->{'plugin-temp-path'};
- $self->{openslxBasePath} = $info->{'openslx-base-path'};
- $self->{openslxConfigPath} = $info->{'openslx-config-path'};
- $self->{attrs} = $info->{'plugin-attrs'};
-
- # copy common part of run-virt.include to the appropriate place for
- # inclusion in stage4
- copyFile("$self->{openslxBasePath}/lib/plugins/vmware/files/run-virt.include",
- "$self->{pluginRepositoryPath}/");
-
- # kinds we will configure and install
- # TODO: write a list of installed/setted up and check it in stage3
- # this will avoid conflict of configured vmware version in
- # stage3 which are not setted up or installed in stage1
- if ($self->{attrs}->{'vmware::local'} == 1) {
- $self->_localInstallation();
- }
- if ($self->{attrs}->{'vmware::vmpl2.0'} == 1) {
- $self->_vmpl2Installation();
- }
- if ($self->{attrs}->{'vmware::vmpl1.0'} == 1) {
- $self->_vmpl1Installation();
- }
- if ($self->{attrs}->{'vmware::vmpl2.5'} == 1) {
- $self->_vmpl25Installation();
- }
-
- ## prepration for our faster wrapper script
- # rename the default vmplayer script and create a link.
- # uninstall routine takes care about plugin remove.
- # stage3 copys our own wrapper script
- if (-e "/usr/bin/vmplayer" && ! -e "/usr/bin/vmplayer.slx-back") {
- rename("/usr/bin/vmplayer", "/usr/bin/vmplayer.slx-bak");
- }
- # the same with vmware, if ws is installed
- if (-e "/usr/bin/vmware" && ! -e "/usr/bin/vmware.slx-bak") {
- rename("/usr/bin/vmware", "/usr/bin/vmware.slx-bak");
- }
-
-}
-
-sub removalPhase
-{
- my $self = shift;
- my $info = shift;
-
- # restore old start scripts - to be discussed
- my @files = qw( vmware vmplayer );
- foreach my $file (@files) {
- if (-e "/usr/bin/$file.slx-bak") {
- unlink("/usr/bin/$file");
- rename("/usr/bin/$file.slx-bak", "/usr/bin/$file");
- }
- }
- return;
-}
-
-sub checkStage3AttrValues
-{
- my $self = shift;
- my $stage3Attrs = shift;
- my $vendorOSAttrs = shift;
- my @problems;
-
- my $vm_kind = $stage3Attrs->{'vmware::kind'} || '';
- my $vmimg = $stage3Attrs->{'vmware::imagesrc'} || '';
-
- if ($vm_kind eq 'local' && ! -x "/usr/lib/vmware/bin/vmplayer") {
- push @problems, _tr(
- "No local executeable installation of vmware found! Using it as virtual machine wouldn't work!"
- );
- }
-
- if ($vm_kind eq 'local' &&
- ! -d "/opt/openslx/plugin-repo/vmware/local") {
- push @problems, _tr(
- "local vmware installation not configured by slxos-plugin!"
- );
- }
-
- if ($vm_kind eq 'vmpl1.0' &&
- ! -d "/opt/openslx/plugin-repo/vmware/vmpl1.0/vmroot") {
- push @problems, _tr(
- "No OpenSLX installation of VMware Player 1 found or installation failed. Using it as virtual machine wouldn't work!"
- );
- }
-
- if ($vm_kind eq 'vmpl2.0' &&
- ! -d "/opt/openslx/plugin-repo/vmware/vmpl2.0/vmroot") {
- push @problems, _tr(
- "No OpenSLX installation of VMware Player 2.0 found or installation failed. Using it as virtual machine wouldn't work!"
- );
- }
-
- if ($vm_kind eq 'vmpl2.5' &&
- ! -d "/opt/openslx/plugin-repo/vmware/vmpl2.5/vmroot") {
- push @problems, _tr(
- "No OpenSLX installation of VMware Player 2.5 found or installation failed. Using it as virtual machine wouldn't work!"
- );
- }
-
- if ($vm_kind eq 'vmpl3.X' &&
- ! -d "/opt/openslx/plugin-repo/vmware/vmpl3.X/vmroot") {
- push @problems, _tr(
- "No OpenSLX installation of VMware Player 3.X found or installation failed. Using it as virtual machine wouldn't work!"
- );
- }
-
- return if !@problems;
-
- return \@problems;
-}
-
-
-#######################################
-## local, non-general OpenSLX functions
-#######################################
-
-# Write the runlevelscript
-# usage: _writeRunlevelScript("$vmpath", "$kind")
-sub _writeRunlevelScript
-{
- my $self = shift;
- my $vmpath = shift;
- my $kind = shift;
- my $initfile = newInitFile();
-
- my $script = "";
- my $modpath = "";
- my $modlist = "";
- # vmpath is to be redefined here ...
- if ($kind =~ /local*/) {
- $vmpath = "";
- $modpath = "/lib/modules/\$(uname -r)/misc";
- } elsif ($kind =~ /vmpl*/) {
- $vmpath = "/opt/openslx/plugin-repo/vmware/${kind}";
- $modpath = "${vmpath}/vmroot/modules";
- }
-
- $initfile->setName("vmware-slx");
- $initfile->setDesc("Setup environment for VMware Workstation or Player ($kind).");
-
- # functions ...
- $modlist = "vmnet vmmon";
- $script = unshiftHereDoc(<<" End-of-Here");
- # VMplayer common stuff
- insmod ${modpath}/vmmon.ko || return 1
- insmod ${modpath}/vmnet.ko || return 1
- End-of-Here
- if ($kind eq 'local3X' || $kind eq 'vmpl3.X') {
- $script .= unshiftHereDoc(<<" End-of-Here");
- # VMplayer 3.X specific stuff
- insmod ${modpath}/vmci.ko
- insmod ${modpath}/vmblock.ko
- insmod ${modpath}/vsock.ko
- End-of-Here
- $modlist .= "vsock vmci vmblock";
- } elsif ($kind eq 'local20' || $kind eq 'local25' || $kind eq 'vmpl2.0' || $kind eq 'vmpl2.5') {
- $script .= unshiftHereDoc(<<" End-of-Here");
- # VMplayer 2.X specific stuff
- insmod ${modpath}/vmblock.ko
- End-of-Here
- $modlist .= "vmblock";
- }
- $initfile->addFunction(
- "load_modules",
- "$script"
- );
- $initfile->addFunction(
- "unload_modules",
- "rmmod $modlist 2>/dev/null"
- );
- # vmnet0,1,8 (bridge, nat, host-only) interface definition
- $script = unshiftHereDoc(<<" End-of-Here");
- # let point the path directly to the directory where the binary lives
- location="$vmpath/usr/bin"
- if [ -n "\$vmnet0" ] ; then
- # the path might be directly point to the plugin dir
- End-of-Here
- if ($kind eq 'vmpl1.0' || $kind eq 'vmpl2.0' || $kind eq 'local10' || $kind eq 'local20') {
- $script .= " \$location/vmnet-bridge -d /var/run/vmnet-bridge-0.pid /dev/vmnet0 eth0\n";
- } else {
- $script .= " \$location/vmnet-bridge -d /var/run/vmnet-bridge-0.pid -n 0\n";
- }
- $script .= unshiftHereDoc(<<" End-of-Here");
- fi
- if [ -n "\$vmnet1" ] ; then
- \$location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet1.pid \\
- /dev/vmnet1 vmnet1
- ip addr add \$vmnet1 dev vmnet1
- ip link set vmnet1 up
- if [ -n "\$vmnet1nat" ] ; then
- echo "1" >/proc/sys/net/ipv4/conf/vmnet1/forwarding 2>/dev/null
- echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null
- #iptables -A -s vmnet1 -d br0
- fi
- /opt/openslx/uclib-rootfs/usr/sbin/udhcpd \\
- -S /etc/vmware/udhcpd/udhcpd-vmnet1.conf
- fi
- if [ -n "\$vmnet8" ] ; then
- \$location/vmnet-netifup -d /var/run/vmnet-netifup-vmnet8.pid \\
- /dev/vmnet8 vmnet8
- ip addr add \$vmnet8 dev vmnet8
- ip link set vmnet8 up
- echo "1" >/proc/sys/net/ipv4/conf/vmnet8/forwarding 2>/dev/null
- echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding 2>/dev/null
- iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
- /opt/openslx/uclib-rootfs/usr/sbin/udhcpd \\
- -S /etc/vmware/udhcpd/udhcpd-vmnet8.conf
- fi
- End-of-Here
- $initfile->addFunction(
- "vmnetif",
- "$script"
- );
- # vmblock for handling e.g. removable USB devices
- $script = unshiftHereDoc(<<" End-of-Here");
- # let point the path directly to the directory where the binary lives
- $vmpath/usr/bin/vmware-usbarbitrator
- End-of-Here
- $initfile->addFunction(
- "vmblock",
- "$script"
- );
- $script = unshiftHereDoc(<<" End-of-Here");
- # include default directories
- . /etc/opt/openslx/openslx.conf
- # load the configuration file
- . \${OPENSLX_DEFAULT_CONFDIR}/plugins/vmware/vmware.conf
- # hack to access the first serial/parallel port
- chmod a+rw /dev/ttyS0
- chmod a+rw /dev/parport0
- load_modules
- vmnetif
- End-of-Here
- # start the USB arbitrator on higher VMware/player versions (3.0+)
- if ($kind eq 'vmpl3.X' || $kind eq 'local3X') {
- $script .= unshiftHereDoc(<<" End-of-Here");
- vmblock
- End-of-Here
- }
- $initfile->addToCase(
- "start",
- "$script"
- );
- $script = unshiftHereDoc(<<" End-of-Here");
- killall vmnet-netifup vmnet-natd vmnet-bridge vmware vmplayer \\
- vmware-tray vmnet-dhcpd 2>/dev/null
- # might take a while until all services are shut down
- sleep 1
- unload_modules
- End-of-Here
- $initfile->addToCase(
- "stop",
- "$script"
- );
- $initfile->addToCase(
- "status",
- "vmstatus"
- );
- $initfile->addToCase(
- "restart",
- "\$0 stop && \$0 start"
- );
-
- my $distro = (split('-',$self->{'os-plugin-engine'}->distroName()))[0];
- my $runlevelscript = getInitFileForDistro($initfile, $distro);
- # todo: because we dont have distribution or version dependend
- # init scripts we could put it directly into /etc/init.d...
- spitFile("$self->{'pluginRepositoryPath'}/vmware-slx", $runlevelscript);
-}
-
-
-# writes the wrapper script for vmware workstation and player, depending
-# on the flag. If player: just player wrapper, if ws: ws+player wrapper
-# usage: _writeWrapperScript("$vmpath", "$kind", "player")
-# _writeWrapperScript("$vmpath", "$kind", "ws")
-sub _writeWrapperScript
-{
- my $self = shift;
- my $vmpath = shift;
- my $kind = shift;
- my $type = shift;
- my @files;
-
- if ("$type" eq "ws") {
- @files = qw(vmware vmplayer);
- } else {
- @files = qw(vmplayer);
- }
-
- foreach my $file (@files) {
- # create our own simplified version of the vmware and player wrapper
- # Depending on the configured kind it will be copied in stage3
- # because of tempfs of /var but not /usr we link the file
- # to /var/..., where we can write in stage3
- my $script = unshiftHereDoc(<<" End-of-Here");
- #!/bin/sh
- # written by OpenSLX-plugin 'vmware' in Stage1
- # radically simplified version of the original script $file by VMware Inc.
- End-of-Here
-
- # kinda ugly and we only need it for local. Preserves errors
- if ($kind ne "local") {
- $script .= unshiftHereDoc(<<" End-of-Here");
- export LD_LIBRARY_PATH=$vmpath/lib
- export GDK_PIXBUF_MODULE_FILE=$vmpath/libconf/etc/gtk-2.0/gdk-pixbuf.loaders
- export GTK_IM_MODULE_FILE=$vmpath/libconf/etc/gtk-2.0/gtk.immodules
- export FONTCONFIG_PATH=$vmpath/libconf/etc/fonts
- export PANGO_RC_FILE=$vmpath/libconf/etc/pango/pangorc
- # possible needed... but what are they good for?
- #export GTK_DATA_PREFIX=
- #export GTK_EXE_PREFIX=
- #export GTK_PATH=
- End-of-Here
- }
-
- $script .= unshiftHereDoc(<<" End-of-Here");
- PREFIX=$vmpath # depends on the vmware location
- exec "\$PREFIX"'/lib/wrapper-gtk24.sh' \\
- "\$PREFIX"'/lib' \\
- "\$PREFIX"'/bin/$file' \\
- "\$PREFIX"'/libconf' "\$@"
- End-of-Here
-
- # TODO: check if these will be overwritten if we have more as
- # local defined (add the version/type like vmpl1.0, vmws5.5, ...)
- # then we have a lot of files easily distinguishable by there suffix
- spitFile("$self->{'pluginRepositoryPath'}/$kind/$file", $script);
- chmod 0755, "$self->{'pluginRepositoryPath'}/$kind/$file";
- }
-}
-
-sub _writeVmwareConfigs {
- my $self = shift;
- my $kind = shift;
- my $vmpath = shift;
- my %versionhash = (vmversion => "", vmbuildversion => "");
- my $vmversion = "";
- my $vmbuildversion = "";
- my $config = "";
-
- %versionhash = _getVersion($vmpath);
-
- $config .= "version=\"".$versionhash{vmversion}."\"\n";
- $config .= "buildversion=\"".$versionhash{vmbuildversion}."\"\n";
- spitFile("$self->{'pluginRepositoryPath'}/$kind/vmware.conf", $config);
- chmod 0755, "$self->{'pluginRepositoryPath'}/$kind/vmware.conf";
-
- $config = "libdir = \"$vmpath\"\n";
- spitFile("$self->{'pluginRepositoryPath'}/$kind/config", $config);
- chmod 0755, "$self->{'pluginRepositoryPath'}/$kind/config";
-}
-
-sub _getVersion {
-
- my $vmpath = shift;
- my $vmversion = "";
- my $vmbuildversion = "";
- my %versioninfo = (vmversion => "", vmbuildversion => "");
-
- # get version information about installed vmplayer
- if (open(FH, "$vmpath/bin/vmplayer")) {
- $/ = undef;
- my $data = <FH>;
- close FH;
- # depending on the installation it could differ and has multiple build
- # strings
- if ($data =~ m{[^\d\.](\d\.\d) build-(\d+)}) {
- $vmversion = $1;
- $vmbuildversion = $2;
- }
- if ($data =~ m{\0(2\.[05])\.[0-9]}) {
- $vmversion = $1;
- }
- # else { TODO: errorhandling if file or string doesn't exist }
- chomp($vmversion);
- chomp($vmbuildversion);
-
-
- $versioninfo{vmversion} = $vmversion;
- $versioninfo{vmbuildversion} = $vmbuildversion;
- }
- return %versioninfo;
-}
-
-########################################################################
-## Functions, which setup the different environments (local, ws-v(5.5|6),
-## player-v(1|2)
-## Seperation makes this file more readable. Has a bigger benefit as
-## one big copy function. Makes integration of new versions easier.
-########################################################################
-
-# local installation
-sub _localInstallation
-{
- my $self = shift;
-
- my $kind = "local";
- my $vmpath = "/usr/lib/vmware";
- my $vmbin = "/usr/bin";
- my %versionhash = (vmversion => "", vmbuildversion => "");
- my $vmversion = "";
- my $vmbuildversion = "";
-
- # if vmware ws is installed, vmplayer is installed, too.
- # we will only use vmplayer
- if (-e "/usr/lib/vmware/bin/vmplayer") {
-
- ## Get and write version information
- %versionhash = _getVersion($vmpath);
- $vmversion = $versionhash{vmversion};
- $vmbuildversion = $versionhash{vmbuildversion};
-
- # set version information
- # VMplayer 2.0
- if ($vmversion eq "2.0" || $vmversion eq "6.0") {
- $kind="local20";
- # VMplayer 2.5
- } elsif ($vmversion eq "2.5" || $vmversion eq "6.5") {
- $kind="local25";
- # VMplayer 3.0, 3.1, Workstation 7.0, 7.1
- } elsif ($vmversion eq "3.0" || $vmversion eq "7.0" ||
- $vmversion eq "3.1" || $vmversion eq "7.1") { $kind="local3X";
- }
- # Create runlevel script depending on detected version
- $self->_writeRunlevelScript("$vmpath", "$kind");
-
- # Create wrapper scripts, kind of localNN is set to local
- if ( $kind =~ /local*/ ) { $kind = "local"; }
- if (-e "/usr/lib/vmware/bin/vmware") {
- $self->_writeWrapperScript("$vmpath", "$kind", "ws");
- }
- if (-e "/usr/lib/vmware/bin/vmplayer") {
- $self->_writeWrapperScript("$vmpath", "$kind", "player");
- }
-
- # copy nvram file
- my $pluginFilesPath
- = "$self->{'openslxBasePath'}/lib/plugins/$self->{'name'}/files";
- my @files = qw(nvram);
- foreach my $file (@files) {
- copyFile("$pluginFilesPath/$file", "$self->{'pluginRepositoryPath'}/$kind");
- }
-
- } # else { TODO: errorhandling if file or string doesn't exist }
-
- ## creating needed config /etc/vmware/config
- $self->_writeVmwareConfigs("$kind", "$vmpath");
-}
-
-sub _vmpl2Installation {
- my $self = shift;
-
- my $kind = "vmpl2.0";
- my $vmpath = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/lib/vmware";
- my $vmbin = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/bin";
-
- my $pluginFilesPath
- = "$self->{'openslxBasePath'}/lib/plugins/$self->{'name'}/files";
- my $installationPath = "$self->{'pluginRepositoryPath'}/$kind";
-
- mkpath($installationPath);
-
- ##
- ## Copy needed files
-
- # copy 'normal' needed files
- my @files = qw( nvram install-vmpl.sh );
- foreach my $file (@files) {
- copyFile("$pluginFilesPath/$file", "$installationPath");
- }
-
- # Install the binarys from given pkgpath
- system("/bin/sh /opt/openslx/plugin-repo/$self->{'name'}/$kind/install-vmpl.sh $kind");
-
- # Create runlevel script
- $self->_writeRunlevelScript($vmpath, $kind);
-
- # Create wrapperscripts
- $self->_writeWrapperScript("$vmpath", "$kind", "player");
-
- # Creating needed config /etc/vmware/config
- $self->_writeVmwareConfigs("$kind", "$vmpath");
-
-}
-
-sub _vmpl25Installation {
- my $self = shift;
-
- my $kind = "vmpl2.5";
- my $vmpath = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/lib/vmware";
- my $vmbin = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/bin";
- my $vmversion = "6.5";
- my $vmbuildversion = "TODO_we_need_it_for_enhanced_runvmware_config_in_stage1";
-
- my $pluginFilesPath
- = "$self->{'openslxBasePath'}/lib/plugins/$self->{'name'}/files";
- my $installationPath = "$self->{'pluginRepositoryPath'}/$kind";
-
- mkpath($installationPath);
-
- # copy 'normal' needed files
- my @files = qw( nvram install-vmpl.sh );
- foreach my $file (@files) {
- copyFile("$pluginFilesPath/$file", "$installationPath");
- }
-
- # Install the binarys from given pkgpath
- system("/bin/sh /opt/openslx/plugin-repo/$self->{'name'}/$kind/install-vmpl.sh $kind");
-
- # Create runlevel script
- $self->_writeRunlevelScript($vmpath, $kind);
-
- # Create wrapperscripts
- $self->_writeWrapperScript("$vmpath", "$kind", "player");
-
- # Creating needed config /etc/vmware/config
- $self->_writeVmwareConfigs("$kind", "$vmpath");
-
-}
-
-sub _vmpl1Installation {
- my $self = shift;
-
- my $kind = "vmpl1.0";
- my $vmpath = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/lib/vmware";
- my $vmbin = "/opt/openslx/plugin-repo/vmware/$kind/vmroot/bin";
- my $vmversion = "5.5";
- my $vmbuildversion = "TODO_we_need_it_for_enhanced_runvmware_config_in_stage1";
-
- my $pluginFilesPath
- = "$self->{'openslxBasePath'}/lib/plugins/$self->{'name'}/files";
- my $installationPath = "$self->{'pluginRepositoryPath'}/$kind";
-
- mkpath($installationPath);
-
- # copy 'normal' needed files
- my @files = qw( nvram install-vmpl.sh );
- foreach my $file (@files) {
- copyFile("$pluginFilesPath/$file", "$installationPath");
- }
-
- # Download and install the binarys
- system("/bin/sh /opt/openslx/plugin-repo/$self->{'name'}/$kind/install-vmpl.sh $kind");
-
- # Create runlevel script
- $self->_writeRunlevelScript($vmpath, $kind);
-
- # create wrapper scripts
- $self->_writeWrapperScript("$vmpath", "$kind", "player");
-
- # creating needed config /etc/vmware/config
- $self->_writeVmwareConfigs("$kind", "$vmpath");
-
-}
-
-# The bridge configuration needs the bridge module to be present in early
-# stage3
-sub suggestAdditionalKernelModules
-{
- my $self = shift;
- my $makeInitRamFSEngine = shift;
-
- my @suggestedModules;
-
- push @suggestedModules, qw( bridge );
-
- return @suggestedModules;
-}
-
-1;