|
Russell Bryant |
d6405ca |
#!/bin/bash
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
# Copyright (C) 2011 - 2012, Red Hat, Inc.
|
|
Russell Bryant |
d6405ca |
# Russell Bryant <rbryant@redhat.com>
|
|
Russell Bryant |
97bbaa0 |
# Alan Pevec <apevec@redhat.com>
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
Russell Bryant |
d6405ca |
# not use this file except in compliance with the License. You may obtain
|
|
Russell Bryant |
d6405ca |
# a copy of the License at
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
# http://www.apache.org/licenses/LICENSE-2.0
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
# Unless required by applicable law or agreed to in writing, software
|
|
Russell Bryant |
d6405ca |
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
Russell Bryant |
d6405ca |
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
Russell Bryant |
d6405ca |
# License for the specific language governing permissions and limitations
|
|
Russell Bryant |
d6405ca |
# under the License.
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
d6405ca |
# Print --help output and exit.
|
|
Russell Bryant |
d6405ca |
#
|
|
Russell Bryant |
97bbaa0 |
|
|
|
8ed251e |
systemctl --version >/dev/null 2>&1 && systemctl=1
|
|
|
8ed251e |
|
|
Russell Bryant |
97bbaa0 |
# TODO put it in common place for all openstack service
|
|
Russell Bryant |
97bbaa0 |
# (nova, glance and keystone) to use
|
|
Russell Bryant |
97bbaa0 |
APP=glance
|
|
Russell Bryant |
97bbaa0 |
|
|
Russell Bryant |
d6405ca |
usage() {
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
cat << EOF
|
|
Russell Bryant |
97bbaa0 |
Set up a local MySQL database for use with openstack-$APP.
|
|
Russell Bryant |
97bbaa0 |
This script will create a '$APP' database that is accessible
|
|
Russell Bryant |
97bbaa0 |
only on localhost by user '$APP' with password '$APP'.
|
|
Russell Bryant |
d6405ca |
The setup of MySQL with a multi-server OpenStack installation
|
|
Russell Bryant |
d6405ca |
is outside of the scope of this simple helper script.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
Usage: openstack-$APP-db-setup [options]
|
|
Russell Bryant |
d6405ca |
Options:
|
|
Russell Bryant |
d6405ca |
--help | -h
|
|
Russell Bryant |
d6405ca |
Print usage information.
|
|
Russell Bryant |
97bbaa0 |
--password <pw> | -p <pw>
|
|
Russell Bryant |
97bbaa0 |
Specify the password for the '$APP' MySQL user that $APP will
|
|
Russell Bryant |
97bbaa0 |
use to connect to the '$APP' MySQL database. By default,
|
|
Russell Bryant |
97bbaa0 |
the password '$APP' will be used.
|
|
Russell Bryant |
d6405ca |
--rootpw <pw> | -r <pw>
|
|
Russell Bryant |
d6405ca |
Specify the root MySQL password. If the script installs
|
|
Russell Bryant |
d6405ca |
the MySQL server, it will set the root password to this value
|
|
Russell Bryant |
d6405ca |
instead of prompting for a password. If the MySQL server is
|
|
Russell Bryant |
d6405ca |
already installed, this password will be used to connect to the
|
|
Russell Bryant |
d6405ca |
database instead of having to prompt for it.
|
|
Russell Bryant |
d6405ca |
--yes | -y
|
|
Russell Bryant |
d6405ca |
In cases where the script would normally ask for confirmation
|
|
Russell Bryant |
d6405ca |
before doing something, such as installing mysql-server,
|
|
Russell Bryant |
d6405ca |
just assume yes. This is useful if you want to run the script
|
|
Russell Bryant |
d6405ca |
non-interactively.
|
|
Russell Bryant |
d6405ca |
EOF
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
exit 0
|
|
Russell Bryant |
d6405ca |
}
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
install_mysql_server() {
|
|
Russell Bryant |
d6405ca |
if [ -z "${ASSUME_YES}" ] ; then
|
|
Russell Bryant |
d6405ca |
yum install mysql-server
|
|
Russell Bryant |
d6405ca |
else
|
|
Russell Bryant |
d6405ca |
yum install -y mysql-server
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
}
|
|
Russell Bryant |
d6405ca |
|
|
|
8ed251e |
start_service() {
|
|
|
8ed251e |
if test "$systemctl"; then
|
|
|
8ed251e |
systemctl start $1.service
|
|
|
8ed251e |
else
|
|
|
8ed251e |
service $1 start
|
|
|
8ed251e |
fi
|
|
|
8ed251e |
}
|
|
|
8ed251e |
|
|
|
8ed251e |
service_running() {
|
|
|
8ed251e |
if test "$systemctl"; then
|
|
|
8ed251e |
systemctl status $1.service >/dev/null
|
|
|
8ed251e |
else
|
|
|
8ed251e |
service $1 status >/dev/null
|
|
|
8ed251e |
fi
|
|
Russell Bryant |
d6405ca |
}
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
MYSQL_APP_PW_DEFAULT="$APP"
|
|
Russell Bryant |
97bbaa0 |
MYSQL_APP_PW=${MYSQL_APP_PW_DEFAULT}
|
|
Russell Bryant |
97bbaa0 |
if [ "${APP}" = "glance" ]; then
|
|
Russell Bryant |
97bbaa0 |
APP_CONFIG="/etc/glance/glance-registry.conf"
|
|
Russell Bryant |
97bbaa0 |
else
|
|
Russell Bryant |
97bbaa0 |
APP_CONFIG="/etc/$APP/$APP.conf"
|
|
Russell Bryant |
97bbaa0 |
fi
|
|
Russell Bryant |
d6405ca |
ASSUME_YES=""
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
while [ $# -gt 0 ]
|
|
Russell Bryant |
d6405ca |
do
|
|
Russell Bryant |
d6405ca |
case "$1" in
|
|
Russell Bryant |
d6405ca |
-h|--help)
|
|
Russell Bryant |
d6405ca |
usage
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
97bbaa0 |
-p|--password)
|
|
Russell Bryant |
d6405ca |
shift
|
|
Russell Bryant |
97bbaa0 |
MYSQL_APP_PW=${1}
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
-r|--rootpw)
|
|
Russell Bryant |
d6405ca |
shift
|
|
Russell Bryant |
d6405ca |
MYSQL_ROOT_PW=${1}
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
-y|--yes)
|
|
Russell Bryant |
d6405ca |
ASSUME_YES="yes"
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
*)
|
|
Russell Bryant |
d6405ca |
# ignore
|
|
Russell Bryant |
d6405ca |
shift
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
esac
|
|
Russell Bryant |
d6405ca |
shift
|
|
Russell Bryant |
d6405ca |
done
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Make sure MySQL is installed.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
NEW_MYSQL_INSTALL=0
|
|
Russell Bryant |
d6405ca |
if ! rpm -q mysql-server > /dev/null
|
|
Russell Bryant |
d6405ca |
then
|
|
Russell Bryant |
d6405ca |
if [ -z "${ASSUME_YES}" ] ; then
|
|
Russell Bryant |
d6405ca |
printf "mysql-server is not installed. Would you like to install it now? (y/n): "
|
|
Russell Bryant |
d6405ca |
read response
|
|
Russell Bryant |
d6405ca |
case "$response" in
|
|
Russell Bryant |
d6405ca |
y|Y)
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
n|N)
|
|
Russell Bryant |
d6405ca |
echo "mysql-server must be installed. Please install it before proceeding."
|
|
Russell Bryant |
d6405ca |
exit 0
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
*)
|
|
Russell Bryant |
d6405ca |
echo "Invalid response."
|
|
Russell Bryant |
d6405ca |
exit 1
|
|
Russell Bryant |
d6405ca |
esac
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
NEW_MYSQL_INSTALL=1
|
|
Russell Bryant |
d6405ca |
install_mysql_server
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Make sure mysqld is running.
|
|
Russell Bryant |
d6405ca |
|
|
|
8ed251e |
if ! service_running mysqld; then
|
|
Russell Bryant |
d6405ca |
if [ -z "${ASSUME_YES}" ] ; then
|
|
Russell Bryant |
d6405ca |
printf "mysqld is not running. Would you like to start it now? (y/n): "
|
|
Russell Bryant |
d6405ca |
read response
|
|
Russell Bryant |
d6405ca |
case "$response" in
|
|
Russell Bryant |
d6405ca |
y|Y)
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
n|N)
|
|
Russell Bryant |
d6405ca |
echo "mysqld must be running. Please start it before proceeding."
|
|
Russell Bryant |
d6405ca |
exit 0
|
|
Russell Bryant |
d6405ca |
;;
|
|
Russell Bryant |
d6405ca |
*)
|
|
Russell Bryant |
d6405ca |
echo "Invalid response."
|
|
Russell Bryant |
d6405ca |
exit 1
|
|
Russell Bryant |
d6405ca |
esac
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Derek Higgins |
aba31b1 |
start_service 'mysqld'
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# If we both installed and started, ensure it starts at boot
|
|
Russell Bryant |
d6405ca |
[ $NEW_MYSQL_INSTALL -eq 1 ] && chkconfig mysqld on
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Get MySQL root access.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
if [ $NEW_MYSQL_INSTALL -eq 1 ]
|
|
Russell Bryant |
d6405ca |
then
|
|
Russell Bryant |
d6405ca |
if [ ! "${MYSQL_ROOT_PW+defined}" ] ; then
|
|
Russell Bryant |
d6405ca |
echo "Since this is a fresh installation of MySQL, please set a password for the 'root' mysql user."
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
PW_MATCH=0
|
|
Russell Bryant |
d6405ca |
while [ $PW_MATCH -eq 0 ]
|
|
Russell Bryant |
d6405ca |
do
|
|
Russell Bryant |
d6405ca |
printf "Enter new password for 'root' mysql user: "
|
|
Russell Bryant |
d6405ca |
read -s MYSQL_ROOT_PW
|
|
Russell Bryant |
d6405ca |
echo
|
|
Russell Bryant |
d6405ca |
printf "Enter new password again: "
|
|
Russell Bryant |
d6405ca |
read -s PW2
|
|
Russell Bryant |
d6405ca |
echo
|
|
Russell Bryant |
d6405ca |
if [ "${MYSQL_ROOT_PW}" = "${PW2}" ] ; then
|
|
Russell Bryant |
d6405ca |
PW_MATCH=1
|
|
Russell Bryant |
d6405ca |
else
|
|
Russell Bryant |
d6405ca |
echo "Passwords did not match."
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
done
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
echo "UPDATE mysql.user SET password = password('${MYSQL_ROOT_PW}') WHERE user = 'root'; DELETE FROM mysql.user WHERE user = ''; flush privileges;" | mysql -u root
|
|
Russell Bryant |
d6405ca |
if ! [ $? -eq 0 ] ; then
|
|
Russell Bryant |
d6405ca |
echo "Failed to set password for 'root' MySQL user."
|
|
Russell Bryant |
d6405ca |
exit 1
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
elif [ ! "${MYSQL_ROOT_PW+defined}" ] ; then
|
|
Russell Bryant |
d6405ca |
printf "Please enter the password for the 'root' MySQL user: "
|
|
Russell Bryant |
d6405ca |
read -s MYSQL_ROOT_PW
|
|
Russell Bryant |
d6405ca |
echo
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Sanity check MySQL credentials.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
MYSQL_ROOT_PW_ARG=""
|
|
Russell Bryant |
d6405ca |
if [ "${MYSQL_ROOT_PW+defined}" ]
|
|
Russell Bryant |
d6405ca |
then
|
|
Russell Bryant |
d6405ca |
MYSQL_ROOT_PW_ARG="--password=${MYSQL_ROOT_PW}"
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
echo "SELECT 1;" | mysql -u root ${MYSQL_ROOT_PW_ARG} > /dev/null
|
|
Russell Bryant |
d6405ca |
if ! [ $? -eq 0 ]
|
|
Russell Bryant |
d6405ca |
then
|
|
Russell Bryant |
d6405ca |
echo "Failed to connect to the MySQL server. Please check your root user credentials."
|
|
Russell Bryant |
d6405ca |
exit 1
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
echo "Verified connectivity to MySQL."
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Now create the db.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
echo "Creating '$APP' database."
|
|
Russell Bryant |
d6405ca |
cat << EOF | mysql -u root ${MYSQL_ROOT_PW_ARG}
|
|
Russell Bryant |
97bbaa0 |
CREATE DATABASE $APP;
|
|
Russell Bryant |
97bbaa0 |
CREATE USER '$APP'@'localhost' IDENTIFIED BY '${MYSQL_APP_PW}';
|
|
Russell Bryant |
97bbaa0 |
CREATE USER '$APP'@'%' IDENTIFIED BY '${MYSQL_APP_PW}';
|
|
Russell Bryant |
97bbaa0 |
GRANT ALL ON $APP.* TO '$APP'@'localhost';
|
|
Russell Bryant |
97bbaa0 |
GRANT ALL ON $APP.* TO '$APP'@'%';
|
|
Russell Bryant |
d6405ca |
flush privileges;
|
|
Russell Bryant |
d6405ca |
EOF
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
# Make sure $APP configuration has the right MySQL password.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
if [ "${MYSQL_APP_PW}" != "${MYSQL_APP_PW_DEFAULT}" ] ; then
|
|
Russell Bryant |
97bbaa0 |
echo "Updating '$APP' database password in ${APP_CONFIG}"
|
|
Russell Bryant |
97bbaa0 |
sed -i -e "s/mysql:\/\/$APP:\(.*\)@/mysql:\/\/$APP:${MYSQL_APP_PW}@/" ${APP_CONFIG}
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
# Ask openstack-$APP to sync the db.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
echo "Asking openstack-$APP to sync the database."
|
|
|
3b8b88c |
[ "${APP}" = "nova" ] && db_sync='db sync' || db_sync='db_sync'
|
|
|
3b8b88c |
# Run as $APP user so any newly created (log) files have correct ownership
|
|
|
3b8b88c |
runuser -s /bin/sh $APP -c "$APP-manage $db_sync"
|
|
|
3b8b88c |
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
# Do a final sanity check on the database.
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
97bbaa0 |
echo "SELECT * FROM migrate_version;" | mysql -u $APP --password=${MYSQL_APP_PW} $APP > /dev/null
|
|
Russell Bryant |
d6405ca |
if ! [ $? -eq 0 ]
|
|
Russell Bryant |
d6405ca |
then
|
|
Russell Bryant |
97bbaa0 |
echo "Final sanity check failed. File a bug report on bugzilla.redhat.com against the openstack-$APP package."
|
|
Russell Bryant |
d6405ca |
exit 1
|
|
Russell Bryant |
d6405ca |
fi
|
|
Russell Bryant |
d6405ca |
|
|
Russell Bryant |
d6405ca |
echo "Complete!"
|