1 #!/bin/bash 2 # 3 # Copyright 2016 The Chromium OS Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 set -e 7 8 USAGE='Usage: setup_db.sh [-pacm]' 9 HELP="${USAGE}\n\n\ 10 Setup database needed to run autotest.\n\ 11 Options:\n\ 12 -p Desired Autotest DB password. Must be non-empty.\n\ 13 -a Path to user local autotest directiry. Default is /usr/local/autotest.\n\ 14 -c Clobber existing database if it exists.\n\ 15 -m Allow remote access for database." 16 17 PASSWD= 18 AT_DIR=/usr/local/autotest 19 clobberdb="FALSE" 20 remotedb="FALSE" 21 while getopts ":p:a:cmh" opt; do 22 case ${opt} in 23 p) 24 PASSWD=$OPTARG 25 ;; 26 a) 27 AT_DIR=$OPTARG 28 ;; 29 c) 30 clobberdb="TRUE" 31 ;; 32 m) 33 remotedb="TRUE" 34 ;; 35 h) 36 echo -e "${HELP}" >&2 37 exit 0 38 ;; 39 \?) 40 echo "Invalid option: -$OPTARG" >&2 41 echo -e "${HELP}" >&2 42 exit 1 43 ;; 44 :) 45 echo "Option -$OPTARG requires an argument." >&2 46 echo -e "${HELP}" >&2 47 exit 1 48 ;; 49 esac 50 done 51 52 if [ -z "${PASSWD}" ]; then 53 echo "Option -p is required." >&2 54 echo -e "${HELP}" >&2 55 exit 1 56 fi 57 58 echo "Installing needed Ubuntu packages for mysql db." 59 DB_PKG_LIST="mysql-server mysql-common python-mysqldb" 60 61 if ! sudo apt-get install -y ${DB_PKG_LIST}; then 62 echo "Could not install packages: $?" 63 exit 1 64 fi 65 echo -e "Done!\n" 66 67 # Check if database exists, clobber existing database with user consent. 68 # 69 # Arguments: Name of the database 70 check_database() 71 { 72 local db_name=$1 73 echo "Setting up Database: $db_name in MySQL..." 74 if mysql -u root -e ';' 2> /dev/null ; then 75 PASSWD_STRING= 76 elif mysql -u root -p"${PASSWD}" -e ';' 2> /dev/null ; then 77 PASSWD_STRING="-p${PASSWD}" 78 else 79 PASSWD_STRING="-p" 80 fi 81 82 if [ -z "${PASSWD_STRING}" ]; then 83 mysqladmin -u root ping >/dev/null 84 else 85 mysqladmin -u root "${PASSWD_STRING}" ping >/dev/null 86 fi 87 88 if [ $? -ne 0 ]; then 89 sudo service mysql start 90 fi 91 92 local existing_database=$(mysql -u root "${PASSWD_STRING}" -e "SELECT \ 93 SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$db_name'") 94 95 local sql_priv="GRANT ALL PRIVILEGES ON $db_name.* TO \ 96 'chromeosqa-admin'@'localhost' IDENTIFIED BY '${PASSWD}';" 97 98 if [ "${remotedb}" = "TRUE" ]; then 99 sql_priv="${sql_priv} GRANT ALL PRIVILEGES ON $db_name.* TO \ 100 'chromeosqa-admin'@'%' IDENTIFIED BY '${PASSWD}';" 101 fi 102 103 local sql_command="drop database if exists $db_name; \ 104 create database $db_name; \ 105 ${sql_priv} FLUSH PRIVILEGES;" 106 107 if [[ -z "${existing_database}" || "${clobberdb}" = 'TRUE' ]]; then 108 mysql -u root "${PASSWD_STRING}" -e "${sql_command}" 109 else 110 echo "Use existing database. Use option -c to clobber it." 111 fi 112 echo -e "Done!\n" 113 } 114 115 check_database 'chromeos_autotest_db' 116 check_database 'chromeos_lab_servers' 117 118 echo "Populating autotest mysql DB..." 119 "${AT_DIR}"/database/migrate.py sync -f 120 "${AT_DIR}"/frontend/manage.py syncdb --noinput 121 # You may have to run this twice. 122 "${AT_DIR}"/frontend/manage.py syncdb --noinput 123 "${AT_DIR}"/utils/test_importer.py 124 echo -e "Done!\n" 125 126 echo "Initializing chromeos_lab_servers mysql DB..." 127 "${AT_DIR}"/database/migrate.py sync -f -d AUTOTEST_SERVER_DB 128 echo -e "Done!\n" 129 130