summaryrefslogtreecommitdiffstats
path: root/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
diff options
context:
space:
mode:
Diffstat (limited to 'os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm')
-rw-r--r--os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm101
1 files changed, 69 insertions, 32 deletions
diff --git a/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
index ee4b3417..e4ef657f 100644
--- a/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
+++ b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm
@@ -103,7 +103,7 @@ 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'};
@@ -111,8 +111,9 @@ sub installationPhase
$self->{attrs} = $info->{'plugin-attrs'};
my $engine = $self->{'os-plugin-engine'};
- my $pluginRepoPath = "$self->{pluginRepositoryPath}";
-
+ my $pluginRepoPath = $info->{'plugin-repo-path'};
+ my $openslxBasePath = $info->{'openslx-base-path'};
+
# Different names of the tool (should be unified somehow!?)
if (!isInPath('qemu-kvm') || !isInPath('kvm')) {
$engine->installPackages(
@@ -123,56 +124,92 @@ sub installationPhase
if (!isInPath('sudo')) {
$engine->installPackages($self->{distro}->getPackageName('sudo'));
}
- # Copy run-virt.include to the appropriate place for inclusion in stage4
- copyFile("$self->{openslxBasePath}/lib/plugins/qemukvm/files/run-virt.include",
- "$self->{pluginRepositoryPath}/");
- # Copy the later /etc/qemu-ifup,down
- copyFile("$self->{openslxBasePath}/lib/plugins/qemukvm/files/qemu-if*",
- "$self->{pluginRepositoryPath}/");
- chmod 0755, "$self->{pluginRepositoryPath}/qemu-ifup";
- chmod 0755, "$self->{pluginRepositoryPath}/qemu-ifdown";
+
+ # Copy run-virt.include and template files to the appropriate place for
+ # inclusion in stage4
+ my $pluginName = $self->{'name'};
+ my $pluginBasePath = "$openslxBasePath/lib/plugins/$pluginName/files";
+ foreach my $file ( qw( run-virt.include ifup ifdown ) ) {
+ copyFile("$pluginBasePath/$file", "$pluginRepoPath/");
+ }
+ chmod 0755, "$pluginRepoPath/ifup", "$pluginRepoPath/ifdown";
my $initFile = newInitFile();
$initFile->setName("qemukvm");
$initFile->setDesc("Setup environment for QEMU/KVM");
- $initFile->addToBlock('head','. /etc/opt/openslx/network.qemukvm');
+ # TODO: default dirs als globale funktion anbieten
+ $initFile->
+ addToBlock('head','. /etc/opt/openslx/plugins/qemukvm/network.conf');
+
+ # TODO: remove all runlevel links for qemu-kvm or kvm
+ my $kvm_module = unshiftHereDoc(<<' End-of-Here');
+ # Figure out which module we need.
+ if grep -q ^flags.*\\\<vmx\\\> /proc/cpuinfo; then
+ module=kvm_intel
+ elif grep -q ^flags.*\\\<svm\\\> /proc/cpuinfo; then
+ module=kvm_amd
+ else
+ module=kqemu
+ fi
+ End-of-Here
+
my $do_start = unshiftHereDoc(<<' End-of-Here');
- # Adding the tap0 interface to the existing bridge configured in stage3
- for i in 0 1 2; do
- /opt/openslx/uclib-rootfs/sbin/tunctl -t tap${i} >/dev/null 2>&1
- ip link set dev tap${i} up
- done
- /opt/openslx/uclib-rootfs/usr/sbin/brctl addif br0 tap0
- ip addr add ${nataddress} dev tap1
- ip addr add ${hoaddress} dev tap2
- echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding
- echo "1" >/proc/sys/net/ipv4/conf/tap0/forwarding
+ # loading kvm module
+ kvm_module
+ [ -n "${module}" ] && modprobe -q ${module}
+ # load the tunnel device module
+ modprobe -q tun
+ # TODO: maybe in the ifup-script better solution?
+ # configuring the tap0 interface to the existing bridge configured in stage3
+ #for i in 0 1 2; do
+ # /opt/openslx/uclib-rootfs/sbin/tunctl -t tap${i} >/dev/null 2>&1
+ # ip link set dev tap${i} up
+ #done
+ #/opt/openslx/uclib-rootfs/usr/sbin/brctl addif br0 tap0
+ #ip addr add ${nataddress} dev tap1
+ #ip addr add ${hoaddress} dev tap2
+ #echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding
+ #echo "1" >/proc/sys/net/ipv4/conf/tap0/forwarding
+ # make /dev/fb0 writable for all
+ # TODO: maybe solve via group or udev, etc...
+ chmod 766 /dev/fb*
End-of-Here
+
my $do_stop = unshiftHereDoc(<<' End-of-Here');
- /opt/openslx/uclib-rootfs/usr/sbin/brctl delif br0 tap0
- ip addr del ${nataddress} dev tap1
- ip addr del ${hoaddress} dev tap2
- echo "0" >/proc/sys/net/ipv4/conf/br0/forwarding
- echo "0" >/proc/sys/net/ipv4/conf/tap0/forwarding
+ kvm_module
+ [ -n "${module}" ] && modprobe -q -r ${module}
+ modprobe -q -r tun
+ # TODO: tun removed, so this is not necessary
+ #/opt/openslx/uclib-rootfs/usr/sbin/brctl delif br0 tap0
+ #ip addr del ${nataddress} dev tap1
+ #ip addr del ${hoaddress} dev tap2
+ #echo "0" >/proc/sys/net/ipv4/conf/br0/forwarding
+ #echo "0" >/proc/sys/net/ipv4/conf/tap0/forwarding
+ chmod 760 /dev/fb*
End-of-Here
-
+
+ my $do_restart = unshiftHereDoc(<<' End-of-Here');
+ do_stop && do_start
+ End-of-Here
+
# add helper functions to initfile
# first parameter name of the function
# second parameter content of the function
+ $initFile->addFunction('kvm_module', $kvm_module);
$initFile->addFunction('do_start', $do_start);
$initFile->addFunction('do_stop', $do_stop);
- $initFile->addFunction('do_restart', " : # do nothing here");
-
+ $initFile->addFunction('do_restart', $do_restart);
+
# place a call of the helper function in the stop block of the init file
# first parameter name of the function
# second parameter name of the block
$initFile->addFunctionCall('do_start', 'start');
$initFile->addFunctionCall('do_stop', 'stop');
$initFile->addFunctionCall('do_restart', 'restart');
-
+
my $distro = (split('-',$self->{'os-plugin-engine'}->distroName()))[0];
-
+
# write qemukvm initfile to plugin path
spitFile(
"$pluginRepoPath/qemukvm",