--- doc/install/linux/install.pl 2011/04/23 19:04:42 1.7 +++ doc/install/linux/install.pl 2011/05/08 13:20:03 1.12 @@ -72,7 +72,7 @@ if (!open(LOG,">>loncapa_install.log")) &mt('Stopping execution.')."\n"; exit; } else { - print LOG '$Id: install.pl,v 1.7 2011/04/23 19:04:42 raeburn Exp $'."\n"; + print LOG '$Id: install.pl,v 1.12 2011/05/08 13:20:03 raeburn Exp $'."\n"; } # @@ -195,7 +195,7 @@ sub get_distro { $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; @@ -219,7 +219,7 @@ sub get_distro { } } elsif ($versionstring =~ /^SuSE Linux ([\d\.]+) /i) { $distro = 'suse'.$1; - $updatecmd = 'yast -i LONCAPA-preprequisites'; + $updatecmd = 'yast -i LONCAPA-prerequisites'; } elsif ($versionstring =~ /^openSUSE ([\d\.]+) /i) { $distro = 'suse'.$1; if ($1 >= 10.3 ) { @@ -293,7 +293,7 @@ sub check_prerequisites { } else { my $line = ; chomp($line); - if ($line =~ /^LONCAPA-prerequisites\-([\d\-]+)\.(\w+)$/) { + if ($line =~ /^LONCAPA\-prerequisites\-([\d\-]+)\.(?:[.\w]+)$/) { $gotprereqs = $1; } } @@ -307,12 +307,19 @@ sub check_prerequisites { sub check_locale { my ($distro) = @_; - my ($fh,$command); + my ($fh,$langvar,$command); + $langvar = 'LANG'; if ($distro =~ /^(ubuntu|debian)/) { if (!open($fh,"; chomp(@data); foreach my $item (@data) { - if ($item =~ /^LANG=\"([^\"]*)\"/) { + if ($item =~ /^\Q$langvar\E=\"([^\"]*)\"/) { my $default = $1; if ($default ne 'en_US.UTF-8') { if ($distro =~ /^debian/) { @@ -386,7 +393,7 @@ sub check_required { } } ($recommended{'firewall'},$apachefw) = &chkfirewall($distro); - ($recommended{'runlevels'},$tostop) = &chkconfig($distro); + ($recommended{'runlevels'},$tostop) = &chkconfig($distro,$instdir); $recommended{'apache'} = &chkapache($distro,$instdir); $recommended{'stopsrvcs'} = &chksrvcs($distro,$tostop); ($recommended{'download'},$downloadstatus,$filetouse,$production,$testing) @@ -418,21 +425,31 @@ sub check_mysql_running { print_and_log(&mt('MySQL is running.')."\n"); return 1; } else { - system("/etc/rc.d/init.d/$mysqldaemon start"); + 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, "/etc/init.d/$mysqldaemon 2>&1 |")) { - my $status = ; + if (open(PIPE,"ps -ef |grep $process |grep -v grep 2>&1 |")) { + $status = ; close(PIPE); chomp($status); - if ($status =~ /\(pid\s+\d\)/) { + if ($status =~ /^\Q$proc_owner\E\s+\d+\s+/) { print_and_log(&mt('MySQL is running.')."\n"); return 1; } else { - print_and_log(&mt('Unable to start MySQL.')."\n"); + print_and_log(&mt('Still waiting for MySQL to start.')."\n"); + sleep 5; + if (open(PIPE,"ps -ef |grep $process |grep -v grep 2>&1 |")) { + $status = ; + close(PIPE); + chomp($status); + if ($status =~ /^\Q$proc_owner\E\s+\d+\s+/) { + print_and_log(&mt('MySQL is running.')."\n"); + return 1; + } else { + print_and_log(&mt('Given up waiting for MySQL to start.')."\n"); + } + } } - } else { - print_and_log(&mt('Unable to start MySQL.')."\n"); } } } else { @@ -442,7 +459,7 @@ sub check_mysql_running { } sub chkconfig { - my ($distro) = @_; + my ($distro,$instdir) = @_; my (%needfix,%tostop); my $checker_bin = '/sbin/chkconfig'; my %daemon = ( @@ -459,6 +476,7 @@ sub chkconfig { @norunlevels = qw/0 2 1 6/; $daemon{'mysql'} = 'mysql'; $daemon{'apache'} = 'apache2'; + $daemon{'ntp'} = 'ntp'; if ($distro =~ /^(suse|sles)9/) { $daemon{'apache'} = 'apache'; } @@ -482,12 +500,12 @@ sub chkconfig { my $nrlstr = join('',@norunlevels); foreach my $type ('apache','mysql','ntp','cups','memcached') { my $service = $daemon{$type}; - my $command = $checker_bin.' --list '.$service; + 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'; + $command = $checker_bin.' --list cupsys 2>/dev/null'; } } } @@ -534,7 +552,9 @@ sub chkconfig { $major = $version; } if ($major > 10) { - $needfix{'insserv'} = &check_SuSEfirewall2_setup(); + if (&check_SuSEfirewall2_setup($instdir)) { + $needfix{'insserv'} = 1; + } } } return (\%needfix,\%tostop); @@ -580,11 +600,11 @@ sub chkapache { my ($distro,$instdir) = @_; my $fixapache = 1; if ($distro =~ /^(debian|ubuntu)/) { - if (!-e "$instdir/apache2.conf") { + if (!-e "$instdir/debian-ubuntu/apache2.conf") { $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/apache2.conf")) { - if (open(PIPE, "diff --brief $instdir/apache2.conf /etc/apache2/sites-available/loncapa |")) { + } elsif ((-e "/etc/apache2/sites-available/loncapa") && (-e "$instdir/debian-ubuntu/apache2.conf")) { + if (open(PIPE, "diff --brief $instdir/debian-ubuntu/apache2.conf /etc/apache2/sites-available/loncapa |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -603,13 +623,27 @@ sub chkapache { } elsif ($distro =~ /^(?:suse|sles)([\d\.]+)$/) { my $apache = 'apache'; if ($1 >= 10) { - my $apache = 'apache2'; + $apache = 'apache2'; + } + if (!-e "$instdir/sles-suse/default-server.conf") { + $fixapache = 0; + print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n"; + } elsif ((-e "/etc/$apache/default-server.conf") && (-e "$instdir/sles-suse/default-server.conf")) { + if (open(PIPE, "diff --brief $instdir/sles-suse/default-server.conf /etc/$apache/default-server.conf |")) { + my $diffres = ; + close(PIPE); + chomp($diffres); + unless ($diffres) { + $fixapache = 0; + } + } } - if (!-e "$instdir/default-server.conf") { + } elsif ($distro eq 'rhes4') { + if (!-e "$instdir/rhes4/httpd.conf") { $fixapache = 0; print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n"; - } elsif ((-e "/etc/$apache/default-server.conf") && (-e "$instdir/default-server.conf")) { - if (open(PIPE, "diff --brief $instdir/default-server.conf /etc/$apache/default-server.conf |")) { + } elsif ((-e "/etc/httpd/conf/httpd.conf") && (-e "$instdir/rhes4/httpd.conf")) { + if (open(PIPE, "diff --brief $instdir/rhes4/httpd.conf /etc/httpd/conf/httpd.conf |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -619,11 +653,11 @@ sub chkapache { } } } else { - if (!-e "$instdir/httpd.conf") { + if (!-e "$instdir/centos-rhes-fedora-sl/httpd.conf") { $fixapache = 0; print &mt('Warning: No LON-CAPA Apache configuration file found for installation check.')."\n"; - } elsif ((-e "/etc/httpd/conf/httpd.conf") && (-e "$instdir/httpd.conf")) { - if (open(PIPE, "diff --brief $instdir/httpd.conf /etc/httpd/conf/httpd.conf |")) { + } elsif ((-e "/etc/httpd/conf/httpd.conf") && (-e "$instdir/centos-rhes-fedora-sl/httpd.conf")) { + if (open(PIPE, "diff --brief $instdir/centos-rhes-fedora-sl/httpd.conf /etc/httpd/conf/httpd.conf |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -654,10 +688,20 @@ sub chksrvcs { chomp($daemonrunning); close(PIPE); if ($daemonrunning) { - $stopsrvcs{$service} = 1; + if ($service eq 'memcached') { + my $cmd = '/usr/sbin/memcached'; + if ($distro =~ /^centos|fedora|scientific|rhes/) { + $cmd = '/usr/bin/memcached'; + } + unless ($daemonrunning =~ m{^www[^/]+\Q$cmd -m 400 -v\E$}) { + $stopsrvcs{$service} = 1; + } + } else { + $stopsrvcs{$service} = 1; + } } } - } + } return \%stopsrvcs; } @@ -793,7 +837,8 @@ sub check_mysql_setup { sub check_mysql_wwwuser { my $mysql_wwwuser; - my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey'); + my $dbhn = DBI->connect("DBI:mysql:database=information_schema",'www','localhostkey', + {PrintError => +0}) || return; if ($dbhn) { $mysql_wwwuser = 1; $dbhn->disconnect; @@ -930,8 +975,8 @@ sub get_mysql_password { sub check_SuSEfirewall2_setup { my ($instdir) = @_; my $need_override = 1; - if ((-e "/etc/insserv/overrides/SuSEfirewall2_setup") && (-e "$instdir/SuSEfirewall2_setup")) { - if (open(PIPE, "diff --brief $instdir/SuSEfirewall2_setup /etc/insserv/overrides/SuSEfirewall2_setup |")) { + if ((-e "/etc/insserv/overrides/SuSEfirewall2_setup") && (-e "$instdir/sles-suse/SuSEfirewall2_setup")) { + if (open(PIPE, "diff --brief $instdir/sles-suse/SuSEfirewall2_setup /etc/insserv/overrides/SuSEfirewall2_setup |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -1062,7 +1107,7 @@ if ($localecmd ne '') { exit; } if (!$gotprereqs) { - print "\n".&mt('The LONCAPA-prequisites package is not installed.')."\n". + print "\n".&mt('The LONCAPA-prerequisites package is not installed.')."\n". &mt('The following command can be used to install the package (and dependencies):')."\n\n". $updatecmd."\n\n"; if ($installnow eq '') { @@ -1076,7 +1121,7 @@ if (!$gotprereqs) { close(PIPE); $gotprereqs = &check_prerequisites($packagecmd,$distro); if (!$gotprereqs) { - print &mt('The LONCAPA-prequisites package is not installed.')."\n". + print &mt('The LONCAPA-prerequisites package is not installed.')."\n". &mt('Stopping execution.')."\n"; exit; } else { @@ -1086,7 +1131,7 @@ if (!$gotprereqs) { &check_required($instdir,$dsn); } } else { - print &mt('Failed to run command to install LONCAPA-prequisites')."\n"; + print &mt('Failed to run command to install LONCAPA-prerequisites')."\n"; exit; } } else { @@ -1234,7 +1279,9 @@ if ($callsub{'runlevels'}) { } } } - &update_SuSEfirewall2_setup($instdir); + if ($distro =~ /^(suse|sles)/) { + &update_SuSEfirewall2_setup($instdir); + } } else { &print_and_log(&mt('Skipping setting override for start-up order of services.')."\n"); } @@ -1260,9 +1307,13 @@ if ($callsub{'firewall'}) { } } } + } elsif ($distro =~ /^scientific/) { + print &mt('Use [_1] to configure the firewall to allow access for [_2].', + 'system-config-firewall-tui -- Customize', + 'ssh, http')."\n"; } else { print &mt('Use [_1] to configure the firewall to allow access for [_2].', - 'setup -- Firewall confiuration -> Customize', + 'setup -- Firewall configuration -> Customize', 'ssh, http, https')."\n"; } } else { @@ -1272,7 +1323,7 @@ if ($callsub{'firewall'}) { if ($callsub{'stopsrvcs'}) { &kill_extra_services($distro,$recommended->{'stopsrvcs'}); } else { - &print_and_log(&mt('Skipping stopping unnecessary service ([_1] daemon).',"'cups'")."\n"); + &print_and_log(&mt('Skipping stopping unnecessary service ([_1] daemons).',"'cups','memcached'")."\n"); } my ($have_tarball,$updateshown); @@ -1425,7 +1476,7 @@ ENDPATCH ## Compile patched pwauth ## print_and_log(&mt('Compiling pwauth')."\n"); - my $result = `cd $dir/; make`; + my $result = `cd $dir/; make 2>/dev/null `; my $expected = <<"END"; gcc -g -c -o pwauth.o pwauth.c gcc -o pwauth -g pwauth.o -lcrypt @@ -1474,14 +1525,24 @@ sub kill_extra_services { if (($distro =~ /^ubuntu/) && ($version <= 8)) { $daemon = 'cupsys'; } + } else { + $daemon = 'cups'; + } + } + my $cmd = "ps -ef |grep '$daemon' |grep -v grep"; + if (open(PIPE,'-|',$cmd)) { + my $daemonrunning = ; + chomp($daemonrunning); + close(PIPE); + if ($daemonrunning) { + &print_and_log(`/etc/init.d/$daemon stop`); } } - &print_and_log(`/etc/init.d/$daemon stop`); &print_and_log(&mt('Removing [_1] from startup.',$service)."\n"); if ($distro =~ /^(debian|ubuntu)/) { &print_and_log(`update-rc.d -f $daemon remove`); } else { - &print_and_log(`chkconfig --del $service`); + &print_and_log(`/sbin/chkconfig --del $service`); } } } @@ -1632,7 +1693,7 @@ sub copy_httpd_conf { print_and_log(&mt('Copying the LON-CAPA [_1] to [_2].',"'httpd.conf'", "'/etc/httpd/conf/httpd.conf'")."\n"); copy "/etc/httpd/conf/httpd.conf","/etc/httpd/conf/httpd.conf.original"; - copy "$instdir/httpd.conf","/etc/httpd/conf/httpd.conf"; + copy "$instdir/centos-rhes-fedora-sl/httpd.conf","/etc/httpd/conf/httpd.conf"; chmod(0444,"/etc/httpd/conf/httpd.conf"); print_and_log("\n"); } @@ -1655,7 +1716,7 @@ sub copy_apache2_debconf { if (-e "$apache2_sites_available_dir/loncapa") { copy("$apache2_sites_available_dir/loncapa","$apache2_sites_available_dir/loncapa.original"); } - copy("$instdir/apache2.conf","$apache2_sites_available_dir/loncapa"); + copy("$instdir/debian-ubuntu/apache2.conf","$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 $apache2_mods_enabled_dir = '/etc/apache2/mods-enabled'; @@ -1685,7 +1746,7 @@ sub copy_apache2_suseconf { if (!-e "/etc/apache2/default-server.conf.original") { copy "/etc/apache2/default-server.conf","/etc/apache2/default-server.conf.original"; } - copy "$instdir/default-server.conf","/etc/apache2/default-server.conf"; + copy "$instdir/sles-suse/default-server.conf","/etc/apache2/default-server.conf"; chmod(0444,"/etc/apache2/default-server.conf"); # Make symlink for conf directory (included in loncapa_apache.conf) my $can_symlink = (eval { symlink('/etc/apache2','/srv/www/conf'); }, $@ eq ''); @@ -1712,7 +1773,7 @@ sub copy_apache2_conf_files { if (!-e "/etc/apache2/uid.conf.original") { copy "/etc/apache2/uid.conf","/etc/apache2/uid.conf.original"; } - copy "$instdir/uid.conf","/etc/apache2/uid.conf"; + copy "$instdir/sles-suse/uid.conf","/etc/apache2/uid.conf"; chmod(0444,"/etc/apache2/uid.conf"); } @@ -1727,7 +1788,7 @@ sub copy_sysconfig_apache2_file { if (!-e "/etc/sysconfig/apache2.original") { copy "/etc/sysconfig/apache2","/etc/sysconfig/apache2.original"; } - copy "$instdir/sysconfig_apache2","/etc/sysconfig/apache2"; + copy "$instdir/sles-suse/sysconfig_apache2","/etc/sysconfig/apache2"; chmod(0444,"/etc/sysconfig/apache2"); } @@ -1750,7 +1811,7 @@ sub update_SuSEfirewall2_setup { } elsif (!-e "/etc/insserv/overrides/SuSEfirewall2_setup.original") { copy "/etc/insserv/overrides/SuSEfirewall2_setup","/etc/insserv/overrides/SuSEfirewall2_setup.original" } - copy "$instdir/SuSEfirewall2_setup","/etc/insserv/overrides/SuSEfirewall2_setup"; + copy "$instdir/sles-suse/SuSEfirewall2_setup","/etc/insserv/overrides/SuSEfirewall2_setup"; chmod(0444,"/etc/insserv/overrides/SuSEfirewall2_setup"); } @@ -1777,7 +1838,7 @@ sub get_iptables_rules { } my $ask_to_enable; if (-e "/etc/iptables.loncapa.rules") { - if (open(PIPE, "diff --brief $instdir/debian/iptables.loncapa.rules /etc/iptables.loncapa.rules |")) { + if (open(PIPE, "diff --brief $instdir/debian-ubuntu/iptables.loncapa.rules /etc/iptables.loncapa.rules |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -1788,14 +1849,14 @@ sub get_iptables_rules { print &mt('Error: unable to open [_1] to compare contents with LON-CAPA supplied file.','/etc/iptables.loncapa.rules')."\n"; } } else { - if (-e "$instdir/debian/iptables.loncapa.rules") { - copy "$instdir/debian/iptables.loncapa.rules","/etc/iptables.loncapa.rules"; + if (-e "$instdir/debian-ubuntu/iptables.loncapa.rules") { + copy "$instdir/debian-ubuntu/iptables.loncapa.rules","/etc/iptables.loncapa.rules"; chmod(0600,"/etc/iptables.loncapa.rules"); } } if (-e "/etc/iptables.loncapa.rules") { if (-e "/etc/network/if-pre-up.d/iptables") { - if (open(PIPE, "diff --brief $instdir/debian/iptables /etc/network/if-pre-up/iptables |")) { + if (open(PIPE, "diff --brief $instdir/debian-ubuntu/iptables /etc/network/if-pre-up/iptables |")) { my $diffres = ; close(PIPE); chomp($diffres); @@ -1806,7 +1867,7 @@ sub get_iptables_rules { print &mt('Error: unable to open [_1] to compare contents with LON-CAPA supplied file.','/etc/network/if-pre-up.d/iptables')."\n"; } } else { - copy "$instdir/debian/iptables","/etc/network/if-pre-up.d/iptables"; + copy "$instdir/debian-ubuntu/iptables","/etc/network/if-pre-up.d/iptables"; chmod(0755,"/etc/network/if-pre-up.d/iptables"); print_and_log(&mt('Installed script "[_1]" to add iptables rules to block all ports except 22, 80, and 443 when network is enabled during boot.','/etc/network/if-pre-up.d/iptables')); $ask_to_enable = 1;