From 4a83beff4da2f4d4cd52d63c7b3abc9e999f8fca Mon Sep 17 00:00:00 2001
From: Bob Igo <bob@stormlogic.com>
Date: Sat, 6 Jun 2009 15:25:52 -0400
Subject: mysql server was not always working properly in chroot within
 install_db_chroot.sh

---
 .../LinHES-config-svn/install_db_chroot.sh         |  14 ++-
 .../LinHES-config/install_db_chroot.sh             | 130 ++++++++++++++-------
 2 files changed, 102 insertions(+), 42 deletions(-)

diff --git a/abs/core-testing/LinHES-config-svn/install_db_chroot.sh b/abs/core-testing/LinHES-config-svn/install_db_chroot.sh
index f187ba8..6dcbfd5 100755
--- a/abs/core-testing/LinHES-config-svn/install_db_chroot.sh
+++ b/abs/core-testing/LinHES-config-svn/install_db_chroot.sh
@@ -11,11 +11,19 @@ echo "install_db_chroot hostname is $hostname"
 . $MV_ROOT/bin/install_functions.sh
 #myhost=`cat /etc/hostname`
 
+# Before this script is called, the mysqld that facilitated the installation is killed.
+# We need to make sure to stop and start the mysqld that will be used post-install so
+# that the database can be initialized.
+
+/etc/rc.d/mysqld stop
+/etc/rc.d/mysqld stop
+/etc/rc.d/mysqld start
+
 # Put a limit on how many times we try to (re-)start MySQL
 success_test() {
     # parameter: number of tries to start mysqld so far
     PID=`pidof -o %PPID /usr/sbin/mysqld`
-    if [ -z "$PID" ]; then
+    if [ -z "$PID" ]; then # mysqld isn't running
 	if [ $1 -gt 3 ]; then
 	    echo "ERROR: Failed to start MySQL server in $1 attempts."
 	    sleep 5
@@ -24,9 +32,11 @@ success_test() {
 	    echo "Tried $1 time(s) to start MySQL server." 
 	    return 1
 	fi
-    else
+    else # mysqld is running
 	return 0
     fi
+    # should never get here
+    return 1
 }
 
 mysqld_tries=0
diff --git a/abs/core-testing/LinHES-config/install_db_chroot.sh b/abs/core-testing/LinHES-config/install_db_chroot.sh
index 1a0131e..6dcbfd5 100755
--- a/abs/core-testing/LinHES-config/install_db_chroot.sh
+++ b/abs/core-testing/LinHES-config/install_db_chroot.sh
@@ -11,53 +11,103 @@ echo "install_db_chroot hostname is $hostname"
 . $MV_ROOT/bin/install_functions.sh
 #myhost=`cat /etc/hostname`
 
-#mount -t proc none /proc
-pacman --noconfirm -Sf mysql
-/etc/rc.d/mysqld
-
-status=1
-mysqlstatus=1
-while [ ! $status = 0  ]
-do
-    /etc/rc.d/mysqld stop
-    sleep 1
-    /etc/rc.d/mysqld start
-    mysqlstatus=$?
-    if [ $mysqlstatus = 0 ]
-    then
-   	mysql -e "show databases;"
-        showstatus=$?
-        if [ $showstatus = 0 ]
-        then
-            pacman --noconfirm -R mythdb-initial
-            pacman --noconfirm -S mythdb-initial
-            $MV_ROOT/bin/restore_default_settings.sh -c load
-            DISPLAY=127.0.0.1:0  $MV_ROOT/bin/MythVantage  -t  restore,default_1
-            $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
-            $MV_ROOT/bin/systemconfig.sh misc,hostype,this_is_install
-
-            update_db_settings HostServiceMythWEB "1"
-            echo 'UseMythWEB="1"' >> /etc/systemconfig
-
-            #update database to allow user jobs on this host.
-            $MV_ROOT/bin/restore_default_settings.sh  -c  USERJOBALLOW
-            $MV_ROOT/bin/restore_default_settings.sh  -c  ACCESSCONTROL
-	   if [ -d /data/srv/mysql/mythconverg ]
-	   #if [ -d /var/lib/mysql/mythconverg ]
-	   then
+# Before this script is called, the mysqld that facilitated the installation is killed.
+# We need to make sure to stop and start the mysqld that will be used post-install so
+# that the database can be initialized.
+
+/etc/rc.d/mysqld stop
+/etc/rc.d/mysqld stop
+/etc/rc.d/mysqld start
+
+# Put a limit on how many times we try to (re-)start MySQL
+success_test() {
+    # parameter: number of tries to start mysqld so far
+    PID=`pidof -o %PPID /usr/sbin/mysqld`
+    if [ -z "$PID" ]; then # mysqld isn't running
+	if [ $1 -gt 3 ]; then
+	    echo "ERROR: Failed to start MySQL server in $1 attempts."
+	    sleep 5
+	    exit 1
+	else
+	    echo "Tried $1 time(s) to start MySQL server." 
+	    return 1
+	fi
+    else # mysqld is running
+	return 0
+    fi
+    # should never get here
+    return 1
+}
+
+mysqld_tries=0
+# See if MySQL server is running; try several ways to start it if it's not.
+while true; do
+    success_test $mysqld_tries
+    if [ $? -eq 0 ]; then
+	echo "MySQL server is running"
+	break
+    else
+	echo "MySQL server is not running.  Trying to start it."
+	# Maybe it just needs to be started
+	/etc/rc.d/mysqld start
+	mysqld_tries=$((mysqld_tries + 1))
+	success_test $mysqld_tries
+	if [ $? -eq 0 ]; then
+	    echo "MySQL server has been started"
+	    break
+	else
+	    echo "MySQL server may not be installed.  Trying to install it."
+	    # Maybe it's not installed; try (re-)installing it and starting it
+	    pacman --noconfirm -Sf mysql
+	    /etc/rc.d/mysqld start
+	    mysqld_tries=$((mysqld_tries + 1))
+	    success_test $mysqld_tries
+	    if [ $? -eq 0 ]; then
+		echo "MySQL server has been installed and started"
+		break
+	    else
+		echo "MySQL server would not start, even after (re-)installing it."
+	    fi
+	fi
+    fi
+done
+
+# At this point, MySQL server should be up and running
+
+while true; do
+    mysql -e "show databases;"
+
+    if [ $? -eq 0 ]; then
+        pacman --noconfirm -R mythdb-initial
+        pacman --noconfirm -S mythdb-initial
+        $MV_ROOT/bin/restore_default_settings.sh -c load
+        DISPLAY=127.0.0.1:0  $MV_ROOT/bin/MythVantage  -t  restore,default_1
+        $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
+        $MV_ROOT/bin/systemconfig.sh misc,hostype,this_is_install
+	
+        update_db_settings HostServiceMythWEB "1"
+        echo 'UseMythWEB="1"' >> /etc/systemconfig
+	
+        #update database to allow user jobs on this host.
+        $MV_ROOT/bin/restore_default_settings.sh  -c  USERJOBALLOW
+        $MV_ROOT/bin/restore_default_settings.sh  -c  ACCESSCONTROL
+	#if [ -d /var/lib/mysql/mythconverg ]
+	if [ -d /data/srv/mysql/mythconverg ]; then
    	     # pacman --noconfirm -R webcalendar
          #   pacman --noconfirm --nodeps  -S webcalendar
-	    status=0
-	   fi
+	    break
+	else
+	    echo "Failed to create mythconverg database.  Will re-try."
+	    sleep 1
+	fi
 #        if [ $SystemType = "Master_backend" ]
 #        then
 #             $MV_ROOT/bin/restore_default_settings.sh  -c  BECONFIG  -s master  -a $dbhost
 #        fi
-   	fi
+    else
+	echo "Failed to look for databases.  Will re-try."
+	sleep 1
     fi
 done
 /etc/rc.d/mysqld stop
 #umount /proc
-
-
-
-- 
cgit v0.12

