Skip to content

Commit 2c4e550

Browse files
committed
added non-interactive mode
1 parent be19840 commit 2c4e550

File tree

1 file changed

+168
-85
lines changed

1 file changed

+168
-85
lines changed

newMysql.sh

100755100644
Lines changed: 168 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -3,119 +3,202 @@
33
# This script configures infoLogger MySQL DB from scratch
44
55

6-
echo "Configuration of Mysql database for infoLogger"
7-
echo "Please follow instructions. Values in [] are defaults if nothing answered"
8-
echo ""
96

107

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)
1413

14+
# defaults assume this script is executed on infoLoggerServer host
15+
# and that DB runs on same node (local connection to db)
1516

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
2521

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`
5324

54-
fi
25+
# runtime location of infologger DB
26+
INFOLOGGER_DB_HOST=$HERE
5527

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);
6430

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"
6951

52+
# name of database
53+
INFOLOGGER_DB_NAME=INFOLOGGER
7054

55+
# file where to put (if value is stdout, just print on screen)
56+
INFOLOGGER_CONFIG=stdout
7157

7258
# random password generator
7359
function createPwd {
7460
echo `< /dev/urandom tr -dc A-Za-z0-9 | head -c8`
7561
}
7662

63+
# generate random passwords for all infologger users
64+
for CONFIG in "${EXTRA_CONFIG[@]}"; do
65+
EXTRA_PWD[$CONFIG]=$(createPwd)
66+
done
7767

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
7899

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 ""
81106

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
86110

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
91119

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
96137

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
99150

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=""
100174
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]}\";"`
102176
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]}\";"`
104178
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]}\";"`
106180
MYSQL_COMMANDS=${MYSQL_COMMANDS}$'\n'${MYSQL_COMMAND}
107181
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"
109184

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'
114187
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'
121194
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

Comments
 (0)