123 lines
3.1 KiB
Bash
Executable file
123 lines
3.1 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Copyright 2016 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
set -e
|
|
|
|
USAGE='Usage: setup_db.sh [-pacm]'
|
|
HELP="${USAGE}\n\n\
|
|
Setup database needed to run autotest.\n\
|
|
Options:\n\
|
|
-p Desired Autotest DB password. Must be non-empty.\n\
|
|
-a Path to user local autotest directiry. Default is /usr/local/autotest.\n\
|
|
-c Clobber existing database if it exists.\n\
|
|
-m Allow remote access for database."
|
|
|
|
PASSWD=
|
|
AT_DIR=/usr/local/autotest
|
|
clobberdb="FALSE"
|
|
remotedb="FALSE"
|
|
while getopts ":p:a:cmh" opt; do
|
|
case ${opt} in
|
|
p)
|
|
PASSWD=$OPTARG
|
|
;;
|
|
a)
|
|
AT_DIR=$OPTARG
|
|
;;
|
|
c)
|
|
clobberdb="TRUE"
|
|
;;
|
|
m)
|
|
remotedb="TRUE"
|
|
;;
|
|
h)
|
|
echo -e "${HELP}" >&2
|
|
exit 0
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
echo -e "${HELP}" >&2
|
|
exit 1
|
|
;;
|
|
:)
|
|
echo "Option -$OPTARG requires an argument." >&2
|
|
echo -e "${HELP}" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${PASSWD}" ]; then
|
|
echo "Option -p is required." >&2
|
|
echo -e "${HELP}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Installing needed Ubuntu packages for mysql db."
|
|
DB_PKG_LIST="mysql-server mysql-common python-mysqldb"
|
|
|
|
if ! sudo apt-get install -y ${DB_PKG_LIST}; then
|
|
echo "Could not install packages: $?"
|
|
exit 1
|
|
fi
|
|
echo -e "Done!\n"
|
|
|
|
# Check if database exists, clobber existing database with user consent.
|
|
#
|
|
# Arguments: Name of the database
|
|
check_database()
|
|
{
|
|
local db_name=$1
|
|
echo "Setting up Database: $db_name in MySQL..."
|
|
if mysql -u root -e ';' 2> /dev/null ; then
|
|
PASSWD_STRING=
|
|
elif mysql -u root -p"${PASSWD}" -e ';' 2> /dev/null ; then
|
|
PASSWD_STRING="-p${PASSWD}"
|
|
else
|
|
PASSWD_STRING="-p"
|
|
fi
|
|
|
|
if ! mysqladmin -u root "${PASSWD_STRING}" ping ; then
|
|
sudo service mysql start
|
|
fi
|
|
|
|
local existing_database=$(mysql -u root "${PASSWD_STRING}" -e "SELECT \
|
|
SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$db_name'")
|
|
|
|
local sql_priv="GRANT ALL PRIVILEGES ON $db_name.* TO \
|
|
'chromeosqa-admin'@'localhost' IDENTIFIED BY '${PASSWD}';"
|
|
|
|
if [ "${remotedb}" = "TRUE" ]; then
|
|
sql_priv="${sql_priv} GRANT ALL PRIVILEGES ON $db_name.* TO \
|
|
'chromeosqa-admin'@'%' IDENTIFIED BY '${PASSWD}';"
|
|
fi
|
|
|
|
local sql_command="drop database if exists $db_name; \
|
|
create database $db_name; \
|
|
${sql_priv} FLUSH PRIVILEGES;"
|
|
|
|
if [[ -z "${existing_database}" || "${clobberdb}" = 'TRUE' ]]; then
|
|
mysql -u root "${PASSWD_STRING}" -e "${sql_command}"
|
|
else
|
|
echo "Use existing database. Use option -c to clobber it."
|
|
fi
|
|
echo -e "Done!\n"
|
|
}
|
|
|
|
check_database 'chromeos_autotest_db'
|
|
check_database 'chromeos_lab_servers'
|
|
|
|
echo "Populating autotest mysql DB..."
|
|
"${AT_DIR}"/database/migrate.py sync -f
|
|
"${AT_DIR}"/frontend/manage.py syncdb --noinput
|
|
# You may have to run this twice.
|
|
"${AT_DIR}"/frontend/manage.py syncdb --noinput
|
|
"${AT_DIR}"/utils/test_importer.py
|
|
echo -e "Done!\n"
|
|
|
|
echo "Initializing chromeos_lab_servers mysql DB..."
|
|
"${AT_DIR}"/database/migrate.py sync -f -d AUTOTEST_SERVER_DB
|
|
echo -e "Done!\n"
|
|
|