[LON-CAPA-cvs] cvs: loncom /metadata_database configure_mysql_db.pl

matthew lon-capa-cvs@mail.lon-capa.org
Tue, 22 Jul 2003 19:24:36 -0000


This is a MIME encoded message

--matthew1058901876
Content-Type: text/plain

matthew		Tue Jul 22 15:24:36 2003 EDT

  Modified files:              
    /loncom/metadata_database	configure_mysql_db.pl 
  Log:
  Pretty major rewrite:
      Now attempt to detect absence of DBI and MySQL DBD component and, if
  possible, fix it automatically.
      Added creation of dynamicmetadata table in database.
  
  This script is *almost* ready to be run during "make install".
  
  
--matthew1058901876
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20030722152436.txt"

Index: loncom/metadata_database/configure_mysql_db.pl
diff -u loncom/metadata_database/configure_mysql_db.pl:1.1 loncom/metadata_database/configure_mysql_db.pl:1.2
--- loncom/metadata_database/configure_mysql_db.pl:1.1	Tue Apr 29 15:09:56 2003
+++ loncom/metadata_database/configure_mysql_db.pl	Tue Jul 22 15:24:35 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network 
 # Red Hat 7.3 installation script
 #
-# $Id: configure_mysql_db.pl,v 1.1 2003/04/29 19:09:56 matthew Exp $
+# $Id: configure_mysql_db.pl,v 1.2 2003/07/22 19:24:35 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -24,57 +24,156 @@
 #
 # http://www.lon-capa.org/
 #
+use strict;
+use lib '/home/httpd/lib/perl/';
+use LONCAPA::Configuration;
 
+my $runstatus = shift();
+if (! defined($runstatus)) {
+    $runstatus = 'firstrun';
+}
+
+my $rpmname = "perl-DBD-MySQL-1.2216-4.i386.rpm";
+
+my $perlvar = &LONCAPA::Configuration::read_conf('loncapa.conf');
+delete($perlvar->{'lonReceipt'}); # remove since sensitive and not needed
+
+##
+## Set up mysql to run on boot
 ##
-## Set up mysql
+my $add_result = system("/sbin/chkconfig --add mysqld 2>/dev/null");
+my $on_result = system("/sbin/chkconfig mysqld on 2>/dev/null");
+if ($add_result != 0 || $on_result != 0) {
+    print "Your system is misconfigured.  ".
+        "You do not have MySQL installed.\n";
+    exit 1;
+}
+
+##
+## Make sure it is running now
 ##
-print("Setting mysqld to start on boot up.\n");
-system("/sbin/chkconfig --add mysqld");
-system("/sbin/chkconfig mysqld on");
-print(`/sbin/chkconfig --list mysqld`);
-
-print("mysql links created successfully\n");
-print(`/etc/rc.d/init.d/mysqld start`);
-print("Waiting for mysql daemon to start.\n");
-sleep 5;
-my $status = system("/etc/rc.d/init.d/mysqld status");
+my $status = system("/etc/rc.d/init.d/mysqld status 1>/dev/null");
 if ($status != 0) {
-    die "Unable to start mysql daemon\nHalting\n";
-} else {
-    print("Mysql daemon is running.\n");
+    print(`/etc/rc.d/init.d/mysqld restart`);
+    print("Waiting 5 seconds for mysql daemon to restart.\n");
+    sleep 5;
+    my $status = system("/etc/rc.d/init.d/mysqld status");
+    if ($status != 0) {
+        die "Unable to start mysql daemon\nHalting\n";
+    }
 }
-print("\n");
 
 ##
-## Get root password for mysql client
+## Make sure the mysql is configured
 ##
-print <<END;
-Please enter a root password for the mysql database.
+if ($runstatus eq 'firstrun' && (! exists($perlvar->{'lonSqlAccess'}) || 
+                                 ! defined($perlvar->{'lonSqlAccess'}))) {
+    ##
+    ## Get root password for mysql client
+    print <<END;
+Please enter a root password for the MySQL database.
 It does not have to match your root account password, but you will need
 to remember it.
 END
-my $rootpass = <>;
-chomp $rootpass;
-print("\n");
+    my $rootpass = <>;
+    chomp $rootpass;
+    print("\n");
 
-##
-## Run the damn thing (mysql, not LON-CAPA)
-##
-print("Starting mysql client.\n");
-open MYSQL, "|mysql -u root mysql" || die "Unable to start mysql\n";
-print MYSQL <<"ENDMYSQL";
-CREATE DATABASE loncapa;
-INSERT INTO user (Host, User, Password)
-VALUES ('localhost','www',password('localhostkey'));
-INSERT INTO db VALUES ('localhost','loncapa','www',
-'Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
+    print("Starting mysql client and setting up permissions\n");
+    open MYSQL, "|mysql -u root mysql" || die "Unable to start mysql\n";
+    print MYSQL <<"ENDMYSQLPERMISSIONINIT";
+CREATE DATABASE IF NOT EXISTS loncapa;
+USE mysql;
+INSERT IGNORE INTO user (Host, User, Password)
+    VALUES ('localhost','www',password('localhostkey'));
+INSERT IGNORE INTO db VALUES ('localhost','loncapa','www',
+    'Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
 SET PASSWORD FOR root\@localhost=PASSWORD('$rootpass');
 DELETE FROM user WHERE host<>'localhost';
 FLUSH PRIVILEGES;
-USE loncapa;
-CREATE TABLE IF NOT EXISTS metadata (title TEXT, author TEXT, subject TEXT, url TEXT, keywords TEXT, version TEXT, notes TEXT, abstract TEXT, mime TEXT, language TEXT, creationdate DATETIME, lastrevisiondate DATETIME, owner TEXT, copyright TEXT, FULLTEXT idx_title (title), FULLTEXT idx_author (author), FULLTEXT idx_subject (subject), FULLTEXT idx_url (url), FULLTEXT idx_keywords (keywords), FULLTEXT idx_version (version), FULLTEXT idx_notes (notes), FULLTEXT idx_abstract (abstract), FULLTEXT idx_mime (mime), FULLTEXT idx_language (language), FULLTEXT idx_owner (owner), FULLTEXT idx_copyright (copyright)) TYPE=MYISAM;
 EXIT
-ENDMYSQL
+ENDMYSQLPERMISSIONINIT
+    $perlvar->{'lonSqlAccess'} = 'localhostkey';
+}
+
+my $dbi_is_present = eval "use DBI;"; # will be defined on error
+if (defined($dbi_is_present)) {
+    print "Your system is misconfigured.  ".
+        "You are missing the perl DBI package\n";
+    exit 1;
+}
+
+my $dbh;
+my $MySQL_Check = eval '$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar->{\'lonSqlAccess\'});';
+if (! defined($MySQL_Check)) {
+    if ($runstatus ne 'firstrun') {
+        print "Your system is misconfigured.\n";
+        exit 1;
+    }
+    #
+    # Try to install from the current directory.  
+    # This is potentially dangerous
+    my $install_result = system("rpm -Uvh $rpmname 2>/dev/null 1>/dev/null");
+    if (defined($install_result) && $install_result ne '0') {
+        print "Your system is misconfigured.  ".
+            "You are missing the perl DBD MySQL package\n";
+        exit 1;
+    }
+    exec "./".$0." secondrun";
+}
+
+use DBI;
+$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar->{'lonSqlAccess'});
+if (! defined($dbh)) {
+    die "Unable to connect to mysql database.\n";
+}
+$dbh->do(<<ENDDBINIT);
+CREATE TABLE IF NOT EXISTS metadata (title TEXT, 
+                                     author TEXT, 
+                                     subject TEXT, 
+                                     url TEXT, 
+                                     keywords TEXT, 
+                                     version TEXT, 
+                                     notes TEXT, 
+                                     abstract TEXT, 
+                                     mime TEXT, 
+                                     language TEXT, 
+                                     creationdate DATETIME, 
+                                     lastrevisiondate DATETIME, 
+                                     owner TEXT, 
+                                     copyright TEXT, 
+                                     FULLTEXT idx_title (title), 
+                                     FULLTEXT idx_author (author), 
+                                     FULLTEXT idx_subject (subject), 
+                                     FULLTEXT idx_url (url), 
+                                     FULLTEXT idx_keywords (keywords), 
+                                     FULLTEXT idx_version (version), 
+                                     FULLTEXT idx_notes (notes), 
+                                     FULLTEXT idx_abstract (abstract), 
+                                     FULLTEXT idx_mime (mime), 
+                                     FULLTEXT idx_language (language), 
+                                     FULLTEXT idx_owner (owner), 
+                                     FULLTEXT idx_copyright (copyright)
+                                     ) TYPE=MYISAM
+ENDDBINIT
+
+$dbh->do(<<ENDDBINIT);
+CREATE TABLE IF NOT EXISTS dynamicmetadata (url TEXT NOT NULL, 
+                                            count INT UNSIGNED,
+                                            num_uses INT UNSIGNED,
+                                            clear REAL UNSIGNED,
+                                            depth REAL UNSIGNED,
+                                            helpful REAL UNSIGNED,
+                                            correct REAL UNSIGNED,
+                                            technical REAL UNSIGNED,
+                                            avetries REAL UNSIGNED,
+                                            stdno INT UNSIGNED)
+
+ENDDBINIT
+
+if ($dbh->err) {
+    print "Error creating tables: ".$dbh->errstr()."\n";
+}
+$dbh->disconnect();
 
-close MYSQL;
 

--matthew1058901876--