2009-01-02 17:58:51 +03:00
#!/bin/bash
2009-01-19 21:05:46 +03:00
# -------------------------------------------------------------------------- #
# Copyright 2002-2009, Distributed Systems Architecture Group, Universidad #
# Complutense de Madrid (dsa-research.org) #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Install program for OpenNebula. It will install it relative to
# $ONE_LOCATION if defined with the -d option, otherwise it'll be installed
# under /. In this case you may specified the oneadmin user/group, so you do
# not need run the OpenNebula daemon with root priviledges
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# COMMAND LINE PARSING
#-------------------------------------------------------------------------------
usage( ) {
echo
echo "Usage: install.sh [-u install_user] [-g install_group] [-k keep conf]"
echo " [-d ONE_LOCATION] [-r] [-h]"
echo
echo "-u: user that will run opennebula, defults to user executing install.sh"
echo "-g: group of the user that will run opennebula, defults to user"
echo " executing install.sh"
echo "-k: keep current configuration files, useful when upgrading"
echo "-d: target installation directory, if not defined it'd be root"
echo "-r: remove Opennebula, only useful if -d was not specified, otherwise"
echo " rm -rf \$ONE_LOCATION would do the job"
echo "-h: prints this help"
2008-06-17 20:27:32 +04:00
}
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
2008-06-17 20:27:32 +04:00
2009-01-02 17:58:51 +03:00
TEMP_OPT = ` getopt -o hkru:g:d: -n 'install.sh' -- " $@ " `
2008-06-17 20:27:32 +04:00
2009-01-02 17:58:51 +03:00
if [ $? != 0 ] ; then
usage
exit 1
2008-06-17 20:27:32 +04:00
fi
2009-01-02 17:58:51 +03:00
eval set -- " $TEMP_OPT "
2008-07-17 23:42:17 +04:00
2009-01-02 17:58:51 +03:00
INSTALL_ETC = "yes"
UNINSTALL = "no"
ONEADMIN_USER = ` id -u`
ONEADMIN_GROUP = ` id -g`
SRC_DIR = $PWD
2008-11-13 19:21:17 +03:00
2009-01-02 17:58:51 +03:00
while true ; do
case " $1 " in
-h) usage; exit 0; ;
-k) INSTALL_ETC = "no" ; shift ; ;
-r) UNINSTALL = "yes" ; shift ; ;
-u) ONEADMIN_USER = " $2 " ; shift 2; ;
-g) ONEADMIN_GROUP = " $2 " ; shift 2; ;
2009-01-19 19:40:46 +03:00
-d) ROOT = " $2 " ; shift 2 ; ;
2009-01-02 17:58:51 +03:00
--) shift ; break ; ;
*) usage; exit 1 ; ;
esac
done
2008-11-13 19:21:17 +03:00
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Definition of locations
#-------------------------------------------------------------------------------
2009-01-19 19:40:46 +03:00
if [ -z " $ROOT " ] ; then
2009-01-02 17:58:51 +03:00
BIN_LOCATION = "/usr/bin"
LIB_LOCATION = "/usr/lib/one"
ETC_LOCATION = "/etc/one"
LOG_LOCATION = "/var/log/one"
VAR_LOCATION = "/var/lib/one"
RUN_LOCATION = "/var/run/one"
INCLUDE_LOCATION = "/usr/include"
SHARE_LOCATION = "/usr/share/doc/opennebula"
2009-01-19 19:40:46 +03:00
MAKE_DIRS = " $BIN_LOCATION $LIB_LOCATION $ETC_LOCATION $VAR_LOCATION \
$INCLUDE_LOCATION $SHARE_LOCATION \
$LOG_LOCATION $RUN_LOCATION "
2009-01-02 17:58:51 +03:00
2009-05-07 19:23:13 +04:00
DELETE_DIRS = " $LIB_LOCATION $ETC_LOCATION $LOG_LOCATION $VAR_LOCATION \
$RUN_LOCATION $SHARE_DIRS "
2009-01-02 17:58:51 +03:00
CHOWN_DIRS = " $LOG_LOCATION $VAR_LOCATION $RUN_LOCATION "
else
2009-01-19 19:40:46 +03:00
BIN_LOCATION = " $ROOT /bin "
LIB_LOCATION = " $ROOT /lib "
ETC_LOCATION = " $ROOT /etc "
VAR_LOCATION = " $ROOT /var "
INCLUDE_LOCATION = " $ROOT /include "
SHARE_LOCATION = " $ROOT /share "
2009-01-02 17:58:51 +03:00
MAKE_DIRS = " $BIN_LOCATION $LIB_LOCATION $ETC_LOCATION $VAR_LOCATION \
$INCLUDE_LOCATION $SHARE_LOCATION "
2009-05-07 19:23:13 +04:00
DELETE_DIRS = " $MAKE_DIRS "
2009-01-02 17:58:51 +03:00
2009-01-19 19:40:46 +03:00
CHOWN_DIRS = " $ROOT "
2009-01-02 17:58:51 +03:00
fi
2008-11-13 19:21:17 +03:00
2009-01-02 17:58:51 +03:00
SHARE_DIRS = " $SHARE_LOCATION /examples \
$SHARE_LOCATION /examples/tm"
ETC_DIRS = " $ETC_LOCATION /im_kvm \
$ETC_LOCATION /im_xen \
$ETC_LOCATION /im_ec2 \
2009-07-20 18:34:10 +04:00
$ETC_LOCATION /im_eh \
2009-01-02 17:58:51 +03:00
$ETC_LOCATION /vmm_kvm \
$ETC_LOCATION /vmm_xen \
$ETC_LOCATION /vmm_ec2 \
2009-07-20 18:34:10 +04:00
$ETC_LOCATION /vmm_eh \
2009-01-02 17:58:51 +03:00
$ETC_LOCATION /tm_nfs \
$ETC_LOCATION /tm_ssh \
2009-04-04 03:34:33 +04:00
$ETC_LOCATION /tm_dummy \
$ETC_LOCATION /hm"
2009-01-02 17:58:51 +03:00
LIB_DIRS = " $LIB_LOCATION /im_probes \
$LIB_LOCATION /ruby \
2009-07-09 18:34:34 +04:00
$LIB_LOCATION /ruby/OpenNebula \
2009-01-02 17:58:51 +03:00
$LIB_LOCATION /tm_commands \
$LIB_LOCATION /tm_commands/nfs \
$LIB_LOCATION /tm_commands/ssh \
$LIB_LOCATION /tm_commands/dummy \
$LIB_LOCATION /mads"
MAKE_DIRS = " $MAKE_DIRS $SHARE_DIRS $ETC_DIRS $LIB_DIRS "
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# FILE DEFINITION, WHAT IS GOING TO BE INSTALLED AND WHERE
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
INSTALL_FILES[ 0] = " BIN_FILES: $BIN_LOCATION "
INSTALL_FILES[ 1] = " INCLUDE_FILES: $INCLUDE_LOCATION "
INSTALL_FILES[ 2] = " LIB_FILES: $LIB_LOCATION "
INSTALL_FILES[ 3] = " RUBY_LIB_FILES: $LIB_LOCATION /ruby "
2009-07-09 18:34:34 +04:00
INSTALL_FILES[ 4] = " RUBY_OPENNEBULA_LIB_FILES: $LIB_LOCATION /ruby/OpenNebula "
INSTALL_FILES[ 5] = " MADS_LIB_FILES: $LIB_LOCATION /mads "
INSTALL_FILES[ 6] = " IM_PROBES_LIB_FILES: $LIB_LOCATION /im_probes "
INSTALL_FILES[ 7] = " NFS_TM_COMMANDS_LIB_FILES: $LIB_LOCATION /tm_commands/nfs "
INSTALL_FILES[ 8] = " SSH_TM_COMMANDS_LIB_FILES: $LIB_LOCATION /tm_commands/ssh "
INSTALL_FILES[ 9] = " DUMMY_TM_COMMANDS_LIB_FILES: $LIB_LOCATION /tm_commands/dummy "
INSTALL_FILES[ 10] = " EXAMPLE_SHARE_FILES: $SHARE_LOCATION /examples "
INSTALL_FILES[ 11] = " TM_EXAMPLE_SHARE_FILES: $SHARE_LOCATION /examples/tm "
2009-01-02 17:58:51 +03:00
INSTALL_ETC_FILES[ 0] = " ETC_FILES: $ETC_LOCATION "
INSTALL_ETC_FILES[ 1] = " VMM_XEN_ETC_FILES: $ETC_LOCATION /vmm_xen "
INSTALL_ETC_FILES[ 2] = " VMM_KVM_ETC_FILES: $ETC_LOCATION /vmm_kvm "
INSTALL_ETC_FILES[ 3] = " VMM_EC2_ETC_FILES: $ETC_LOCATION /vmm_ec2 "
2009-07-20 18:34:10 +04:00
INSTALL_ETC_FILES[ 4] = " VMM_EH_ETC_FILES: $ETC_LOCATION /vmm_eh "
INSTALL_ETC_FILES[ 5] = " IM_XEN_ETC_FILES: $ETC_LOCATION /im_xen "
INSTALL_ETC_FILES[ 6] = " IM_KVM_ETC_FILES: $ETC_LOCATION /im_kvm "
INSTALL_ETC_FILES[ 7] = " IM_EC2_ETC_FILES: $ETC_LOCATION /im_ec2 "
INSTALL_ETC_FILES[ 8] = " IM_EH_ETC_FILES: $ETC_LOCATION /im_eh "
INSTALL_ETC_FILES[ 9] = " TM_NFS_ETC_FILES: $ETC_LOCATION /tm_nfs "
INSTALL_ETC_FILES[ 10] = " TM_SSH_ETC_FILES: $ETC_LOCATION /tm_ssh "
INSTALL_ETC_FILES[ 11] = " TM_DUMMY_ETC_FILES: $ETC_LOCATION /tm_dummy "
INSTALL_ETC_FILES[ 12] = " HM_ETC_FILES: $ETC_LOCATION /hm "
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Binary files, to be installed under $BIN_LOCATION
#-------------------------------------------------------------------------------
BIN_FILES = " src/nebula/oned \
src/scheduler/mm_sched \
src/client/ruby/onevm \
src/client/ruby/onehost \
src/client/ruby/onevnet \
2009-07-09 18:34:34 +04:00
src/client/ruby/oneuser \
2009-01-02 17:58:51 +03:00
share/scripts/one"
#-------------------------------------------------------------------------------
# C/C++ OpenNebula API Library & Development files
# Include files, to be installed under $INCLUDE_LOCATION
# Library files, to be installed under $LIB_LOCATION
#-------------------------------------------------------------------------------
INCLUDE_FILES = "include/OneClient.h"
2009-01-22 21:51:06 +03:00
LIB_FILES = " src/client/liboneapi.a \
src/client/liboneapi.so"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Ruby library files, to be installed under $LIB_LOCATION/ruby
#-------------------------------------------------------------------------------
RUBY_LIB_FILES = " src/mad/ruby/one_mad.rb \
src/mad/ruby/one_ssh.rb \
src/mad/ruby/ThreadScheduler.rb \
2009-02-10 20:37:38 +03:00
src/mad/ruby/ActionManager.rb \
src/mad/ruby/CommandManager.rb \
src/mad/ruby/OpenNebulaDriver.rb \
src/mad/ruby/VirtualMachineDriver.rb \
2009-01-02 17:58:51 +03:00
src/client/ruby/client_utilities.rb \
src/client/ruby/command_parse.rb \
2009-07-09 18:34:34 +04:00
src/client/ruby/lib/OpenNebula.rb \
2009-01-02 17:58:51 +03:00
src/tm_mad/TMScript.rb"
2009-07-09 18:34:34 +04:00
RUBY_OPENNEBULA_LIB_FILES = " src/client/ruby/lib/OpenNebula/Host.rb \
src/client/ruby/lib/OpenNebula/HostPool.rb \
src/client/ruby/lib/OpenNebula/Pool.rb \
src/client/ruby/lib/OpenNebula/User.rb \
src/client/ruby/lib/OpenNebula/UserPool.rb \
src/client/ruby/lib/OpenNebula/VirtualMachine.rb \
src/client/ruby/lib/OpenNebula/VirtualMachinePool.rb \
src/client/ruby/lib/OpenNebula/VirtualNetwork.rb \
src/client/ruby/lib/OpenNebula/VirtualNetworkPool.rb \
src/client/ruby/lib/OpenNebula/XMLUtils.rb"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Driver executable files, to be installed under $LIB_LOCATION/mads
#-------------------------------------------------------------------------------
MADS_LIB_FILES = " share/scripts/madcommon.sh \
src/tm_mad/tm_common.sh \
src/vmm_mad/xen/one_vmm_xen.rb \
src/vmm_mad/xen/one_vmm_xen \
src/vmm_mad/kvm/one_vmm_kvm.rb \
src/vmm_mad/kvm/one_vmm_kvm \
src/vmm_mad/ec2/one_vmm_ec2.rb \
src/vmm_mad/ec2/one_vmm_ec2 \
2009-07-20 18:34:10 +04:00
src/vmm_mad/eh/one_vmm_eh.rb \
src/vmm_mad/eh/one_vmm_eh \
2009-01-02 17:58:51 +03:00
src/im_mad/im_ssh/one_im_ssh.rb \
src/im_mad/im_ssh/one_im_ssh \
src/im_mad/ec2/one_im_ec2.rb \
src/im_mad/ec2/one_im_ec2 \
2009-07-20 18:34:10 +04:00
src/im_mad/eh/one_im_eh.rb \
src/im_mad/eh/one_im_eh \
2009-01-02 17:58:51 +03:00
src/tm_mad/one_tm \
2009-04-04 03:34:33 +04:00
src/tm_mad/one_tm.rb \
src/hm_mad/one_hm.rb \
src/hm_mad/one_hm"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Information Manager Probes, to be installed under $LIB_LOCATION/im_probes
#-------------------------------------------------------------------------------
IM_PROBES_LIB_FILES = " src/im_mad/xen/xen.rb \
src/im_mad/kvm/kvm.rb \
src/im_mad/host_probes/architecture.sh \
src/im_mad/host_probes/cpu.sh \
src/im_mad/host_probes/name.sh"
#-------------------------------------------------------------------------------
# Transfer Manager commands, to be installed under $LIB_LOCATION/tm_commands
# - NFS TM, $LIB_LOCATION/tm_commands/nfs
# - SSH TM, $LIB_LOCATION/tm_commands/ssh
# - dummy TM, $LIB_LOCATION/tm_commands/dummy
#-------------------------------------------------------------------------------
NFS_TM_COMMANDS_LIB_FILES = " src/tm_mad/nfs/tm_clone.sh \
src/tm_mad/nfs/tm_delete.sh \
src/tm_mad/nfs/tm_ln.sh \
src/tm_mad/nfs/tm_mkswap.sh \
src/tm_mad/nfs/tm_mkimage.sh \
2009-03-18 01:39:06 +03:00
src/tm_mad/nfs/tm_mv.sh \
src/tm_mad/nfs/tm_context.sh"
2009-01-02 17:58:51 +03:00
SSH_TM_COMMANDS_LIB_FILES = " src/tm_mad/ssh/tm_clone.sh \
src/tm_mad/ssh/tm_delete.sh \
src/tm_mad/ssh/tm_ln.sh \
src/tm_mad/ssh/tm_mkswap.sh \
src/tm_mad/ssh/tm_mkimage.sh \
2009-03-31 14:51:54 +04:00
src/tm_mad/ssh/tm_mv.sh \
src/tm_mad/ssh/tm_context.sh"
2009-01-02 17:58:51 +03:00
DUMMY_TM_COMMANDS_LIB_FILES = "src/tm_mad/dummy/tm_dummy.sh"
#-------------------------------------------------------------------------------
# Configuration files for OpenNebula, to be installed under $ETC_LOCATION
#-------------------------------------------------------------------------------
ETC_FILES = " share/etc/oned.conf \
share/etc/defaultrc"
#-------------------------------------------------------------------------------
# Virtualization drivers config. files, to be installed under $ETC_LOCATION
# - xen, $ETC_LOCATION/vmm_xen
# - kvm, $ETC_LOCATION/vmm_kvm
# - ec2, $ETC_LOCATION/vmm_ec2
2009-07-20 18:34:10 +04:00
# - eh, $ETC_LOCATION/vmm_eh
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
VMM_XEN_ETC_FILES = " src/vmm_mad/xen/vmm_xenrc \
src/vmm_mad/xen/vmm_xen.conf"
VMM_KVM_ETC_FILES = " src/vmm_mad/kvm/vmm_kvmrc \
src/vmm_mad/kvm/vmm_kvm.conf"
VMM_EC2_ETC_FILES = " src/vmm_mad/ec2/vmm_ec2rc \
src/vmm_mad/ec2/vmm_ec2.conf"
2009-07-20 18:34:10 +04:00
VMM_EH_ETC_FILES = " src/vmm_mad/eh/vmm_ehrc \
src/vmm_mad/eh/vmm_eh.conf"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Information drivers config. files, to be installed under $ETC_LOCATION
# - xen, $ETC_LOCATION/im_xen
# - kvm, $ETC_LOCATION/im_kvm
# - ec2, $ETC_LOCATION/im_ec2
#-------------------------------------------------------------------------------
IM_XEN_ETC_FILES = " src/im_mad/xen/im_xenrc \
src/im_mad/xen/im_xen.conf"
IM_KVM_ETC_FILES = " src/im_mad/kvm/im_kvmrc \
src/im_mad/kvm/im_kvm.conf"
IM_EC2_ETC_FILES = " src/im_mad/ec2/im_ec2rc \
src/im_mad/ec2/im_ec2.conf"
2009-07-20 18:34:10 +04:00
IM_EH_ETC_FILES = " src/im_mad/eh/im_ehrc \
src/im_mad/eh/im_eh.conf"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Storage drivers config. files, to be installed under $ETC_LOCATION
# - nfs, $ETC_LOCATION/tm_nfs
# - ssh, $ETC_LOCATION/tm_ssh
# - dummy, $ETC_LOCATION/tm_dummy
#-------------------------------------------------------------------------------
TM_NFS_ETC_FILES = " src/tm_mad/nfs/tm_nfs.conf \
src/tm_mad/nfs/tm_nfsrc"
TM_SSH_ETC_FILES = " src/tm_mad/ssh/tm_ssh.conf \
src/tm_mad/ssh/tm_sshrc"
TM_DUMMY_ETC_FILES = " src/tm_mad/dummy/tm_dummy.conf \
src/tm_mad/dummy/tm_dummyrc"
2009-04-04 03:34:33 +04:00
#-------------------------------------------------------------------------------
# Hook Manager driver config. files, to be installed under $ETC_LOCATION/hm
#-------------------------------------------------------------------------------
HM_ETC_FILES = "src/hm_mad/hmrc"
2009-01-02 17:58:51 +03:00
#-------------------------------------------------------------------------------
# Sample files, to be installed under $SHARE_LOCATION/examples
#-------------------------------------------------------------------------------
EXAMPLE_SHARE_FILES = " share/examples/vm.template \
share/examples/vm.schema \
share/examples/private.net \
share/examples/public.net"
#-------------------------------------------------------------------------------
# TM Sample files, to be installed under $SHARE_LOCATION/examples/tm
#-------------------------------------------------------------------------------
TM_EXAMPLE_SHARE_FILES = " share/examples/tm/tm_clone.sh \
share/examples/tm/tm_delete.sh \
share/examples/tm/tm_ln.sh \
share/examples/tm/tm_mkimage.sh \
share/examples/tm/tm_mkswap.sh \
share/examples/tm/tm_mv.sh"
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# INSTALL.SH SCRIPT
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# --- Create OpenNebula directories ---
if [ " $UNINSTALL " = "no" ] ; then
for d in $MAKE_DIRS ; do
2009-01-19 19:40:46 +03:00
mkdir -p $DESTDIR $d
2009-01-02 17:58:51 +03:00
done
fi
2008-11-13 19:21:17 +03:00
2009-01-02 17:58:51 +03:00
# --- Install/Uninstall files ---
2008-12-02 18:52:03 +03:00
2009-01-02 17:58:51 +03:00
do_file( ) {
if [ " $UNINSTALL " = "yes" ] ; then
rm $2 /` basename $1 `
else
2009-01-19 19:40:46 +03:00
cp $SRC_DIR /$1 $DESTDIR $2
2009-01-02 17:58:51 +03:00
fi
}
2008-12-02 18:52:03 +03:00
2009-01-02 17:58:51 +03:00
for i in ${ INSTALL_FILES [@] } ; do
SRC = $` echo $i | cut -d: -f1`
DST = ` echo $i | cut -d: -f2`
eval SRC_FILES = $SRC
for f in $SRC_FILES ; do
do_file $f $DST
done
done
2008-11-13 19:21:17 +03:00
2009-01-02 17:58:51 +03:00
if [ " $INSTALL_ETC " = "yes" ] ; then
for i in ${ INSTALL_ETC_FILES [@] } ; do
SRC = $` echo $i | cut -d: -f1`
DST = ` echo $i | cut -d: -f2`
eval SRC_FILES = $SRC
2009-07-20 18:34:10 +04:00
2009-01-02 17:58:51 +03:00
for f in $SRC_FILES ; do
do_file $f $DST
done
done
fi
2008-06-17 20:27:32 +04:00
2009-01-02 17:58:51 +03:00
# --- Set ownership or remove OpenNebula directories ---
2008-12-02 19:16:20 +03:00
2009-01-02 17:58:51 +03:00
if [ " $UNINSTALL " = "no" ] ; then
2009-01-19 19:40:46 +03:00
for d in $CHOWN_DIRS ; do
/bin/chown -R $ONEADMIN_USER :$ONEADMIN_GROUP $DESTDIR $d
done
2009-01-22 21:51:06 +03:00
# Create library links
2009-01-23 02:58:44 +03:00
ln -s $DESTDIR $LIB_LOCATION /liboneapi.so \
$DESTDIR $LIB_LOCATION /liboneapi.so.1
ln -s $DESTDIR $LIB_LOCATION /liboneapi.so.1 \
$DESTDIR $LIB_LOCATION /liboneapi.so.1.2
2009-01-02 17:58:51 +03:00
else
2009-05-07 19:23:13 +04:00
for d in ` echo $DELETE_DIRS | awk '{for (i=NF;i>=1;i--) printf $i" "}' ` ; do
2009-01-02 17:58:51 +03:00
rmdir $d
done
fi