project=upstream.*component=opennebula.*
# ==== Installation ====
# 4.6, 4.8, 4.10, 4.12, 4.14, 5.0
=
project=upstream.*component=opennebula-4.6
ONE_VERSION='4.6'
ONEHOST_ARGS='-n dummy'
.
project=upstream.*component=opennebula-4.8
ONE_VERSION='4.8'
ONEHOST_ARGS='-n dummy'
.
project=upstream.*component=opennebula-4.10
ONE_VERSION='4.10'
ONEHOST_ARGS='-n dummy'
.
project=upstream.*component=opennebula-4.12
ONE_VERSION='4.12'
ONEHOST_ARGS='-n dummy'
.
project=upstream.*component=opennebula-4.14
ONE_VERSION='4.14'
ONEHOST_ARGS='-n dummy'
.
project=upstream.*component=opennebula-5.0
ONE_VERSION='5.0'
ONEHOST_ARGS=''
.
project=upstream.*component=opennebula.*
QEMU_ENABLE=1
SSL_ENABLE=${SSL_ENABLE:-1}
VNC_PASSWORD=`dd if=/dev/random bs=9 count=1 2>/dev/null | base64`
IPPREFIX='192.168.0'
IPADDR='192.168.0.1'
NETMASK='255.255.255.0'
BROADCAST='192.168.0.255'
NETWORK='192.168.0.0'
DNS=`cat /etc/resolv.conf | grep ^nameserver | grep -v : | sed -e 's/.*\s\+//' | head -n 1`
echo "OpenNebula version ${ONE_VERSION}"
# work with xtrace to prevent passwords leaks
USE_X=`case "$-" in *x*) echo "-x" ;; *) echo "+x"; esac`
function ssl_opennebula_master() {
local ssl=$1
if test $ssl -eq 0; then
# no SSL => no proxy
sed -i /etc/one/sunstone-server.conf -e 's/127.0.0.1/0.0.0.0/'
else
# SSL
if test -f /etc/grid-security/hostkey.pem; then
cp -p /etc/grid-security/hostcert.pem /etc/grid-security/oneadmin-cert.pem
cp -p /etc/grid-security/hostkey.pem /etc/grid-security/oneadmin-key.pem
else
apt-get install -y ssl-cert
make-ssl-cert generate-default-snakeoil
mkdir /etc/grid-security || :
cp -p /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/grid-security/oneadmin-cert.pem
cp -p /etc/ssl/private/ssl-cert-snakeoil.key /etc/grid-security/oneadmin-key.pem
fi
chown oneadmin:oneadmin /etc/grid-security/oneadmin-*.pem
# support VNC with SSL
sed -i /etc/one/sunstone-server.conf \
-e 's,^\(:vnc_proxy_support_wss\):.*,\1: yes,' \
-e 's,^\(:vnc_proxy_cert\):.*,\1: /etc/grid-security/oneadmin-cert.pem,' \
-e 's,^\(:vnc_proxy_key\):.*,\1: /etc/grid-security/oneadmin-key.pem,'
# proxy
apt-get install -y apache2
cat > /etc/apache2/sites-available/opennebula-sunstone << EOF
ServerAdmin opennebula@localhost
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/ssl_access.log combined
Order deny,allow
Allow from all
SSLEngine on
SSLCertificateFile /etc/grid-security/oneadmin-cert.pem
SSLCertificateKeyFile /etc/grid-security/oneadmin-key.pem
SSLCACertificatePath /etc/grid-security/certificates
# SSLVerifyClient require
# SSLVerifyDepth 2
SSLCipherSuite kEECDH:HIGH:MEDIUM:!aNULL:!MD5:!RC4:!eNULL
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
# RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
# RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
# RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
# RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
# RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
ProxyPass http://localhost:9869/
ProxyPassReverse http://localhost:9869/
EOF
cp -p /etc/apache2/sites-available/opennebula-sunstone /etc/apache2/sites-available/opennebula-sunstone.conf
a2enmod ssl
a2enmod proxy
a2enmod proxy_http
#a2enmod headers
a2ensite opennebula-sunstone
service apache2 restart
fi
}
# ==== ONe master ====
apt-get install -y opennebula opennebula-sunstone
ssl_opennebula_master $SSL_ENABLE
#Augment Config if necessary (Nested testing environment)
if test $QEMU_ENABLE -eq 1; then
# for OpenNebula <= 4.x
sed -i 's/"kvm" ]/"qemu" ]/' /etc/one/oned.conf
# for OpenNebula >= 5
sed -i 's/^\(\s*TYPE.*\)"kvm"/\1"qemu"/' /etc/one/oned.conf
#TODO: not for Debian 8
#sed -i 's,#\(EMULATOR\).*$,\1 = /usr/bin/qemu,' /etc/one/vmm_exec/vmm_exec_kvm.conf
fi
# VNC and IPv6
sed -i /etc/one/sunstone-server.conf \
-e 's,^\(:vnc_proxy_ipv6\):.*,\1: yes,'
service opennebula restart
service opennebula-sunstone restart
cat > ~oneadmin/.ssh/config <> /etc/network/interfaces < /etc/sysctl.d/opennebula.conf
sysctl net.ipv4.ip_forward=1
cat > /etc/network/if-up.d/opennebula <> ~/.profile
export ONE_AUTH=/var/lib/one/.one/one_auth
fi
# Disk
name='ttylinux';link='http://marketplace.c12g.com/appliance/4fc76a938fb81d3517000003/download/0';link2='http://scientific.zcu.cz/images/ttylinux.img'
oneimage create -d default --name ${name} --path ${link2}
#name='debian7';link='http://marketplace.c12g.com/appliance/53e7c2e38fb81d6a69000004/download/0';link2='http://scientific.zcu.cz/images/Debian-7.qcow2.gz'
#name='centos7';link='http://marketplace.c12g.com/appliance/53e7bf928fb81d6a69000002/download/0';link2='http://scientific.zcu.cz/images/CentOS-7.qcow2.gz'
#name='debian8';link=http://marketplace.c12g.com/appliance/56040c398fb81d7410000006/download/0;link2=$link
#oneimage create -d default --name ${name} --path ${link2} --driver qcow2
oneimage chgrp "${name}" users
oneimage chmod "${name}" 640
# Network
cat > example.net <> example.net
fi
if test -z "${ONE_VERSION}" -o "x${ONE_VERSION}" == 'x4.6'; then
cat >> example.net <> example.net
fi
onevnet create example.net
onevnet chgrp example users
onevnet chmod example 640
#Template
onetemplate create --name "${name}" --memory 128 --cpu 1 --disk "oneadmin[${name}]" --nic "oneadmin[example]" --net_context --vnc --vnc-password ${VNC_PASSWORD} --context 'NETWORK="YES",SSH_PUBLIC_KEY="$USER[SSH_PUBLIC_KEY]",USER_DATA="# user data"'
onetemplate chgrp "${name}" users
onetemplate chmod "${name}" 640
#Host
onehost create $(hostname -f) -i kvm -v kvm ${ONEHOST_ARGS}
#rOCCI
{ set +x; } 2>/dev/null
if test x"${USE_X}" = 'x-x'; then
echo '+ ROCCI_PASSWORD="`dd if=/dev/random bs=36 count=1 2>/dev/null | base64`"' 1>&1
echo '+ oneuser create rocci "${ROCCI_PASSWORD}" --driver server_cipher' 1>&1
echo '+ echo "rocci:${ROCCI_PASSWORD}" >> /var/lib/one/.one/rocci_auth' 1>&1
fi
ROCCI_PASSWORD="`dd if=/dev/random bs=36 count=1 2>/dev/null | base64`"
oneuser create rocci "${ROCCI_PASSWORD}" --driver server_cipher
touch /var/lib/one/.one/rocci_auth
chown oneadmin:oneadmin /var/lib/one/.one/rocci_auth
chmod 0400 /var/lib/one/.one/rocci_auth
echo "rocci:${ROCCI_PASSWORD}" >> /var/lib/one/.one/rocci_auth
set ${USE_X}
oneuser chgrp rocci oneadmin
# ==== Send information into service discovery ====
if test -f /etc/zoosyncrc; then
zoosync -s opennebula-${ONE_VERSION} register
{ set +x; } 2>/dev/null
if test x"${USE_X}" = 'x-x'; then
echo "+ zoosync -s opennebula-${ONE_VERSION}" 'tag _oneadmin=`cat /var/lib/one/.one/one_auth`' 1>&2
echo "+ zoosync -s opennebula-${ONE_VERSION}" 'tag _rocci="rocci:${ROCCI_PASSWORD}"' 1>&1
fi
zoosync -s opennebula-${ONE_VERSION} tag _oneadmin=`cat /var/lib/one/.one/one_auth`
zoosync -s opennebula-${ONE_VERSION} tag _rocci="rocci:${ROCCI_PASSWORD}"
set ${USE_X}
fi
.