lin
2025-07-30 fcd736bf35fd93b563e9bbf594f2aa7b62028cc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/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"