Annotation of loncom/metadata_database/configure_mysql_db.pl, revision 1.4

1.1       matthew     1: #!/usr/bin/perl -w
                      2: # The LearningOnline Network 
                      3: # Red Hat 7.3 installation script
                      4: #
1.4     ! raeburn     5: # $Id: configure_mysql_db.pl,v 1.3 2003/08/22 22:30:50 albertel Exp $
1.1       matthew     6: #
                      7: # Copyright Michigan State University Board of Trustees
                      8: #
                      9: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                     10: #
                     11: # LON-CAPA is free software; you can redistribute it and/or modify
                     12: # it under the terms of the GNU General Public License as published by
                     13: # the Free Software Foundation; either version 2 of the License, or
                     14: # (at your option) any later version.
                     15: #
                     16: # LON-CAPA is distributed in the hope that it will be useful,
                     17: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     18: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     19: # GNU General Public License for more details.
                     20: #
                     21: # You should have received a copy of the GNU General Public License
                     22: # along with LON-CAPA; if not, write to the Free Software
                     23: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     24: #
                     25: # http://www.lon-capa.org/
                     26: #
1.2       matthew    27: use strict;
                     28: use lib '/home/httpd/lib/perl/';
                     29: use LONCAPA::Configuration;
1.1       matthew    30: 
1.2       matthew    31: my $runstatus = shift();
                     32: if (! defined($runstatus)) {
                     33:     $runstatus = 'firstrun';
                     34: }
1.3       albertel   35: my $rhver=`perl ../build/distprobe`;
                     36: my $rpmname;
                     37: if ($rhver eq 'redhat9') {
                     38:     $rpmname = "perl-DBD-MySQL-2.9002-1.i386.rpm";
                     39: } else {
                     40:     $rpmname = "perl-DBD-MySQL-1.2216-4.i386.rpm";
                     41: }
1.2       matthew    42: 
                     43: my $perlvar = &LONCAPA::Configuration::read_conf('loncapa.conf');
                     44: delete($perlvar->{'lonReceipt'}); # remove since sensitive and not needed
                     45: 
                     46: ##
                     47: ## Set up mysql to run on boot
1.1       matthew    48: ##
1.2       matthew    49: my $add_result = system("/sbin/chkconfig --add mysqld 2>/dev/null");
                     50: my $on_result = system("/sbin/chkconfig mysqld on 2>/dev/null");
                     51: if ($add_result != 0 || $on_result != 0) {
                     52:     print "Your system is misconfigured.  ".
                     53:         "You do not have MySQL installed.\n";
                     54:     exit 1;
                     55: }
                     56: 
                     57: ##
                     58: ## Make sure it is running now
1.1       matthew    59: ##
1.2       matthew    60: my $status = system("/etc/rc.d/init.d/mysqld status 1>/dev/null");
1.1       matthew    61: if ($status != 0) {
1.2       matthew    62:     print(`/etc/rc.d/init.d/mysqld restart`);
                     63:     print("Waiting 5 seconds for mysql daemon to restart.\n");
                     64:     sleep 5;
                     65:     my $status = system("/etc/rc.d/init.d/mysqld status");
                     66:     if ($status != 0) {
                     67:         die "Unable to start mysql daemon\nHalting\n";
                     68:     }
1.1       matthew    69: }
                     70: 
                     71: ##
1.2       matthew    72: ## Make sure the mysql is configured
1.1       matthew    73: ##
1.2       matthew    74: if ($runstatus eq 'firstrun' && (! exists($perlvar->{'lonSqlAccess'}) || 
                     75:                                  ! defined($perlvar->{'lonSqlAccess'}))) {
                     76:     ##
                     77:     ## Get root password for mysql client
                     78:     print <<END;
                     79: Please enter a root password for the MySQL database.
1.1       matthew    80: It does not have to match your root account password, but you will need
                     81: to remember it.
                     82: END
1.2       matthew    83:     my $rootpass = <>;
                     84:     chomp $rootpass;
                     85:     print("\n");
1.1       matthew    86: 
1.3       albertel   87:     my $extraargs;
                     88:     if ($rhver eq 'redhat9') { $extraargs=",'Y','Y'"; }
1.2       matthew    89:     print("Starting mysql client and setting up permissions\n");
                     90:     open MYSQL, "|mysql -u root mysql" || die "Unable to start mysql\n";
                     91:     print MYSQL <<"ENDMYSQLPERMISSIONINIT";
                     92: CREATE DATABASE IF NOT EXISTS loncapa;
                     93: USE mysql;
                     94: INSERT IGNORE INTO user (Host, User, Password)
                     95:     VALUES ('localhost','www',password('localhostkey'));
                     96: INSERT IGNORE INTO db VALUES ('localhost','loncapa','www',
1.3       albertel   97:     'Y','Y','Y','Y','Y','Y','N','Y','Y','Y'$extraargs);
1.1       matthew    98: SET PASSWORD FOR root\@localhost=PASSWORD('$rootpass');
                     99: DELETE FROM user WHERE host<>'localhost';
                    100: FLUSH PRIVILEGES;
                    101: EXIT
1.2       matthew   102: ENDMYSQLPERMISSIONINIT
                    103:     $perlvar->{'lonSqlAccess'} = 'localhostkey';
                    104: }
                    105: 
                    106: my $dbi_is_present = eval "use DBI;"; # will be defined on error
                    107: if (defined($dbi_is_present)) {
                    108:     print "Your system is misconfigured.  ".
                    109:         "You are missing the perl DBI package\n";
                    110:     exit 1;
1.3       albertel  111: } else {
                    112:     use DBI;
1.2       matthew   113: }
                    114: 
                    115: my $dbh;
                    116: my $MySQL_Check = eval '$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar->{\'lonSqlAccess\'});';
                    117: if (! defined($MySQL_Check)) {
                    118:     if ($runstatus ne 'firstrun') {
                    119:         print "Your system is misconfigured.\n";
                    120:         exit 1;
                    121:     }
                    122:     #
                    123:     # Try to install from the current directory.  
                    124:     # This is potentially dangerous
                    125:     my $install_result = system("rpm -Uvh $rpmname 2>/dev/null 1>/dev/null");
                    126:     if (defined($install_result) && $install_result ne '0') {
                    127:         print "Your system is misconfigured.  ".
                    128:             "You are missing the perl DBD MySQL package\n";
                    129:         exit 1;
                    130:     }
                    131:     exec "./".$0." secondrun";
                    132: }
                    133: 
                    134: use DBI;
                    135: $dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar->{'lonSqlAccess'});
                    136: if (! defined($dbh)) {
                    137:     die "Unable to connect to mysql database.\n";
                    138: }
                    139: $dbh->do(<<ENDDBINIT);
                    140: CREATE TABLE IF NOT EXISTS metadata (title TEXT, 
                    141:                                      author TEXT, 
                    142:                                      subject TEXT, 
                    143:                                      url TEXT, 
                    144:                                      keywords TEXT, 
                    145:                                      version TEXT, 
                    146:                                      notes TEXT, 
                    147:                                      abstract TEXT, 
                    148:                                      mime TEXT, 
                    149:                                      language TEXT, 
                    150:                                      creationdate DATETIME, 
                    151:                                      lastrevisiondate DATETIME, 
                    152:                                      owner TEXT, 
                    153:                                      copyright TEXT, 
                    154:                                      FULLTEXT idx_title (title), 
                    155:                                      FULLTEXT idx_author (author), 
                    156:                                      FULLTEXT idx_subject (subject), 
                    157:                                      FULLTEXT idx_url (url), 
                    158:                                      FULLTEXT idx_keywords (keywords), 
                    159:                                      FULLTEXT idx_version (version), 
                    160:                                      FULLTEXT idx_notes (notes), 
                    161:                                      FULLTEXT idx_abstract (abstract), 
                    162:                                      FULLTEXT idx_mime (mime), 
                    163:                                      FULLTEXT idx_language (language), 
                    164:                                      FULLTEXT idx_owner (owner), 
                    165:                                      FULLTEXT idx_copyright (copyright)
1.4     ! raeburn   166:                                      ) ENGINE=MYISAM
1.2       matthew   167: ENDDBINIT
                    168: 
                    169: $dbh->do(<<ENDDBINIT);
                    170: CREATE TABLE IF NOT EXISTS dynamicmetadata (url TEXT NOT NULL, 
                    171:                                             count INT UNSIGNED,
                    172:                                             num_uses INT UNSIGNED,
                    173:                                             clear REAL UNSIGNED,
                    174:                                             depth REAL UNSIGNED,
                    175:                                             helpful REAL UNSIGNED,
                    176:                                             correct REAL UNSIGNED,
                    177:                                             technical REAL UNSIGNED,
                    178:                                             avetries REAL UNSIGNED,
                    179:                                             stdno INT UNSIGNED)
                    180: 
                    181: ENDDBINIT
                    182: 
                    183: if ($dbh->err) {
                    184:     print "Error creating tables: ".$dbh->errstr()."\n";
                    185: }
                    186: $dbh->disconnect();
1.1       matthew   187: 
                    188: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>