Author: pebender
Date: Sat Jan  3 16:26:12 2009
New Revision: 4163

Modified:
    trunk/gar-minimyth/html/minimyth/document-changelog.txt
     
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf.pm
     
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/rc.pl
    trunk/gar-minimyth/script/perl/perl-MiniMyth/checksums
    trunk/gar-minimyth/script/perl/perl-MiniMyth/files/MiniMyth.pm

Log:
- Improved perl init script error messages, including minimyth.pm.



Modified: trunk/gar-minimyth/html/minimyth/document-changelog.txt
==============================================================================
--- trunk/gar-minimyth/html/minimyth/document-changelog.txt     (original)
+++ trunk/gar-minimyth/html/minimyth/document-changelog.txt     Sat Jan  3  
16:26:12 2009
@@ -13,7 +13,8 @@
      MythTV trunk:        version trunk.19538     trunk svn 19538.

  Obsoleted sh init scripts
-    - MM_INIT_TYPE=sh will no longer work.
+    - Obsoleted sh init scripts. MM_INIT_TYPE=sh will no longer work.
+    - Improved perl init script error messages, including minimyth.pm.

  Modified MiniMyth configuration
      - Obsoleted MM_WIIMOTE_ENABLED.

Modified:  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf.pm
==============================================================================
---  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf.pm
        
(original)
+++  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/init/conf.pm
        
Sat Jan  3 16:26:12 2009
@@ -100,12 +100,17 @@
      }
      if (-f "$dir/minimyth.pm")
      {
-        require init::minimyth;
-        if (exists(&init::minimyth::start))
+        $minimyth->package_require(q(init::minimyth));
+
+        # Validate minimyth.pm.
+        $minimyth->package_member_require(q(init::minimyth), q(start));
+        $minimyth->package_member_require(q(init::minimyth), q(stop));
+
+        if ($minimyth->package_member_exists(q(init::minimyth), q(start)))
          {
              $minimyth->message_output('info', "running configuration  
package ...");
              init::minimyth->start($minimyth);
-        }
+        }
      }

      # Enable configuration auto-detection udev rules.
@@ -128,8 +133,11 @@
      $minimyth->var_save({ 'file' => '/etc/conf.d/dhcp.override', 'filter'  
=> 'MM_DHCP_.*' });

      # Start the DHCP client now that we have created the DHCP override  
variables file.
-    require init::dhcp;
-    init::dhcp->start($minimyth);
+    $minimyth->package_require(q(init::dhcp));
+    if ($minimyth->package_member_require(q(init::dhcp), q(start)))
+    {
+        init::dhcp->start($minimyth);
+    }

      $minimyth->message_output('info', "processing configuration file ...");
      $minimyth->var_clear();
@@ -195,11 +203,16 @@
          foreach (grep(s/^(MM_.*)\.pm$/$1/ && (-f "$dir/$_.pm"),  
readdir(DIR)))
          {
              my $group = __PACKAGE__ . '::' . $_;
-            eval "require $group";
-            my $group_var_list = $group->var_list();
-            foreach (grep( /^$filter$/, keys %{$group_var_list}))
+
+            $minimyth->package_require($group);
+
+            if ($minimyth->package_member_require($group, q(var_list)))
              {
-                $var_list{$_} = $group_var_list->{$_};
+                my $group_var_list = $group->var_list();
+                foreach (grep( /^$filter$/, keys %{$group_var_list}))
+                {
+                    $var_list{$_} = $group_var_list->{$_};
+                }
              }
          }
          closedir(DIR);

Modified:  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/rc.pl
==============================================================================
---  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/rc.pl      
 
(original)
+++  
trunk/gar-minimyth/script/meta/minimyth/files/source/rootfs/etc/rc.d/rc.pl      
 
Sat Jan  3 16:26:12 2009
@@ -43,45 +43,79 @@

      my $dir = Cwd::abs_path(File::Basename::dirname(__FILE__));

-    my $count;
-    my $script;
-
-    $count = $#{$script_list} + 1;
+    my $count = $#{$script_list} + 1;
      given ($phase)
      {
          when (/^0$/) { $minimyth->splash_progress_set(0     , 2*$count); }
          when (/^1$/) { $minimyth->splash_progress_set($count, 2*$count); }
          when (/^2$/) { $minimyth->splash_progress_set(0     ,   $count); }
      }
+
+    unshift(@INC, $dir);
+
+    my $fail = 0;
      foreach (@{$script_list})
      {
-        unshift(@INC, $dir);
          my $package = "init::$_";
-        eval "require $package";
-        # An error occured, so start a virtual console login and a telnet  
login.
-        # This is a serious security hole, but users have difficulty  
debugging
-        # when they cannot connect.
-        my $result;
-        given ($action)
+
+        # Require package.
+        if (! $minimyth->package_require($package))
          {
-            when (/^start$/) { $result = $package->start($minimyth); }
-            when (/^stop$/)  { $result = $package->stop($minimyth);  }
-            default          { $result = 0; }
+            $fail = 1;
+            last;
          }
-        if (! $result )
+
+        # Make sure that action exists.
+        if (! $minimyth->package_member_require($package, $action))
+        {
+            $fail = 1;
+            last;
+        }
+
+        # Perform action.
+        given ($action)
          {
-            if (! qx(/bin/pidof telnetd))
+            when (/^start$/)
              {
-                system('/usr/sbin/telnetd');
+                if (! $package->start($minimyth))
+                {
+                    $fail = 1;
+                    last;
+                }
              }
-            if (! qx(/bin/pidof agetty))
+            when (/^stop$/)
              {
-                system('/sbin/agetty 9600 tty1 &');
+                if (! $package->stop($minimyth))
+                {
+                    $fail = 1;
+                    last;
+                }
+            }
+            default
+            {
+                $fail = 1;
+                last;
              }
-            return 0;
          }
+
          $minimyth->splash_progress_update();
      }
+    if ($fail)
+    {
+        # An error occured, so start a virtual console login and a telnet  
login.
+        # This is a serious security hole, but users have difficulty  
debugging
+        # when they cannot connect.
+        if (! qx(/bin/pidof telnetd))
+        {
+            system('/usr/sbin/telnetd');
+        }
+        if (! qx(/bin/pidof agetty))
+        {
+            system('/sbin/agetty 9600 tty1 &');
+        }
+        return 0;
+    }
+
      return 1;
  }


Modified: trunk/gar-minimyth/script/perl/perl-MiniMyth/checksums
==============================================================================
--- trunk/gar-minimyth/script/perl/perl-MiniMyth/checksums      (original)
+++ trunk/gar-minimyth/script/perl/perl-MiniMyth/checksums      Sat Jan  3  
16:26:12 2009
@@ -1 +1 @@
-a596b80ee8598196f0f6c2081bd9edbf  download/MiniMyth.pm
+f08decc626dabae47b39fa83ac5388d3  download/MiniMyth.pm

Modified: trunk/gar-minimyth/script/perl/perl-MiniMyth/files/MiniMyth.pm
==============================================================================
--- trunk/gar-minimyth/script/perl/perl-MiniMyth/files/MiniMyth.pm       
(original)
+++ trunk/gar-minimyth/script/perl/perl-MiniMyth/files/MiniMyth.pm      Sat Jan 
  
3 16:26:12 2009
@@ -2558,4 +2558,59 @@
      return 1;
  }

+# package require
+sub package_require
+{
+    my $self    = shift;
+    my $package = shift;
+
+    if (! eval(qq(require $package)))
+    {
+        my $message = $@;
+
+        $self->message_output('err', qq(error: 'require $package'  
failed.));
+
+        if ($message)
+        {
+            my $logfile = qq(/var/log/$package.require.log);
+            if (open(FILE, '>', $logfile))
+            {
+                print FILE $message;
+                close(FILE);
+                $self->message_output('err', qq(error: ckeck '$logfile'  
for details.));
+            }
+        }
+        return 0;
+    }
+
+    return 1;
+}
+
+sub package_member_require
+{
+    my $self    = shift;
+    my $package = shift;
+    my $member  = shift;
+
+    if (! $self->package_member_exists($package, $member))
+    {
+        my $function = $package . '::' . $member;
+        $self->message_output('err', qq(error: '$function' does not  
exist.));
+        return 0;
+    }
+
+    return 1;
+}
+
+sub package_member_exists
+{
+    my $self    = shift;
+    my $package = shift;
+    my $member  = shift;
+
+    my $function = $package . '::' . $member;
+
+    return exists(&$function);
+}
+
  1;

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"minimyth-commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/minimyth-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to