[LON-CAPA-cvs] cvs: doc /install/linux install.pl
raeburn
raeburn at source.lon-capa.org
Mon Mar 15 21:03:04 EDT 2021
raeburn Tue Mar 16 01:03:04 2021 EDT
Modified files:
/doc/install/linux install.pl
Log:
- For MySQL 5.7 and later MySQL uses auth_socket plugin for OS root user
access from localhost (Ubuntu 16, 18, 20).
- If database handle is available then use it when checking if www user
exits in MySQL.
- Suggested commands for starting LON-CAPA daemons and Apache take account
of Linux distro/version.
-------------- next part --------------
Index: doc/install/linux/install.pl
diff -u doc/install/linux/install.pl:1.70 doc/install/linux/install.pl:1.71
--- doc/install/linux/install.pl:1.70 Sat Mar 13 00:04:36 2021
+++ doc/install/linux/install.pl Tue Mar 16 01:03:04 2021
@@ -78,7 +78,7 @@
&mt('Stopping execution.')."\n";
exit;
} else {
- print LOG '$Id: install.pl,v 1.70 2021/03/13 00:04:36 raeburn Exp $'."\n";
+ print LOG '$Id: install.pl,v 1.71 2021/03/16 01:03:04 raeburn Exp $'."\n";
}
#
@@ -522,7 +522,7 @@
}
my ($mysqlon,$mysqlsetup,$mysqlrestart,$dbh,$has_pass,$mysql_unix_socket,$has_lcdb,
%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 $wwwgid = getgrnam('www');
if (($wwwuid eq '') || ($wwwgid eq '')) {
@@ -552,9 +552,8 @@
print_and_log("\n".&mt('Hostname is [_1] and IP address is [_2]',$hostname,$hostip)."\n");
$mysqlon = &check_mysql_running($distro);
if ($mysqlon) {
- my $mysql_has_wwwuser = &check_mysql_wwwuser();
($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') {
$mysqlrestart = '';
if ($distro eq 'ubuntu') {
@@ -1530,8 +1529,8 @@
}
sub check_mysql_setup {
- my ($instdir,$dsn,$distro,$mysql_has_wwwuser) = @_;
- my ($mysqlsetup,$has_pass,$mysql_unix_socket);
+ my ($instdir,$dsn,$distro) = @_;
+ my ($mysqlsetup,$has_pass,$mysql_unix_socket,$mysql_has_wwwuser);
my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
my ($mysqlversion,$mysqlsubver,$mysqlname) = &get_mysql_version();
if (($mysqlname =~ /^MariaDB/i) && ($mysqlversion >= 10.4)) {
@@ -1548,16 +1547,30 @@
if ($mysql_unix_socket) {
print_and_log(&mt('MariaDB using unix_socket for root access from localhost.')."\n");
$mysqlsetup = 'rootok';
- $mysql_unix_socket = 1;
- unless ($mysql_has_wwwuser) {
- $mysql_has_wwwuser = &check_mysql_wwwuser();
- }
+ $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser,$mysql_unix_socket);
}
}
}
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/) {
$has_pass = 1;
} elsif ($distro =~ /^ubuntu(\d+)$/) {
@@ -1570,16 +1583,15 @@
}
close(PIPE);
}
- unless ($mysql_has_wwwuser) {
- $mysql_has_wwwuser = &check_mysql_wwwuser();
- }
$dbh = DBI->connect($dsn,'root','',{'PrintError'=>0});
if ($dbh) {
$mysqlsetup = 'noroot';
+ $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
} elsif ($DBI::err =~ /1045/) {
$has_pass = 1;
} else {
$mysqlsetup = 'needsrestart';
+ $mysql_has_wwwuser = &check_mysql_wwwuser();
return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
}
}
@@ -1591,6 +1603,7 @@
if ($dbh) {
$mysqlsetup = 'rootok';
print_and_log(&mt('Password accepted.')."\n");
+ $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
} else {
$mysqlsetup = 'rootfail';
print_and_log(&mt('Problem accessing MySQL.')."\n");
@@ -1602,27 +1615,35 @@
if ($dbh) {
$mysqlsetup = 'rootok';
print_and_log(&mt('Password accepted.')."\n");
+ $mysql_has_wwwuser = &check_mysql_wwwuser($dbh);
} else {
if ($DBI::err =~ /1045/) {
print_and_log(&mt('Incorrect password.')."\n");
}
+ $mysql_has_wwwuser = &check_mysql_wwwuser();
}
}
}
} elsif ($mysqlsetup ne 'noroot') {
print_and_log(&mt('Problem accessing MySQL.')."\n");
$mysqlsetup = 'rootfail';
+ $mysql_has_wwwuser = &check_mysql_wwwuser();
}
return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser);
}
sub check_mysql_wwwuser {
+ my ($dbh) = @_;
my $mysql_wwwuser;
- my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey',
- {PrintError => +0}) || return;
- if ($dbhn) {
- $mysql_wwwuser = 1;
- $dbhn->disconnect;
+ if ($dbh) {
+ $mysql_wwwuser = $dbh->selectrow_array("SELECT COUNT(User) FROM mysql.user WHERE (User = 'www' AND Host ='localhost')");
+ } else {
+ my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey',
+ {PrintError => +0}) || return;
+ if ($dbhn) {
+ $mysql_wwwuser = 1;
+ $dbhn->disconnect;
+ }
}
return $mysql_wwwuser;
}
@@ -2245,32 +2266,73 @@
}
print "\n".&mt('Requested configuration complete.')."\n\n";
-my $apachename;
if ($have_tarball && !$updateshown) {
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') {
print &mt('If you are now ready to install LON-CAPA, enter the following commands:')."\n\n";
} else {
- print &mt('If you are now ready to update LON-CAPA, enter the following commands:')."\n\n".
- "/etc/init.d/loncontrol stop\n";
- if ($distro =~ /^(suse|sles|debian|ubuntu)([\d.]+)/) {
- if (($1 eq 'suse') && ($2 < 10)) {
- $apachename = 'apache';
- } else {
- $apachename = 'apache2';
- }
- } else {
- $apachename = 'httpd';
+ my $lcstop = '/etc/init.d/loncontrol stop';
+ if ($lc_uses_systemctl) {
+ $lcstop = 'systemctl stop loncontrol';
+ }
+ my $apachestop = "/etc/init.d/$apachename stop";
+ if ($uses_systemctl) {
+ $apachestop = "systemctl stop $apachename";
+ }
+ if ($uses_sudo) {
+ $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".
"tar zxf $sourcetarball\n".
"cd $lcdir\n".
"./UPDATE\n";
if (-e '/etc/loncapa-release') {
- print "/etc/init.d/loncontrol start\n";
- print "/etc/init.d/$apachename start\n";
+ my $lcstart = '/etc/init.d/loncontrol start';
+ 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;
More information about the LON-CAPA-cvs
mailing list