diff options
author | Michael Janczyk | 2010-03-23 21:23:55 +0100 |
---|---|---|
committer | Michael Janczyk | 2010-03-23 21:23:55 +0100 |
commit | 67a9870012a281c5489e482c69201e8364dec5be (patch) | |
tree | 76e3a6dd29dacc21301bc028e997d44a3a29ac87 | |
parent | qemukvm weiter, sollte laufen (ungetestet), noch anpassungen an scripten notw... (diff) | |
download | core-67a9870012a281c5489e482c69201e8364dec5be.tar.gz core-67a9870012a281c5489e482c69201e8364dec5be.tar.xz core-67a9870012a281c5489e482c69201e8364dec5be.zip |
qemukvm further modifications, first xen runscripts
-rwxr-xr-x | boot-env/syslinux/extlinux | bin | 52714 -> 52294 bytes | |||
-rw-r--r-- | os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm | 12 | ||||
-rw-r--r-- | os-plugins/plugins/qemukvm/XX_qemukvm.sh | 16 | ||||
-rw-r--r-- | os-plugins/plugins/qemukvm/files/ifdown | 2 | ||||
-rw-r--r-- | os-plugins/plugins/qemukvm/files/run-virt.include | 12 | ||||
-rwxr-xr-x | os-plugins/plugins/qemukvm/init-hooks/60-have-servconfig/vm-dhcpd.sh | 5 | ||||
-rw-r--r-- | os-plugins/plugins/virtualbox/files/run-virt.include | 9 | ||||
-rw-r--r-- | os-plugins/plugins/vmgrid/XX_vmgrid.sh | 1 | ||||
-rw-r--r-- | os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm | 107 | ||||
-rw-r--r-- | os-plugins/plugins/xen/XX_xen.sh | 9 | ||||
-rw-r--r-- | os-plugins/plugins/xen/files/machine.include | 189 | ||||
-rw-r--r-- | os-plugins/plugins/xen/files/run-virt.include | 290 |
12 files changed, 574 insertions, 78 deletions
diff --git a/boot-env/syslinux/extlinux b/boot-env/syslinux/extlinux Binary files differindex d97dd70c..69d8bf56 100755 --- a/boot-env/syslinux/extlinux +++ b/boot-env/syslinux/extlinux diff --git a/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm index c9388210..8029102c 100644 --- a/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm +++ b/os-plugins/plugins/qemukvm/OpenSLX/OSPlugin/qemukvm.pm @@ -132,7 +132,7 @@ sub installationPhase foreach my $file ( qw( run-virt.include ifup ifdown ) ) { copyFile("$pluginBasePath/$file", "$pluginRepoPath/"); } - chmod 0755, "$pluginRepoPath/if*"; + chmod 0755, "$pluginRepoPath/ifup", "$pluginRepoPath/ifdown"; # # Create kvm link # my $kvmPath = pathOf('qemu-kvm') || pathOf('kvm') || pathOf('qemu'); # if (defined $kvmPath) { @@ -147,7 +147,7 @@ sub installationPhase $initFile-> addToBlock('head','. /etc/opt/openslx/plugins/qemukvm/network.conf'); my $do_start = unshiftHereDoc(<<' End-of-Here'); - # Adding the tap0 interface to the existing bridge configured in stage3 + # 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 @@ -157,6 +157,8 @@ sub installationPhase ip addr add ${hoaddress} dev tap2 echo "1" >/proc/sys/net/ipv4/conf/br0/forwarding echo "1" >/proc/sys/net/ipv4/conf/tap0/forwarding + # 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 @@ -164,6 +166,10 @@ sub installationPhase 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 @@ -171,7 +177,7 @@ sub installationPhase # second parameter content of the function $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 diff --git a/os-plugins/plugins/qemukvm/XX_qemukvm.sh b/os-plugins/plugins/qemukvm/XX_qemukvm.sh index d6c712ac..b3c4ccf0 100644 --- a/os-plugins/plugins/qemukvm/XX_qemukvm.sh +++ b/os-plugins/plugins/qemukvm/XX_qemukvm.sh @@ -98,17 +98,17 @@ ${qemukvm_imagesrc}." nonfatal qemu=$(binfinder ${qemubin}) [ -n "${qemu}" ] && echo "ALL ALL=NOPASSWD: ${qemu}" >>/mnt/etc/sudoers done - killall=$(binfinder killall) - # TODO: notwendig, oder reicht ifup/down - # TODO: /dev/fb0 mit jedermann - cat <<EOF\ -ALL ALL=NOPASSWD: ${killall} udhcpd -ALL ALL=NOPASSWD: /opt/openslx/uclib-rootfs/usr/sbin/udhcpd -S /tmp/qemukvm/if* + #killall=$(binfinder killall) + cat >> /mnt/etc/sudoers << EOF +# TODO: check if kvm / qemu sufficient +#ALL ALL=NOPASSWD: ${killall} udhcpd +#ALL ALL=NOPASSWD: ${PLUGINDIR}/ifup +#ALL ALL=NOPASSWD: ${PLUGINDIR}/ifdown +#ALL ALL=NOPASSWD: /opt/openslx/uclib-rootfs/usr/sbin/udhcpd -S /tmp/qemukvm/if* #ALL ALL=NOPASSWD: /opt/openslx/uclib-rootfs/sbin/tunctl -t tap* #ALL ALL=NOPASSWD: /opt/openslx/uclib-rootfs/sbin/ip addr add * dev tap* #ALL ALL=NOPASSWD: /opt/openslx/uclib-rootfs/usr/sbin/brctl addif br0 tap* -EOF \ - >>/mnt/etc/sudoers +EOF fi else [ $DEBUGLEVEL -gt 0 ] && echo " * Configuration of 'qemukvm' plugin failed" diff --git a/os-plugins/plugins/qemukvm/files/ifdown b/os-plugins/plugins/qemukvm/files/ifdown index 8c52d76f..be6ec913 100644 --- a/os-plugins/plugins/qemukvm/files/ifdown +++ b/os-plugins/plugins/qemukvm/files/ifdown @@ -9,7 +9,7 @@ # # General information about OpenSLX can be found at http://openslx.org/ # ----------------------------------------------------------------------------- -# qemu-ifup +# ifdown # - Script used for network cleanup of qemukvm in stage4 # ----------------------------------------------------------------------------- diff --git a/os-plugins/plugins/qemukvm/files/run-virt.include b/os-plugins/plugins/qemukvm/files/run-virt.include index bdf9666f..84e534e8 100644 --- a/os-plugins/plugins/qemukvm/files/run-virt.include +++ b/os-plugins/plugins/qemukvm/files/run-virt.include @@ -52,6 +52,9 @@ else exit 1 fi +# hot keys ALT+CTRL+SHIFT +VIRTCMDOPTS="${VIRTCMDOPTS} -alt-grab" + # display name, remove blanks because of cmdline problems displayname=$(echo ${displayname} | sed -e "s, ,-,g") VIRTCMDOPTS="${VIRTCMDOPTS} -name ${displayname}" @@ -186,6 +189,7 @@ writelog "\tNetwork kind:\t\t${network_kind}" ### finally set env for run-virt.sh ################################################################################ +# TODO: besser drive statt hda? #-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] # [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] # [,cache=writethrough|writeback|none][,format=f][,serial=s] @@ -258,14 +262,18 @@ else VIRTCMD="sudo $VIRTCMD" fi +# using snapshots +VIRTCMDOPTS="${VIRTCMDOPTS} -snapshot" + # TODO: boot als var, -boot n, tftp... VIRTCMDOPTS="${VIRTCMDOPTS} -boot c" # set headless mode # define first, you do not want VIRTCMDOPTS from graphical start VIRTCMDHL="$VIRTCMD" -VIRTCMDOPTSHL="${VIRTCMDOPTS} -alt-grab -nographic -snapshot ${diskfile}" +VIRTCMDOPTSHL="${VIRTCMDOPTS} -nographic ${diskfile}" # graphical start VIRTCMD="$VIRTCMD" -VIRTCMDOPTS="${VIRTCMDOPTS} -alt-grab -full-screen -snapshot ${diskfile}" +# vga std/cirrus/vmware? +VIRTCMDOPTS="${VIRTCMDOPTS} -vga std -full-screen ${diskfile}" diff --git a/os-plugins/plugins/qemukvm/init-hooks/60-have-servconfig/vm-dhcpd.sh b/os-plugins/plugins/qemukvm/init-hooks/60-have-servconfig/vm-dhcpd.sh index ed67bddb..13771a43 100755 --- a/os-plugins/plugins/qemukvm/init-hooks/60-have-servconfig/vm-dhcpd.sh +++ b/os-plugins/plugins/qemukvm/init-hooks/60-have-servconfig/vm-dhcpd.sh @@ -19,7 +19,7 @@ CONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR} testmkd ${CONFDIR} # configuring dhcpd stub for virtual networks -cat <<EOF\ +cat > ${CONFDIR}/udhcpd.conf << EOF # general udhcpd configuration file for virtual machines written by # $0 during OpenSLX stage3 configuration @@ -57,5 +57,4 @@ option domain virtual.site ${domain_name} #wins #lease #ntpsrv #tftp #bootfile -EOF \ - >${CONFDIR}/udhcpd.conf +EOF diff --git a/os-plugins/plugins/virtualbox/files/run-virt.include b/os-plugins/plugins/virtualbox/files/run-virt.include index eb1cb0e9..27289b41 100644 --- a/os-plugins/plugins/virtualbox/files/run-virt.include +++ b/os-plugins/plugins/virtualbox/files/run-virt.include @@ -12,7 +12,7 @@ # General information about OpenSLX can be found at http://openslx.org # ----------------------------------------------------------------------------- # run-virt.include -# - Include script for running the Virtual Box on an OpenSLX client via the +# - Include script for running the VirtualBox on an OpenSLX client via the # run-virt.sh or run-vmgrid.sh ################################################################################ @@ -52,10 +52,10 @@ mkdir -p ${diskfolder} ${snapshotdir} 2>/dev/null ln -sf ${vmpath} ${diskfile} # check the file type -if echo ${imgname} | grep -iE "vdi" >/dev/null 2>&1; then #vmdk|vhd - imgtype=$(echo ${imgname#*.} | tr [a-z] [A-Z]) +if echo ${imgname} | grep -iE "vdi|vmdk|vhd" >/dev/null 2>&1; then + imgtype=$(echo ${imgname##*.} | tr [a-z] [A-Z]) else - writelog "${imgname} is not a valid image type (vdi), exiting!" #vmdk|vhd + writelog "${imgname} is not a valid image type (vdi|vmdk|vhd), exiting!" exit 1 fi @@ -99,6 +99,7 @@ diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} | grep UUID | \ # snapshot UUID is static snapshotuuid="88bc8b6d-f248-468a-95fe-318084904f8b" +# TODO: MEM muss noch angepasst werden. Maschine crasht wenn nehr als 50% MEM # memory part equal to vmware plugin # percentage of memory to use for virtualbox in standard case if [ -n "${forcemem}" ]; then diff --git a/os-plugins/plugins/vmgrid/XX_vmgrid.sh b/os-plugins/plugins/vmgrid/XX_vmgrid.sh index 004b7891..bdbd4836 100644 --- a/os-plugins/plugins/vmgrid/XX_vmgrid.sh +++ b/os-plugins/plugins/vmgrid/XX_vmgrid.sh @@ -19,7 +19,6 @@ . /etc/functions # hostname? -[ -e /tmp/confviadhcp ] && . /tmp/confviadhcp host_name=${host_name:=$clientip} CONFFILE="/initramfs/plugin-conf/vmgrid.conf" diff --git a/os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm b/os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm index 671e985f..7ab55d4a 100644 --- a/os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm +++ b/os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm @@ -59,7 +59,8 @@ sub getAttrInfo End-of-Here content_regex => qr{^(0|1)$}, content_descr => '1 means active - 0 means inactive', - default => '1', + # set active to 0, later set specially created Xen system to 1 + default => '0', }, }; } @@ -70,61 +71,59 @@ sub suggestAdditionalKernelModules my $makeInitRamFSEngine = shift; my @suggestedModules; - - # Xen needs bridge module and for SUSE 10.2 netloop other OS: to be checked - if ($makeInitRamFSEngine->{'distro-name'} =~ m{^suse}i) { - push @suggestedModules, qw( bridge netloop ) - } - - return @suggestedModules; -} -sub _xenLabel -{ - # set label for each Xen system - foreach my $info (@$systemInfos) { - if ($info->{xen::active} eq 1) { - my $label = $info->{label} || ''; - if (!length($label) || $label eq $info->{name}) { - if ($info->{name} =~ m{^(.+)::(.+)$}) { - my $system = $1; - my $exportType = $2; - $label = $system . "-xen" . ' ' x (36-length($system)) - . $exportType; - } else { - $label = $info->{name}; - } - } - } - $info->{pxeLabel} = $label; - } - return $info; #??? -} + # Xen needs bridge module and netloop + push @suggestedModules, qw( bridge netloop ); -sub _xenBootEntry -{ - # Xen entries look different - # Example: - # KERNEL mboot.c32 vendor-os/xen.gz dom0_mem=128000 --- - # vendor-os/vmlinuz-xen debug=3 --- vendor-os/initramfs-1 - # TODO: versionsort oder per attr? - if ($info->{xen::active} eq 1) { - my $xenKernel = slxsystem(ls /boot/xen* | sort | tail -n 1); - $append .= " file=$bootURI" if length($bootURI); - $append .= " file=$tftpPrefix" if length($tftpPrefix); - $append .= " $clientAppend"; - $append .= " --- $pxePrefix$vendorOSName/$info->{'initramfs-name'}"; - $slxLabels .= "LABEL openslx-$info->{'external-id'}-xen\n"; - # $slxLabels .= $pxeDefault; - $slxLabels .= "\tMENU LABEL ^$info->{pxeLabel}\n"; - $slxLabels .= "\tKERNEL mboot.c32\n"; - $slxLabels .= "\tAPPEND $pxePrefix$vendorOSName/$xenKernel"; - # $slxLabels .= " dom0_mem=128000"; - $slxLabels .= " --- $pxePrefix$vendorOSName/$kernelName"; - $slxLabels .= " --- $append\n"; - $slxLabels .= "\tIPAPPEND 3\n"; - } - return $slxLabels; + return @suggestedModules; } +#sub _xenLabel +#{ +# # set label for each Xen system +# foreach my $info (@$systemInfos) { +# if ($info->{xen::active} eq 1) { +# my $label = $info->{label} || ''; +# if (!length($label) || $label eq $info->{name}) { +# if ($info->{name} =~ m{^(.+)::(.+)$}) { +# my $system = $1; +# my $exportType = $2; +# $label = $system . "-xen" . ' ' x (36-length($system)) +# . $exportType; +# } else { +# $label = $info->{name}; +# } +# } +# } +# $info->{pxeLabel} = $label; +# } +# return $info; #??? +#} + +#sub _xenBootEntry +#{ +# # Xen entries look different +# # Example: +# # KERNEL mboot.c32 vendor-os/xen.gz dom0_mem=128000 --- +# # vendor-os/vmlinuz-xen debug=3 --- vendor-os/initramfs-1 +# # TODO: versionsort oder per attr? +# if ($info->{xen::active} eq 1) { +# my $xenKernel = slxsystem(ls /boot/xen* | sort | tail -n 1); +# $append .= " file=$bootURI" if length($bootURI); +# $append .= " file=$tftpPrefix" if length($tftpPrefix); +# $append .= " $clientAppend"; +# $append .= " --- $pxePrefix$vendorOSName/$info->{'initramfs-name'}"; +# $slxLabels .= "LABEL openslx-$info->{'external-id'}-xen\n"; +# # $slxLabels .= $pxeDefault; +# $slxLabels .= "\tMENU LABEL ^$info->{pxeLabel}\n"; +# $slxLabels .= "\tKERNEL mboot.c32\n"; +# $slxLabels .= "\tAPPEND $pxePrefix$vendorOSName/$xenKernel"; +# # $slxLabels .= " dom0_mem=128000"; +# $slxLabels .= " --- $pxePrefix$vendorOSName/$kernelName"; +# $slxLabels .= " --- $append\n"; +# $slxLabels .= "\tIPAPPEND 3\n"; +# } +# return $slxLabels; +#} + 1; diff --git a/os-plugins/plugins/xen/XX_xen.sh b/os-plugins/plugins/xen/XX_xen.sh index ba2c4f00..82142a61 100644 --- a/os-plugins/plugins/xen/XX_xen.sh +++ b/os-plugins/plugins/xen/XX_xen.sh @@ -14,8 +14,13 @@ # script is included from init via the "." load function - thus it has all # variables and functions available -if [ -e /initramfs/plugin-conf/xen.conf ]; then - . /initramfs/plugin-conf/xen.conf +# include default directories +. /etc/openslx.conf + +CONFFILE=/initramfs/plugin-conf/xen.conf + +if [ -e ${CONFFILE} ]; then + . ${CONFFILE} if [ $xen_active -ne 0 ]; then testmkd /mnt/var/log/xen testmkd /mnt/var/run/xend diff --git a/os-plugins/plugins/xen/files/machine.include b/os-plugins/plugins/xen/files/machine.include new file mode 100644 index 00000000..93adca75 --- /dev/null +++ b/os-plugins/plugins/xen/files/machine.include @@ -0,0 +1,189 @@ +# -*- mode: python; -*- +#============================================================================ +# Python configuration setup for 'xm create'. +# This script sets the parameters used when a domain is created using 'xm create'. +# You use a separate script for each domain you want to create, or +# you can set the parameters for the domain on the xm command line. +#============================================================================ + +#---------------------------------------------------------------------------- +# Kernel image file and (optional) ramdisk (initrd). +kernel = "/boot/vmlinuz-xen" +ramdisk = "/boot/initrd-xen" + +# Or use domUloader instead of kernel/ramdisk to get kernel from domU FS +#bootloader = "/usr/lib/xen/boot/domUloader.py" +#bootentry = "hda2:/vmlinuz-xen,/initrd-xen" + +# The domain build function. Default is 'linux'. +#builder='linux' + +# Initial memory allocation (in megabytes) for the new domain. +# +# WARNING: Creating a domain with insufficient memory may cause out of +# memory errors. The domain needs enough memory to boot kernel +# and modules. Allocating less than 32MBs is not recommended. +memory = 64 + +# A name for your domain. All domains must have different names. +name = "ExampleDomain" + +# 128-bit UUID for the domain. The default behavior is to generate a new UUID +# on each call to 'xm create'. +#uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9" + +# List of which CPUS this domain is allowed to use, default Xen picks +#cpus = "" # leave to Xen to pick +#cpus = "0" # all vcpus run on CPU0 +#cpus = "0-3,5,^1" # run on cpus 0,2,3,5 + +# Number of Virtual CPUS to use, default is 1 +#vcpus = 1 + +#---------------------------------------------------------------------------- +# Define network interfaces. + +# By default, no network interfaces are configured. You may have one created +# with sensible defaults using an empty vif clause: +# +# vif = [ '' ] +# +# or optionally override backend, bridge, ip, mac, script, type, or vifname: +# +# vif = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0' ] +# +# or more than one interface may be configured: +# +# vif = [ '', 'bridge=xenbr1' ] + +vif = [ '' ] + +#---------------------------------------------------------------------------- +# Define the disk devices you want the domain to have access to, and +# what you want them accessible as. +# Each disk entry is of the form phy:UNAME,DEV,MODE +# where UNAME is the device, DEV is the device name the domain will see, +# and MODE is r for read-only, w for read-write. + +disk = [ 'phy:hda1,hda1,w' ] + +#---------------------------------------------------------------------------- +# Define frame buffer device. +# +# By default, no frame buffer device is configured. +# +# To create one using the SDL backend and sensible defaults: +# +# vfb = [ 'type=sdl' ] +# +# This uses environment variables XAUTHORITY and DISPLAY. You +# can override that: +# +# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ] +# +# To create one using the VNC backend and sensible defaults: +# +# vfb = [ 'type=vnc' ] +# +# The backend listens on 127.0.0.1 port 5900+N by default, where N is +# the domain ID. You can override both address and N: +# +# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=1' ] +# +# Or you can bind the first unused port above 5900: +# +# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vnunused=1' ] +# +# You can override the password: +# +# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ] +# +# Empty password disables authentication. Defaults to the vncpasswd +# configured in xend-config.sxp. + +#---------------------------------------------------------------------------- +# Define to which TPM instance the user domain should communicate. +# The vtpm entry is of the form 'instance=INSTANCE,backend=DOM' +# where INSTANCE indicates the instance number of the TPM the VM +# should be talking to and DOM provides the domain where the backend +# is located. +# Note that no two virtual machines should try to connect to the same +# TPM instance. The handling of all TPM instances does require +# some management effort in so far that VM configration files (and thus +# a VM) should be associated with a TPM instance throughout the lifetime +# of the VM / VM configuration file. The instance number must be +# greater or equal to 1. +#vtpm = [ 'instance=1,backend=0' ] + +#---------------------------------------------------------------------------- +# Set the kernel command line for the new domain. +# You only need to define the IP parameters and hostname if the domain's +# IP config doesn't, e.g. in ifcfg-eth0 or via DHCP. +# You can use 'extra' to set the runlevel and custom environment +# variables used by custom rc scripts (e.g. VMID=, usr= ). + +# Set if you want dhcp to allocate the IP address. +#dhcp="dhcp" +# Set netmask. +#netmask= +# Set default gateway. +#gateway= +# Set the hostname. +#hostname= "vm%d" % vmid + +# Set root device. +root = "/dev/hda1" + +# Root device for nfs. +#root = "/dev/nfs" +# The nfs server. +#nfs_server = '169.254.1.0' +# Root directory on the nfs server. +#nfs_root = '/full/path/to/root/directory' + +# Extra arguments to pass to the kernel. +extra = "" + +#---------------------------------------------------------------------------- +# Configure the behaviour when a domain exits. There are three 'reasons' +# for a domain to stop: poweroff, reboot, and crash. For each of these you +# may specify: +# +# "destroy", meaning that the domain is cleaned up as normal; +# "restart", meaning that a new domain is started in place of the old +# one; +# "preserve", meaning that no clean-up is done until the domain is +# manually destroyed (using xm destroy, for example); or +# "rename-restart", meaning that the old domain is not cleaned up, but is +# renamed and a new domain started in its place. +# +# In the event a domain stops due to a crash, you have the additional options: +# +# "coredump-destroy", meaning dump the crashed domain's core and then destroy; +# "coredump-restart', meaning dump the crashed domain's core and the restart. +# +# The default is +# +# on_poweroff = 'destroy' +# on_reboot = 'restart' +# on_crash = 'restart' +# +# For backwards compatibility we also support the deprecated option restart +# +# restart = 'onreboot' means on_poweroff = 'destroy' +# on_reboot = 'restart' +# on_crash = 'destroy' +# +# restart = 'always' means on_poweroff = 'restart' +# on_reboot = 'restart' +# on_crash = 'restart' +# +# restart = 'never' means on_poweroff = 'destroy' +# on_reboot = 'destroy' +# on_crash = 'destroy' + +#on_poweroff = 'destroy' +#on_reboot = 'restart' +#on_crash = 'restart' + +#============================================================================ diff --git a/os-plugins/plugins/xen/files/run-virt.include b/os-plugins/plugins/xen/files/run-virt.include new file mode 100644 index 00000000..beba0bb6 --- /dev/null +++ b/os-plugins/plugins/xen/files/run-virt.include @@ -0,0 +1,290 @@ +# run-virt.include +# ----------------------------------------------------------------------------- +# Copyright (c) 2009..2010 - RZ Uni Freiburg +# Copyright (c) 2009..2010 - OpenSLX GmbH +# +# This program/file 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 feedback to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org +# ----------------------------------------------------------------------------- +# run-virt.include +# - Include script for running Xen on an OpenSLX client via the run-virt.sh +# or run-vmgrid.sh +################################################################################ + +################################################################################ +### Include general configuration +################################################################################ +if [ -f ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf ]; then + . ${OPENSLX_DEFAULT_CONFDIR}/plugins/${self}/${self}.conf +else + writelog "Problems reading config file of ${self} plugin" + exit 1 +fi + +################################################################################ +### Declaration of default variables +################################################################################ + +exit +#PLUGINCONFVIRTUALBOX="${PLUGINCONFROOT}/${self}" +# create TMPDIR for all users +#mkdir -m 1777 /tmp/${self} 2>/dev/null +# dir for configs +#confdir="/tmp/${self}/${USER}/${VM_ID}" +# use alternate configuration directory instead of $HOME/.VirtualBox +#export VBOX_USER_HOME=${confdir} +# define dirs and files which can be removed after exit, be carefull! +#RMDIRS="${snapshotdir} ${confdir} /tmp/.vbox-${USER}-ipc" 2>/dev/null +#rm -rf ${RMDIRS} 2>/dev/null +#machfolder="${VBOX_USER_HOME}/Machines" +# imgname is the name of the virtual image file +# use vm_shortname since vm_name can be very long +#vm_shortname=$(echo ${imgname%.*} | sed -e "s, ,-,g") +#machconfig="${machfolder}/${vm_shortname}/${vm_shortname}.xml" +#diskfolder="${VBOX_USER_HOME}/HardDisks" +#snapshotdir=${machfolder}/${vm_shortname}/Snapshots +#diskfile="${diskfolder}/${imgname}" +#mkdir -p ${diskfolder} ${snapshotdir} 2>/dev/null +#ln -sf ${vmpath} ${diskfile} +# +# check the file type +#if echo ${imgname} | grep -iE "vdi" >/dev/null 2>&1; then #vmdk|vhd +# imgtype=$(echo ${imgname#*.} | tr [a-z] [A-Z]) +#else +# writelog "${imgname} is not a valid image type (vdi), exiting!" #vmdk|vhd +# exit 1 +#fi +# +# TODO: maybe rewrite, to reduce checks, merge it with network option, +# so we can have a "compatibility to vmware config" section +#case "${vmostype}" in +# winxp*) +# vmostype="WindowsXP" +# ;; +# winvista*) +# vmostype="WindowsVista" +# ;; +# Windows7*) +# vmostype="Windows7" +# ;; +# linux*) +# vmostype="Linux26" +# ;; +#esac +# +#writelog "Directories:" +#writelog "\tConfig dir:\t\t$confdir" +#writelog "\tMachines dir:\t\t$machfolder" +#writelog "\tMachine config:\t\t$machconfig" +#writelog "\tHardDisks dir:\t\t$diskfolder" +# +################################################################################ +### Hardware checks +################################################################################ +# +# remove ':' from MAC addr for vbox +#macaddr=$(echo ${macaddr} | sed 's/://g') +# +# machine UUID, MAC addr part of it +#machineuuid="00000000-0000-0000-0000-${macaddr}" +# cosmetical, since UUID in lower case +#machineuuid=$(echo ${machineuuid} | tr [A-Z] [a-z]) +# get UUID of VBox image +#diskuuid=$(VBoxManage -q showvdiinfo ${diskfile} | grep UUID | \ +# awk '{print $2}') +# snapshot UUID is static +#snapshotuuid="88bc8b6d-f248-468a-95fe-318084904f8b" +# +# memory part equal to vmware plugin +# percentage of memory to use for virtualbox in standard case +#if [ -n "${forcemem}" ]; then +# mem="${forcemem}" +#else +# permem=30 +# if [ "${totalmem}" -ge "1600" ]; then +# permem=40 +# fi +# # check if /tmp is on harddisk +# if grep -qe "/dev/.* /tmp " /proc/mounts ; then +# permem=60 +# id44="1" +# # Hack, if more than 2,5G RAM use 40% of Ram and write vmem into Ram as well +# # (40% vmware | 40% confdir(vmem...) | 20% host +# # VMplayer 2+ issue +# # TODO: makes this sense for vbox? +# #if [ "${totalmem}" -ge "2500" ]; then +# #permem=40 +# #rmdir ${snapshotdir} +# #snapshotdirold=${snapshotdir} +# #snapshotdir=/dev/shm/${self}/${USER}/${VM_ID} +# #mkdir -p ${snapshotdir} +# #ln -sf ${snapshotdir} ${snapshotdirold} +# #fi +# fi +# mem=$(expr ${totalmem} / 100 \* ${permem}) +# if [ "${id44}" = "1" ]; then +# memhost=$(expr ${totalmem} - ${mem}) +# else +# memhost=$(expr ${totalmem} - ${mem} - ${mem}) +# fi +# #permem=40 +# #mem=$(expr ${totalmem} * ${permem}) +# if [ "${mem}" -lt "256" ] || [ "${memhost}" -lt "256" ]; then +# writelog "Memory out of range: ${mem} MB (guest) / ${memhost} MB (host)!" +# writelog "Min. 256 MB for host and guest!" +# exit 1 +# fi +#fi +# +# translate network cards +#if [ "${network_card}" = "e1000" ]; then +# vb_network_card="82540EM" +#else +# network_card="pcnet" +# vb_network_card="Am79C973" +#fi +# +# translate network kinds (nat, bridged, host-only) +#case "${network_kind}" in +# bridged) +# network_kind='BridgedInterface name="br0"' +# ;; +# hostonly|host-only) +# network_kind='HostOnlyInterface name="vboxnet0"' +# ;; +# *) +# network_kind="NAT" +# ;; +#esac +# +# external GUI +#vrdpport="590${VM_ID}" +# +# TODO: nur bei vmchooser +# TODO: most of the following does not make much sense yet ... +# virtual fd/cd/dvd and drive devices, floppy b: for configuration +# if $floppy_0 from run-virt.include set then fdtest="TRUE" +#fdtest= +#fdtest=${floppy_0:+"TRUE"} +# if $fdtest not set floppy0="FALSE", else "TRUE" +#floppy0=${fdtest:-"FALSE"} +#floppy1="TRUE" +#floppy1name="/var/lib/virt/vmchooser/loopimg/fd.img" +# if $cdrom_0 from run-virt.include set then cdtest="TRUE" +#cdtest= +#cdtest=${cdrom_0:+"TRUE"} +# if $cdtest not set cdrom0="FALSE", else "TRUE" +#cdrom0=${cdtest:-"FALSE"} +# if $cdrom_1 from run-virt.include set then cdtest="TRUE" +#cdtest= +#cdtest=${cdrom_1:+"TRUE"} +# if $cdtest not set cdrom1="FALSE", else "TRUE" +#cdrom1=${cdtest:-"FALSE"} +# ide is expected default, test for the virtual disk image type should +# be done while creating the runscripts ... +#ide="TRUE" +#hddrv="ide" +# +#writelog "\tSnapshots dir:\t\t$snapshotdir" +#writelog "Diskimage:" +#writelog "\tDisk type:\t\t$imgtype" +#writelog "\tDisk file:\t\t$diskfile" +#writelog "\tVMostype:\t\t$vmostype" +#writelog "\tMachine UUID:\t\t$machineuuid" +#writelog "\tDisk UUID:\t\t$diskuuid" +#writelog "\tSnapshot UUID:\t\t$snapshotuuid" +#writelog "Virtual Hardware:" +#writelog "\tGuest RAM:\t\t${mem} MB" +# echo nur wenn memhost gesetzt +#[ -n "${memhost}" ] && writelog "\tHost RAM:\t\t${memhost} MB" +#writelog "\tMAC address:\t\t$macaddr" +#writelog "\tNetwork card:\t\t${vb_network_card}" +#writelog "\tNetwork kind:\t\t${network_kind}" +# TODO: server start activate via xml, etc... +#writelog "\tGuest VRDP port:\t${vrdpport}" +#writelog "\tCD-ROM1:\t${cdrom0}" +#writelog "\tCD-ROM2:\t${cdrom1}" +#writelog "\tFloppy_A:\t${floppy0}" +#writelog "\tFloppy_B:\t${floppy1}" +#writelog "\tShared Folders 'home':\t/home/${USER}" +# +################################################################################ +### Pepare and configure virtual machine and disk image +################################################################################ +# +# TODO: date wichtig? +#date="$(date +%Y-%m-%dT%H:%M:%SZ)" +#. ${PLUGINCONFVIRTUALBOX}/virtualbox.include >"${VBOX_USER_HOME}/VirtualBox.xml" +# +# shortened date YYYY-MM-DD +#date=${date%T*} +#. ${PLUGINCONFVIRTUALBOX}/machine.include >"${machconfig}" +# +# add rw share to vm, if existing +#if [ -n "${rwshare}" ]; then +# sharedf='<SharedFolder name="share"' +# sharedf="${sharedf} hostPath=\"${rwshare}\" writable=\"true\"/>" +# sed -i "s,</SharedFolders>, ${sharedf}\n </SharedFolders>," \ +# "${machconfig}" +# writelog "\tShared Folders 'share':\t${rwshare}" +#fi +# +# add ssh port if linux and NAT +#if [ "${vmostype}" = "Linux26" ] && [ "${network_kind}" = "NAT" ]; then +# vmsshport="220${VM_ID}" +# extradataitem='<ExtraDataItem name="VBoxInternal/Devices' \ +# extradataitem="${extradataitem}/${network_card}/0/LUN#0/Config/ssh/" +# extradataguestport='GuestPort" value="22"/>' +# extradatahostport="HostPort\" value=\"${vmsshport}\"/>" +# extradataprotocol='Protocol" value="TCP"/>' +# sed -i "s,</ExtraData>, ${extradataitem}${extradataguestport}\n\ +# ${extradataitem}${extradatahostport}\n\ +# ${extradataitem}${extradataprotocol}\n\ +# </ExtraData>," "${machconfig}" +# writelog "\tGuest SSH port:\t\t${vmsshport}" +#fi +# +#cat ${OPENSLX_DEFAULT_DIR}/plugin-repo/virtualbox/empty-diff.vdi.gz | \ +# gunzip > "${snapshotdir}/{${snapshotuuid}}.vdi" +# +################################################################################ +### finally set env for run-virt.sh +################################################################################ +# +# wait for a certain command to settle +# get the PID of the right process +# TODO: not very good! But seems to work +# TODO: not needed? KILL!!! +#VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\ + | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/") +#for i in $(echo ${VBMANPID}); do +# kill -9 ${VBMANPID} >/dev/null 2>&1 +#done +# TODO: OLD Version, NOW: KILL process +#VBMANPID=$(pstree -p | grep VBoxXPCOMIPCD | grep -ivE "VirtualBox|VBoxHeadless"\ +# | sed -e "s/.*VBoxXPCOMIPCD(\(.*\)).*/\1/" | tail -n 1) +#for i in {0..999}; do +# ps aux | grep -v grep | grep VBoxXPCOMIPCD | grep -q " ${VBMANPID} " || break +# if [ $i -eq 999 ]; then +# kill -9 ${VBMANPID} >/dev/null 2>&1 +# writelog "Process ID ${VBMANPID} did not finish, killing!" +# fi +#done +# +# set the variables appropriately (several interfaces with different names) +#VIRTCMD=$(which VirtualBox 2>/dev/null) +#VIRTCMDOPTS="--startvm ${machineuuid} --start-running" +# +# SDL tests +#VIRTCMDSDL=$(which VBoxSDL 2>/dev/null) +#VIRTCMDOPTSSDL="--startvm ${machineuuid} --fullscreen --hwvirtex --memory 1024 \ +# --fixedmode 1680 1050 24 --hostkey 302 0" +# +# set headless mode +#VIRTCMDHL=$(which VBoxHeadless 2>/dev/null) +#VIRTCMDOPTSHL="-s ${machineuuid}" |