#!/bin/bash # # Copyrights : CNRS # Author : Oleg Lodygensky # Acknowledgment : XtremWeb-HEP is based on XtremWeb 1.8.0 by inria : http://www.xtremweb.net/ # Web : http://www.xtremweb-hep.org # # This file is part of XtremWeb-HEP. # # XtremWeb-HEP is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # XtremWeb-HEP is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with XtremWeb-HEP. If not, see . # # # ****************************************************************** # File : xwcontext_prologue # Date : August 31st, 2012 # Author : Oleg Lodygensky # # OS : Linux # Arch : noarch # # Purpose : this brings up/down contextualization # contextualization disk is mounted on /mnt/xwcontext # this is HEPiX compliant contextualisation epilog # this is based on http://grid.desy.de/vm/hepix/vwg/doc/html/start/contextualisation-principles-cern-status.shtml # # See : ubuntu_createlivecd.sh; sl5_createlivecd.sh; sl6_createlivecd.sh; sl6_createlivecd.ks; xwcontext_epilogue # # Mount points: # - /mnt/xwcontext is the mount point of /dev/sda1, if provided # - /mnt/app is the mount point of /dev/sdb1, if provided # - /mnt/input is the mount point of /dev/sdc1, if provided # - /mnt/results is the mount point of /dev/sdd1, if provided # - if /dev/sdd1 is not provided, a new 10Gb ext3 partition # is created on /dev/sdd1 and mounted on /mnt/results # # Changelog: # $Log: vmcontext,v $ # Revision 0.1 2012/08/30 Oleg Lodygensky # Initial version # Revision 0.2 2014/01/10 Oleg Lodygensky # introducing application disk : /dev/sda1 mounted on /mnt/app # application disk is ignored if /dev/sda1 does not exist # introducing input files disk : /dev/sdb1 mounted on /mnt/input # input files disk is ignored if /dev/sdb1 does not exist # introducing results disk : /dev/sdc mounted on /mnt/results (this replaces /mnt/xwscratch) # results disk is created if /dev/sdc1 does not exist # Revision 0.3 2014/07/11 Oleg Lodygensky # contextualization, app and input disk may be CD # # chkconfig: 2345 2 99 # description: XWHEP contextualization prolog LOGFILE=/var/log/xwcontext_prologue.log MNTCONTEXT=/mnt/xwcontext MNTAPP=/mnt/app MNTINPUT=/mnt/input MNTRESULTS=/mnt/results PROLOG=$MNTCONTEXT/prolog.sh INITSH=$MNTCONTEXT/init.sh CONTEXTSH=$MNTCONTEXT/context.sh # ****************************************************************** # next_dev() # @param $1 is the current device # @return the next device # ****************************************************************** next_dev() { RETVAL="" case "$1" in /dev/hda) RETVAL=/dev/hdb ;; /dev/hdb) RETVAL=/dev/hdc ;; /dev/hdc) RETVAL=/dev/hdd ;; /dev/sda) RETVAL=/dev/sdb ;; /dev/sdb) RETVAL=/dev/sdc ;; /dev/sdc) RETVAL=/dev/sdd ;; /dev/vda) RETVAL=/dev/vdb ;; /dev/vdb) RETVAL=/dev/vdc ;; /dev/vdc) RETVAL=/dev/vdd ;; /dev/xvda) RETVAL=/dev/xvdb ;; /dev/xvdb) RETVAL=/dev/xvdc ;; /dev/xvdc) RETVAL=/dev/xvdd ;; /dev/sr) RETVAL=/dev/sr ;; *) ;; esac echo $RETVAL } # ****************************************************************** # start() # ****************************************************************** start() { # # randomize passwords # PASSWD=`dd if=/dev/urandom count=50|md5sum` touch $LOGFILE echo -n $"[`date`] XWHEP contextualization prolog" >> $LOGFILE 2>&1 /usr/sbin/groupadd -f vmuser >> $LOGFILE 2>&1 /usr/sbin/useradd -d /home/vmuser -g vmuser -p "$PASSWD" -m -s /bin/bash vmuser >> $LOGFILE 2>&1 # # randomize passwords # # dd if=/dev/urandom count=50|md5sum|passwd --stdin vmuser >> $LOGFILE 2>&1 # dd if=/dev/urandom count=50|md5sum|passwd --stdin root >> $LOGFILE 2>&1 # # contextualization disk # # Ubuntu & Debian HDD # UDEV=/dev/hdb UDISK=${UDEV}1 # # Scientific Linux HDD # SLDEV=/dev/sda SLDISK=${SLDEV}1 # # CD # CDDEV=/dev/sr CDDISK=${CDDEV}1 echo "Looking for context disk in ${UDISK} or ${SLDISK}" >> $LOGFILE 2>&1 if [ -b ${UDISK} ]; then disk=${UDISK} elif [ -b ${SLDISK} ]; then disk=${SLDISK} elif [ -b ${CDDISK} ]; then disk=${CDDISK} else echo "No context disk found." >> $LOGFILE 2>&1 echo [ OK ] return 0; fi echo "Trying to mount context disk $disk" >> $LOGFILE 2>&1 mkdir -p $MNTCONTEXT >> $LOGFILE 2>&1 mount $disk $MNTCONTEXT >> $LOGFILE 2>&1 RETVAL=$? if [ 0 -eq $RETVAL ] ; then /bin/chown -R vmuser:vmuser $MNTCONTEXT >> $LOGFILE 2>&1 if [ -e $PROLOG ]; then echo "Found $PROLOG" >> $LOGFILE 2>&1 chmod +x $PROLOG >> $LOGFILE 2>&1 /bin/su -l vmuser bash -c $PROLOG >> $LOGFILE 2>&1 RETVAL=$? elif [ -e $INITSH ]; then echo "Found $INITSH" >> $LOGFILE 2>&1 chmod +x $INITSH >> $LOGFILE 2>&1 /bin/su -l vmuser bash -c $INITSH >> $LOGFILE 2>&1 RETVAL=$? elif [ -e $CONTEXTSH ]; then echo "Found $CONTEXTSH" >> $LOGFILE 2>&1 chmod +x $CONTEXTSH >> $LOGFILE 2>&1 /bin/su -l vmuser bash -c $CONTEXTSH >> $LOGFILE 2>&1 RETVAL=$? else echo "No contextualization prolog found" >> $LOGFILE 2>&1 RETVAL=0 fi else [ 0 -eq $RETVAL ] || echo "Cannot mount contextualization disk from ${disk}" >> $LOGFILE 2>&1 fi # # mount application disk, if any # SLDEV=`next_dev $SLDEV` SLDISK=${SLDEV}1 UDEV=`next_dev $UDEV` UDISK=${UDEV}1 echo "Looking for application disk in ${UDISK} or ${SLDISK}" >> $LOGFILE 2>&1 disk="" if [ -b ${SLDISK} ] ; then disk=${SLDISK} elif [ -b ${UDISK} ] ; then disk=${UDISK} fi if [ -b "$disk" ] ; then /bin/mkdir -p $MNTAPP >> $LOGFILE 2>&1 /bin/mount ${disk} $MNTAPP >> $LOGFILE 2>&1 RETVAL=$? [ 0 -eq $RETVAL ] || echo "Cannot mount application disk from ${disk}" >> $LOGFILE 2>&1 /bin/chown -R vmuser:vmuser $MNTAPP >> $LOGFILE 2>&1 SLDEV=`next_dev $SLDEV` SLDISK=${SLDEV}1 UDEV=`next_dev $UDEV` UDISK=${UDEV}1 else echo "No application disk found" >> $LOGFILE 2>&1 RETVAL=0 fi # # mount input files disk, if any # echo "Looking for input disk in ${UDISK} or ${SLDISK}" >> $LOGFILE 2>&1 disk="" if [ -b ${SLDISK} ] ; then disk=${SLDISK} elif [ -b ${UDISK} ] ; then disk=${UDISK} fi if [ -b "$disk" ] ; then /bin/mkdir -p $MNTINPUT >> $LOGFILE 2>&1 /bin/mount ${disk} $MNTINPUT >> $LOGFILE 2>&1 RETVAL=$? [ 0 -eq $RETVAL ] || echo "Cannot mount input files disk from ${disk}" >> $LOGFILE 2>&1 /bin/chown -R vmuser:vmuser $MNTINPUT >> $LOGFILE 2>&1 SLDEV=`next_dev $SLDEV` SLDISK=${SLDEV}1 UDEV=`next_dev $UDEV` UDISK=${UDEV}1 else echo "No input disk found" >> $LOGFILE 2>&1 RETVAL=0 fi # # use (if available) or create a result disk # and mount result disk # echo "Looking for result disk in ${UDISK} or ${SLDISK}" >> $LOGFILE 2>&1 if [ -b ${SLDEV} ] ; then device=${SLDEV} elif [ -b ${UDEV} ] ; then device=${UDEV} fi disk="" if [ -b "$device" ] ; then disk=${device}1 else echo "Can't init result disk" >> $LOGFILE 2>&1 return fi /bin/mkdir -p $MNTRESULTS >> $LOGFILE 2>&1 [ 0 -eq $? ] || echo "Cannot mdkir $MNTRESULTS ?!?!" >> $LOGFILE 2>&1 if [ ! -b ${disk} ] ; then /sbin/fdisk ${device} << FDISKEOF n p 1 w FDISKEOF /sbin/mkfs.ext3 ${disk} >> $LOGFILE 2>&1 [ 0 -eq $? ] || echo "Cannot mkfs ${disk}" >> $LOGFILE 2>&1 fi /bin/mount ${disk} ${MNTRESULTS} >> $LOGFILE 2>&1 RETVAL=$? [ 0 -eq $RETVAL ] || echo "Cannot mount ${disk} to $MNTRESULTS" >> $LOGFILE 2>&1 /bin/chown -R vmuser:vmuser $MNTRESULTS >> $LOGFILE 2>&1 # # configure iptables # if [ -f /root/iptables_rules.sh ] ; then chmod +x /root/iptables_rules.sh >> $LOGFILE 2>&1 /root/iptables_rules.sh >> $LOGFILE 2>&1 RETVAL=$? else echo "No iptables rules : LAN access allowed" >> $LOGFILE 2>&1 fi # # start XWHEP server, if installed # [ -x /etc/init.d/xtremweb.server ] && /etc/init.d/xtremweb.server restart >> $LOGFILE 2>&1 # # start XWHEP worker, if installed # [ -x /etc/init.d/xtremweb.worker ] && /etc/init.d/xtremweb.worker restart >> $LOGFILE 2>&1 if [ 0 -eq $RETVAL ]; then echo "[ OK ]" else echo "[ FAILED ]" fi echo "RETVAL=$RETVAL" >> $LOGFILE 2>&1 return $RETVAL } # ****************************************************************** # stop() # ****************************************************************** stop() { echo "xwcontext_prologue does nothing" >> $LOGFILE 2>&1 echo "[ OK ]" return 0 } # ****************************************************************** # main # ****************************************************************** case "$1" in start) # [ $running -eq 0 ] && exit 0 start RETVAL=$? ;; stop) # [ $running -eq 0 ] || exit 0 stop RETVAL=$? ;; status) echo "This does nothing" RETVAL=0 ;; *) echo $"Usage: $0 {start|stop}" RETVAL=2 esac exit $RETVAL