|
3 | 3 | # This script configures infoLogger MySQL DB from scratch |
4 | 4 | |
5 | 5 |
|
6 | | -echo "Configuration of Mysql database for infoLogger" |
7 | | -echo "Please follow instructions. Values in [] are defaults if nothing answered" |
8 | | -echo "" |
9 | 6 |
|
10 | 7 |
|
11 | | -# Ask which MySQL server to use |
12 | | -read -p "Enter MySQL server host name [localhost] : " MYSQL_HOST |
13 | | -if [ "$MYSQL_HOST" = "" ]; then MYSQL_HOST=localhost; fi |
| 8 | +# definition of default variables |
| 9 | +# they can be overridden when running in automated non-interactive mode |
| 10 | +# option i: disable interactive mode |
| 11 | +# option a: source a bash script (e.g. to override multiple variables at once) |
| 12 | +# option s: evaluate associated argument (e.g. to override a value) |
14 | 13 |
|
| 14 | +# defaults assume this script is executed on infoLoggerServer host |
| 15 | +# and that DB runs on same node (local connection to db) |
15 | 16 |
|
16 | | -# Test if a root password is defined |
17 | | -PWD="" |
18 | | -mysql -h $MYSQL_HOST -u root -e "exit" > /dev/null 2>&1 |
19 | | -if [ "$?" = "0" ]; then |
20 | | - echo "No password is defined yet to access MySQL server with user 'root' on $MYSQL_HOST" |
21 | | - stty -echo |
22 | | - read -p "Enter new root password for mysql [leave blank]: " PWD |
23 | | - stty echo |
24 | | - echo |
| 17 | +IS_INTERACTIVE=1 |
| 18 | +SQL_ROOT_USER=root |
| 19 | +SQL_ROOT_PWD="" |
| 20 | +SQL_ROOT_HOST=localhost |
25 | 21 |
|
26 | | - if [ "$PWD" != "" ]; then |
27 | | - stty -echo |
28 | | - read -p "Enter again: " PWD2 |
29 | | - stty echo |
30 | | - echo |
31 | | - if [ "$PWD" != "$PWD2" ]; then |
32 | | - echo "Mismatch!" |
33 | | - exit |
34 | | - fi |
35 | | - /usr/bin/mysqladmin -h $MYSQL_HOST -u root password "$PWD" |
36 | | - echo "Password updated" |
37 | | - PWD="-p$PWD" |
38 | | - # remove empty entries as well |
39 | | - mysql -h $MYSQL_HOST -u root $PWD -e "DELETE FROM mysql.user WHERE User = ''; \ |
40 | | - FLUSH PRIVILEGES;" 2>/dev/null |
41 | | - else |
42 | | - echo "Root password left blank" |
43 | | - fi |
44 | | - |
45 | | -else |
46 | | - stty -echo |
47 | | - read -p "Enter root password for mysql : " PWD |
48 | | - stty echo |
49 | | - echo |
50 | | - if [ "$PWD" != "" ]; then |
51 | | - PWD="-p$PWD" |
52 | | - fi |
| 22 | +# where are we running now |
| 23 | +HERE=`hostname -f` |
53 | 24 |
|
54 | | -fi |
| 25 | +# runtime location of infologger DB |
| 26 | +INFOLOGGER_DB_HOST=$HERE |
55 | 27 |
|
56 | | -# try connection |
57 | | -mysql -h $MYSQL_HOST -u root $PWD -e "exit" 2>/dev/null |
58 | | -if [ "$?" != "0" ]; then |
59 | | - echo "Connection failed" |
60 | | - exit |
61 | | -fi |
62 | | - |
63 | | -echo "Database creation - existing databases will NOT be destroyed" |
| 28 | +# definition of parameters to be configured for various infologger tasks |
| 29 | +declare -a EXTRA_CONFIG=(server browser admin); |
64 | 30 |
|
65 | | -# Create database |
66 | | -read -p "Enter a database name for infoLogger logs [INFOLOGGER] : " INFOLOGGER_MYSQL_DB |
67 | | -if [ "$INFOLOGGER_MYSQL_DB" = "" ]; then INFOLOGGER_MYSQL_DB=INFOLOGGER; fi |
68 | | -mysql -h $MYSQL_HOST -u root $PWD -e "create database $INFOLOGGER_MYSQL_DB" 2>/dev/null |
| 31 | +# mysql user name |
| 32 | +declare -A EXTRA_USER |
| 33 | +EXTRA_USER[server]="infoLoggerServer" |
| 34 | +EXTRA_USER[browser]="infoBrowser" |
| 35 | +EXTRA_USER[admin]="infoLoggerAdmin" |
| 36 | +# mysql user pwd |
| 37 | +declare -A EXTRA_PWD |
| 38 | +EXTRA_PWD[server]="" |
| 39 | +EXTRA_PWD[browser]="" |
| 40 | +EXTRA_PWD[admin]="" |
| 41 | +# mysql host |
| 42 | +declare -A EXTRA_HOST |
| 43 | +EXTRA_HOST[server]="localhost" |
| 44 | +EXTRA_HOST[browser]="$INFOLOGGER_DB_HOST" |
| 45 | +EXTRA_HOST[admin]="$INFOLOGGER_DB_HOST" |
| 46 | +# mysql user privileges |
| 47 | +declare -A EXTRA_PRIVILEGE |
| 48 | +EXTRA_PRIVILEGE[server]="insert" |
| 49 | +EXTRA_PRIVILEGE[browser]="select" |
| 50 | +EXTRA_PRIVILEGE[admin]="all privileges" |
69 | 51 |
|
| 52 | +# name of database |
| 53 | +INFOLOGGER_DB_NAME=INFOLOGGER |
70 | 54 |
|
| 55 | +# file where to put (if value is stdout, just print on screen) |
| 56 | +INFOLOGGER_CONFIG=stdout |
71 | 57 |
|
72 | 58 | # random password generator |
73 | 59 | function createPwd { |
74 | 60 | echo `< /dev/urandom tr -dc A-Za-z0-9 | head -c8` |
75 | 61 | } |
76 | 62 |
|
| 63 | +# generate random passwords for all infologger users |
| 64 | +for CONFIG in "${EXTRA_CONFIG[@]}"; do |
| 65 | + EXTRA_PWD[$CONFIG]=$(createPwd) |
| 66 | +done |
77 | 67 |
|
| 68 | +# an alias for mysql exe, easy to replace for dry run |
| 69 | +MYSQL_EXE=mysql |
| 70 | +#MYSQL_EXE=echo |
| 71 | + |
| 72 | + |
| 73 | +# parse command line arguments |
| 74 | +while getopts "ia:s:" option |
| 75 | +do |
| 76 | + case $option in |
| 77 | + i) |
| 78 | + echo "Running non-interactive, automated mode selected" |
| 79 | + IS_INTERACTIVE=0 |
| 80 | + ;; |
| 81 | + a) |
| 82 | + FN=$OPTARG |
| 83 | + if [ "$FN" != "" ]; then |
| 84 | + echo "Sourcing file '$FN'" |
| 85 | + if [ ! -f $FN ]; then |
| 86 | + echo "File not found" |
| 87 | + exit 1 |
| 88 | + fi |
| 89 | + # load source file to set parameters requested interactively otherwise |
| 90 | + # see name of default variables above, for those needing to be changed |
| 91 | + source $FN |
| 92 | + fi |
| 93 | + ;; |
| 94 | + s) |
| 95 | + eval $OPTARG |
| 96 | + ;; |
| 97 | + esac |
| 98 | +done |
78 | 99 |
|
79 | | -# Create accounts |
80 | | -declare -a EXTRA_CONFIG=(infoLoggerServer infoBrowser admin); |
| 100 | +if [ "$IS_INTERACTIVE" -eq "1" ]; then |
| 101 | + # begin interactive part |
| 102 | + |
| 103 | + echo "Configuration of Mysql database for infoLogger" |
| 104 | + echo "Please follow instructions. Values in [] are defaults if nothing answered" |
| 105 | + echo "" |
81 | 106 |
|
82 | | -declare -A EXTRA_USER |
83 | | -EXTRA_USER[infoLoggerServer]="infoLoggerServer" |
84 | | -EXTRA_USER[infoBrowser]="infoBrowser" |
85 | | -EXTRA_USER[admin]="infoLoggerAdmin" |
| 107 | + # Ask which MySQL server to use |
| 108 | + read -p "Enter MySQL server host name [$SQL_ROOT_HOST] : " P_SQL_ROOT_HOST |
| 109 | + if [ "$P_SQL_ROOT_HOST" != "" ]; then SQL_ROOT_HOST=$P_SQL_ROOT_HOST; fi |
86 | 110 |
|
87 | | -declare -A EXTRA_PWD |
88 | | -EXTRA_PWD[infoLoggerServer]=$(createPwd) |
89 | | -EXTRA_PWD[infoBrowser]=$(createPwd) |
90 | | -EXTRA_PWD[admin]=$(createPwd) |
| 111 | + # Test if a SQL_ROOT_USER password is defined |
| 112 | + mysql -h $SQL_ROOT_HOST -u $SQL_ROOT_USER -e "exit" > /dev/null 2>&1 |
| 113 | + if [ "$?" = "0" ]; then |
| 114 | + echo "No password is defined yet to access MySQL server with mysql user '$SQL_ROOT_USER' on $SQL_ROOT_HOST" |
| 115 | + stty -echo |
| 116 | + read -p "Enter new password for mysql user '$SQL_ROOT_USER' [leave blank]: " SQL_ROOT_PWD |
| 117 | + stty echo |
| 118 | + echo |
91 | 119 |
|
92 | | -declare -A EXTRA_PRIVILEGE |
93 | | -EXTRA_PRIVILEGE[infoLoggerServer]="insert" |
94 | | -EXTRA_PRIVILEGE[infoBrowser]="select" |
95 | | -EXTRA_PRIVILEGE[admin]="all privileges" |
| 120 | + if [ "$SQL_ROOT_PWD" != "" ]; then |
| 121 | + stty -echo |
| 122 | + read -p "Enter again: " SQL_ROOT_PWD2 |
| 123 | + stty echo |
| 124 | + echo |
| 125 | + if [ "$SQL_ROOT_PWD" != "$SQL_ROOT_PWD2" ]; then |
| 126 | + echo "Mismatch!" |
| 127 | + exit 1 |
| 128 | + fi |
| 129 | + /usr/bin/mysqladmin -h $SQL_ROOT_HOST -u $SQL_ROOT_USER password "$SQL_ROOT_PWD" |
| 130 | + echo "Password updated" |
| 131 | + # remove empty entries as well |
| 132 | + mysql -h $SQL_ROOT_HOST -u $SQL_ROOT_USER -p$SQL_ROOT_PWD -e "DELETE FROM mysql.user WHERE User = ''; \ |
| 133 | + FLUSH PRIVILEGES;" 2>/dev/null |
| 134 | + else |
| 135 | + echo "mysql user '$SQL_ROOT_USER' password left blank" |
| 136 | + fi |
96 | 137 |
|
97 | | -MYSQL_COMMANDS="" |
98 | | -HERE=`hostname -f` |
| 138 | + else |
| 139 | + stty -echo |
| 140 | + read -p "Enter password for mysql user '$SQL_ROOT_USER' : " SQL_ROOT_PWD |
| 141 | + stty echo |
| 142 | + echo |
| 143 | + fi |
| 144 | + |
| 145 | + read -p "Enter a database name for infoLogger logs [$INFOLOGGER_DB_NAME] : " P_INFOLOGGER_DB_NAME |
| 146 | + if [ "$P_INFOLOGGER_DB_NAME" != "" ]; then INFOLOGGER_DB_NAME=$P_INFOLOGGER_DB_NAME; fi |
| 147 | + |
| 148 | + read -p "Enter a file name where to save infoLogger configuration [just print on screen] : " P_INFOLOGGER_CONFIG |
| 149 | + if [ "$P_INFOLOGGER_CONFIG" != "" ]; then INFOLOGGER_CONFIG=$P_INFOLOGGER_CONFIG; fi |
99 | 150 |
|
| 151 | + # end interactive part |
| 152 | +fi |
| 153 | + |
| 154 | +# define command line password argument |
| 155 | +if [ "$SQL_ROOT_PWD" != "" ]; then |
| 156 | + SQL_PWD_ARG="-p$SQL_ROOT_PWD" |
| 157 | +fi |
| 158 | + |
| 159 | +# try connection |
| 160 | +mysql -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -e "exit" 2>/dev/null |
| 161 | +if [ "$?" != "0" ]; then |
| 162 | + echo "MySQL connection failed" |
| 163 | + exit 1 |
| 164 | +fi |
| 165 | + |
| 166 | +echo "Setting up mysql for infoLogger" |
| 167 | + |
| 168 | +# Create database |
| 169 | +$MYSQL_EXE -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -e "create database $INFOLOGGER_DB_NAME" 2>/dev/null |
| 170 | +echo "MySQL database $INFOLOGGER_DB_NAME created" |
| 171 | + |
| 172 | +# Create accounts SQL command |
| 173 | +MYSQL_COMMANDS="" |
100 | 174 | for CONFIG in "${EXTRA_CONFIG[@]}"; do |
101 | | - MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_MYSQL_DB.* to \"${EXTRA_USER[$CONFIG]}\"@\"%\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
| 175 | + MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_DB_NAME.* to \"${EXTRA_USER[$CONFIG]}\"@\"%\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
102 | 176 | MYSQL_COMMANDS=${MYSQL_COMMANDS}$'\n'${MYSQL_COMMAND} |
103 | | - MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_MYSQL_DB.* to \"${EXTRA_USER[$CONFIG]}\"@\"localhost\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
| 177 | + MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_DB_NAME.* to \"${EXTRA_USER[$CONFIG]}\"@\"localhost\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
104 | 178 | MYSQL_COMMANDS=${MYSQL_COMMANDS}$'\n'${MYSQL_COMMAND} |
105 | | - MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_MYSQL_DB.* to \"${EXTRA_USER[$CONFIG]}\"@\"${HERE}\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
| 179 | + MYSQL_COMMAND=`echo "grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_DB_NAME.* to \"${EXTRA_USER[$CONFIG]}\"@\"${HERE}\" identified by \"${EXTRA_PWD[$CONFIG]}\";"` |
106 | 180 | MYSQL_COMMANDS=${MYSQL_COMMANDS}$'\n'${MYSQL_COMMAND} |
107 | 181 | done |
108 | | -mysql -h $MYSQL_HOST -u root $PWD -e "$MYSQL_COMMANDS" |
| 182 | +$MYSQL_EXE -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -e "$MYSQL_COMMANDS" |
| 183 | +echo "MySQL infoLogger accounts created" |
109 | 184 |
|
110 | | -echo "" |
111 | | -echo "MySQL server accounts/db created" |
112 | | -echo "" |
113 | | -echo "You may use the following in the infoLogger config files:" |
| 185 | +# generate a sample configuration |
| 186 | +INFOLOGGER_SAMPLE_CONFIG="# infoLogger configuration file"$'\n'$'\n' |
114 | 187 | for CONFIG in "${EXTRA_CONFIG[@]}"; do |
115 | | - echo "[$CONFIG]" |
116 | | - echo "dbUser=${EXTRA_USER[$CONFIG]}" |
117 | | - echo "dbPassword=${EXTRA_PWD[$CONFIG]}" |
118 | | - echo "dbHost=$HERE" |
119 | | - echo "dbName=$INFOLOGGER_MYSQL_DB" |
120 | | - echo "" |
| 188 | + INFOLOGGER_SAMPLE_CONFIG+="[$CONFIG]"$'\n' |
| 189 | + INFOLOGGER_SAMPLE_CONFIG+="dbUser=${EXTRA_USER[$CONFIG]}"$'\n' |
| 190 | + INFOLOGGER_SAMPLE_CONFIG+="dbPassword=${EXTRA_PWD[$CONFIG]}"$'\n' |
| 191 | + INFOLOGGER_SAMPLE_CONFIG+="dbHost=${EXTRA_HOST[$CONFIG]}"$'\n' |
| 192 | + INFOLOGGER_SAMPLE_CONFIG+="dbName=$INFOLOGGER_DB_NAME"$'\n' |
| 193 | + INFOLOGGER_SAMPLE_CONFIG+=""$'\n' |
121 | 194 | done |
| 195 | + |
| 196 | +if [ "$INFOLOGGER_CONFIG" != "" ]; then |
| 197 | + if [ "$INFOLOGGER_CONFIG" != "stdout" ]; then |
| 198 | + echo "Sample configuration saved to $INFOLOGGER_CONFIG" |
| 199 | + echo "$INFOLOGGER_SAMPLE_CONFIG" > $INFOLOGGER_CONFIG |
| 200 | + else |
| 201 | + echo -e "You may use the following in the infoLogger config files:\n\n" |
| 202 | + echo "$INFOLOGGER_SAMPLE_CONFIG" |
| 203 | + fi |
| 204 | +fi |
0 commit comments