version 1.45.2.10, 2021/03/11 21:00:36
|
version 1.45.2.13, 2021/03/18 22:00:54
|
Line 27 use strict;
|
Line 27 use strict;
|
use File::Copy; |
use File::Copy; |
use Term::ReadKey; |
use Term::ReadKey; |
use DBI; |
use DBI; |
|
use File::Spec; |
use Cwd(); |
use Cwd(); |
use File::Basename(); |
use File::Basename(); |
use lib File::Basename::dirname(Cwd::abs_path($0)); |
use lib File::Basename::dirname(Cwd::abs_path($0)); |
Line 209 sub get_distro {
|
Line 210 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 457 sub check_required {
|
Line 458 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); |
$tostop,$uses_systemctl,$mysql_has_wwwuser); |
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 468 sub check_required {
|
Line 469 sub check_required {
|
} |
} |
$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 1154 sub need_download {
|
Line 1154 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 1172 sub check_mysql_setup {
|
Line 1172 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 1194 sub check_mysql_setup {
|
Line 1208 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 1215 sub check_mysql_setup {
|
Line 1228 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 1226 sub check_mysql_setup {
|
Line 1240 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 1733 if ($callsub{'firewall'}) {
|
Line 1755 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 1829 if ($callsub{'download'}) {
|
Line 1853 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 2324 sub copy_apache2_debconf {
|
Line 2389 sub copy_apache2_debconf {
|
copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.conf.original"); |
copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.conf.original"); |
} else { |
} else { |
copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.conf"); |
copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.conf"); |
symlink("$apache2_conf_available_dir/loncapa.conf","$defaultconf"); |
chdir($apache2_conf_enabled_dir); |
|
symlink('../conf-available/loncapa.conf','loncapa.conf'); |
|
chdir($instdir); |
} |
} |
if (-l $defaultconf) { |
if (-l $defaultconf) { |
my $linkfname = readlink($defaultconf); |
my $linkfname = readlink($defaultconf); |
|
if ($linkfname ne '') { |
|
$linkfname = Cwd::abs_path(File::Spec->rel2abs($linkfname,$apache2_conf_enabled_dir)); |
|
} |
if ($linkfname eq "$apache2_conf_available_dir/loncapa") { |
if ($linkfname eq "$apache2_conf_available_dir/loncapa") { |
unlink($defaultconf); |
unlink($defaultconf); |
} |
} |
Line 2345 sub copy_apache2_debconf {
|
Line 2415 sub copy_apache2_debconf {
|
} |
} |
if (-l $defaultconf) { |
if (-l $defaultconf) { |
my $linkfname = readlink($defaultconf); |
my $linkfname = readlink($defaultconf); |
|
if ($linkfname ne '') { |
|
$linkfname = Cwd::abs_path(File::Spec->rel2abs($linkfname,$apache2_conf_enabled_dir)); |
|
} |
if ($linkfname eq "$apache2_conf_available_dir/loncapa.conf") { |
if ($linkfname eq "$apache2_conf_available_dir/loncapa.conf") { |
unless ($diffres) { |
unless ($diffres) { |
$skipconf = 1; |
$skipconf = 1; |
Line 2360 sub copy_apache2_debconf {
|
Line 2433 sub copy_apache2_debconf {
|
if (-l $defaultconf) { |
if (-l $defaultconf) { |
unlink($defaultconf); |
unlink($defaultconf); |
} |
} |
symlink("$apache2_conf_available_dir/loncapa.conf","$defaultconf"); |
chdir($apache2_conf_enabled_dir); |
|
symlink('../conf-available/loncapa.conf','loncapa.conf'); |
|
chdir($instdir); |
} |
} |
my $stdsite = "$instdir/debian-ubuntu/ubuntu14/loncapa_site"; |
my $stdsite = "$instdir/debian-ubuntu/ubuntu14/loncapa_site"; |
if ((-e $stdsite) && (-e "$apache2_sites_available_dir/loncapa")) { |
if ((-e $stdsite) && (-e "$apache2_sites_available_dir/loncapa")) { |
Line 2375 sub copy_apache2_debconf {
|
Line 2450 sub copy_apache2_debconf {
|
} |
} |
if (-l $defaultconfig) { |
if (-l $defaultconfig) { |
my $linkfname = readlink($defaultconfig); |
my $linkfname = readlink($defaultconfig); |
|
if ($linkfname ne '') { |
|
$linkfname = Cwd::abs_path(File::Spec->rel2abs($linkfname,$apache2_sites_enabled_dir)); |
|
} |
if ($linkfname eq "$apache2_sites_available_dir/loncapa") { |
if ($linkfname eq "$apache2_sites_available_dir/loncapa") { |
unlink($defaultconfig); |
unlink($defaultconfig); |
} |
} |
Line 2392 sub copy_apache2_debconf {
|
Line 2470 sub copy_apache2_debconf {
|
} |
} |
if (-l $defaultsite) { |
if (-l $defaultsite) { |
my $linkfname = readlink($defaultsite); |
my $linkfname = readlink($defaultsite); |
if ($linkfname eq "$apache2_conf_available_dir/loncapa.conf") { |
if ($linkfname ne '') { |
|
$linkfname = Cwd::abs_path(File::Spec->rel2abs($linkfname,$apache2_sites_enabled_dir)); |
|
} |
|
if ($linkfname eq "$apache2_sites_available_dir/loncapa.conf") { |
unless ($diffres) { |
unless ($diffres) { |
$skipsite = 1; |
$skipsite = 1; |
} |
} |
Line 2404 sub copy_apache2_debconf {
|
Line 2485 sub copy_apache2_debconf {
|
print_and_log(&mt('Copying loncapa [_1] site file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'loncapa.conf symlink'")."\n"); |
print_and_log(&mt('Copying loncapa [_1] site file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'loncapa.conf symlink'")."\n"); |
copy("$instdir/debian-ubuntu/ubuntu14/loncapa_site","$apache2_sites_available_dir/loncapa.conf"); |
copy("$instdir/debian-ubuntu/ubuntu14/loncapa_site","$apache2_sites_available_dir/loncapa.conf"); |
chmod(0444,"$apache2_sites_available_dir/loncapa.conf"); |
chmod(0444,"$apache2_sites_available_dir/loncapa.conf"); |
symlink("$apache2_sites_available_dir/loncapa.conf","$defaultsite"); |
chdir($apache2_sites_enabled_dir); |
|
symlink('../sites-available/loncapa.conf','loncapa.conf'); |
|
chdir($instdir); |
} |
} |
if (-l defaultconfig) { |
if (-l $defaultconfig) { |
my $linkfname = readlink($defaultconfig); |
my $linkfname = readlink($defaultconfig); |
if ($linkfname eq "$apache2_sites_available_dir/000-default") { |
if ($linkfname ne '') { |
|
$linkfname = Cwd::abs_path(File::Spec->rel2abs($linkfname,$apache2_sites_enabled_dir)); |
|
} |
|
if ($linkfname eq "$apache2_sites_available_dir/000-default.conf") { |
unlink($defaultconfig); |
unlink($defaultconfig); |
} |
} |
} |
} |