mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
248 lines
4.8 KiB
Bash
Executable File
248 lines
4.8 KiB
Bash
Executable File
#/bin/bash
|
|
# $Id: rundomrpre.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/hypervisor/xen/rundomrpre.sh $
|
|
|
|
# set -x
|
|
|
|
mntpath() {
|
|
local vmname=$1
|
|
echo "/images/local/$vmname"
|
|
}
|
|
|
|
mount_local() {
|
|
local vmname=$1
|
|
local disk=$2
|
|
local path=$(mntpath $vmname)
|
|
|
|
mkdir -p ${path}
|
|
mount $disk ${path}
|
|
|
|
return $?
|
|
}
|
|
|
|
umount_local() {
|
|
local vmname=$1
|
|
local path=$(mntpath $vmname)
|
|
|
|
umount $path
|
|
local ret=$?
|
|
|
|
rm -rf $path
|
|
return $ret
|
|
}
|
|
|
|
change_password() {
|
|
local vmname=$1
|
|
local path=$(mntpath $vmname)
|
|
local newpasswd=$2
|
|
|
|
echo $newpasswd | chroot $path passwd --stdin root
|
|
return $?
|
|
}
|
|
|
|
set_ssh_key() {
|
|
local vmname=$1
|
|
local keyfile=$2
|
|
local path=$(mntpath $vmname)
|
|
cat $keyfile > ${path}/root/.ssh/authorized_keys2
|
|
return 0
|
|
}
|
|
|
|
patch() {
|
|
local vmname=$1
|
|
local patchfile=$2
|
|
local path=$(mntpath $vmname)
|
|
|
|
local oldmd5=
|
|
local md5file=${path}/md5sum
|
|
[ -f ${md5file} ] && oldmd5=$(cat ${md5file})
|
|
local newmd5=$(md5sum $patchfile | awk '{print $1}')
|
|
|
|
if [ "$oldmd5" != "$newmd5" ]
|
|
then
|
|
tar xzf $patchfile -C ${path}
|
|
echo ${newmd5} > ${md5file}
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
#
|
|
# To use existing console proxy .zip-based package file
|
|
#
|
|
patch_console_proxy() {
|
|
local vmname=$1
|
|
local patchfile=$2
|
|
local path=$(mntpath $vmname)
|
|
local oldmd5=
|
|
local md5file=${path}/usr/local/vmops/consoleproxy/md5sum
|
|
|
|
[ -f ${md5file} ] && oldmd5=$(cat ${md5file})
|
|
local newmd5=$(md5sum $patchfile | awk '{print $1}')
|
|
|
|
if [ "$oldmd5" != "$newmd5" ]
|
|
then
|
|
echo "All" | unzip $patchfile -d ${path}/usr/local/vmops/consoleproxy
|
|
echo ${newmd5} > ${md5file}
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
consoleproxy_svcs() {
|
|
local vmname=$1
|
|
local path=$(mntpath $vmname)
|
|
|
|
chroot ${path} /sbin/chkconfig vmops on
|
|
chroot ${path} /sbin/chkconfig domr_webserver off
|
|
chroot ${path} /sbin/chkconfig haproxy off ;
|
|
chroot ${path} /sbin/chkconfig dnsmasq off
|
|
chroot ${path} /sbin/chkconfig sshd off
|
|
chroot ${path} /sbin/chkconfig httpd off
|
|
|
|
cp ${path}/etc/sysconfig/iptables-domp ${path}/etc/sysconfig/iptables
|
|
}
|
|
|
|
routing_svcs() {
|
|
local vmname=$1
|
|
local path=$(mntpath $vmname)
|
|
|
|
chroot ${path} /sbin/chkconfig vmops off
|
|
chroot ${path} /sbin/chkconfig domr_webserver on ;
|
|
chroot ${path} /sbin/chkconfig haproxy on ;
|
|
chroot ${path} /sbin/chkconfig dnsmasq on
|
|
chroot ${path} /sbin/chkconfig sshd on
|
|
chroot ${path} /sbin/chkconfig httpd on
|
|
|
|
cp ${path}/etc/sysconfig/iptables-domr ${path}/etc/sysconfig/iptables
|
|
}
|
|
|
|
lflag=
|
|
xflag=
|
|
prerun=
|
|
vmname=
|
|
DISKDIR="/dev/disk/by-vm"
|
|
MIRRORDIR="/dev/md"
|
|
template=domR
|
|
|
|
while getopts 't:v:i:m:e:E:a:A:g:l:n:d:b:B:p:I:N:Mx:X:' OPTION
|
|
do
|
|
case $OPTION in
|
|
l) lflag=1
|
|
vmname="$OPTARG"
|
|
;;
|
|
x) xflag=1
|
|
prerun="$OPTARG"
|
|
;;
|
|
t) template="$OPTARG"
|
|
;;
|
|
*) ;;
|
|
esac
|
|
done
|
|
|
|
if [ "$Mflag" == "" ]
|
|
then
|
|
diskdir=$DISKDIR
|
|
else
|
|
diskdir=$MIRRORDIR
|
|
fi
|
|
rootdisk=$diskdir/$vmname-root
|
|
|
|
if [ "$rootdisk" == "$diskdir/" ]
|
|
then
|
|
printf "Error: No root disk found\nVM $vmname not started\n" >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [ "$xflag" != "" ]
|
|
then
|
|
prerun=$(echo $prerun | sed 's/,/ /g')
|
|
for opt in $prerun
|
|
do
|
|
# search for foo=bar pattern and cut out foo
|
|
KEY=$(echo $opt | cut -d= -f1)
|
|
VALUE=$(echo $opt | cut -d= -f2)
|
|
case $KEY in
|
|
password)
|
|
password=$VALUE
|
|
;;
|
|
sshkey)
|
|
sshkey=$VALUE
|
|
;;
|
|
patch)
|
|
patch=$VALUE
|
|
esac
|
|
done
|
|
fi
|
|
|
|
mount_local $vmname $rootdisk
|
|
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "Failed to mount disk $rootdisk for $vmname\n" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$password" != "" ]
|
|
then
|
|
change_password $vmname $password
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "Failed to change password for $vmname\n" >&2
|
|
umount_local $vmname
|
|
exit 2
|
|
fi
|
|
fi
|
|
|
|
if [ "$sshkey" != "" ]
|
|
then
|
|
set_ssh_key $vmname $sshkey
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "Failed to change ssh key for $vmname\n" >&2
|
|
umount_local $vmname
|
|
exit 3
|
|
fi
|
|
fi
|
|
|
|
if [ "$patch" == "" ]
|
|
then
|
|
if [ -f $(dirname $0)/../../../../patch.tgz ]
|
|
then
|
|
patch=$(dirname $0)/../../../../patch.tgz
|
|
fi
|
|
fi
|
|
|
|
if [ "$patch" != "" ]
|
|
then
|
|
patch $vmname $patch
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "Failed to apply patch $patch to $vmname\n" >&2
|
|
umount_local $vmname
|
|
exit 4
|
|
fi
|
|
fi
|
|
|
|
cpfile=$(dirname $0)/../../../../console-proxy.zip
|
|
[ -f $cpfile ] || $(dirname $0)/../../../../console-proxy.zip
|
|
[ -f $cpfile ] || $(dirname $0)/../../console-proxy.zip
|
|
[ -f $cpfile ] || $(dirname $0)/console-proxy.zip
|
|
if [[ "$template" == "domP" && -f $cpfile ]]
|
|
then
|
|
patch_console_proxy $vmname $cpfile
|
|
if [ $? -gt 0 ]
|
|
then
|
|
printf "Failed to apply patch $cpfile to $vmname\n" >&2
|
|
umount_local $vmname
|
|
exit 4
|
|
fi
|
|
fi
|
|
|
|
[ "$template" == "domP" ] && consoleproxy_svcs $vmname
|
|
[ "$template" == "domR" ] && routing_svcs $vmname
|
|
|
|
|
|
umount_local $vmname
|
|
|
|
exit $?
|