You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

221 lines
7.7 KiB

#!/bin/bash
# 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.
if [[ -e /etc/os-release ]]; then
# NOTE(berendt): support for CentOS/RHEL/openSUSE/SLES will be added in the future
source /etc/os-release
INSTALL_DATABASE=0
INSTALL_FAAFO=0
INSTALL_MESSAGING=0
RUN_API=0
RUN_DEMO=0
RUN_WORKER=0
URL_DATABASE='sqlite:////tmp/sqlite.db'
URL_ENDPOINT='http://127.0.0.1'
URL_MESSAGING='amqp://guest:guest@localhost:5672/'
while getopts e:m:d:i:r: FLAG; do
case $FLAG in
i)
case $OPTARG in
messaging)
INSTALL_MESSAGING=1
;;
database)
INSTALL_DATABASE=1
;;
faafo)
INSTALL_FAAFO=1
;;
esac
;;
r)
case $OPTARG in
demo)
RUN_DEMO=1
;;
api)
RUN_API=1
;;
worker)
RUN_WORKER=1
;;
esac
;;
e)
URL_ENDPOINT=$OPTARG
;;
m)
URL_MESSAGING=$OPTARG
;;
d)
URL_DATABASE=$OPTARG
;;
*)
echo "error: unknown option $FLAG"
exit 1
;;
esac
done
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
sudo apt-get update
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
sudo dnf update -y
fi
if [[ $INSTALL_DATABASE -eq 1 ]]; then
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-server python3-mysqldb
# HSFD changes for Ubuntu 18.04
#sudo sed -i -e "/bind-address/d" /etc/mysql/mysql.conf.d/mysqld.cnf
##sudo sed -i -e "/bind-address/d" /etc/mysql/my.cnf
sudo sed -i -e "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mariadb.conf.d/50-server.cnf
sudo mysqladmin password password
sudo systemctl restart mariadb
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
sudo dnf install -y mariadb-server python3-mysql
printf "[mysqld]\nbind-address = 127.0.0.1\n" | sudo tee /etc/my.cnf.d/faafo.conf
sudo mysqladmin password password
sudo systemctl enable mariadb
sudo systemctl start mariadb
else
echo "error: distribution $ID not supported"
exit 1
fi
sudo mysql -uroot -ppassword mysql -e "CREATE DATABASE IF NOT EXISTS faafo; GRANT ALL PRIVILEGES ON faafo.* TO 'faafo'@'%' IDENTIFIED BY 'password';"
URL_DATABASE='mysql://root:password@localhost/faafo'
fi
if [[ $INSTALL_MESSAGING -eq 1 ]]; then
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
sudo apt-get install -y rabbitmq-server
# fixes for rabbitmq setup
sudo rabbitmqctl add_user faafo guest
sudo rabbitmqctl set_user_tags faafo administrator
sudo rabbitmqctl set_permissions -p / faafo ".*" ".*" ".*"
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
sudo dnf install -y rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
else
echo "error: distribution $ID not supported"
exit 1
fi
fi
if [[ $INSTALL_FAAFO -eq 1 ]]; then
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
sudo apt-get install -y python3-dev python3-pip supervisor git zlib1g-dev libmysqlclient-dev python3-mysqldb python-is-python3
# Following is needed because of
# https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740
if [ $(lsb_release --short --codename) = xenial ]; then
# Make sure the daemon is enabled.
if ! systemctl --quiet is-enabled supervisor; then
systemctl enable supervisor
fi
# Make sure the daemon is started.
if ! systemctl --quiet is-active supervisor; then
systemctl start supervisor
fi
fi
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
sudo dnf install -y python3-devel python3-pip supervisor git zlib-devel mariadb-devel gcc which python3-mysql
sudo systemctl enable supervisord
sudo systemctl start supervisord
#elif [[ $ID = 'opensuse' || $ID = 'sles' ]]; then
# sudo zypper install -y python-devel python-pip
else
echo "error: distribution $ID not supported"
exit 1
fi
# HSFD changed to local repo
git clone https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples
cd cloud-computing-msc-ai-examples/faafo
# following line required by bug 1636150
sudo pip install --upgrade pbr
# in m1.tiny instance during cloud-init the following pip install can experience OOM kill
# setup swap to prevent that
sudo dd if=/dev/zero of=/swap bs=1M count=512
sudo chmod 600 /swap
sudo mkswap /swap
sudo swapon /swap
sudo pip install -r requirements.txt
sudo python3 setup.py install
sudo sed -i -e "s#transport_url = .*#transport_url = $URL_MESSAGING#" /etc/faafo/faafo.conf
sudo sed -i -e "s#database_url = .*#database_url = $URL_DATABASE#" /etc/faafo/faafo.conf
sudo sed -i -e "s#endpoint_url = .*#endpoint_url = $URL_ENDPOINT#" /etc/faafo/faafo.conf
fi
if [[ $RUN_API -eq 1 ]]; then
faafo_api="
[program:faafo_api]
command=$(which faafo-api)
priority=10
startretries=0"
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
echo "$faafo_api" | sudo tee -a /etc/supervisor/conf.d/faafo.conf
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
echo "$faafo_api" | sudo tee -a /etc/supervisord.d/faafo.ini
else
echo "error: distribution $ID not supported"
exit 1
fi
fi
if [[ $RUN_WORKER -eq 1 ]]; then
faafo_worker="
[program:faafo_worker]
command=$(which faafo-worker)
priority=20
startretries=0"
if [[ $ID = 'ubuntu' || $ID = 'debian' ]]; then
echo "$faafo_worker" | sudo tee -a /etc/supervisor/conf.d/faafo.conf
elif [[ $ID = 'fedora' ]]; then
# fedora currently not tested nor supported
echo "$faafo_worker" | sudo tee -a /etc/supervisord.d/faafo.ini
else
echo "error: distribution $ID not supported"
exit 1
fi
fi
if [[ $RUN_WORKER -eq 1 || $RUN_API -eq 1 ]]; then
sudo supervisorctl reload
sleep 5
fi
if [[ $RUN_DEMO -eq 1 && $RUN_API -eq 1 ]]; then
faafo --endpoint-url $URL_ENDPOINT --debug create
fi
else
exit 1
fi