--- doc/install/linux/install.pl 2019/07/07 23:37:54 1.45.2.3 +++ doc/install/linux/install.pl 2020/07/08 17:40:18 1.45.2.8 @@ -75,7 +75,7 @@ if (!open(LOG,">>loncapa_install.log")) &mt('Stopping execution.')."\n"; exit; } else { - print LOG '$Id: install.pl,v 1.45.2.3 2019/07/07 23:37:54 raeburn Exp $'."\n"; + print LOG '$Id: install.pl,v 1.45.2.8 2020/07/08 17:40:18 raeburn Exp $'."\n"; } # @@ -357,23 +357,26 @@ sub check_prerequisites { sub check_locale { my ($distro) = @_; - my ($fh,$langvar,$command); + my ($fh,$langvar,$command,$earlyout); $langvar = 'LANG'; if ($distro =~ /^(ubuntu|debian)/) { if (!open($fh,"= 15)) { if (!open($fh,"= 7) { if (!open($fh,"; chomp(@data); foreach my $item (@data) { @@ -420,7 +429,7 @@ sub check_locale { } elsif (-e '/usr/bin/system-config-language') { $command = 'system-config-language'; } elsif (-e '/usr/bin/localectl') { - $command = 'localectl set-locale en_US.UTF-8'; + $command = '/usr/bin/localectl set-locale LANG=en_US.UTF-8'; } else { $command = 'No standard command found'; } @@ -645,6 +654,9 @@ sub chkconfig { if (($distro =~ /^ubuntu/) && ($version <= 8)) { $daemon{'cups'} = 'cupsys'; } + if (($distro =~ /^ubuntu/) && ($version >= 18)) { + $daemon{'ntp'} = 'chrony'; + } } elsif ($distro =~ /^fedora(\d+)/) { my $version = $1; if ($version >= 15) { @@ -659,6 +671,9 @@ sub chkconfig { if ($version >= 19) { $daemon{'mysql'} = 'mariadb'; } + if ($version >= 26) { + $daemon{'ntp'} = 'chronyd'; + } } elsif ($distro =~ /^(?:centos|rhes|scientific|oracle)(\d+)/) { my $version = $1; if ($version >= 7) { @@ -914,6 +929,20 @@ sub chkapache { } } } + if ((!$fixapache) && ($distname eq 'ubuntu')) { + my $sitestatus = "/etc/apache2/mods-available/status.conf"; + my $stdstatus = "$instdir/debian-ubuntu/status.conf"; + if ((-e $stdstatus) && (-e $sitestatus)) { + if (open(PIPE, "diff --brief $stdstatus $sitestatus |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + $fixapache = 1; + } + } + } + } } elsif ($distro =~ /^(suse|sles)([\d\.]+)$/) { my ($name,$version) = ($1,$2); my $apache = 'apache'; @@ -953,6 +982,7 @@ sub chkapache { } } else { my $configfile = 'httpd.conf'; + my $mpmfile = 'mpm.conf'; if ($distro =~ /^(?:centos|rhes|scientific|oracle)(\d+)$/) { if ($1 >= 7) { $configfile = 'apache2.4/httpd.conf'; @@ -961,7 +991,7 @@ sub chkapache { } } elsif ($distro =~ /^fedora(\d+)$/) { if ($1 > 17) { - $configfile = 'apache2.4/httpd.conf'; + $configfile = 'apache2.4/httpd.conf'; } elsif ($1 > 10) { $configfile = 'new/httpd.conf'; } @@ -979,6 +1009,20 @@ sub chkapache { } } } + if (-e "/etc/httpd/conf.modules.d/00-mpm.conf") { + if (!-e "$instdir/centos-rhes-fedora-sl/$mpmfile") { + print &mt('Warning: No LON-CAPA Apache MPM configuration file found for installation check.')."\n"; + } elsif ((-e "/etc/httpd/conf.modules.d/00-mpm.conf") && (-e "$instdir/centos-rhes-fedora-sl/$mpmfile")) { + if (open(PIPE, "diff --brief $instdir/centos-rhes-fedora-sl/$mpmfile /etc/httpd/conf.modules.d/00-mpm.conf |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + $fixapache = 1; + } + } + } + } } return $fixapache; } @@ -1607,6 +1651,7 @@ if ($callsub{'apache'}) { ©_apache2_debconf($instdir,$distro); } else { ©_httpd_conf($instdir,$distro); + ©_mpm_conf($instdir,$distro); } } else { print_and_log(&mt('Skipping configuration of Apache web server.')."\n"); @@ -2123,7 +2168,7 @@ sub get_mysql_version { my $info = ; chomp($info); close(PIPE); - ($version,$subversion,$name) = ($info =~ /(\d+\.\d+)\.(\d+)\-?(\w*),/); + ($version,$subversion,$name) = ($info =~ /(\d+\.\d+)\.(\d+)(?:\-?(\w*),|)/); } else { print &mt('Could not determine which version of MySQL is installed.'). "\n"; @@ -2162,6 +2207,50 @@ sub copy_httpd_conf { print_and_log("\n"); } +########################################################### +## +## RHEL/CentOS/Fedora/Scientific Linux +## Copy LON-CAPA mpm.conf to /etc/httpd/conf.modules.d/00-mpm.conf +## +## The LON-CAPA mpm.conf enables the prefork MPM module in +## Apache. This is also the default for RHEL/CentOS/Oracle +## Linux 7 and earlier, and Fedora 26 and earlier. For more +## recent versions of those distros, the event MPM is enabled +## by default. After ©_mpm_conf() is run, the prefork MPM +## module will be enabled instead of the event MPM module. +## +########################################################### + +sub copy_mpm_conf { + my ($instdir,$distro) = @_; + my $mpmfile = 'mpm.conf'; + if ((-e "/etc/httpd/conf.modules.d/00-mpm.conf") && + (-e "$instdir/centos-rhes-fedora-sl/$mpmfile")) { + print_and_log(&mt('Copying the LON-CAPA [_1] to [_2].',"'mpm.conf'", + "'/etc/httpd/conf.modules.d/00-mpm.conf'")."\n"); + copy "$instdir/centos-rhes-fedora-sl/$mpmfile","/etc/httpd/conf.modules.d/00-mpm.conf"; + chmod(0644,"/etc/httpd/conf.modules.d/00-mpm.conf"); + print_and_log("\n"); + } else { + my $logfail; + if ($distro =~ /^(?:centos|rhes|scientific|oracle)(\d+)$/) { + if ($1 > 7) { + $logfail = 1; + } + } elsif ($distro =~ /^fedora(\d+)$/) { + if ($1 > 26) { + $logfail = 1; + } + } + if ($logfail) { + print_and_log(&mt('Warning: copying the LON-CAPA [_1] failed because [_2] and/or [_3] are missing.', + $mpmfile,"'$instdir/centos-rhes-fedora-sl/$mpmfile'", + "'/etc/httpd/conf.modules.d/00-mpm.conf'")); + print_and_log("\n"); + } + } +} + ######################################################### ## ## Ubuntu/Debian -- copy our loncapa configuration file to @@ -2190,35 +2279,116 @@ sub copy_apache2_debconf { if (($distname eq 'ubuntu') && ($version > 12)) { $defaultconfig = "$apache2_sites_enabled_dir/000-default.conf"; } - if (-l $defaultconfig) { - unlink($defaultconfig); - } + my ($skipconf,$skipsite,$skipstatus); if (($distname eq 'ubuntu') && ($version > 12)) { - print_and_log(&mt('Copying loncapa [_1] config file to [_2] and pointing [_3] to it from conf-enabled.',"'apache2'","'/etc/apache2/conf-available'","'loncapa.conf symlink'")."\n"); my $apache2_conf_enabled_dir = '/etc/apache2/conf-enabled'; my $apache2_conf_available_dir = '/etc/apache2/conf-available'; - if (-e "$apache2_conf_available_dir/loncapa") { - copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.original"); - } my $defaultconf = $apache2_conf_enabled_dir.'/loncapa.conf'; - copy("$instdir/debian-ubuntu/ubuntu14/loncapa_conf","$apache2_conf_available_dir/loncapa"); - chmod(0444,"$apache2_conf_available_dir/loncapa"); - if (-l $defaultconf) { - unlink($defaultconf); - } - symlink("$apache2_conf_available_dir/loncapa","$defaultconf"); - print_and_log(&mt('Copying loncapa [_1] site file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'000-default.conf symlink'")."\n"); - copy("$instdir/debian-ubuntu/ubuntu14/loncapa_site","$apache2_sites_available_dir/loncapa"); - chmod(0444,"$apache2_sites_available_dir/loncapa"); - symlink("$apache2_sites_available_dir/loncapa","$defaultconfig"); - } else { - print_and_log(&mt('Copying loncapa [_1] config file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'000-default symlink'")."\n"); - if (-e "$apache2_sites_available_dir/loncapa") { - copy("$apache2_sites_available_dir/loncapa","$apache2_sites_available_dir/loncapa.original"); - } - copy("$instdir/debian-ubuntu/loncapa","$apache2_sites_available_dir/loncapa"); - chmod(0444,"$apache2_sites_available_dir/loncapa"); - symlink("$apache2_sites_available_dir/loncapa","$apache2_sites_enabled_dir/000-default"); + if ((-e "$apache2_conf_available_dir/loncapa") && (-e "$instdir/debian-ubuntu/ubuntu14/loncapa_conf")) { + if (open(PIPE, "diff --brief $apache2_conf_available_dir/loncapa $instdir/debian-ubuntu/ubuntu14/loncapa_conf |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + copy("$apache2_conf_available_dir/loncapa","$apache2_conf_available_dir/loncapa.original"); + } + if (-l $defaultconf) { + my $linkfname = readlink($defaultconf); + if ($linkfname eq "$apache2_conf_available_dir/loncapa") { + unless ($diffres) { + $skipconf = 1; + } + } + } + } + } + unless ($skipconf) { + print_and_log(&mt('Copying loncapa [_1] config file to [_2] and pointing [_3] to it from conf-enabled.',"'apache2'","'/etc/apache2/conf-available'","'loncapa.conf symlink'")."\n"); + copy("$instdir/debian-ubuntu/ubuntu14/loncapa_conf","$apache2_conf_available_dir/loncapa"); + chmod(0444,"$apache2_conf_available_dir/loncapa"); + if (-l $defaultconf) { + unlink($defaultconf); + } + symlink("$apache2_conf_available_dir/loncapa","$defaultconf"); + } + my $stdsite = "$instdir/debian-ubuntu/ubuntu14/loncapa_site"; + if ((-e $stdsite) && (-e "$apache2_sites_available_dir/loncapa")) { + if (open(PIPE, "diff --brief $stdsite $apache2_sites_available_dir/loncapa |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + copy("$apache2_sites_available_dir/loncapa","$apache2_sites_available_dir/loncapa.original"); + } + if (-l $defaultconfig) { + my $linkfname = readlink($defaultconfig); + if ($linkfname eq "$apache2_sites_available_dir/loncapa") { + unless ($diffres) { + $skipsite = 1; + } + } + } + } + } + unless ($skipsite) { + print_and_log(&mt('Copying loncapa [_1] site file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'000-default.conf symlink'")."\n"); + copy("$instdir/debian-ubuntu/ubuntu14/loncapa_site","$apache2_sites_available_dir/loncapa"); + chmod(0444,"$apache2_sites_available_dir/loncapa"); + symlink("$apache2_sites_available_dir/loncapa","$defaultconfig"); + } + } else { + if ((-e "$instdir/debian-ubuntu/loncapa") && (-e "$apache2_sites_available_dir/loncapa")) { + if (open(PIPE, "diff --brief $instdir/debian-ubuntu/loncapa $apache2_sites_available_dir/loncapa |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + copy("$apache2_sites_available_dir/loncapa","$apache2_sites_available_dir/loncapa.original"); + } + if (-l $defaultconfig) { + my $linkfname = readlink($defaultconfig); + if ($linkfname eq "$apache2_sites_available_dir/loncapa") { + unless ($diffres) { + $skipsite = 1; + } + } + } + } + } + unless ($skipsite) { + if (-l $defaultconfig) { + unlink($defaultconfig); + } + print_and_log(&mt('Copying loncapa [_1] config file to [_2] and pointing [_3] to it from sites-enabled.',"'apache2'","'/etc/apache2/sites-available'","'000-default symlink'")."\n"); + if (-e "$instdir/debian-ubuntu/loncapa") { + copy("$instdir/debian-ubuntu/loncapa","$apache2_sites_available_dir/loncapa"); + chmod(0444,"$apache2_sites_available_dir/loncapa"); + symlink("$apache2_sites_available_dir/loncapa","$apache2_sites_enabled_dir/000-default"); + } + } + } + if ($distname eq 'ubuntu') { + my $sitestatus = "$apache2_mods_available_dir/status.conf"; + my $stdstatus = "$instdir/debian-ubuntu/status.conf"; + if ((-e $sitestatus) && (-e $stdstatus)) { + if (open(PIPE, "diff --brief $stdstatus $sitestatus |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + if ($diffres) { + copy("$apache2_mods_available_dir/status.conf","$apache2_mods_available_dir/status.conf.original"); + } else { + $skipstatus = 1; + } + } + } + unless ($skipstatus) { + if (-e $stdstatus) { + print_and_log(&mt('Copying loncapa [_1] file to [_2],',"'status.conf'","'/etc/apache2/mods-available/status.conf'")."\n"); + copy($stdstatus,$sitestatus); + chmod(0644,$sitestatus); + } + } } print_and_log("\n"); } @@ -2418,7 +2588,7 @@ wget http://install.loncapa.org/versions print &mt('LON-CAPA source files extracted.')."\n". &mt('It remains for you to execute the following commands:')." -cd /root/loncapa-N.N (N.N should correspond to a version number like '0.4') +cd /root/loncapa-X.Y.Z (X.Y.Z should correspond to a version number like '2.11.3') ./UPDATE ".&mt('If you have any trouble, please see [_1] and [_2]',