Diff for /doc/install/linux/install.pl between versions 1.70 and 1.76

version 1.70, 2021/03/13 00:04:36 version 1.76, 2021/03/28 21:51:22
Line 212  sub get_distro { Line 212  sub get_distro {
             $distro = 'rhes'.$1;              $distro = 'rhes'.$1;
             $updatecmd = 'dnf install LONCAPA-prerequisites';              $updatecmd = 'dnf install LONCAPA-prerequisites';
             $installnow = 'dnf -y install LONCAPA-prerequisites';              $installnow = 'dnf -y install LONCAPA-prerequisites';
         } elsif ($versionstring =~ /CentOS(?:| Linux) release (\d+)/) {          } elsif ($versionstring =~ /CentOS(?:| Linux| Stream) release (\d+)/) {
             $distro = 'centos'.$1;              $distro = 'centos'.$1;
             $updatecmd = 'yum install LONCAPA-prerequisites';              $updatecmd = 'yum install LONCAPA-prerequisites';
             $installnow = 'yum -y install LONCAPA-prerequisites';              $installnow = 'yum -y install LONCAPA-prerequisites';
Line 522  sub check_required { Line 522  sub check_required {
     }      }
     my ($mysqlon,$mysqlsetup,$mysqlrestart,$dbh,$has_pass,$mysql_unix_socket,$has_lcdb,      my ($mysqlon,$mysqlsetup,$mysqlrestart,$dbh,$has_pass,$mysql_unix_socket,$has_lcdb,
         %recommended,$downloadstatus,$filetouse,$production,$testing,$apachefw,          %recommended,$downloadstatus,$filetouse,$production,$testing,$apachefw,
         $tostop,$uses_systemctl,$hostname,$hostip);          $tostop,$uses_systemctl,$mysql_has_wwwuser,$hostname,$hostip);
     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 552  sub check_required { Line 552  sub check_required {
     print_and_log("\n".&mt('Hostname is [_1] and IP address is [_2]',$hostname,$hostip)."\n");      print_and_log("\n".&mt('Hostname is [_1] and IP address is [_2]',$hostname,$hostip)."\n");
     $mysqlon = &check_mysql_running($distro);      $mysqlon = &check_mysql_running($distro);
     if ($mysqlon) {      if ($mysqlon) {
         my $mysql_has_wwwuser = &check_mysql_wwwuser();  
         ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket) =          ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket) =
             &check_mysql_setup($instdir,$dsn,$distro,$mysql_has_wwwuser);              &check_mysql_setup($instdir,$dsn,$distro);
         if ($mysqlsetup eq 'needsrestart') {          if ($mysqlsetup eq 'needsrestart') {
             $mysqlrestart = '';              $mysqlrestart = '';
             if ($distro eq 'ubuntu') {              if ($distro eq 'ubuntu') {
Line 887  sub uses_firewalld { Line 886  sub uses_firewalld {
     }      }
     if ($checkfirewalld) {      if ($checkfirewalld) {
         my ($loaded,$active);          my ($loaded,$active);
         if (open(PIPE,"systemctl status firewalld |")) {          if (open(PIPE,"systemctl status firewalld 2>/dev/null |")) {
             while (<PIPE>) {              while (<PIPE>) {
                 chomp();                  chomp();
                 if (/^\s*Loaded:\s+(\w+)/) {                  if (/^\s*Loaded:\s+(\w+)/) {
                     $loaded = $1;                      $loaded = $1;
                 }                  }
                 if (/^\s*Active\s+(\w+)/) {                  if (/^\s*Active:\s+(\w+)/) {
                     $active = $1;                      $active = $1;
                 }                  }
             }              }
Line 1530  sub need_download { Line 1529  sub need_download {
 }  }
   
 sub check_mysql_setup {  sub check_mysql_setup {
     my ($instdir,$dsn,$distro,$mysql_has_wwwuser) = @_;      my ($instdir,$dsn,$distro) = @_;
     my ($mysqlsetup,$has_pass,$mysql_unix_socket);      my ($mysqlsetup,$has_pass,$mysql_unix_socket,$mysql_has_wwwuser);
     my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});      my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
     my ($mysqlversion,$mysqlsubver,$mysqlname) = &get_mysql_version();      my ($mysqlversion,$mysqlsubver,$mysqlname) = &get_mysql_version();
     if (($mysqlname =~ /^MariaDB/i) && ($mysqlversion >= 10.4)) {      if (($mysqlname =~ /^MariaDB/i) && ($mysqlversion >= 10.4)) {
Line 1548  sub check_mysql_setup { Line 1547  sub check_mysql_setup {
             if ($mysql_unix_socket) {              if ($mysql_unix_socket) {
                 print_and_log(&mt('MariaDB using unix_socket for root access from localhost.')."\n");                  print_and_log(&mt('MariaDB using unix_socket for root access from localhost.')."\n");
                 $mysqlsetup = 'rootok';                  $mysqlsetup = 'rootok';
                 $mysql_unix_socket = 1;                  $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
                 unless ($mysql_has_wwwuser) {  
                     $mysql_has_wwwuser = &check_mysql_wwwuser();  
                 }  
                 return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket);                  return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket);
             }              }
         }          }
     }      }
     if ($dbh) {      if ($dbh) {
         $mysqlsetup = 'noroot';           $mysqlsetup = 'noroot';
           if (($mysqlname !~ /^MariaDB/i) && ($mysqlversion >= 5.7)) {
               my $sth = $dbh->prepare("SELECT plugin from mysql.user where User='root'");
               $sth->execute();
               while (my $priv = $sth->fetchrow_array) {
                   if ($priv =~ /auth_socket/) {
                       $mysql_unix_socket = 1;
                       last;
                   }
               }
               $sth->finish();
               if ($mysql_unix_socket) {
                   print_and_log(&mt('MySQL using unix_socket for root access from localhost.')."\n");
                   $mysqlsetup = 'rootok';
                   $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
                   return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket);
               }
           }
     } elsif ($DBI::err =~ /1045/) {      } elsif ($DBI::err =~ /1045/) {
         $has_pass = 1;          $has_pass = 1;
     } elsif ($distro =~ /^ubuntu(\d+)$/) {      } elsif ($distro =~ /^ubuntu(\d+)$/) {
Line 1570  sub check_mysql_setup { Line 1583  sub check_mysql_setup {
                 }                  }
                 close(PIPE);                  close(PIPE);
             }              }
             unless ($mysql_has_wwwuser) {  
                 $mysql_has_wwwuser = &check_mysql_wwwuser();  
             }  
             $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});              $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
             if ($dbh) {              if ($dbh) {
                 $mysqlsetup = 'noroot';                  $mysqlsetup = 'noroot';
                   $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
             } elsif ($DBI::err =~ /1045/) {              } elsif ($DBI::err =~ /1045/) {
                 $has_pass = 1;                  $has_pass = 1;
             } else {              } else {
                 $mysqlsetup = 'needsrestart';                  $mysqlsetup = 'needsrestart';
                   $mysql_has_wwwuser = &check_mysql_wwwuser();
                 return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);                  return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
             }              }
         }          }
Line 1591  sub check_mysql_setup { Line 1603  sub check_mysql_setup {
         if ($dbh) {          if ($dbh) {
             $mysqlsetup = 'rootok';              $mysqlsetup = 'rootok';
             print_and_log(&mt('Password accepted.')."\n");              print_and_log(&mt('Password accepted.')."\n");
               $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
         } else {          } else {
             $mysqlsetup = 'rootfail';              $mysqlsetup = 'rootfail';
             print_and_log(&mt('Problem accessing MySQL.')."\n");              print_and_log(&mt('Problem accessing MySQL.')."\n");
Line 1602  sub check_mysql_setup { Line 1615  sub check_mysql_setup {
                 if ($dbh) {                  if ($dbh) {
                     $mysqlsetup = 'rootok';                      $mysqlsetup = 'rootok';
                     print_and_log(&mt('Password accepted.')."\n");                      print_and_log(&mt('Password accepted.')."\n");
                       $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
                 } else {                  } else {
                     if ($DBI::err =~ /1045/) {                      if ($DBI::err =~ /1045/) {
                         print_and_log(&mt('Incorrect password.')."\n");                          print_and_log(&mt('Incorrect password.')."\n");
                     }                      }
                       $mysql_has_wwwuser = &check_mysql_wwwuser();
                 }                  }
             }              }
         }          }
     } 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';
           $mysql_has_wwwuser = &check_mysql_wwwuser();
     }      }
     return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);      return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
 }  }
   
 sub check_mysql_wwwuser {  sub check_mysql_wwwuser {
       my ($dbh) = @_;
     my $mysql_wwwuser;      my $mysql_wwwuser;
     my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey',      if ($dbh) {
                             {PrintError => +0}) || return;          $mysql_wwwuser = $dbh->selectrow_array("SELECT COUNT(User) FROM mysql.user WHERE (User = 'www' AND Host ='localhost')");
     if ($dbhn) {      } else {
         $mysql_wwwuser = 1;          my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey',
         $dbhn->disconnect;                                  {PrintError => +0}) || return;
           if ($dbhn) {
               $mysql_wwwuser = 1;
               $dbhn->disconnect;
           }
     }      }
     return $mysql_wwwuser;      return $mysql_wwwuser;
 }  }
Line 2026  if ($callsub{'pwauth'}) { Line 2047  if ($callsub{'pwauth'}) {
 if ($callsub{'mysql'}) {  if ($callsub{'mysql'}) {
     if ($dbh) {      if ($dbh) {
         &setup_mysql($callsub{'mysqlperms'},$dbh,$has_pass,          &setup_mysql($callsub{'mysqlperms'},$dbh,$has_pass,
                      $mysql_unix_socket,$has_lcdb);                       $mysql_unix_socket,$has_lcdb,$distro);
     } else {      } else {
         print &mt('Unable to configure MySQL because access is denied.')."\n";          print &mt('Unable to configure MySQL because access is denied.')."\n";
     }      }
Line 2149  if ($callsub{'firewall'}) { Line 2170  if ($callsub{'firewall'}) {
         if (keys(%added) > 0) {          if (keys(%added) > 0) {
             print &mt('Firewall configured to allow access for: [_1].',              print &mt('Firewall configured to allow access for: [_1].',
                       join(', ',sort(keys(%added))))."\n";                        join(', ',sort(keys(%added))))."\n";
               system('firewall-cmd --reload'); 
         }          }
         if ($current{'http'} || $current{'https'}) {          if ($current{'http'} || $current{'https'}) {
             print &mt('Firewall already configured to allow access for:[_1].',              print &mt('Firewall already configured to allow access for:[_1].',
                       (($current{'http'})? ' http':'').(($current{'https'})? ' https':''))."\n";                        (($current{'http'})? ' http':'').(($current{'https'})? ' https':''))."\n";
         }          }
         unless ($current{'ssh'}) {          unless ($current{'ssh'}) {
             print &mt('If you would the like to allow access to ssh from outside, use the command[_1].',              print &mt('If you would like to allow access to ssh from outside, use the commands:')."\n".
                   "firewall-cmd --permanent --zone=$zone --add-service=ssh")."\n";                    "firewall-cmd --permanent --zone=$zone --add-service=ssh\n".
                     "firewall-cmd --reload\n";
         }          }
     } elsif ($distro =~ /^(suse|sles)/) {      } elsif ($distro =~ /^(suse|sles)/) {
         print &mt('Use [_1] to configure the firewall to allow access for [_2].',          print &mt('Use [_1] to configure the firewall to allow access for [_2].',
Line 2245  if ($callsub{'download'}) { Line 2268  if ($callsub{'download'}) {
 }  }
   
 print "\n".&mt('Requested configuration complete.')."\n\n";  print "\n".&mt('Requested configuration complete.')."\n\n";
 my $apachename;  
 if ($have_tarball && !$updateshown) {  if ($have_tarball && !$updateshown) {
     my ($lcdir) = ($sourcetarball =~ /^([\w.\-]+)\.tar.gz$/);      my ($lcdir) = ($sourcetarball =~ /^([\w.\-]+)\.tar.gz$/);
       my ($apachename,$lc_uses_systemctl,$uses_sudo);
       if ($distro =~ /^(suse|sles|debian|ubuntu)([\d.]+)/) {
           if (($1 eq 'suse') && ($2 < 10)) {
               $apachename = 'apache';
           } else {
               $apachename = 'apache2';
           }
       } else {
           $apachename = 'httpd';
       }
       if ($distro =~ /^oracle(\d+)$/) {
           if ($1 > 6) {
               $lc_uses_systemctl = 1;
           }
       } elsif ($distro =~ /^(?:rhes|centos)(\d+)$/) {
           if ($1 > 7) {
               $lc_uses_systemctl = 1;
           }
       } elsif ($distro =~ /^ubuntu(\d+)$/) {
           if ($1 > 16) {
               $lc_uses_systemctl = 1;
           }
           $uses_sudo = 1;
       } elsif ($distro =~ /^sles(\d+)$/) {
           if ($1 > 12) {
               $lc_uses_systemctl = 1;
           }
       }
     if (!-e '/etc/loncapa-release') {      if (!-e '/etc/loncapa-release') {
         print &mt('If you are now ready to install LON-CAPA, enter the following commands:')."\n\n";          print &mt('If you are now ready to install LON-CAPA, enter the following commands:')."\n\n";
     } else {      } else {
         print &mt('If you are now ready to update LON-CAPA, enter the following commands:')."\n\n".          my $lcstop = '/etc/init.d/loncontrol stop';
                   "/etc/init.d/loncontrol stop\n";          if ($lc_uses_systemctl) {
         if ($distro =~ /^(suse|sles|debian|ubuntu)([\d.]+)/) {              $lcstop = 'systemctl stop loncontrol';
             if (($1 eq 'suse') && ($2 < 10)) {          }
                 $apachename = 'apache';          my $apachestop = "/etc/init.d/$apachename stop";
             } else {          if ($uses_systemctl) {
                 $apachename = 'apache2';              $apachestop = "systemctl stop $apachename";
             }          }
         } else {          if ($uses_sudo) {
             $apachename = 'httpd';              $lcstop = 'sudo '.$lcstop;
               $apachestop = 'sudo '.$apachestop;
         }          }
         print "/etc/init.d/$apachename stop\n";          print &mt('If you are now ready to update LON-CAPA, enter the following commands:').
                 "\n\n$lcstop\n$apachestop\n";   
     }      }
     print "cd /root\n".      print "cd /root\n".
           "tar zxf $sourcetarball\n".            "tar zxf $sourcetarball\n".
           "cd $lcdir\n".            "cd $lcdir\n".
           "./UPDATE\n";            "./UPDATE\n";
     if (-e '/etc/loncapa-release') {      if (-e '/etc/loncapa-release') {
         print "/etc/init.d/loncontrol start\n";          my $lcstart = '/etc/init.d/loncontrol start';
         print "/etc/init.d/$apachename start\n";          if ($lc_uses_systemctl) {
               $lcstart = '/home/httpd/perl/loncontrol start';
           }
           my $apachestart = "/etc/init.d/$apachename start";
           if ($uses_systemctl) {
               $apachestart = "systemctl start $apachename";
           }
           if ($uses_sudo) {
               $lcstart = 'sudo '.$lcstart;
               $apachestart = 'sudo '.$apachestart;
           }
           print "$lcstart\n";
           print "$apachestart\n";
     }      }
 }  }
 exit;  exit;
Line 2454  sub kill_extra_services { Line 2518  sub kill_extra_services {
 }  }
   
 sub setup_mysql {  sub setup_mysql {
     my ($setup_mysql_permissions,$dbh,$has_pass,$mysql_unix_socket,$has_lcdb) = @_;      my ($setup_mysql_permissions,$dbh,$has_pass,$mysql_unix_socket,$has_lcdb,$distro) = @_;
     my @mysql_lc_commands;      my @mysql_lc_commands;
     unless ($has_lcdb) {      unless ($has_lcdb) {
         push(@mysql_lc_commands,"CREATE DATABASE loncapa");          my $createcmd = 'CREATE DATABASE loncapa';
           if ($distro =~ /^sles(\d+)/) {
               if ($1 > 11) {
                   $createcmd .= ' CHARACTER SET utf8 COLLATE utf8_general_ci';
               }
           } elsif ($distro =~ /^ubuntu(\d+)/) {
               if ($1 > 16) {
                   $createcmd .= ' CHARACTER SET latin1 COLLATE latin1_swedish_ci';
               }
           }
           push(@mysql_lc_commands,$createcmd);
     }      }
     push(@mysql_lc_commands,"USE loncapa");      push(@mysql_lc_commands,"USE loncapa");
     push(@mysql_lc_commands,qq{      push(@mysql_lc_commands,qq{
Line 2503  sub setup_mysql_permissions { Line 2577  sub setup_mysql_permissions {
     if ($usescreate) {      if ($usescreate) {
         @mysql_commands = ("CREATE USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'");          @mysql_commands = ("CREATE USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'");
     } elsif ($usesauth) {      } elsif ($usesauth) {
         @mysql_commands = ("INSERT user (Host, User, ssl_cipher, x509_issuer, x509_subject, authentication_string) VALUES('localhost','www','','','','')");          @mysql_commands = ("INSERT user (Host, User, ssl_cipher, x509_issuer, x509_subject, authentication_string) VALUES('localhost','www','','','','')",
                              "FLUSH PRIVILEGES");
         if ($is_mariadb) {          if ($is_mariadb) {
             push(@mysql_commands,"ALTER USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'");              push(@mysql_commands,"ALTER USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'");
         } else {          } else {

Removed from v.1.70  
changed lines
  Added in v.1.76


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