Diff for /doc/install/linux/install.pl between versions 1.32 and 1.37

version 1.32, 2014/10/29 20:56:18 version 1.37, 2016/08/09 15:20:45
Line 385  sub check_required { Line 385  sub check_required {
     unless ($localecmd eq '') {      unless ($localecmd eq '') {
         return ($distro,$gotprereqs,$localecmd);          return ($distro,$gotprereqs,$localecmd);
     }      }
     my ($mysqlon,$mysqlsetup,$dbh,$has_pass,$has_lcdb,%recommended,$downloadstatus,      my ($mysqlon,$mysqlsetup,$mysqlrestart,$dbh,$has_pass,$has_lcdb,%recommended,
         $filetouse,$production,$testing,$apachefw,$tostop);          $downloadstatus,$filetouse,$production,$testing,$apachefw,$tostop,$uses_systemctl);
     my $wwwuid = &uid_of_www();      my $wwwuid = &uid_of_www();
     my $wwwgid = getgrnam('www');      my $wwwgid = getgrnam('www');
     if (($wwwuid eq '') || ($wwwgid eq '')) {      if (($wwwuid eq '') || ($wwwgid eq '')) {
Line 398  sub check_required { Line 398  sub check_required {
     $mysqlon = &check_mysql_running($distro);      $mysqlon = &check_mysql_running($distro);
     if ($mysqlon) {      if ($mysqlon) {
         my $mysql_has_wwwuser = &check_mysql_wwwuser();          my $mysql_has_wwwuser = &check_mysql_wwwuser();
         ($mysqlsetup,$has_pass,$dbh) =           ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser) = 
             &check_mysql_setup($instdir,$dsn);              &check_mysql_setup($instdir,$dsn,$distro,$mysql_has_wwwuser);
         if ($mysqlsetup eq 'noroot') {          if ($mysqlsetup eq 'needsrestart') {
             $recommended{'mysqlperms'} = 1;              $mysqlrestart = '';
               if ($distro eq 'ubuntu') {
                   $mysqlrestart = 'sudo '; 
               }
               $mysqlrestart .= 'service mysql restart';
               return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$mysqlrestart);
         } else {          } else {
             unless ($mysql_has_wwwuser) {              if ($mysqlsetup eq 'noroot') {
                 $recommended{'mysqlperms'} = 1;                  $recommended{'mysqlperms'} = 1;
               } else {
                   unless ($mysql_has_wwwuser) {
                       $recommended{'mysqlperms'} = 1;
                   }
               }
               if ($dbh) {
                   $has_lcdb = &check_loncapa_mysqldb($dbh);
               }
               unless ($has_lcdb) {
                   $recommended{'mysql'} = 1;
             }              }
         }  
         if ($dbh) {  
             $has_lcdb = &check_loncapa_mysqldb($dbh);  
         }  
         unless ($has_lcdb) {  
             $recommended{'mysql'} = 1;  
         }          }
     }      }
     ($recommended{'firewall'},$apachefw) = &chkfirewall($distro);      ($recommended{'firewall'},$apachefw) = &chkfirewall($distro);
     ($recommended{'runlevels'},$tostop) = &chkconfig($distro,$instdir);      ($recommended{'runlevels'},$tostop,$uses_systemctl) = &chkconfig($distro,$instdir);
     $recommended{'apache'} = &chkapache($distro,$instdir);      $recommended{'apache'} = &chkapache($distro,$instdir);
     $recommended{'stopsrvcs'} = &chksrvcs($distro,$tostop);      $recommended{'stopsrvcs'} = &chksrvcs($distro,$tostop);
     ($recommended{'download'},$downloadstatus,$filetouse,$production,$testing)       ($recommended{'download'},$downloadstatus,$filetouse,$production,$testing) 
         = &need_download();          = &need_download();
     return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,      return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,
             \%recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,              $mysqlrestart,\%recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,
             $filetouse,$production,$testing,$apachefw);              $filetouse,$production,$testing,$apachefw,$uses_systemctl);
 }  }
   
 sub check_mysql_running {  sub check_mysql_running {
Line 439  sub check_mysql_running { Line 448  sub check_mysql_running {
             $process = 'mysqld';              $process = 'mysqld';
             $proc_owner = 'mysql';              $proc_owner = 'mysql';
         }          }
     }      } elsif ($distro =~ /^fedora(\d+)/) {
     if ($distro =~ /^fedora(\d+)/) {  
         if ($1 >= 16) {          if ($1 >= 16) {
             $process = 'mysqld';              $process = 'mysqld';
             $proc_owner = 'mysql';              $proc_owner = 'mysql';
             $use_systemctl = 1;              $use_systemctl = 1;
         }          }
     }          if ($1 >= 22) {
     if ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) {              $mysqldaemon ='mariadb';
           }
       } elsif ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) {
         if ($1 >= 7) {          if ($1 >= 7) {
             $mysqldaemon ='mariadb';              $mysqldaemon ='mariadb';
             $process = 'mysqld';              $process = 'mysqld';
             $proc_owner = 'mysql';              $proc_owner = 'mysql';
             $use_systemctl = 1;              $use_systemctl = 1;
         }          }
       } elsif ($distro =~ /^sles(\d+)/) {
           if ($1 >= 12) {
               $use_systemctl = 1;
           }
       } elsif ($distro =~ /^suse(\d+)/) {
           if ($1 >= 13) {
               $use_systemctl = 1;
           }
     }      }
     if (open(PIPE,"ps -ef |grep $process |grep -v grep 2>&1 |")) {      if (open(PIPE,"ps -ef |grep $process |grep ^$proc_owner |grep -v grep 2>&1 |")) {
         my $status = <PIPE>;          my $status = <PIPE>;
         close(PIPE);          close(PIPE);
         chomp($status);          chomp($status);
Line 523  sub chkconfig { Line 541  sub chkconfig {
         if ($distro =~ /^(suse|sles)9/) {          if ($distro =~ /^(suse|sles)9/) {
             $daemon{'apache'} = 'apache';              $daemon{'apache'} = 'apache';
         }          }
         if ($distro =~ /^suse(\d+)/) {          if ($distro =~ /^(suse|sles)([\d\.]+)/) {
             if ($1 > 11) {              my $name = $1;
               my $num = $2;
               if ($num > 11) {
                 $uses_systemctl{'apache'} = 1;                  $uses_systemctl{'apache'} = 1;
                   if (($name eq 'sles') || ($name eq 'suse' && $num >= 13.2)) {
                       $uses_systemctl{'mysql'} = 1;
                       $uses_systemctl{'ntp'} = 1;
                       $uses_systemctl{'cups'} = 1;
                       $uses_systemctl{'memcached'} = 1;
                       $daemon{'ntp'} = 'ntpd';
                   }
             }              }
         }          }
     } elsif ($distro =~ /^(?:debian|ubuntu)(\d+)/) {      } elsif ($distro =~ /^(?:debian|ubuntu)(\d+)/) {
Line 547  sub chkconfig { Line 574  sub chkconfig {
         if ($version >= 16) {          if ($version >= 16) {
             $uses_systemctl{'mysql'} = 1;              $uses_systemctl{'mysql'} = 1;
             $uses_systemctl{'apache'} = 1;              $uses_systemctl{'apache'} = 1;
               $uses_systemctl{'memcached'} = 1;
               $uses_systemctl{'cups'} = 1;
           }
           if ($version >= 22) {
               $daemon{'mysql'} = 'mariadb';
         }          }
     } elsif ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) {      } elsif ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) {
         my $version = $1;          my $version = $1;
Line 554  sub chkconfig { Line 586  sub chkconfig {
             $uses_systemctl{'ntp'} = 1;              $uses_systemctl{'ntp'} = 1;
             $uses_systemctl{'mysql'} = 1;              $uses_systemctl{'mysql'} = 1;
             $uses_systemctl{'apache'} = 1;              $uses_systemctl{'apache'} = 1;
               $uses_systemctl{'memcached'} = 1;
               $uses_systemctl{'cups'} = 1;
             $daemon{'mysql'} = 'mariadb';              $daemon{'mysql'} = 'mariadb';
         }          }
     }      }
Line 577  sub chkconfig { Line 611  sub chkconfig {
     foreach my $type ('apache','mysql','ntp','cups','memcached') {      foreach my $type ('apache','mysql','ntp','cups','memcached') {
         my $service = $daemon{$type};          my $service = $daemon{$type};
         if ($uses_systemctl{$type}) {          if ($uses_systemctl{$type}) {
             if (!-l "/etc/systemd/system/multi-user.target.wants/$service.service") {              if (($type eq 'memcached') || ($type eq 'cups')) {
                 $needfix{$type} = "systemctl enable $service.service";                  if (-l "/etc/systemd/system/multi-user.target.wants/$service.service") {
                       $tostop{$type} = 1;
                   }
               } else {
                   if (!-l "/etc/systemd/system/multi-user.target.wants/$service.service") {
                       $needfix{$type} = "systemctl enable $service.service";
                   }
             }              }
             next;  
         } else {          } else {
             my $command = $checker_bin.' --list '.$service.' 2>/dev/null';              my $command = $checker_bin.' --list '.$service.' 2>/dev/null';
             if ($type eq 'cups') {               if ($type eq 'cups') {
                 if ($distro =~ /^(?:debian|ubuntu)(\d+)/) {                  if ($distro =~ /^(?:debian|ubuntu)(\d+)/) {
                     my $version = $1;                      my $version = $1;
                     if (($distro =~ /^ubuntu/) && ($version <= 8)) {                      if (($distro =~ /^ubuntu/) && ($version <= 8)) {
Line 640  sub chkconfig { Line 679  sub chkconfig {
             }              }
         }          }
     }      }
     return (\%needfix,\%tostop);      return (\%needfix,\%tostop,\%uses_systemctl);
 }  }
   
 sub chkfirewall {  sub chkfirewall {
Line 685  sub chkapache { Line 724  sub chkapache {
     if ($distro =~ /^(debian|ubuntu)(\d+)$/) {      if ($distro =~ /^(debian|ubuntu)(\d+)$/) {
         my $distname = $1;          my $distname = $1;
         my $version = $2;          my $version = $2;
         if (!-e "$instdir/debian-ubuntu/loncapa") {          my ($stdconf,$stdsite);
           if (($distname eq 'ubuntu') && ($version > 12)) {
               $stdconf = "$instdir/debian-ubuntu/ubuntu14/loncapa_conf";
               $stdsite = "$instdir/debian-ubuntu/ubuntu14/loncapa_sites";
           } else {
               $stdconf = "$instdir/debian-ubuntu/loncapa"; 
           }
           if (!-e $stdconf) {
             $fixapache = 0;              $fixapache = 0;
             print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n";               print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n"; 
         } else {          } else {
             my $configfile = "/etc/apache2/sites-available/loncapa";              my ($configfile,$sitefile);
             if (($distname eq 'ubuntu') && ($version > 12)) {              if (($distname eq 'ubuntu') && ($version > 12)) {
                   $sitefile = '/etc/apache2/sites-available/loncapa';
                 $configfile = "/etc/apache2/conf-available/loncapa";                  $configfile = "/etc/apache2/conf-available/loncapa";
               } else {
                   $configfile = "/etc/apache2/sites-available/loncapa";
             }              }
             if (-e $configfile) {              if (($configfile ne '') && (-e $configfile) && (-e $stdconf))  {
                 if (open(PIPE, "diff --brief $instdir/debian-ubuntu/loncapa $configfile |")) {                  if (open(PIPE, "diff --brief $stdconf $configfile |")) {
                     my $diffres = <PIPE>;                      my $diffres = <PIPE>;
                     close(PIPE);                      close(PIPE);
                     chomp($diffres);                      chomp($diffres);
Line 703  sub chkapache { Line 752  sub chkapache {
                     }                      }
                 }                  }
             }              }
               if ((!$fixapache) && ($distname eq 'ubuntu') && ($version > 12)) {
                   if (($sitefile ne '') && (-e $sitefile) && (-e $stdsite)) {
                       if (open(PIPE, "diff --brief $stdsite $sitefile |")) {
                           my $diffres = <PIPE>;
                           close(PIPE);
                           chomp($diffres);
                           unless ($diffres) {
                               $fixapache = 0;
                           }
                       }
                   }
               }
         }          }
         if (!$fixapache) {          if (!$fixapache) {
             foreach my $module ('headers.load','expires.load') {              foreach my $module ('headers.load','expires.load') {
Line 900  sub need_download { Line 961  sub need_download {
 }  }
   
 sub check_mysql_setup {  sub check_mysql_setup {
     my ($instdir,$dsn) = @_;      my ($instdir,$dsn,$distro,$mysql_has_wwwuser) = @_;
     my ($mysqlsetup,$has_pass);      my ($mysqlsetup,$has_pass);
     my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});      my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
     if ($dbh) {      if ($dbh) {
         $mysqlsetup = 'noroot';           $mysqlsetup = 'noroot'; 
     } elsif ($DBI::err =~ /1045/) {      } elsif ($DBI::err =~ /1045/) {
         $has_pass = 1;          $has_pass = 1;
       } elsif ($distro =~ /^ubuntu(\d+)$/) {
           my $version = $1;
           if ($1 > 12) {
               print_and_log(&mt('Restarting mysql, please be patient')."\n");
               if (open (PIPE, "service mysql restart 2>&1 |")) {
                   while (<PIPE>) {
                       print $_;
                   }
                   close(PIPE);
               }
               unless ($mysql_has_wwwuser) {
                   $mysql_has_wwwuser = &check_mysql_wwwuser();
               }
               $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
               if ($dbh) {
                   $mysqlsetup = 'noroot';
               } elsif ($DBI::err =~ /1045/) {
                   $has_pass = 1;
               } else {
                   $mysqlsetup = 'needsrestart';
                   return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
               }
           }
     }      }
     if ($has_pass) {      if ($has_pass) {
         print &mt('You have already set a root password for the MySQL database.')."\n";          print &mt('You have already set a root password for the MySQL database.')."\n";
Line 933  sub check_mysql_setup { Line 1017  sub check_mysql_setup {
                 }                  }
             }              }
         }          }
      } elsif ($mysqlsetup ne 'noroot') {      } elsif ($mysqlsetup ne 'noroot') {
         print_and_log(&mt('Problem accessing MySQL.')."\n");          print_and_log(&mt('Problem accessing MySQL.')."\n");
         $mysqlsetup = 'rootfail';          $mysqlsetup = 'rootfail';
     }      }
     return ($mysqlsetup,$has_pass,$dbh);      return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
 }  }
   
 sub check_mysql_wwwuser {  sub check_mysql_wwwuser {
Line 1193  my %prompts = &texthash( Line 1277  my %prompts = &texthash(
 print "\n".&mt('Checking system status ...')."\n";  print "\n".&mt('Checking system status ...')."\n";
   
 my $dsn = "DBI:mysql:database=mysql";  my $dsn = "DBI:mysql:database=mysql";
 my ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$recommended,  my ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$mysqlrestart,
     $dbh,$has_pass,$has_lcdb,$downloadstatus,$filetouse,$production,      $recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,$filetouse,$production,
     $testing,$apachefw) = &check_required($instdir,$dsn);      $testing,$apachefw,$uses_systemctl) = &check_required($instdir,$dsn);
 if ($distro eq '') {  if ($distro eq '') {
     print "\n".&mt('Linux distribution could not be verified as a supported distribution.')."\n".      print "\n".&mt('Linux distribution could not be verified as a supported distribution.')."\n".
           &mt('The following are supported: [_1].',            &mt('The following are supported: [_1].',
Line 1204  if ($distro eq '') { Line 1288  if ($distro eq '') {
           &mt('Stopping execution.')."\n";            &mt('Stopping execution.')."\n";
     exit;      exit;
 }  }
   if ($mysqlrestart) {
       print "\n".&mt('The mysql daemon needs to be restarted using the following command:')."\n".
             $mysqlrestart."\n\n".
             &mt('Stopping execution of install.pl script.')."\n".
             &mt('Please run the install.pl script again, once you have restarted mysql.')."\n";
       exit;
   }
 if ($localecmd ne '') {  if ($localecmd ne '') {
     print "\n".&mt('Although the LON-CAPA application itself is localized for a number of different languages, the default locale language for the Linux OS on which it runs should be US English.')."\n";      print "\n".&mt('Although the LON-CAPA application itself is localized for a number of different languages, the default locale language for the Linux OS on which it runs should be US English.')."\n";
     print "\n".&mt('Run the following command from the command line to set the default language for your OS, and then run this LON-CAPA installation set-up script again.')."\n\n".      print "\n".&mt('Run the following command from the command line to set the default language for your OS, and then run this LON-CAPA installation set-up script again.')."\n\n".
Line 1231  if (!$gotprereqs) { Line 1322  if (!$gotprereqs) {
                     exit;                      exit;
                 } else {                  } else {
                     ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,                      ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,
                      $recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,                       $mysqlrestart,$recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,
                      $filetouse,$production,$testing,$apachefw) =                        $filetouse,$production,$testing,$apachefw,$uses_systemctl) = 
                      &check_required($instdir,$dsn);                       &check_required($instdir,$dsn);
                 }                  }
             } else {              } else {
Line 1647  sub kill_extra_services { Line 1738  sub kill_extra_services {
                     if ($distro =~ /^(debian|ubuntu)/) {                      if ($distro =~ /^(debian|ubuntu)/) {
                         &print_and_log(`update-rc.d -f $daemon remove`);                          &print_and_log(`update-rc.d -f $daemon remove`);
                     } else {                      } else {
                 &print_and_log(`/sbin/chkconfig --del $service`);                          if (ref($uses_systemctl) eq 'HASH') {
                               if ($uses_systemctl->{$service}) {
                                   if (`systemctl is-enabled $service`) {                          
                                       &print_and_log(`systemctl disable $service`);
                                   }
                               } else {
                                   &print_and_log(`/sbin/chkconfig --del $service`);
                               }
                           } else {
                       &print_and_log(`/sbin/chkconfig --del $service`);
                           } 
                     }                      }
                 }                  }
             }              }
Line 1685  CREATE TABLE IF NOT EXISTS metadata (tit Line 1786  CREATE TABLE IF NOT EXISTS metadata (tit
   
 sub setup_mysql_permissions {  sub setup_mysql_permissions {
     my ($dbh,$has_pass,@mysql_lc_commands) = @_;      my ($dbh,$has_pass,@mysql_lc_commands) = @_;
     my $mysqlversion = &get_mysql_version();      my ($mysqlversion,$mysqlsubver) = &get_mysql_version();
     my @mysql_commands = ("INSERT user (Host, User, Password) VALUES('localhost','www',password('localhostkey'));");      my ($usesauth,@mysql_commands);
       if (($mysqlversion > 5.7) || (($mysqlversion == 5.7) && ($mysqlsubver > 5))) {
           @mysql_commands = ("INSERT user (Host, User, ssl_cipher, x509_issuer, x509_subject) VALUES('localhost','www','','','')",
                              "ALTER USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'");
           $usesauth = 1;
       } else {
           @mysql_commands = ("INSERT user (Host, User, Password) VALUES('localhost','www',password('localhostkey'));");
       }
     if ($mysqlversion < 4) {      if ($mysqlversion < 4) {
         push (@mysql_commands,"          push (@mysql_commands,"
 INSERT db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv) VALUES('localhost','loncapa','www','Y','Y','Y','Y','Y','Y','N','Y','Y','Y')");  INSERT db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv) VALUES('localhost','loncapa','www','Y','Y','Y','Y','Y','Y','N','Y','Y','Y')");
Line 1767  INSERT db (Host,Db,User,Select_priv,Inse Line 1875  INSERT db (Host,Db,User,Select_priv,Inse
 }  }
   
 sub new_mysql_rootpasswd {  sub new_mysql_rootpasswd {
     my ($currmysqlpass) = @_;      my ($currmysqlpass,$usesauth) = @_;
     return ("SET PASSWORD FOR 'root'\@'localhost'=PASSWORD('$currmysqlpass')",      if ($usesauth) {
             "FLUSH PRIVILEGES;");          return ("ALTER USER 'root'\@'localhost' IDENTIFIED BY '$currmysqlpass'",
                   "FLUSH PRIVILEGES;");
       } else {
           return ("SET PASSWORD FOR 'root'\@'localhost'=PASSWORD('$currmysqlpass')",
                   "FLUSH PRIVILEGES;");
       }
 }  }
   
 sub get_mysql_version {  sub get_mysql_version {
     my $version;      my ($version,$subversion);
     if (open(PIPE," mysql -V |")) {      if (open(PIPE," mysql -V |")) {
         my $info = <PIPE>;          my $info = <PIPE>;
         chomp($info);          chomp($info);
         close(PIPE);          close(PIPE);
         ($version) = ($info =~ /(\d+\.\d+)\.\d+,/);            ($version,$subversion) = ($info =~ /(\d+\.\d+)\.(\d+)[\-\w]*,/);
     } else {      } else {
         print &mt('Could not determine which version of MySQL is installed.').          print &mt('Could not determine which version of MySQL is installed.').
               "\n";                "\n";
     }      }
     return $version;      return ($version,$subversion);
 }  }
   
 ###########################################################  ###########################################################
Line 1855  sub copy_apache2_debconf { Line 1968  sub copy_apache2_debconf {
         if (-e "$apache2_conf_available_dir/loncapa") {          if (-e "$apache2_conf_available_dir/loncapa") {
             copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.original");              copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.original");
         }          }
         my $defaultconf = $apache2_conf_available_dir.'/loncapa.conf';          my $defaultconf = $apache2_conf_enabled_dir.'/loncapa.conf';
         copy("$instdir/debian-ubuntu/ubuntu14/loncapa_conf","$apache2_conf_available_dir/loncapa");          copy("$instdir/debian-ubuntu/ubuntu14/loncapa_conf","$apache2_conf_available_dir/loncapa");
         chmod(0444,"$apache2_conf_available_dir/loncapa");          chmod(0444,"$apache2_conf_available_dir/loncapa");
         if (-l $defaultconf) {          if (-l $defaultconf) {

Removed from v.1.32  
changed lines
  Added in v.1.37


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