From 3e8723555bb0a1be3e27330275c4d6b2da9945df Mon Sep 17 00:00:00 2001 From: Michael Janczyk Date: Fri, 26 Mar 2010 22:09:31 +0100 Subject: NAT TFTP boot with VBox. rwimg support added --- .../virtualbox/OpenSLX/OSPlugin/virtualbox.pm | 52 ++++++++++-- os-plugins/plugins/virtualbox/XX_virtualbox.sh | 5 +- os-plugins/plugins/virtualbox/files/VirtualBox.xml | 41 --------- .../plugins/virtualbox/files/machine.include | 4 +- .../plugins/virtualbox/files/run-virt.include | 98 +++++++++++++--------- .../plugins/virtualbox/files/virtualbox.include | 4 +- .../plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm | 14 ++-- os-plugins/plugins/vmgrid/XX_vmgrid.sh | 29 +++---- os-plugins/plugins/vmgrid/files/run-vmgrid.sh | 54 +++++++----- os-plugins/plugins/vmgrid/files/vmgrid | 10 ++- 10 files changed, 170 insertions(+), 141 deletions(-) delete mode 100644 os-plugins/plugins/virtualbox/files/VirtualBox.xml diff --git a/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm b/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm index be7f2cb5..900d08a9 100644 --- a/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm +++ b/os-plugins/plugins/virtualbox/OpenSLX/OSPlugin/virtualbox.pm @@ -45,7 +45,8 @@ sub getInfo stateless client. End-of-Here precedence => 70, - required => [ qw( desktop ) ], + # headless mode does not require a desktop! + #required => [ qw( desktop ) ], }; } @@ -67,7 +68,7 @@ sub getAttrInfo should the 'virtualbox'-plugin be executed during boot? End-of-Here content_regex => qr{^(0|1)$}, - content_descr => '1 means active - 0 means inactive', + content_descr => '1 for active, 0 for inactive', default => '1', }, # attribute 'imagesrc' defines where we can find virtualbox images @@ -77,10 +78,9 @@ sub getAttrInfo description => unshiftHereDoc(<<' End-of-Here'), Where do we store our virtualbox images? NFS? Filesystem? End-of-Here - #TODO: check if the input is valid - #content_regex => qr{^(0|1)$}, - content_descr => 'Allowed values: local path or URI', - default => '', + content_regex => qr{^(/|nfs://)}, + content_descr => 'local path or URI or "-" (unset)', + default => undef, }, # attribute 'bridge' defines if bridged network mode should be # switched on @@ -92,10 +92,46 @@ sub getAttrInfo 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', + content_descr => '0 or 1', default => '1', }, - + # attribute 'mem' defines if memory should be forced + 'virtualbox::mem' => { + applies_to_systems => 1, + applies_to_clients => 1, + description => unshiftHereDoc(<<' End-of-Here'), + Do you want to force a ralative amount of RAM? + (Not implemented right now!) + End-of-Here + content_regex => qr{^(\d\d??)$}, + content_descr => 'Between 0 - 99', + default => undef, + }, + # attribute 'kvm' defines if KVM modules should be forced + 'virtualbox::kvm' => { + applies_to_systems => 1, + applies_to_clients => 1, + description => unshiftHereDoc(<<' End-of-Here'), + Do you want to force the usage of KVM modules where applicable? + (Not implemented right now!) + End-of-Here + content_regex => qr{^(0|1)$}, + content_descr => '0 or 1', + default => undef, + }, + # attribute 'tftpdir' defines TFTP dir for network boots /w NAT + 'virtualbox::tftpdir' => { + applies_to_systems => 1, + applies_to_clients => 1, + description => unshiftHereDoc(<<' End-of-Here'), + Do you want to define a stage 4 TFTP dir for netwoork boots when + using NAT? + Hint: Mount your TFTP ro via NFS to a local dir + End-of-Here + content_regex => qr{^(/)}, + content_descr => 'local path or "-" (unset)', + default => undef, + }, }; } diff --git a/os-plugins/plugins/virtualbox/XX_virtualbox.sh b/os-plugins/plugins/virtualbox/XX_virtualbox.sh index 4599b197..07e58428 100644 --- a/os-plugins/plugins/virtualbox/XX_virtualbox.sh +++ b/os-plugins/plugins/virtualbox/XX_virtualbox.sh @@ -30,8 +30,9 @@ if [ -e ${CONFFILE} ]; then if [ $virtualbox_active -ne 0 2>/dev/null ]; then [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'virtualbox' os-plugin ..."; + # load general configuration - . /initramfs/machine-setup + . /etc/initramfs-setup # get source of virtualbox image server (get type, server and path) if strinstr "/" "${virtualbox_imagesrc}" ; then @@ -55,7 +56,7 @@ if [ -e ${CONFFILE} ]; then cp ${PLUGINDIR}/*.include ${PLUGINCONFDIR} # copy ${CONFFILE} to ${PLUGINCONFDIR} just in case cp ${CONFFILE} ${PLUGINCONFDIR} - + # # TODO: create rawdisk if requested # # create raw disk # for part in $(grep -qE " 44 | 45 " /etc/disk.partition); do diff --git a/os-plugins/plugins/virtualbox/files/VirtualBox.xml b/os-plugins/plugins/virtualbox/files/VirtualBox.xml deleted file mode 100644 index d9a36795..00000000 --- a/os-plugins/plugins/virtualbox/files/VirtualBox.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/os-plugins/plugins/virtualbox/files/machine.include b/os-plugins/plugins/virtualbox/files/machine.include index e11f95c5..125e45cd 100644 --- a/os-plugins/plugins/virtualbox/files/machine.include +++ b/os-plugins/plugins/virtualbox/files/machine.include @@ -1,5 +1,5 @@ # Include file (machine template) for run-virt.include of the virtualbox plugin -cat < "${machconfig}" @@ -110,7 +110,7 @@ cat < - + @@ -20,7 +20,7 @@ cat < - + diff --git a/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm b/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm index c3186251..5ee52d0c 100644 --- a/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm +++ b/os-plugins/plugins/vmgrid/OpenSLX/OSPlugin/vmgrid.pm @@ -73,7 +73,7 @@ sub getAttrInfo End-of-Here content_regex => qr{^(vmware|virtualbox|qemukvm|xen)$}, #openvz|vserver - content_descr => 'possible values: vmware, virtualbox, qemukvm, xen', + content_descr => 'vmware, virtualbox, qemukvm, xen', #openvz, vserver default => undef, }, @@ -141,7 +141,7 @@ sub getAttrInfo (only if supported by plugin) End-of-Here content_regex => qr{^(0|1)$}, - content_descr => 'possible values: "0", "1" or "-" (for unset)', + content_descr => '"0", "1" or "-" (for unset)', default => undef, }, 'vmgrid::maxvcpus' => { @@ -153,7 +153,7 @@ sub getAttrInfo (only if supported by plugin) End-of-Here content_regex => qr{^(1|2|4|8|16)$}, - content_descr => 'possible values: 1, 2, 4, 8, 16', + content_descr => '1, 2, 4, 8, 16', default => undef, }, 'vmgrid::minvcpus' => { @@ -165,7 +165,7 @@ sub getAttrInfo (only if supported by plugin) End-of-Here content_regex => qr{^(1|2|4|8|16)$}, - content_descr => 'possible values: 1, 2, 4, 8, 16', + content_descr => '1, 2, 4, 8, 16', default => undef, }, 'vmgrid::memratio' => { @@ -183,7 +183,7 @@ sub getAttrInfo (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 => 'vals: \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::maxram' => { @@ -195,7 +195,7 @@ sub getAttrInfo (only if supported by plugin) End-of-Here content_regex => qr{^(1|2|3|4|5|6|7|8|9)}, - content_descr => 'values can be absolute or relative e.g. 512 or 50%', + content_descr => 'absolute or relative e.g. 512 or 50%', default => undef, }, 'vmgrid::minram' => { @@ -207,7 +207,7 @@ sub getAttrInfo (only if supported by plugin) End-of-Here content_regex => qr{^(1|2|3|4|5|6|7|8|9)}, - content_descr => 'values can be absolute or relative e.g. 512 or 50%', + content_descr => 'absolute or relative e.g. 512 or 50%', default => undef, }, }; diff --git a/os-plugins/plugins/vmgrid/XX_vmgrid.sh b/os-plugins/plugins/vmgrid/XX_vmgrid.sh index 39b8501a..3cac7c12 100644 --- a/os-plugins/plugins/vmgrid/XX_vmgrid.sh +++ b/os-plugins/plugins/vmgrid/XX_vmgrid.sh @@ -15,9 +15,6 @@ # include default directories . /etc/openslx.conf -# include functions -. /etc/functions - CONFFILE="/initramfs/plugin-conf/vmgrid.conf" PLUGINCONFDIR=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/vmgrid VIRTUALIZATIONPLUGIN=/mnt/${OPENSLX_DEFAULT_CONFDIR}/plugins/virtualization @@ -37,7 +34,9 @@ if [ -f $CONFFILE ]; then [ $DEBUGLEVEL -gt 0 ] && echo "executing the 'vmgrid' os-plugin ..." # load general configuration - . /initramfs/machine-setup + . /etc/initramfs-setup + # include functions + . /etc/functions testmkd ${PLUGINCONFDIR} # create folder for virtual virtualization plugin @@ -63,15 +62,14 @@ if [ -f $CONFFILE ]; then fi # create rw share - testmkd 1777 ${RWSHARE}/rwdir + 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 - # use rwdir because we want to use rwimg.vdi as well - testmkd /mnt/media/${id45part}/vmgrid/rwdir - mount --bind -n /mnt/media/${id45part}/vmgrid/rwdir ${RWSHARE}/rwdir \ + testmkd /mnt/media/${id45part}/vmgrid + mount --bind -n /mnt/media/${id45part}/vmgrid ${RWSHARE} \ >>/tmp/vmgrid.log 2>&1 fi # mount nfs rw share @@ -88,20 +86,17 @@ if [ -f $CONFFILE ]; then fsmount ${rwshareprot} ${rwshareserv} ${rwsharepath} ${rwtarget} rw # hostname? host_name=${host_name:=$clientip} - # use rwdir because we want to use rwimg.vdi as well - testmkd ${RWSHAREMNT}/${host_name}/rwdir - mount --bind ${RWSHAREMNT}/${host_name}/rwdir ${RWSHARE}/rwdir \ + testmkd ${RWSHAREMNT}/${host_name} + mount --bind ${RWSHAREMNT}/${host_name} ${RWSHARE} \ >>/tmp/vmgrid.log 2>&1 fi else - # use rwdir because we want to use rwimg.vdi as well - testmkd 1777 /mnt/tmp/vmgrid/rwdir - mount --bind -n /mnt/tmp/vmgrid/rwdir ${RWSHARE}/rwdir \ - >>/tmp/vmgrid.log 2>&1 + testmkd /mnt/tmp/vmgrid + mount --bind -n /mnt/tmp/vmgrid ${RWSHARE} >>/tmp/vmgrid.log 2>&1 fi # chmod so that everybody can write - chmod -R 1777 ${RWSHARE} - echo "vmgrid_rwdir=${RWSHARE#/mnt}" >> ${PLUGINCONFDIR}/vmgrid.conf + chmod 1777 ${RWSHARE} + echo "vmgrid_rwmnt=${RWSHARE#/mnt}" >> ${PLUGINCONFDIR}/vmgrid.conf # TODO: virtual virtualization plugin diff --git a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh index ac1dd8fd..c300e9ce 100644 --- a/os-plugins/plugins/vmgrid/files/run-vmgrid.sh +++ b/os-plugins/plugins/vmgrid/files/run-vmgrid.sh @@ -38,14 +38,13 @@ RWSHARE=/var/opt/openslx/plugins/vmgrid/share ################################################################################ # function to write to stdout and logfile -mkdir -m 1777 -p ${RWSHARE}/var/log/openslx 2>/dev/null writelog () { # write to stdout echo -e "$1" # log into file echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log # log into share dir, so that log is available in vm as well - echo -e "$1" >> ${RWSHARE}/var/log/openslx/run-vmgrid.${USER}.$$.log + echo -e "$1" >> ${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log } ################################################################################ @@ -81,6 +80,11 @@ if ! [ -r "${xmlfile}" ]; then 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) runningvms=$(expr ${runningvms} - 1) @@ -131,8 +135,7 @@ 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) $(df -h | \ - grep " /tmp$" | awk '{print $2}')" +writelog "$(grep "/tmp " /proc/mounts | awk '{print $1" "$2" "$3" "$4}')" writelog "\tVM XML dir:\t\t${vmgrid_xmlpath}" writelog "\tVM Image dir:\t\t${vmgrid_imgpath}" @@ -149,42 +152,47 @@ writelog "VM config:" imgname=$(grep -io '/dev/null | grep '/' >/dev/null 2>&1; then imgpath=$(dirname ${imgname}) imgname=$(basename ${imgname}) + vmpath=${imgpath}/${imgname} else imgpath=${vmgrid_imgpath} + vmpath=${imgpath}/${imgname} fi -# set default v path -vmpath=${imgpath}/${imgname} # check if virtual machine container file exists, only if not rwimg -if ! [ -e $vmpath ] && ! [ "${imgmode}" = "rwimg" ]; then +if ! [ -e "${vmpath}" ] && [ "${imgmode}" != "rwimg" ]; then writelog "\tVirtual machine image or directory ${vmpath} not found!" exit 1 fi writelog "\tVM file/dir:\t\t$vmpath" -# 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 ${imgname} -vm_name=${vm_name:-"${imgname%.*}"} -# define vm_shortname since vm_name can be very long -vm_shortname=$(echo ${imgname%.*} | sed -e "s, ,-,g") -# vm_name = displayname, define for old scripts -displayname=${vm_name} - # is there an additional configuration provided? additional_config=$(grep -o 'additional_config param=.*"' ${xmlfile} | \ sed -e "s/&.*;/; /g" | awk -F '"' '{print $2}') @@ -289,7 +297,9 @@ scsi="FALSE" hddrv="ide" # add rw share -sharepath="${vmgrid_rwdir}/rwdir" +sharepath="${vmgrid_rwmnt}/folders/${vm_shortname}" +mkdir -p ${sharepath} +chmod 1777 "${vmgrid_rwmnt}/folders" sharename="share" # set hostname: using original hostname and adding string @@ -319,7 +329,9 @@ fi # start headless if [ -n "${VIRTCMDHL}" ]; then writelog "Starting ${vmgrid_virt} headless..." - ${VIRTCMDHL} ${VIRTCMDOPTSHL} + # TODO: for testing use VBox + VirtualBox + #${VIRTCMDHL} ${VIRTCMDOPTSHL} else writelog "${vmgrid_virt}: No headless mode defined, exiting!" exit 1 diff --git a/os-plugins/plugins/vmgrid/files/vmgrid b/os-plugins/plugins/vmgrid/files/vmgrid index b8806ab3..b60d8902 100644 --- a/os-plugins/plugins/vmgrid/files/vmgrid +++ b/os-plugins/plugins/vmgrid/files/vmgrid @@ -51,20 +51,24 @@ RWSHARE=/var/opt/openslx/plugins/vmgrid/share ################################################################################ # function to write to stdout and logfile -mkdir -m 1777 -p ${RWSHARE}/var/log/openslx 2>/dev/null writelog () { # write to stdout echo -e "$1" # log into file echo -e "$1" >> ${OPENSLX_DEFAULT_LOGDIR}/run-vmgrid.${USER}.$$.log # log into share dir, so that log is available in vm as well - echo -e "$1" >> ${RWSHARE}/var/log/openslx/run-vmgrid.${USER}.$$.log + echo -e "$1" >> ${vmgrid_rwmnt}/logs/run-vmgrid.${USER}.$$.log } ################################################################################ ### Configure VMs for autostart and set RAM ################################################################################ +# 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 + # remove blanks vmgrid_memratio=$(echo ${vmgrid_memratio} | sed -e "s, *,,g") vmgrid_startvms=$(echo ${vmgrid_startvms} | sed -e "s, *,,g") @@ -109,7 +113,7 @@ 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]},*//") + 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]},*//") -- cgit v1.2.3-55-g7522