| #!/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 [ -z "${PASSWD_STRING}" ]; then |
| mysqladmin -u root ping >/dev/null |
| else |
| mysqladmin -u root "${PASSWD_STRING}" ping >/dev/null |
| fi |
| |
| if [ $? -ne 0 ]; 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" |
| |