[LON-CAPA-cvs] cvs: doc /install/linux install.pl

raeburn raeburn@source.lon-capa.org
Mon, 28 Mar 2011 13:27:56 -0000


This is a MIME encoded message

--raeburn1301318876
Content-Type: text/plain

raeburn		Mon Mar 28 13:27:56 2011 EDT

  Modified files:              
    /doc/install/linux	install.pl 
  Log:
  - Include ntp amongst services to start on boot.
  - Include memcached amongst services to stop, and remove from start on boot
    (loncontrol starts memcached).
  - ubuntu8 and earlier use cupsys instead of cups for name of print server pkg.
  - set-up of Apache on debian/ubuntu includes linking from mods-available to
    mods-enabled for headers.load and expires.load.
  
  
--raeburn1301318876
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20110328132756.txt"

Index: doc/install/linux/install.pl
diff -u doc/install/linux/install.pl:1.5 doc/install/linux/install.pl:1.6
--- doc/install/linux/install.pl:1.5	Wed Mar 23 15:01:34 2011
+++ doc/install/linux/install.pl	Mon Mar 28 13:27:56 2011
@@ -72,7 +72,7 @@
           &mt('Stopping execution.')."\n";
     exit;
 } else {
-    print LOG '$Id: install.pl,v 1.5 2011/03/23 15:01:34 raeburn Exp $'."\n";
+    print LOG '$Id: install.pl,v 1.6 2011/03/28 13:27:56 raeburn Exp $'."\n";
 }
 
 #
@@ -305,6 +305,41 @@
     return $gotprereqs;
 }
 
+sub check_locale {
+    my ($distro) = @_;
+    my ($fh,$command);
+    if ($distro =~ /^(ubuntu|debian)/) {
+        if (!open($fh,"</etc/default/locale")) {
+            print &mt('Failed to open: [_1], default locale not checked.',
+                      '/etc/default/locale');
+        }
+    } else {
+        if (!open($fh,"</etc/sysconfig/i18n")) {
+            print &mt('Failed to open: [_1], default locale not checked.',
+                      '/etc/sysconfig/i18n');
+        }
+    }
+    my @data = <$fh>;
+    chomp(@data);
+    foreach my $item (@data) {
+        if ($item =~ /^LANG=\"([^\"]*)\"/) {
+            my $default = $1;
+            if ($default ne 'en_US.UTF-8') {
+                if ($distro =~ /^debian/) {
+                    $command = 'dpkg-reconfigure locales';
+                } elsif ($distro =~ /^ubuntu/) {
+                    $command = 'sudo set-language-env -E'; 
+                } else {
+                    $command = 'system-config-language';
+                }
+            }
+            last;
+        }
+    }
+    close($fh);
+    return $command;
+}
+
 sub check_required {
     my ($instdir,$dsn) = @_;
     my ($distro,$packagecmd,$updatecmd,$installnow) = &get_distro();
@@ -313,7 +348,11 @@
     }
     my $gotprereqs = &check_prerequisites($packagecmd,$distro); 
     if ($gotprereqs eq '') {
-        return ($distro,$gotprereqs,$packagecmd,$updatecmd,$installnow);
+        return ($distro,$gotprereqs);
+    }
+    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);
@@ -350,7 +389,7 @@
     $recommended{'stopsrvcs'} = &chksrvcs($distro,$tostop);
     ($recommended{'download'},$downloadstatus,$filetouse,$production,$testing) 
         = &need_download();
-    return ($distro,$gotprereqs,$packagecmd,$updatecmd,$installnow,
+    return ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,
             \%recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,
             $filetouse,$production,$testing,$apachefw);
 }
@@ -361,11 +400,19 @@
     if ($distro =~ /^(suse|sles|debian|ubuntu)/) {
         $mysqldaemon = 'mysql';
     }
-    if (open(PIPE,"ps -ef |grep mysqld_safe |grep -v grep 2>&1 |")) {
+    my $process = 'mysqld_safe';
+    my $proc_owner = 'root';
+    if ($distro =~ /^ubuntu(\w+)/) {
+        if ($1 >= 10) {
+            $process = 'mysqld';
+            $proc_owner = 'mysql';
+        }
+    }
+    if (open(PIPE,"ps -ef |grep $process |grep -v grep 2>&1 |")) {
         my $status = <PIPE>;
         close(PIPE);
         chomp($status);
-        if ($status =~ /^root\s+\d+\s+/) {
+        if ($status =~ /^\Q$proc_owner\E\s+\d+\s+/) {
             print_and_log(&mt('MySQL is running.')."\n");
             return 1;
         } else {
@@ -396,52 +443,58 @@
     my ($distro) = @_;
     my (%needfix,%tostop);
     my $checker_bin = '/sbin/chkconfig';
-    my $mysqldaemon ='mysqld';
-    my $webserver = 'httpd';
-    my $cupsdaemon = 'cups';
-    my $ntpdaemon = 'ntpd';
+    my %daemon = (
+                  mysql     => 'mysqld',
+                  apache    => 'httpd',
+                  cups      => 'cups',
+                  ntp       => 'ntpd',
+                  memcached => 'memcached',
+    );
     my @runlevels = qw/3 4 5/;
     my @norunlevels = qw/0 1 6/;
     if ($distro =~ /^(suse|sles)/) {
         @runlevels = qw/3 5/;
         @norunlevels = qw/0 2 1 6/;
-        $mysqldaemon = 'mysql';
-        $webserver = 'apache2';
+        $daemon{'mysql'} = 'mysql';
+        $daemon{'apache'} = 'apache2';
         if ($distro =~ /^(suse|sles)9/) {
-            $webserver = 'apache';
+            $daemon{'apache'} = 'apache';
         }
-    } elsif ($distro =~ /^(debian|ubuntu)/) {
+    } elsif ($distro =~ /^(?:debian|ubuntu)(\d+)/) {
+        my $version = $1;
         @runlevels = qw/2 3 4 5/;
         @norunlevels = qw/0 1 6/;
         $checker_bin = '/usr/sbin/sysv-rc-conf';
-        $mysqldaemon = 'mysql';
-        $webserver = 'apache2';
-        $ntpdaemon = 'ntp';
+        $daemon{'mysql'}  = 'mysql';
+        $daemon{'apache'} = 'apache2';
+        $daemon{'ntp'}    = 'ntp';
+        if (($distro =~ /^ubuntu/) && ($version <= 8)) {
+            $daemon{'cups'} = 'cupsys';
+        }
     }
     if (! -x $checker_bin) {
-        print &mt('Could not check runlevel status for MySQL or Apache.')."\n";
+        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') {
-        my $service;
-        if ($type eq 'apache') {
-            $service = $webserver;
-        } elsif ($type eq 'mysql') {
-            $service = $mysqldaemon; 
-        } elsif ($type eq 'cups') {
-            $service = $cupsdaemon;
-        } elsif ($type eq 'ntp') {
-            $service = $ntpdaemon;
-        }
+    foreach my $type ('apache','mysql','ntp','cups','memcached') {
+        my $service = $daemon{$type};
         my $command = $checker_bin.' --list '.$service;
+        if ($type eq 'cups') { 
+            if ($distro =~ /^(?:debian|ubuntu)(\d+)/) {
+                my $version = $1;
+                if (($distro =~ /^ubuntu/) && ($version <= 8)) {
+                    $command = $checker_bin.' --list cupsys';
+                }
+            }
+        }
         my $results = `$command`;
         my $tofix;
         if ($results eq '') {
-            if (($type eq 'apache') || ($type eq 'mysql')) {
+            if (($type eq 'apache') || ($type eq 'mysql') || ($type eq 'ntp')) {
                 if ($distro  =~ /^(debian|ubuntu)/) {
-                    $tofix = "$checker_bin --level $nrlstr $service off\n";
+                    $tofix = "update-rc.d $type defaults";
                 } else {
                     $tofix = "$checker_bin --add $service\n";
                 }
@@ -538,6 +591,13 @@
                 }
             }
         }
+        if (!$fixapache) {
+            foreach my $module ('headers.load','expires.load') {
+                unless (-l "/etc/apache2/mods-enabled/$module") {
+                    $fixapache = 1;
+                }
+            }
+        }
     } elsif ($distro =~ /^(?:suse|sles)([\d\.]+)$/) {
         my $apache = 'apache';
         if ($1 >= 10) {
@@ -580,7 +640,7 @@
     if (ref($tostop) eq 'HASH') {
         %stopsrvcs = %{$tostop};
     }
-    foreach my $service ('cups') {
+    foreach my $service ('cups','memcached') {
         next if (exists($stopsrvcs{$service}));
         my $daemon = $service;
         if ($service eq 'cups') {
@@ -981,7 +1041,7 @@
 print "\n".&mt('Checking system status ...')."\n";
 
 my $dsn = "DBI:mysql:database=mysql";
-my ($distro,$gotprereqs,$packagecmd,$updatecmd,$installnow,$recommended,
+my ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,$recommended,
     $dbh,$has_pass,$has_lcdb,$downloadstatus,$filetouse,$production,
     $testing,$apachefw) = &check_required($instdir,$dsn);
 if ($distro eq '') {
@@ -992,6 +1052,13 @@
           &mt('Stopping execution.')."\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".
+    $localecmd."\n\n".
+    &mt('Stopping execution.')."\n";
+    exit;
+}
 if (!$gotprereqs) {
     print "\n".&mt('The LONCAPA-prequisites package is not installed.')."\n".
           &mt('The following command can be used to install the package (and dependencies):')."\n\n".
@@ -1011,7 +1078,7 @@
                           &mt('Stopping execution.')."\n";
                     exit;
                 } else {
-                    ($distro,$gotprereqs,$packagecmd,$updatecmd,$installnow,
+                    ($distro,$gotprereqs,$localecmd,$packagecmd,$updatecmd,$installnow,
                      $recommended,$dbh,$has_pass,$has_lcdb,$downloadstatus,
                      $filetouse,$production,$testing,$apachefw) = 
                      &check_required($instdir,$dsn);
@@ -1392,19 +1459,25 @@
     if (ref($stopsrvcs) eq 'HASH') {
         my @stopping = sort(keys(%{$stopsrvcs}));
         if (@stopping) {
-            my $kill_list = join("',' ",@stopping);
+            my $kill_list = join("', '",@stopping);
             if ($kill_list) {
                 $kill_list = "'".$kill_list."'";
-                &print_and_log("\n".&mt('Killing unneccessary services ([_1] daemon(s)).',$kill_list)."\n");
-                foreach my $daemon (@stopping) {
-                    my $service = $daemon;
-	            &print_and_log(`/etc/init.d/$service stop`);
-	            &print_and_log(&mt('Removing [_1] from startup.',$service)."\n");
-                    if ($daemon eq 'cupsd') {
-                        $service = 'cups';
+                &print_and_log("\n".&mt('Killing unnecessary services ([_1] daemon(s)).',$kill_list)."\n");
+                foreach my $service (@stopping) {
+                    my $daemon = $service;
+                    if ($service eq 'cups') {
+                        $daemon = 'cupsd';
+                        if ($distro =~ /^(?:debian|ubuntu)(\d+)/) {
+                            my $version = $1;
+                            if (($distro =~ /^ubuntu/) && ($version <= 8)) {
+                                $daemon = 'cupsys';
+                            }
+                        }
                     }
+	            &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(`/usr/sbin/sysv-rc-conf $service off`);
+                        &print_and_log(`update-rc.d -f $daemon remove`);
                     } else {
 	                &print_and_log(`chkconfig --del $service`);
                     }
@@ -1572,17 +1645,25 @@
 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_enabled_dir = '/etc/apache2/sites-enabled';
-    my $apache2_available_dir = '/etc/apache2/sites-available';
-    if (-l "$apache2_enabled_dir/000-default") {
-        unlink("$apache2_enabled_dir/000-default");
-    }
-    if (-e "$apache2_available_dir/loncapa") {
-        copy("$apache2_available_dir/loncapa","$apache2_available_dir/loncapa.original");
-    }
-    copy("$instdir/apache2.conf","$apache2_available_dir/loncapa");
-    chmod(0444,"$apache2_available_dir/loncapa");
-    symlink("$apache2_available_dir/loncapa","$apache2_enabled_dir/000-default");
+    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/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';
+    my $apache2_mods_available_dir = '/etc/apache2/mods-available';
+    foreach my $module ('headers.load','expires.load') {
+        unless (-l "$apache2_mods_enabled_dir/$module") {
+            symlink("$apache2_mods_available_dir/$module","$apache2_mods_enabled_dir/$module");
+            print_and_log(&mt('Enabling "[_1]" Apache module.',$module)."\n");
+        }
+    }
     print_and_log("\n");
 }
 

--raeburn1301318876--