--- doc/install/linux/install.pl 2011/05/31 13:29:46 1.19 +++ doc/install/linux/install.pl 2017/03/29 21:00:44 1.40 @@ -72,7 +72,7 @@ if (!open(LOG,">>loncapa_install.log")) &mt('Stopping execution.')."\n"; exit; } else { - print LOG '$Id: install.pl,v 1.19 2011/05/31 13:29:46 raeburn Exp $'."\n"; + print LOG '$Id: install.pl,v 1.40 2017/03/29 21:00:44 raeburn Exp $'."\n"; } # @@ -191,11 +191,11 @@ sub get_distro { $distro = 'rhes'.$1; $updatecmd = 'yum install LONCAPA-prerequisites'; $installnow = 'yum -y install LONCAPA-prerequisites'; - } elsif ($versionstring =~ /CentOS release (\d+)/) { + } elsif ($versionstring =~ /CentOS(?:| Linux) release (\d+)/) { $distro = 'centos'.$1; $updatecmd = 'yum install LONCAPA-prerequisites'; $installnow = 'yum -y install LONCAPA-prerequisites'; - } elsif ($versionstring =~ /Scientific Linux (SL )?release ([\d.]+) /) { + } elsif ($versionstring =~ /Scientific Linux (?:SL )?release ([\d.]+) /) { my $ver = $1; $ver =~ s/\.\d+$//; $distro = 'scientific'.$ver; @@ -320,6 +320,26 @@ sub check_locale { '/etc/sysconfig/language'); } $langvar = 'RC_LANG'; + } elsif ($distro =~ /^fedora(\d+)/) { + if ($1 >= 18) { + if (!open($fh,"= 7) { + if (!open($fh,"; chomp(@data); foreach my $item (@data) { - if ($item =~ /^\Q$langvar\E=\"([^\"]*)\"/) { + if ($item =~ /^\Q$langvar\E=\"?([^\"]*)\"?/) { my $default = $1; if ($default ne 'en_US.UTF-8') { if ($distro =~ /^debian/) { - $command = 'dpkg-reconfigure locales'; + $command = 'locale-gen en_US.UTF-8'."\n". + 'update-locale LANG=en_US.UTF-8'; } elsif ($distro =~ /^ubuntu/) { - $command = 'sudo set-language-env -E'; + $command = 'sudo locale-gen en_US.UTF-8'."\n". + 'sudo update-locale LANG=en_US.UTF-8'; } elsif ($distro =~ /^(suse|sles)/) { $command = 'yast language'; } else { @@ -357,14 +379,14 @@ sub check_required { } my $gotprereqs = &check_prerequisites($packagecmd,$distro); if ($gotprereqs eq '') { - return ($distro,$gotprereqs); + return ($distro,$gotprereqs,'',$packagecmd,$updatecmd); } my $localecmd = &check_locale($distro); unless ($localecmd eq '') { return ($distro,$gotprereqs,$localecmd); } - my ($mysqlon,$mysqlsetup,$dbh,$has_pass,$has_lcdb,%recommended,$downloadstatus, - $filetouse,$production,$testing,$apachefw,$tostop); + my ($mysqlon,$mysqlsetup,$mysqlrestart,$dbh,$has_pass,$has_lcdb,%recommended, + $downloadstatus,$filetouse,$production,$testing,$apachefw,$tostop,$uses_systemctl); my $wwwuid = &uid_of_www(); my $wwwgid = getgrnam('www'); if (($wwwuid eq '') || ($wwwgid eq '')) { @@ -376,35 +398,45 @@ sub check_required { $mysqlon = &check_mysql_running($distro); if ($mysqlon) { my $mysql_has_wwwuser = &check_mysql_wwwuser(); - ($mysqlsetup,$has_pass,$dbh) = - &check_mysql_setup($instdir,$dsn); - if ($mysqlsetup eq 'noroot') { - $recommended{'mysqlperms'} = 1; + ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser) = + &check_mysql_setup($instdir,$dsn,$distro,$mysql_has_wwwuser); + if ($mysqlsetup eq 'needsrestart') { + $mysqlrestart = ''; + if ($distro eq 'ubuntu') { + $mysqlrestart = 'sudo '; + } + $mysqlrestart .= 'service mysql restart'; + return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$mysqlrestart); } else { - unless ($mysql_has_wwwuser) { + if ($mysqlsetup eq 'noroot') { $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{'runlevels'},$tostop) = &chkconfig($distro,$instdir); + ($recommended{'runlevels'},$tostop,$uses_systemctl) = &chkconfig($distro,$instdir); $recommended{'apache'} = &chkapache($distro,$instdir); $recommended{'stopsrvcs'} = &chksrvcs($distro,$tostop); ($recommended{'download'},$downloadstatus,$filetouse,$production,$testing) = &need_download(); return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow, - \%recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus, - $filetouse,$production,$testing,$apachefw); + $mysqlrestart,\%recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus, + $filetouse,$production,$testing,$apachefw,$uses_systemctl); } sub check_mysql_running { my ($distro) = @_; + my $use_systemctl; my $mysqldaemon ='mysqld'; if ($distro =~ /^(suse|sles|debian|ubuntu)/) { $mysqldaemon = 'mysql'; @@ -416,8 +448,35 @@ sub check_mysql_running { $process = 'mysqld'; $proc_owner = 'mysql'; } + } elsif ($distro =~ /^fedora(\d+)/) { + if ($1 >= 16) { + if ($1 >= 19) { + $mysqldaemon ='mariadb'; + } + $process = 'mysqld'; + $proc_owner = 'mysql'; + $use_systemctl = 1; + } + if ($1 >= 19) { + $mysqldaemon ='mariadb'; + } + } elsif ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) { + if ($1 >= 7) { + $mysqldaemon ='mariadb'; + $process = 'mysqld'; + $proc_owner = 'mysql'; + $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 = ; close(PIPE); chomp($status); @@ -425,7 +484,11 @@ sub check_mysql_running { print_and_log(&mt('MySQL is running.')."\n"); return 1; } else { - system("/etc/init.d/$mysqldaemon start >/dev/null 2>&1 "); + if ($use_systemctl) { + system("/bin/systemctl start $mysqldaemon.service >/dev/null 2>&1 "); + } else { + system("/etc/init.d/$mysqldaemon start >/dev/null 2>&1 "); + } print_and_log(&mt('Waiting for MySQL to start.')."\n"); sleep 5; if (open(PIPE,"ps -ef |grep $process |grep -v grep 2>&1 |")) { @@ -460,8 +523,9 @@ sub check_mysql_running { sub chkconfig { my ($distro,$instdir) = @_; - my (%needfix,%tostop); + my (%needfix,%tostop,%uses_systemctl); my $checker_bin = '/sbin/chkconfig'; + my $sysctl_bin = '/bin/systemctl'; my %daemon = ( mysql => 'mysqld', apache => 'httpd', @@ -480,6 +544,20 @@ sub chkconfig { if ($distro =~ /^(suse|sles)9/) { $daemon{'apache'} = 'apache'; } + if ($distro =~ /^(suse|sles)([\d\.]+)/) { + my $name = $1; + my $num = $2; + if ($num > 11) { + $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+)/) { my $version = $1; @runlevels = qw/2 3 4 5/; @@ -491,66 +569,102 @@ sub chkconfig { if (($distro =~ /^ubuntu/) && ($version <= 8)) { $daemon{'cups'} = 'cupsys'; } + } elsif ($distro =~ /^fedora(\d+)/) { + my $version = $1; + if ($version >= 15) { + $uses_systemctl{'ntp'} = 1; + } + if ($version >= 16) { + $uses_systemctl{'mysql'} = 1; + $uses_systemctl{'apache'} = 1; + $uses_systemctl{'memcached'} = 1; + $uses_systemctl{'cups'} = 1; + } + if ($version >= 19) { + $daemon{'mysql'} = 'mariadb'; + } + } elsif ($distro =~ /^(?:centos|rhes|scientific)(\d+)/) { + my $version = $1; + if ($version >= 7) { + $uses_systemctl{'ntp'} = 1; + $uses_systemctl{'mysql'} = 1; + $uses_systemctl{'apache'} = 1; + $uses_systemctl{'memcached'} = 1; + $uses_systemctl{'cups'} = 1; + $daemon{'mysql'} = 'mariadb'; + } } + my $nocheck; if (! -x $checker_bin) { + if ($uses_systemctl{'mysql'} && $uses_systemctl{'apache'}) { + if (! -x $sysctl_bin) { + $nocheck = 1; + } + } else { + $nocheck = 1; + } + } + if ($nocheck) { print &mt('Could not check runlevel status for MySQL or Apache')."\n"; return; } my $rlstr = join('',@runlevels); my $nrlstr = join('',@norunlevels); + foreach my $type ('apache','mysql','ntp','cups','memcached') { my $service = $daemon{$type}; - if ($type eq 'ntp') { - if ($distro =~ /^(?:fedora)(\d+)/) { - my $version = $1; - if ($version >= 15) { - if (!-l "/etc/systemd/system/multi-user.target.wants/ntpd.service") { - $needfix{$type} = 'systemctl enable ntpd.service'; - } - next; + if ($uses_systemctl{$type}) { + if (($type eq 'memcached') || ($type eq 'cups')) { + if (-l "/etc/systemd/system/multi-user.target.wants/$service.service") { + $tostop{$type} = 1; } - } - } - my $command = $checker_bin.' --list '.$service.' 2>/dev/null'; - if ($type eq 'cups') { - if ($distro =~ /^(?:debian|ubuntu)(\d+)/) { - my $version = $1; - if (($distro =~ /^ubuntu/) && ($version <= 8)) { - $command = $checker_bin.' --list cupsys 2>/dev/null'; - } - } - } - my $results = `$command`; - my $tofix; - if ($results eq '') { - if (($type eq 'apache') || ($type eq 'mysql') || ($type eq 'ntp')) { - if ($distro =~ /^(debian|ubuntu)/) { - $tofix = "update-rc.d $type defaults"; - } else { - $tofix = "$checker_bin --add $service\n"; + } else { + if (!-l "/etc/systemd/system/multi-user.target.wants/$service.service") { + $needfix{$type} = "systemctl enable $service.service"; } } } else { - my %curr_runlevels; - for (my $rl=0; $rl<=6; $rl++) { - if ($results =~ /$rl:on/) { $curr_runlevels{$rl}++; } + my $command = $checker_bin.' --list '.$service.' 2>/dev/null'; + if ($type eq 'cups') { + if ($distro =~ /^(?:debian|ubuntu)(\d+)/) { + my $version = $1; + if (($distro =~ /^ubuntu/) && ($version <= 8)) { + $command = $checker_bin.' --list cupsys 2>/dev/null'; + } + } } - if (($type eq 'apache') || ($type eq 'mysql') || ($type eq 'ntp')) { - my $warning; - foreach my $rl (@runlevels) { - if (!exists($curr_runlevels{$rl})) { - $warning = 1; + my $results = `$command`; + my $tofix; + if ($results eq '') { + if (($type eq 'apache') || ($type eq 'mysql') || ($type eq 'ntp')) { + if ($distro =~ /^(debian|ubuntu)/) { + $tofix = "update-rc.d $type defaults"; + } else { + $tofix = "$checker_bin --add $service\n"; } } - if ($warning) { - $tofix = "$checker_bin --level $rlstr $service on\n"; + } else { + my %curr_runlevels; + for (my $rl=0; $rl<=6; $rl++) { + if ($results =~ /$rl:on/) { $curr_runlevels{$rl}++; } + } + if (($type eq 'apache') || ($type eq 'mysql') || ($type eq 'ntp')) { + my $warning; + foreach my $rl (@runlevels) { + if (!exists($curr_runlevels{$rl})) { + $warning = 1; + } + } + if ($warning) { + $tofix = "$checker_bin --level $rlstr $service on\n"; + } + } elsif (keys(%curr_runlevels) > 0) { + $tostop{$type} = 1; } - } elsif (keys(%curr_runlevels) > 0) { - $tostop{$type} = 1; } - } - if ($tofix) { - $needfix{$type} = $tofix; + if ($tofix) { + $needfix{$type} = $tofix; + } } } if ($distro =~ /^(suse|sles)([\d\.]+)$/) { @@ -568,7 +682,7 @@ sub chkconfig { } } } - return (\%needfix,\%tostop); + return (\%needfix,\%tostop,\%uses_systemctl); } sub chkfirewall { @@ -610,17 +724,47 @@ sub chkfirewall { sub chkapache { my ($distro,$instdir) = @_; my $fixapache = 1; - if ($distro =~ /^(debian|ubuntu)/) { - if (!-e "$instdir/debian-ubuntu/loncapa") { + if ($distro =~ /^(debian|ubuntu)(\d+)$/) { + my $distname = $1; + my $version = $2; + 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; print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n"; - } elsif ((-e "/etc/apache2/sites-available/loncapa") && (-e "$instdir/debian-ubuntu/loncapa")) { - if (open(PIPE, "diff --brief $instdir/debian-ubuntu/loncapa /etc/apache2/sites-available/loncapa |")) { - my $diffres = ; - close(PIPE); - chomp($diffres); - unless ($diffres) { - $fixapache = 0; + } else { + my ($configfile,$sitefile); + if (($distname eq 'ubuntu') && ($version > 12)) { + $sitefile = '/etc/apache2/sites-available/loncapa'; + $configfile = "/etc/apache2/conf-available/loncapa"; + } else { + $configfile = "/etc/apache2/sites-available/loncapa"; + } + if (($configfile ne '') && (-e $configfile) && (-e $stdconf)) { + if (open(PIPE, "diff --brief $stdconf $configfile |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + unless ($diffres) { + $fixapache = 0; + } + } + } + if ((!$fixapache) && ($distname eq 'ubuntu') && ($version > 12)) { + if (($sitefile ne '') && (-e $sitefile) && (-e $stdsite)) { + if (open(PIPE, "diff --brief $stdsite $sitefile |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + unless ($diffres) { + $fixapache = 0; + } + } } } } @@ -666,11 +810,15 @@ sub chkapache { } else { my $configfile = 'httpd.conf'; if ($distro =~ /^(?:centos|rhes|scientific)(\d+)$/) { - if ($1 > 5) { + if ($1 >= 7) { + $configfile = 'apache2.4/httpd.conf'; + } elsif ($1 > 5) { $configfile = 'new/httpd.conf'; } } elsif ($distro =~ /^fedora(\d+)$/) { - if ($1 > 10) { + if ($1 > 17) { + $configfile = 'apache2.4/httpd.conf'; + } elsif ($1 > 10) { $configfile = 'new/httpd.conf'; } } @@ -816,13 +964,36 @@ sub need_download { } sub check_mysql_setup { - my ($instdir,$dsn) = @_; + my ($instdir,$dsn,$distro,$mysql_has_wwwuser) = @_; my ($mysqlsetup,$has_pass); my $dbh = DBI->connect($dsn,'root','',{'PrintError'=>0}); if ($dbh) { $mysqlsetup = 'noroot'; } elsif ($DBI::err =~ /1045/) { $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 () { + 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) { print &mt('You have already set a root password for the MySQL database.')."\n"; @@ -849,11 +1020,11 @@ sub check_mysql_setup { } } } - } elsif ($mysqlsetup ne 'noroot') { + } elsif ($mysqlsetup ne 'noroot') { print_and_log(&mt('Problem accessing MySQL.')."\n"); $mysqlsetup = 'rootfail'; } - return ($mysqlsetup,$has_pass,$dbh); + return ($mysqlsetup,$has_pass,$dbh,$mysql_has_wwwuser); } sub check_mysql_wwwuser { @@ -1109,9 +1280,9 @@ my %prompts = &texthash( print "\n".&mt('Checking system status ...')."\n"; my $dsn = "DBI:mysql:database=mysql"; -my ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$recommended, - $dbh,$has_pass,$has_lcdb,$downloadstatus,$filetouse,$production, - $testing,$apachefw) = &check_required($instdir,$dsn); +my ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$mysqlrestart, + $recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,$filetouse,$production, + $testing,$apachefw,$uses_systemctl) = &check_required($instdir,$dsn); if ($distro eq '') { print "\n".&mt('Linux distribution could not be verified as a supported distribution.')."\n". &mt('The following are supported: [_1].', @@ -1120,6 +1291,13 @@ if ($distro eq '') { &mt('Stopping execution.')."\n"; 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 '') { 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". @@ -1147,8 +1325,8 @@ if (!$gotprereqs) { exit; } else { ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow, - $recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus, - $filetouse,$production,$testing,$apachefw) = + $mysqlrestart,$recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus, + $filetouse,$production,$testing,$apachefw,$uses_systemctl) = &check_required($instdir,$dsn); } } else { @@ -1222,7 +1400,7 @@ if ($callsub{'download'}) { print &mt('The most recent LON-CAPA release is version: [_1].',$production)."\n". &mt('Download the production release? ~[Y/n~]'); if (&get_user_selection(1)) { - $sourcetarball = $production.'tar.gz'; + $sourcetarball = 'loncapa-'.$production.'.tar.gz'; } } } elsif ($filetouse ne '') { @@ -1274,7 +1452,7 @@ if ($callsub{'apache'}) { if ($distro =~ /^(suse|sles)/) { ©_apache2_suseconf($instdir); } elsif ($distro =~ /^(debian|ubuntu)/) { - ©_apache2_debconf($instdir); + ©_apache2_debconf($instdir,$distro); } else { ©_httpd_conf($instdir,$distro); } @@ -1563,7 +1741,17 @@ sub kill_extra_services { if ($distro =~ /^(debian|ubuntu)/) { &print_and_log(`update-rc.d -f $daemon remove`); } 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`); + } } } } @@ -1601,8 +1789,23 @@ CREATE TABLE IF NOT EXISTS metadata (tit sub setup_mysql_permissions { my ($dbh,$has_pass,@mysql_lc_commands) = @_; - my $mysqlversion = &get_mysql_version(); - my @mysql_commands = ("INSERT user (Host, User, Password) VALUES('localhost','www',password('localhostkey'));"); + my ($mysqlversion,$mysqlsubver,$mysqlname) = &get_mysql_version(); + my ($usesauth,@mysql_commands); + if ($mysqlname =~ /^MariaDB/i) { + if ($mysqlversion >= 10.2) { + $usesauth = 1; + } + } else { + if (($mysqlversion > 5.7) || (($mysqlversion == 5.7) && ($mysqlsubver > 5))) { + $usesauth = 1; + } + } + if ($usesauth) { + @mysql_commands = ("INSERT user (Host, User, ssl_cipher, x509_issuer, x509_subject) VALUES('localhost','www','','','')", + "ALTER USER 'www'\@'localhost' IDENTIFIED BY 'localhostkey'"); + } else { + @mysql_commands = ("INSERT user (Host, User, Password) VALUES('localhost','www',password('localhostkey'));"); + } if ($mysqlversion < 4) { 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')"); @@ -1683,23 +1886,28 @@ INSERT db (Host,Db,User,Select_priv,Inse } sub new_mysql_rootpasswd { - my ($currmysqlpass) = @_; - return ("SET PASSWORD FOR 'root'\@'localhost'=PASSWORD('$currmysqlpass')", - "FLUSH PRIVILEGES;"); + my ($currmysqlpass,$usesauth) = @_; + if ($usesauth) { + 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 { - my $version; + my ($version,$subversion,$name); if (open(PIPE," mysql -V |")) { my $info = ; chomp($info); close(PIPE); - ($version) = ($info =~ /(\d+\.\d+)\.\d+,/); + ($version,$subversion,$name) = ($info =~ /(\d+\.\d+)\.(\d+)\-?(\w*),/); } else { print &mt('Could not determine which version of MySQL is installed.'). "\n"; } - return $version; + return ($version,$subversion,$name); } ########################################################### @@ -1713,11 +1921,15 @@ sub copy_httpd_conf { my ($instdir,$distro) = @_; my $configfile = 'httpd.conf'; if ($distro =~ /^(?:centos|rhes|scientific)(\d+)$/) { - if ($1 > 5) { + if ($1 >= 7) { + $configfile = 'apache2.4/httpd.conf'; + } elsif ($1 > 5) { $configfile = 'new/httpd.conf'; } } elsif ($distro =~ /^fedora(\d+)$/) { - if ($1 > 10) { + if ($1 > 17) { + $configfile = 'apache2.4/httpd.conf'; + } elsif ($1 > 10) { $configfile = 'new/httpd.conf'; } } @@ -1737,19 +1949,7 @@ sub copy_httpd_conf { ######################################################### sub copy_apache2_debconf { - my ($instdir) = @_; - 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"); - my $apache2_sites_enabled_dir = '/etc/apache2/sites-enabled'; - my $apache2_sites_available_dir = '/etc/apache2/sites-available'; - if (-l "$apache2_sites_enabled_dir/000-default") { - unlink("$apache2_sites_enabled_dir/000-default"); - } - 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"); + my ($instdir,$distro) = @_; my $apache2_mods_enabled_dir = '/etc/apache2/mods-enabled'; my $apache2_mods_available_dir = '/etc/apache2/mods-available'; foreach my $module ('headers.load','expires.load') { @@ -1758,6 +1958,47 @@ sub copy_apache2_debconf { print_and_log(&mt('Enabling "[_1]" Apache module.',$module)."\n"); } } + my $apache2_sites_enabled_dir = '/etc/apache2/sites-enabled'; + my $apache2_sites_available_dir = '/etc/apache2/sites-available'; + my $defaultconfig = "$apache2_sites_enabled_dir/000-default"; + my ($distname,$version); + if ($distro =~ /^(debian|ubuntu)(\d+)$/) { + $distname = $1; + $version = $2; + } + if (($distname eq 'ubuntu') && ($version > 12)) { + $defaultconfig = "$apache2_sites_enabled_dir/000-default.conf"; + } + if (-l $defaultconfig) { + unlink($defaultconfig); + } + 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"); + } print_and_log("\n"); }