diff options
author | Sebastian Schmelzer | 2010-09-02 17:50:49 +0200 |
---|---|---|
committer | Sebastian Schmelzer | 2010-09-02 17:50:49 +0200 |
commit | 416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 (patch) | |
tree | 4715f7d742fec50931017f38fe6ff0a89d4ceccc /os-plugins/plugins/vmgrid | |
parent | Fix for the problem reported on the list (sed filter forgotten for the (diff) | |
download | core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.gz core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.xz core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.zip |
change dir structure
Diffstat (limited to 'os-plugins/plugins/vmgrid')
-rw-r--r-- | os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm | 319 | ||||
-rw-r--r-- | os-plugins/plugins/vmgrid/XX_vmgrid.sh | 104 | ||||
-rw-r--r-- | os-plugins/plugins/vmgrid/files/run-vmgrid.sh | 430 | ||||
-rw-r--r-- | os-plugins/plugins/vmgrid/files/vmgrid | 154 | ||||
-rw-r--r-- | os-plugins/plugins/vmgrid/init-hooks/80-after-plugins/virtualization.sh | 144 |
5 files changed, 0 insertions, 1151 deletions
diff --git a/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm b/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm deleted file mode 100644 index 0965b482..00000000 --- a/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm +++ /dev/null @@ -1,319 +0,0 @@ -# Copyright (c) 2010 - RZ Uni Freiburg -# Copyright (c) 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 -# ----------------------------------------------------------------------------- -# vmgrid.pm -# - ... -# ----------------------------------------------------------------------------- -package OpenSLX::OSPlugin::vmgrid; - -use strict; -use warnings; - -use base qw(OpenSLX::OSPlugin::Base); - -use OpenSLX::Basics; -use OpenSLX::Utils; -use OpenSLX::DistroUtils; - -sub new -{ - my $class = shift; - - my $self = { - name => 'vmgrid', - }; - - return bless $self, $class; -} - -# TODO: desc -sub getInfo -{ - my $self = shift; - - return { - description => unshiftHereDoc(<<' End-of-Here'), - ... - End-of-Here - precedence => 80, - #required => [ qr{^(vmware|virtualbox|qemukvm|xen)$} ], - #openvz|vserver - # TODO: virtaul plugin (requires, provides?) - #required => [ qw( virtualization ) ], - #provided => [ qw( virtualization ) ], - }; -} - -sub getAttrInfo -{ - my $self = shift; - - return { - 'vmgrid::active' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the 'vmgrid'-plugin be executed during boot? - End-of-Here - content_regex => qr{^(0|1)$}, - content_descr => '1 means active - 0 means inactive', - default => '1', - }, - 'vmgrid::virt' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - which virtualization technique schould be used? - End-of-Here - content_regex => qr{^(virtualbox|qemukvm|xen)$}, - #openvz|vserver - content_descr => 'virtualbox, qemukvm, xen', - #openvz, vserver - default => undef, - }, - 'vmgrid::roshare' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - do you want to mount external resources? - e.g. NFS share /w virt images ... - will be mounted to /var/lib/virt/vmgrid - End-of-Here - content_regex => qr{^nfs://}, - content_descr => 'NFS share as URI (nfs://...)', - default => undef, - }, - 'vmgrid::rwshare' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - do you want a persistent storage device? - use local hard drive (ID45) or NFS share. - will be mounted to /var/opt/openslx/plugins/vmgrid/share - End-of-Here - content_regex => qr{^(id45|nfs://)}, - content_descr => 'NFS share as URI (nfs://...) or "id45"', - default => undef, - }, - 'vmgrid::imgpath' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - location of virtual images - for starts /w relative path - End-of-Here - content_descr => 'absolute path to vm image files', - default => '/var/lib/virt/vmgrid/images', - }, - 'vmgrid::xmlpath' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - location of XML configuration for virtual images - for starts /w relative path - End-of-Here - content_descr => 'absolute path to vm xml files', - default => '/var/lib/virt/vmgrid/xml', - }, - 'vmgrid::startvms' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - which virtaul machines should be started per default - comma separated list. first will be started first, - second second, and so on, max. 4 VMs - End-of-Here - content_descr => 'name of xml file e.g. scilin-5.4-wn(.xml)', - default => undef, - }, - 'vmgrid::vt' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - use hardware virtualization, if applicable - override the settings of the corresponding virt plugin - (only if supported by plugin) - End-of-Here - content_regex => qr{^(0|1)$}, - content_descr => '"0", "1" or "-" (for unset)', - default => undef, - }, - 'vmgrid::maxvcpus' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - use this number of vcpus as maximum for one vm - (only if supported by plugin) - End-of-Here - content_regex => qr{^(1|2|4|8|16)$}, - content_descr => '1, 2, 4, 8, 16', - default => undef, - }, - 'vmgrid::minvcpus' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - use this number of vcpus as minimum for one vm - (only if supported by plugin) - End-of-Here - content_regex => qr{^(1|2|4|8|16)$}, - content_descr => '1, 2, 4, 8, 16', - default => undef, - }, - 'vmgrid::memratio' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - define memory ratio in nn% - order: grid client 1, 2, 3, 4, other VMs, host - if desktop virtualization defined the free memory will be - distributed between the remaining grid clients, - according to their ratio - if less than 4 VMs defined in startvms the memory is being - reserved for a later manual start - set to 0 if you do not intend to start them manually - (only if supported by plugin) - End-of-Here - content_regex => qr{^(\d\d??,\d\d??,\d\d??,\d\d??,\d\d??,\d\d??)$}, - content_descr => '\d\d??,\d\d??,\d\d??,\d\d??,\d\d??,\d\d??', - default => '40,0,0,0,40,20', - }, - 'vmgrid::maxmem' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - maximum RAM used by one vm - (only if supported by plugin) - End-of-Here - content_regex => qr{^(\d\d\d\d??\d??)$}, - content_descr => 'absolute amount: \d\d\d\d??\d??', - default => undef, - }, - 'vmgrid::minmem' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - minimum RAM used by one vm - (only if supported by plugin) - End-of-Here - content_regex => qr{^(\d\d\d\d??\d??)$}, - content_descr => 'absolute amount: \d\d\d\d??\d??', - default => undef, - }, - }; -} - -sub installationPhase -{ - my $self = shift; - my $info = shift; - - my $pluginRepoPath = $info->{'plugin-repo-path'}; - my $openslxBasePath = $info->{'openslx-base-path'}; - - $self->_writeRunlevelScript(); - - # copy all needed files now: - my $pluginName = $self->{'name'}; - my $pluginBasePath = "$openslxBasePath/lib/plugins/$pluginName/files"; - foreach my $file ( qw( vmgrid run-vmgrid.sh ) ) { - copyFile("$pluginBasePath/$file", "$pluginRepoPath/"); - chmod 0755, "$pluginRepoPath/$file"; - } - - return; -} - -sub removalPhase -{ - my $self = shift; - my $info = shift; - - return; -} - -# Write the runlevelscript -sub _writeRunlevelScript -{ - my $self = shift; - my $initfile = newInitFile(); - - $initfile->setName("vmgrid"); - $initfile->setDesc("Setup environment for vmgrid. Part of OpenSLX vmgrid plugin."); - - # todo: Function need to be formated proper... not important right now - #$initfile->addFunction( - # 'running', - # 'lsmod | grep -q "$1[^_-]"' - #); - -# # Is a VM running? -# my $runningvms = unshiftHereDoc(<<' End-of-Here'); -# if [ -e /tmp/vmgrid/vmgrid.pids ]; then -# for pid in $(cat /tmp/vmgrid/vmgrid.pids); do -# if ps aux | grep " ${pid} " | grep vmgrid; then -# echo "Running: ${pid}" -# fi -# done -# fi -# End-of-Here - - # Kill all VMS! - my $killvms = unshiftHereDoc(<<' End-of-Here'); - if [ -e /tmp/vmgrid/vmgrid.pids ]; then - for pid in $(cat /tmp/vmgrid/vmgrid.pids); do - if ps aux | grep " ${pid} " | grep vmgrid; then - kill ${pid} - fi - done - fi - End-of-Here - - # FORCE: Kill all VMS! - my $fkillvms = unshiftHereDoc(<<' End-of-Here'); - if [ -e /tmp/vmgrid/vmgrid.pids ]; then - for pid in $(cat /tmp/vmgrid/vmgrid.pids); do - if ps aux | grep " ${pid} " | grep vmgrid; then - kill -9 ${pid} - fi - done - fi - End-of-Here - - $initfile->addFunction( - 'start', - ' vmgrid', - ); - $initfile->addToCase( - 'kill', - 'killvms' - ); - $initfile->addToCase( - 'force-kill', - 'fkillvms' - ); - $initfile->addToCase( - 'status', - 'runningvms' - ); - $initfile->addToCase( - 'restart', - 'stop && start' - ); - -# # get distro version -# my $distro = (split('-',$self->{'os-plugin-engine'}->distroName()))[0]; -# my $runlevelscript = getInitFileForDistro($initfile, $distro); -# -# spitFile("$self->{'pluginRepositoryPath'}/vmgrid-slx", $runlevelscript); -} - -1; diff --git a/os-plugins/plugins/vmgrid/XX_vmgrid.sh b/os-plugins/plugins/vmgrid/XX_vmgrid.sh deleted file mode 100644 index 16f5fbd1..00000000 --- a/os-plugins/plugins/vmgrid/XX_vmgrid.sh +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (c) 2010 - RZ Uni Freiburg -# Copyright (c) 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 -# -# script is included from init via the "." load function - thus it has all -# variables and functions available - -# include default directories -. /etc/openslx.conf - -CONFFILE="/initramfs/plugin-conf/vmgrid.conf" -PLUGINCONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/vmgrid -VIRTUALIZATIONPLUGIN=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualization -#RWSHARE=/mnt/${OPENSLX_DEFAULT_VARDIR}/plugins/vmgrid/share -RWSHARE=/mnt/var/opt/openslx/plugins/vmgrid/share -RWSHAREMNT=/mnt/var/opt/openslx/mnt/vmgrid -BINDIR=/mnt/${OPENSLX_DEFAULT_BINDIR} -PLUGINDIR=${OPENSLX_DEFAULT_DIR}/plugin-repo/vmgrid -VIRTDIR=/mnt/${OPENSLX_DEFAULT_VIRTDIR}/vmgrid - -if [ -f $CONFFILE ]; then - - # load needed variables - . $CONFFILE - - if [ ${vmgrid_active} -ne 0 ] ; then - [ ${DEBUGLEVEL} -gt 0 ] && echo "executing the 'vmgrid' os-plugin ..." - - # load general configuration - . /etc/initramfs-setup - # include functions - . /etc/functions - - testmkd ${PLUGINCONFDIR} - testmkd ${VIRTDIR} - cp $CONFFILE ${PLUGINCONFDIR}/vmgrid.conf - # create link to binpath - ln -fs ${PLUGINDIR}/vmgrid ${BINDIR}/vmgrid - ln -fs ${PLUGINDIR}/run-vmgrid.sh ${BINDIR}/run-vmgrid.sh - - # mount nfs virt ro share - if strinstr "nfs://" "${vmgrid_roshare}"; then - virtsrcprot=$(uri_token ${vmgrid_roshare} prot) - virtsrcserv=$(uri_token ${vmgrid_roshare} server) - virtsrcpath="$(uri_token ${vmgrid_roshare} path)" - if [ -n "${virtsrcprot}" -a -n "${virtsrcserv}" -a -n "${virtsrcpath}" ]; - then - virtsrctarget=${VIRTDIR} - # mount the vmgrid source ro - fsmount ${virtsrcprot} ${virtsrcserv} ${virtsrcpath} ${virtsrctarget} \ - ro - fi - fi - - # create rw share - testmkd ${RWSHARE} - # bind mount id 45 to ${RWSHARE} - if strinstr "id45" "${vmgrid_rwshare}" ; then - id45part=$(grep " 45 " /etc/disk.partition | awk '{print $1}' | \ - cut -f 3,3 -d /) - if [ -n "${id45part}" ]; then - testmkd /mnt/media/${id45part}/vmgrid - mount --bind -n /mnt/media/${id45part}/vmgrid ${RWSHARE} \ - >>/tmp/vmgrid.log 2>&1 - fi - # mount nfs rw share - elif strinstr "nfs://" "${vmgrid_rwshare}" ; then - rwshareprot=$(uri_token ${vmgrid_rwshare} prot) - rwshareserv=$(uri_token ${vmgrid_rwshare} server) - rwsharepath="$(uri_token ${vmgrid_rwshare} path)" - if [ -n "${rwshareprot}" -a -n "${rwshareserv}" -a -n "${rwsharepath}" ]; - then - # mount to a dir fist to create spec host dir, then bind mount - testmkd ${RWSHAREMNT} - rwtarget=${RWSHAREMNT} - # mount the vmgrid source rw - fsmount ${rwshareprot} ${rwshareserv} ${rwsharepath} ${rwtarget} rw - # hostname? - host_name=${host_name:=$clientip} - testmkd ${RWSHAREMNT}/${host_name} - mount --bind ${RWSHAREMNT}/${host_name} ${RWSHARE} \ - >>/tmp/vmgrid.log 2>&1 - fi - else - testmkd /mnt/tmp/vmgrid - mount --bind -n /mnt/tmp/vmgrid ${RWSHARE} >>/tmp/vmgrid.log 2>&1 - fi - # chmod so that everybody can write - chmod 1777 ${RWSHARE} - echo "vmgrid_rwmnt=${RWSHARE#/mnt}" >> ${PLUGINCONFDIR}/vmgrid.conf - - # finished ... - [ $DEBUGLEVEL -gt 0 ] && echo "done with 'vmgrid' os-plugin ..." - fi -else - [ $DEBUGLEVEL -gt 0 ] && echo " * configuration of 'vmgrid' os-plugin failed" -fi diff --git a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh deleted file mode 100644 index 51cb5dbc..00000000 --- a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh +++ /dev/null @@ -1,430 +0,0 @@ -#!/bin/bash -# ----------------------------------------------------------------------------- -# Copyright (c) 2010 - RZ Uni FR -# Copyright (c) 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/ -# ----------------------------------------------------------------------------- -# vmgrid -# - This is the generic wrapper for the several virtualization solutions... -################################################################################ - -. /etc/opt/openslx/openslx.conf - -################################################################################ -### Define default dirs / get configs -################################################################################ - -PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins -PLUGINCONFVMGRID=${PLUGINCONFROOT}/vmgrid -RWSHARE=/var/opt/openslx/plugins/vmgrid/share -# include general configuration from vmgrid -[ -f ${PLUGINCONFVMGRID}/vmgrid.conf ] && \ - . ${PLUGINCONFVMGRID}/vmgrid.conf -# load general virtualization information -[ -f ${PLUGINCONFROOT}/virtualization/virtualization.conf ] && \ - . ${PLUGINCONFROOT}/virtualization/virtualization.conf -# get the vmchooser_active var -[ -f ${PLUGINCONFROOT}/vmchooser/vmchooser.conf ] && \ - . ${PLUGINCONFROOT}/vmchooser/vmchooser.conf - -################################################################################ -### Functions used throughout the script -################################################################################ - -# function to write to stdout and logfile -LOGFILE=${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log -writelog () { - # write to stdout - echo -e "$1" - # log into file - echo -e "$1" >> ${LOGFILE} - # log into share dir, so that log is available in vm as well - echo -e "$1" >> ${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log -} - -# remove config dirs when exit -cleanexit () { - if echo "${RMDIRS}" 2>/dev/null | grep -q ${vmgrid_virt}; then - writelog "${vmgrid_virt} exited. Cleanning up... \c" - rm -rf ${RMDIRS} >/dev/null 2>&1 - writelog "done" - fi - - exit "$1" -} - -################################################################################ -### Get XML file and dir -################################################################################ - -# check if mem, nice or graphical mode set -headless=1 -unice=19 -while [ $# -gt 0 ]; do - case "$1" in - -h|--help) - echo -e "Usage: run-vmgrid.sh [-g] [--mem <memory size in MB>] \c" - echo -e "[--nice <nice level>] [/path/]filename[.xml]" - exit - ;; - -g) - headless=0 - ;; - --mem) - # get a result which can be divided through 4 - if echo $2 | grep -qE \ - '^[2-9][0-9][0-9]$|^[1-9][0-9][0-9][0-9]$|^1[0-9][0-9][0-9][0-9]$'; - then - forcemem=$(expr $2 / 4 \* 4) - else - echo "memory $2 not supported (200-19999)!" - exit 1 - fi - shift - ;; - --nice) - # set nice level - if echo $2 | grep -qE '^-[1-9]$|-1[0-9]$|^-20$|^[0-9]$|^1[0-9]$'; then - unice=$2 - else - echo "nice level $2 does not exist!" - exit 1 - fi - shift - ;; - *) - xmlfile=$@ - break - ;; - esac - shift -done - -# absolute or relative path? -if ls ${xmlfile} 2>/dev/null | grep '/' >/dev/null 2>&1; then - xmlpath=$(dirname ${xmlfile}) - xmlfile=$(basename ${xmlfile}) -else - xmlpath=${vmgrid_xmlpath} -fi -# full path -xmlfile="${xmlpath}/${xmlfile%.xml}.xml" - -################################################################################ -### Sanity checks -################################################################################ - -# test if the xml file is valid -if ! [ -r "${xmlfile}" ]; then - writelog "${xmlfile} not a readable XML file!" - run-vmgrid.sh -h & - exit 1 -fi - -# start to log, create shrare log dir -mkdir -m 1777 -p ${vmgrid_rwmnt}/logs -echo "Starting to log at $(date)" \ - >${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log - -# test how many instances running -runningvms=$(ps aux | grep "run-vmgrid.sh " | grep -v grep | wc -l) -# 2 steps, /w only one is seems not to work -runningvms=$(expr ${runningvms} - 1) -# if Xen use different method -if [ "${vmgrid_virt}" = "xen" ]; then - runningvms=$(xm list 2>/dev/null | grep -vE "Domain-0|Name.*ID" | wc -l) - runningvms=$(expr ${runningvms} + 1) -fi -# check value -if [ ${runningvms} -le 0 ]; then - writelog "Error in value: Running VMs: ${runningvms}. Exit!" - exit 1 -fi -# check if vmchooser plugin installed -if [ -n "${vmchooser_active}" ] && [ ${runningvms} -gt 1 ]; then - # only allow one instance of vmgrid - writelog "Already 1 VMs running and vmchooser plugin is active." - writelog "Can't start ${xmlfile}, exiting!" - exit 1 -# else allow max. 4 instances -elif [ ${runningvms} -gt 4 ]; then - writelog "Already 4 VMs running, exiting!" - exit 1 -fi -VM_ID="0${runningvms}" - -# test if XML file -if ! grep '<?xml' "${xmlfile}" >/dev/null 2>&1; then - writelog \ - "Submitted configuration file ${xmlfile} seems to have wrong XML format" - exit 1 -fi - -################################################################################ -### Logo for console -################################################################################ - -cat <<EOL - __ __ - .----.--.--.-----.___.--.--.--------.-----.----.|__|.--| | - | _| | | |___| | | | _ | _|| || _ | - |__| |_____|__|__| \___/|__|__|__|___ |__| |__||_____| - |_____| - OpenSLX virtual machine environment preparation script ... - -EOL - -################################################################################ -### Read needed variables from XML file -################################################################################ - -writelog "Starting configuration..." -writelog "\tVM-ID:\t\t\t${VM_ID}" -writelog "\tLogfile:\t\t${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log" -writelog "\t/tmp info:\t\t$(df -h | grep " /tmp$" | awk '{print $2}') \c" -writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')" -writelog "\tVM XML dir:\t\t$(dirname ${xmlfile})" -writelog "\tXML file:\t\t${xmlfile}" -writelog "VM config:" - -# name of the virt image or dir -imgname=$(grep -io '<image_name param=.*"' ${xmlfile} \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }') - -# image mode -imgmode=$(grep -io '<image_mode param=.*"' ${xmlfile} \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{ print $2 }') - -# get boot attr -boot=$(grep -io 'boot param=.*"' ${xmlfile} | awk -F '"' '{ print $2 }') -diskless=0 - -# special rw image -if [ "${imgmode}" = "rwimg" ]; then - # maybe you want to use an empty rw imgae? - # define only for writelog, will be set in the plugin include again! - vmpath="{special rw image}" - # add new path for rwimg - imgpath=${vmgrid_rwmnt}/specialrwimages - unset $imgname - mkdir -m 1777 -p ${imgpath} -# diskless boot -elif [ "${boot}" = "n" ] && [ -z "${imgname}" ]; then - diskless=1 - vmpath="{diskless boot}" -# imagename /w full path -elif echo ${imgname} 2>/dev/null | grep -q '^/' >/dev/null 2>&1; then - imgpath=$(dirname ${imgname}) - imgname=$(basename ${imgname}) - vmpath=${imgpath}/${imgname} -# get path from var -else - imgpath=${vmgrid_imgpath} - vmpath=${imgpath}/${imgname} -fi - -# check if virtual machine container file exists, only if not rwimg -if ! [ -e "${vmpath}" ] && [ "${imgmode}" != "rwimg" ] && [ ${diskless} -eq 0 ]; -then - writelog "Virtual machine image or directory ${vmpath} not found!" - exit 1 -fi - -# name of the virt machine, sed because of Windows formatting -vm_name=$(grep -o 'short_description param=.*"' ${xmlfile} \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') -# if ${vm_name} not defined use ${xmlfile} -vm_name=${vm_name:-${xmlfile%.xml}} - -# define vm_shortname since vm_name can be very long -vm_shortname=$(basename ${xmlfile%.xml} | sed -e "s, ,-,g") - -# vm_name = displayname, define for old scripts -displayname=${vm_name} - -[ "${imgmode}" != "rwimg" ] && [ ${diskless} -eq 0 ] \ - && writelog "\tVM Image dir:\t\t${imgpath}" -writelog "\tVM file/dir:\t\t$vmpath" - -# is there an additional configuration provided? -additional_config=$(grep -o 'additional_config param=.*"' ${xmlfile} \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') - -# image is for the following virtual machine -xmlvirt=$(grep -o 'virtualmachine param=.*"' ${xmlfile} \ - | sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') - -# make a guess from the filename extension if ${xmlvirt} is empty -# (not set within the XML file) -# TODO: implement possibility to submit own configuration files -if [ -z "${xmlvirt}" ] && [ -n "${additional_config}" ]; then - writelog "No virtual machine parameter defined in ${xmlfile}" - writelog "Trying to guess VM...\c" - case "$(cat ${additional_config} | tr [A-Z] [a-z])" in - *config.version*|*virtualhw.version*|*independent-nonpersistent*|*vmdk*) - xmlvirt="vmware" - ;; - *innotek*|*virtualbox*) - xmlvirt="virtualbox" - ;; - *qemu*|*kvm*) - xmlvirt="qemukvm" - ;; - *) - xmlvirt="none" - ;; - esac -elif [ -z "${xmlvirt}" ]; then - case "$(echo ${imgname##*.} | tr [A-Z] [a-z])" in - vmdk) - xmlvirt="vmware" - ;; - vbox) - xmlvirt="virtualbox" - ;; - img|qcow*) - xmlvirt="qemukvm" - ;; - *) - xmlvirt="none" - ;; - esac - writelog "result:\t${xmlvirt}" -fi - -# check for virt -if [ "${vmgrid_virt}" != "${xmlvirt}" ]; then - writelog "The virtual machine specified in ${xmlfile}" - writelog "does not match the virtualization used here (${vmgrid_virt})" - exit 1 -fi - -# definition of the client system -vmostype=$(grep -io '<os param=.*"' ${xmlfile} | awk -F '"' '{ print $2 }' \ - | tr [A-Z] [a-z]) - -# definition of the networking the client system is connected to -network_kind=$(grep -io '<network param=.*"' ${xmlfile} \ - | awk -F '"' '{ print $2 }' | tr [A-Z] [a-z]) -network_card=$(grep -io '<netcard param=.*"' ${xmlfile} \ - | awk -F '"' '{ print $2 }'| tr [A-Z] [a-z]) - -# define redirects -redirects=$(grep -ic '<redirect name=.*"' ${xmlfile}) -[ -z "${redirects}" ] && redirects=0 -(( i=1 )) -while [ ${i} -le ${redirects} ]; do - # get only the $i-th line - redirect_name[$i]=$(grep -m ${i} -io '<redirect.*' ${xmlfile} | tail -n 1 \ - | grep -o "name=\".*" | awk -F '"' '{ print $2 }') - redirect_proto[$i]=$(grep -m ${i} -io '<redirect.*' ${xmlfile} | tail -n 1 \ - | grep -o "proto=\".*" | awk -F '"' '{ print $2 }') - redirect_hport[$i]=$(grep -m ${i} -io '<redirect.*' ${xmlfile} | tail -n 1 \ - | grep -o "hostport=\".*" | awk -F '"' '{ print $2 }') - redirect_gport[$i]=$(grep -m ${i} -io '<redirect.*' ${xmlfile} | tail -n 1 \ - | grep -o "guestport=\".*" | awk -F '"' '{ print $2 }') - (( i=$i+1 )) -done - -writelog "\tVirtualization:\t\t$xmlvirt" -writelog "\tVM name:\t\t$vm_name" -writelog "\tVM short name:\t\t$vm_shortname" - -############################################################################### -### Declaration of default variables -############################################################################### - -# make sure cpu_cores is not empty -cpu_cores=${cpu_cores:-"1"} -#vmgrid::maxvcpus -#vmgrid::minvcpus -# check for CPU virtualization flags -#vmgrid::vt - -# total amount of memory defined in stage 3 -permem=60 -# get a result which can be divided through 4 -mem=$(expr ${totalmem} / 100 \* ${permem} / 4 \* 4) -#vmgrid::maxmem -#vmgrid::minmem - -# configuring ethernet mac address: first 3 bytes are fixed (00:50:56) -# 4th byte is the VM-ID -# last two bytes are taken from the bridge of the host -# define one MAC per guest -macguestpart="00:50:56:${VM_ID}" -machostpart=$(echo ${hostmacaddr} | awk -F ":" '{print $(NF-1)":"$NF}') -macaddr=$(echo "${macguestpart}:${machostpart}" | tr [a-z] [A-Z]) - -# ide is expected default, test for the virtual disk image type should -# be done while creating the runscripts ... -# TODO: cdrom / floppy? -ide="TRUE" -scsi="FALSE" -hddrv="ide" -cdrom0="FALSE" -audio="false" -remotedesktopport="590${VM_ID}" - -# add rw share -sharepath="${vmgrid_rwmnt}/folders/${vm_shortname}" -mkdir -p ${sharepath} -chmod -f 1777 "${vmgrid_rwmnt}/folders" -sharename="share" - -# set hostname: using original hostname and adding string -hostname="vmgrid${VM_ID}-$(hostname)" - -writelog "\tVM Hostname:\t\t$hostname" - -################################################################################ -### Setup the rest of the environment and run the configured vm -################################################################################ - -# Copy guest configuration (with added information) config.xml to be accessed -# via virtual floppy -# TODO: virt-floppy needed? - -# Get all virtual machine specific stuff from the respective include file -if [ -e ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include ] ; then - writelog "Starting ${vmgrid_virt} specific part ..." - self=${vmgrid_virt} - . ${PLUGINCONFROOT}/${vmgrid_virt}/run-virt.include -else - writelog "Failed because of missing ${vmgrid_virt} plugin" - exit 1 -fi - -# start graphical mode -if [ ${headless} -eq 0 ]; then - if [ -z "${VIRTCMD}" ]; then - writelog "Grapical mode not available, exiting!" - cleanexit 1 - fi - writelog "Starting ${vmgrid_virt} in graphical mode /w nice level ${unice}..." - # start /w low nice level - nice -n ${unice} ${VIRTCMD} ${VIRTCMDOPTS} 2>/dev/null -# start headless -elif [ -n "${VIRTCMDHL}" ]; then - writelog "Starting ${vmgrid_virt} in headless mode /w nice level ${unice}..." - # start /w low nice level - nice -n ${unice} ${VIRTCMDHL} ${VIRTCMDOPTSHL} 2>/dev/null -else - writelog "${vmgrid_virt}: No headless mode defined, exiting!" - cleanexit 1 -fi - -# postrun for scripts after virtualization finishes -if [ -n "${POSTRUN}" ]; then - eval ${POSTRUN} >/dev/null 2>&1 -fi - -cleanexit 0 -exit 0 diff --git a/os-plugins/plugins/vmgrid/files/vmgrid b/os-plugins/plugins/vmgrid/files/vmgrid deleted file mode 100644 index 2bb91481..00000000 --- a/os-plugins/plugins/vmgrid/files/vmgrid +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/bash -# ----------------------------------------------------------------------------- -# Copyright (c) 2010 - RZ Uni FR -# Copyright (c) 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/ -# ----------------------------------------------------------------------------- -# vmgrid -# - Script for autostarts defined in vmgrid::startvms -################################################################################ - -# include default directories -. /etc/opt/openslx/openslx.conf - -################################################################################ -### Manual Start -################################################################################ - -if [ -n "$1" ]; then - if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then - echo -e "Usage: vmgrid [[-g] [--mem <memory size in MB>] \c" - echo -e "[--nice <nice level>] [/path/]filename[.xml]]" - exit 0 - else - echo "Starting run-vmgrid.sh with options '$@'" - run-vmgrid.sh $@ 2>/dev/null - exit - fi -fi - -################################################################################ -### Define default dirs / get configs -################################################################################ - -PLUGINCONFROOT=${OPENSLX_DEFAULT_CONFDIR}/plugins -PLUGINCONFDIR=${PLUGINCONFROOT}/vmgrid -RWSHARE=/var/opt/openslx/plugins/vmgrid/share -# include general configuration from vmgrid -[ -f ${PLUGINCONFDIR}/vmgrid.conf ] && \ - . ${PLUGINCONFDIR}/vmgrid.conf -# load general virtualization information -[ -f ${PLUGINCONFROOT}/virtualization/virtualization.conf ] && \ - . ${PLUGINCONFROOT}/virtualization/virtualization.conf - -################################################################################ -### Functions used throughout the script -################################################################################ - -# function to write to stdout and logfile -writelog () { - # write to stdout - echo -e "$1" - # log into file - echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/vmgrid.${USER}.$$.log - # log into share dir, so that log is available in vm as well - echo -e "$1" >> ${vmgrid_rwmnt}/logs/vmgrid.${USER}.$$.log -} - -################################################################################ -### Configure VMs for autostart and set RAM -################################################################################ - -# start to log, create share log dir -mkdir -m 1777 -p ${vmgrid_rwmnt}/logs -mkdir -m 1777 -p /tmp/vmgrid -mkdir -p /tmp/vmgrid/${USER} -echo "Starting to log at $(date)" \ - >${vmgrid_rwmnt}/logs/vmgrid.${USER}.$$.log - -if [ -z "${hostratio}" ]; then - writelog "There has been an error in the memory configuration in stage 3" - writelog "Please check your memory ratio settings, exiting!" - exit 1 -fi - -if [ -z "${hostratio}" ]; then - writelog "There has been an error in the memory configuration in stage 3" - writelog "Please check your memory ratio settings, exiting!" - exit 1 -fi - -# remove blanks -vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s, *,,g") -vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s, *,,g") - -# hostmem, mainvirt from virtualization plugin -# ratio minus other vms and host -restratio=$(expr 100 - ${hostratio} - ${mainvirtratio}) - -# hostmem, totalmem, mainvirtmem from virtualization plugin -# calculate freemem -freemem=$(expr ${totalmem} - ${hostmem} - ${mainvirtmem} 2>/dev/null) -if [ ${freemem} -lt 512 2>/dev/null ]; then - writelog "Not enough free RAM for this plugin, free: ${freemem} MB" - exit 1 -fi - -# get clients mem ratio -vmsumratios=0 -for i in {1..4}; do - vm[$i]=$(echo ${vmgrid_startvms} | awk -F ',' '{print $1}') - # remove ${vm[$i]} from list because of '{print $1}' - vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s,${vm[$i]}\,*,,") - vmratio[$i]=$(echo ${vmgrid_memratio} | awk -F ',' '{print $1}') - # remove ${vmratio[$i]} from list because of '{print $1}' - vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s/${vmratio[$i]},*//") - vmsumratios=$(expr ${vmsumratios} + ${vmratio[$i]} 2>/dev/null) -done - -for i in {1..4}; do - # calculate VMs mem: mem = $freemem * $vmratio/100 * 100/$restratio - # multiple of 4 - vmmem[$i]=$(expr ${freemem} \* ${vmratio[$i]} / ${restratio} / 4 \* 4 \ - 2>/dev/null) - if [ -n "${vm[$i]}" ] && [ ${vmmem[$i]} -lt 512 2>/dev/null ]; then - writelog "Not enough free RAM for ${vm[$i]} (min. 512 MB), \c" - writelog "free: ${vmmem[$i]} MB" - unset vm[$i] - fi -done - -################################################################################ -### Start the VMs -################################################################################ - -# start vms -for i in {1..4}; do - if [ -n "${vm[$i]}" ]; then - alreadyrunning=$(ps aux | grep run-vmgrid.sh | grep -v grep \ - | grep "${vm[$i]}" | wc -l) - # if Xen use different method - if [ "${vmgrid_virt}" = "xen" ]; then - alreadyrunning=$(xm list 2>/dev/null | grep -vE "Domain-0|Name.*ID" \ - | grep "${vm[$i]}-0.$" | wc -l) - fi - if [ ${alreadyrunning} -gt 0 2>/dev/null ]; then - writelog "${vm[$i]} already running, skipping!" - else - writelog "Starting ${vm[$i]} via run-vmgrid.sh with ${vmmem[$i]} MB RAM" - run-vmgrid.sh --mem ${vmmem[$i]} ${vm[$i]} 2>/dev/null & - echo $! > /tmp/vmgrid/${USER}/vmgrid.pids - # wait 10 secs for the next vm to start - sleep 10 - fi - fi -done - -exit 0 diff --git a/os-plugins/plugins/vmgrid/init-hooks/80-after-plugins/virtualization.sh b/os-plugins/plugins/vmgrid/init-hooks/80-after-plugins/virtualization.sh deleted file mode 100644 index 73a65ac5..00000000 --- a/os-plugins/plugins/vmgrid/init-hooks/80-after-plugins/virtualization.sh +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright (c) 2010 - RZ Uni Freiburg -# Copyright (c) 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 -# -# script is included from init via the "." load function - thus it has all -# variables and functions available - -# virtual virtualization plugin -# make sure that this file is the same in vmgrid and vmchooser plugin! - -# include default directories -. /etc/openslx.conf - -CONFFILEVMCHOOSER="/initramfs/plugin-conf/vmchooser.conf" -CONFFILEVMGRID="/initramfs/plugin-conf/vmgrid.conf" -PLUGINCONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualization - -# check if plugins available -active=0 -[ -f ${CONFFILEVMCHOOSER} ] && . ${CONFFILEVMCHOOSER} -[ "x${vmchooser_active}" = "x1" ] && active=1 -[ -f ${CONFFILEVMGRID} ] && . ${CONFFILEVMGRID} -[ "x${vmgrid_active}" = "x1" ] && active=1 - -[ $DEBUGLEVEL -gt 0 ] \ - && echo -e "Executing the 'virtualization' plugin ... \c" - -if [ ${active} -ne 0 ] ; then - - # load general configuration - . /etc/initramfs-setup - # include functions - . /etc/functions - - testmkd ${PLUGINCONFDIR} - - # check if vmgrid active and change free mem - totalmem=$(expr $(grep -i "memtotal" /proc/meminfo \ - | awk '{print $2}') / 1024) - echo "totalmem=${totalmem}" >> ${PLUGINCONFDIR}/virtualization.conf - - if [ "x${vmgrid_active}" = "x1" ]; then - - totalmemtest=$(expr $(echo ${vmgrid_memratio} \ - | awk -F ',' '{print $1" + "$2" + "$3" + "$4" + "$5" + "$6}')) - - # not more than 100% memory assigned - if [ ${totalmemtest} -le 100 2>/dev/null ]; then - - # host mem - hostratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $6}') - hostmem=$(expr ${totalmem} \* ${hostratio} / 100 2>/dev/null) - if [ ${hostmem} -lt 256 2>/dev/null ]; then - # min. 256 MB for host - hostmem=256 - fi - - # main vm mem (vmchooser) - if [ "x${vmchooser_active}" = "x1" ]; then - mainvirtratio=$(echo ${vmgrid_memratio} | awk -F ',' '{print $5}') - mainvirtmem=$(expr ${totalmem} \* ${mainvirtratio} / 100 2>/dev/null) - if [ ${mainvirtmem} -lt 512 2>/dev/null ]; then - # min. 512 for vmchooser - mainvirtmem=512 - fi - else - mainvirtratio=0 - mainvirtmem=0 - fi - - cat << EOF >> ${PLUGINCONFDIR}/virtualization.conf -hostratio=${hostratio} -hostmem=${hostmem} -mainvirtratio=${mainvirtratio} -mainvirtmem=${mainvirtmem} -EOF - - fi - fi - - # cpu cores - CPU_CORES=$(grep 'processor.*:' /proc/cpuinfo | wc -l) - if [ "${CPU_CORES}" -gt "1" 2>/dev/null ]; then - echo "cpu_cores=${CPU_CORES}" \ - >> ${PLUGINCONFDIR}/virtualization.conf - else - echo 'cpu_cores=1' >> ${PLUGINCONFDIR}/virtualization.conf - fi - - # arch - echo "host_arch=$(uname -m)" >> ${PLUGINCONFDIR}/virtualization.conf - - # VT enabled cpu? - if grep -q ^flags.*\\\<vmx\\\> /proc/cpuinfo; then - echo "vtflag=1" >> ${PLUGINCONFDIR}/virtualization.conf - echo 'kvm_module="kvm_intel"' >> ${PLUGINCONFDIR}/virtualization.conf - elif grep -q ^flags.*\\\<svm\\\> /proc/cpuinfo; then - echo "vtflag=1" >> ${PLUGINCONFDIR}/virtualization.conf - echo 'kvm_module="kvm_amd"' >> ${PLUGINCONFDIR}/virtualization.conf - else - echo "vtflag=0" >> ${PLUGINCONFDIR}/virtualization.conf - fi - - # write mac - echo "hostmacaddr=${macaddr}" >> ${PLUGINCONFDIR}/virtualization.conf - # ip addr - echo "hostip=${clientip}" >> ${PLUGINCONFDIR}/virtualization.conf - # hostname - echo "hostname=${host_name}" >> ${PLUGINCONFDIR}/virtualization.conf - - # get further hw information - waitfor /etc/hwinfo.cdrom - j=0 - for i in $(cat /etc/hwinfo.cdrom); do - echo "cdrom_$j=$i" >> ${PLUGINCONFDIR}/virtualization.conf - j=$(expr $j + 1) - done - - waitfor /etc/hwinfo.floppy - j=0 - for i in $(cat /etc/hwinfo.floppy); do - echo "floppy_$j=$i" >> ${PLUGINCONFDIR}/virtualization.conf - j=$(expr $j + 1) - done - - # copy host information to rwshare of vmgrid plugin - if [ "x${vmgrid_active}" = "x1" ]; then - cp ${PLUGINCONFDIR}/virtualization.conf ${vmgrid_rwmnt}/host.conf - fi - - # finished ... - [ $DEBUGLEVEL -gt 0 ] \ - && echo "ok" -else - [ $DEBUGLEVEL -gt 0 ] \ - && echo "failed" -fi |