From a17f4bdcfa9b6d550df9613f1efa8501ca92d5c9 Mon Sep 17 00:00:00 2001 From: Xingjian Zhang Date: Tue, 27 Sep 2022 19:39:55 +0800 Subject: [PATCH] Add some automatic steps & Fix SQL in install scripts Change-Id: I7e9bd8b308ddc84e95e694abe806eb7630b9919c --- install.sh | 14 +++++++++++++- tools/db/ec2api-db-setup | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index 61c0822e..ab20be44 100755 --- a/install.sh +++ b/install.sh @@ -354,4 +354,16 @@ $SUDO_PREFIX rm -rf build ec2_api.egg-info #recreate database echo Setuping database -$SUDO_PREFIX tools/db/ec2api-db-setup deb +PACKAGE_MANAGER_SELECTED=0 +while [ $PACKAGE_MANAGER_SELECTED -eq 0 ] +do + printf "Enter the package manager you use " + read PACKAGE_MANAGER + if [ $PACKAGE_MANAGER = "rpm" ] || [ $PACKAGE_MANAGER = "deb" ] ; then + PACKAGE_MANAGER_SELECTED=1 + else + echo "The package manager you entered \"${PACKAGE_MANAGER}\" is not in " + fi +done + +$SUDO_PREFIX tools/db/ec2api-db-setup $PACKAGE_MANAGER diff --git a/tools/db/ec2api-db-setup b/tools/db/ec2api-db-setup index e7bae17f..22291cbb 100755 --- a/tools/db/ec2api-db-setup +++ b/tools/db/ec2api-db-setup @@ -63,6 +63,11 @@ start_mysql_server() { $SERVICE_START } +check_mysql_credentials() { + echo "SELECT 1;" | mysql --protocol=TCP -u root --password=${MYSQL_ROOT_PW} > /dev/null + echo $? +} + MYSQL_EC2API_PW_DEFAULT="ec2api" MYSQL_EC2API_PW=${MYSQL_EC2API_PW_DEFAULT} EC2API_CONFIG="/etc/ec2api/ec2api.conf" @@ -211,9 +216,16 @@ then exit 1 fi elif [ ! "${MYSQL_ROOT_PW+defined}" ] ; then - printf "Please enter the password for the 'root' MySQL user: " - read -s MYSQL_ROOT_PW - echo + PW_OK=0 + while ! [ $PW_OK -eq 1 ]; + do + printf "Please enter the password for the 'root' MySQL user: " + read -s MYSQL_ROOT_PW + echo + if [ $(check_mysql_credentials) -eq 0 ]; then + PW_OK=1 + fi + done fi @@ -224,8 +236,7 @@ if [ "${MYSQL_ROOT_PW+defined}" ] then MYSQL_ROOT_PW_ARG="--password=${MYSQL_ROOT_PW}" fi -echo "SELECT 1;" | mysql --protocol=TCP -u root ${MYSQL_ROOT_PW_ARG} > /dev/null -if ! [ $? -eq 0 ] +if ! [ $(check_mysql_credentials) -eq 0 ] then echo "Failed to connect to the MySQL server. Please check your root user credentials." exit 1 @@ -236,6 +247,17 @@ echo "Verified connectivity to MySQL." # Now create the db. echo "Creating 'ec2api' database." +MYSQL_VERSION=`echo "select version();" | mysql -u root ${MYSQL_ROOT_PW_ARG} | grep -oP -m1 "^\d+(?=\..*)"` +if [[ $MYSQL_VERSION -ge 8 ]]; then +cat << EOF | mysql --protocol=TCP -u root ${MYSQL_ROOT_PW_ARG} +DROP DATABASE IF EXISTS ec2api; +CREATE DATABASE IF NOT EXISTS ec2api DEFAULT CHARACTER SET utf8; +CREATE USER 'ec2api'@'%' IDENTIFIED BY '${MYSQL_EC2API_PW}'; +GRANT ALL ON ec2api.* TO 'ec2api'@'localhost'; +GRANT ALL ON ec2api.* TO 'ec2api'@'%'; +flush privileges; +EOF +else cat << EOF | mysql --protocol=TCP -u root ${MYSQL_ROOT_PW_ARG} DROP DATABASE IF EXISTS ec2api; CREATE DATABASE IF NOT EXISTS ec2api DEFAULT CHARACTER SET utf8; @@ -243,6 +265,7 @@ GRANT ALL ON ec2api.* TO 'ec2api'@'localhost' IDENTIFIED BY '${MYSQL_EC2API_PW}' GRANT ALL ON ec2api.* TO 'ec2api'@'%' IDENTIFIED BY '${MYSQL_EC2API_PW}'; flush privileges; EOF +fi # Make sure ec2api configuration has the right MySQL password. @@ -277,12 +300,13 @@ args=(sys.stdout,) format=%(name)s - %(levelname)s - %(message)s EOF -pip install MySQL-python +pip install mysqlclient ec2-api-manage --log-config=$log_conf db_sync rm $log_conf # Do a final sanity check on the database. +echo "Run final sanity check." echo "SELECT * FROM migrate_version;" | mysql --protocol=TCP -u ec2api --password=${MYSQL_EC2API_PW} ec2api > /dev/null if ! [ $? -eq 0 ]