Moving Files around (removing file endings, libraries to lib)
authorJoachim Breitner <mail@joachim-breitner.de>
Fri, 15 Jun 2007 20:19:49 +0000 (20:19 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Fri, 15 Jun 2007 20:19:49 +0000 (20:19 +0000)
Parse.pm [deleted file]
arrange-sysvinit [new file with mode: 0644]
arrange-sysvinit.pl [deleted file]
create-sysvinit-file [new file with mode: 0644]
create-sysvinit-file.pl [deleted file]
lib/MetaInit/Parse.pm [new file with mode: 0644]
translators/sysvinit [new file with mode: 0644]
translators/sysvinit.pl [deleted file]
update-metainits [new file with mode: 0644]
update-metainits.sh [deleted file]

diff --git a/Parse.pm b/Parse.pm
deleted file mode 100644 (file)
index 8bcd120..0000000
--- a/Parse.pm
+++ /dev/null
@@ -1,57 +0,0 @@
-package Parse;
-
-sub parse {
-    my $filename = shift;
-    open(FILE, "<", $filename) || die $!;
-
-    my %parsed;
-    my $lastkey;
-    while (<FILE>) {
-       # Ignore empty lines and comments
-       chomp;
-       next if /^$/ or /^#/;
-        if (my ($key, $value) = m/^(\S.*): (.*)/) {
-            $parsed{$key} = $value;
-           $lastkey = $key;
-        }
-        elsif ($lastkey) {
-            s/^ //;
-            s/^\.$//;
-            $parsed{$lastkey} .= "\n$_";
-        } else {
-           die "Cannot parse $_";
-       }
-    }
-    close FILE;
-
-    if (not exists $parsed{Description}) {
-        $parsed{Description} = $parsed{Name}
-    }
-
-    {
-       no warnings qw(uninitialized);
-       ($parsed{Path}, $parsed{Args}) = split(/\s+/,$parsed{Exec});
-
-       my @splits = qw(Required-Start Should-Start Required-Stop Should-Stop);
-
-       for (@splits){
-               $parsed{$_} = [ split m/\s+/, $parsed{$_} ];
-       }
-    }
-
-    my @mandatory = qw(Exec Name);
-
-    my $error_msg = "";
-    for (@mandatory){
-           $error_msg .= "No '$_:' provided\n" unless $parsed{$_};
-    } 
-    die $error_msg if $error_msg;
-
-    $parsed{File} = $filename;
-
-    return \%parsed;
-}
-
-
-# Return a true value
-1;
diff --git a/arrange-sysvinit b/arrange-sysvinit
new file mode 100644 (file)
index 0000000..1338b40
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib './lib';
+use MetaInit::Parse;
+
+my $metainit_path = "./examples";
+my $etc = "./etc";
+
+my @new_scripts = @ARGV;
+
+my %facilities = (
+       '$local_fs'  => 0,
+       '$network'   => 0,
+       '$named'     => 15,
+       '$portmap'   => 18,
+       '$remote_fs' => 21,
+       '$syslog'    => 10,
+       '$time'      => 0,
+);
+
+# Read in all meta-init scripts
+my @metainit_files = <$metainit_path/*.metainit>;
+
+my %metainits;
+
+for my $metainit_file (@metainit_files) {
+       my $data = MetaInit::Parse::parse($metainit_file);
+       $metainits{$data->{Name}} = $data;
+}
+
+
+# Locate existing scripts
+# We check for existing scripts only in /etc/rc2.d
+
+my %startscripts;
+for my $rc_file (<$etc/rc2.d/S??*>) {
+       my ($num, $name) = $rc_file =~ m!S(\d\d)([^/]+)!;
+       $startscripts{$name} = $num;
+}
+
+
+# Sort the scripts to existing and non-existing scripts
+my @existing;
+my @new;
+
+for my $metainit (keys %metainits) {
+       if (exists $startscripts{$metainit}) {
+               push @existing, $metainit;
+       } else {
+               push @new, $metainit;
+       }
+}
+
+# Actually, we only want to treat the passed scripts as new
+@new = @new_scripts;
+
+       
+# Check the dependencies for existing scripts
+
+for my $existing (@existing) {
+       my @deps = @{$metainits{$existing}{"Required-Start"}};
+       for my $dep (@deps) {
+               if (exists $startscripts{$dep}) {
+                       if ($startscripts{$dep} >= $startscripts{$existing}) {
+                               warn "Late dependency $dep of $existing.\n"
+                       }
+               } elsif (exists $facilities{$dep}) {
+                       if ($facilities{$dep} >= $startscripts{$existing}) {
+                               warn "Late facility $dep of $existing.\n"
+                       }
+               } elsif (not exists $startscripts{$dep}){
+                       # Nothing to do here
+               } else {
+                       
+                       warn "Unkown dependency $dep of $existing.\n";
+               }
+       }
+
+}
+
+my @processed = ();
+
+while (@new > 0) {
+       # Check Bounds 
+
+       my %lower;
+       my %upper;
+
+       for my $existing (@existing) {
+               my @deps = @{$metainits{$existing}{"Required-Start"}};
+               for my $dep (@deps) {
+                       if (exists $startscripts{$dep}){
+                               $upper{$dep} = min($startscripts{$existing}, $upper{$dep})
+                       }
+               }
+       }
+
+       for my $new (@new) {
+               my @deps = @{$metainits{$new}{"Required-Start"}};
+               for my $dep (@deps) {
+                       if (not exists $startscripts{$dep}){
+                               $lower{$new} = $startscripts{$dep};
+                               $lower{$new} = max($startscripts{$dep}, $lower{$new})
+                       }
+               }
+       }
+
+       # Put a new scripts at appropriate location
+       my $current = pop @new;
+
+       # Standard case:
+       if (($lower{$current}||0) > ($upper{$current}||99)) {
+               warn "Could not correctly fit in $current, please reorder manually.\n";
+               $startscripts{$current} = $lower{$current}||10 + 10;
+               push @processed, $current;
+               push @existing,  $current;
+       } elsif (($lower{$current}||0 < 20) and not defined $upper{$current}) {
+               $startscripts{$current} = 20;
+               push @processed, $current;
+               push @existing,  $current;
+       } else {
+               $startscripts{$current} = mid($lower{$current}, $upper{$current});
+       }
+
+}
+
+for my $done (@processed) {
+       printf "%s %02d\n", $done, $startscripts{$done}
+}
+
+
+sub max {
+       return $_[1] if (defined $_[1] and $_[0] < $_[1]);
+       return $_[0]
+}
+sub min {
+       return $_[1] if (defined $_[1] and $_[0] > $_[1]);
+       return $_[0]
+}
+sub mid {
+       my ($a,$b) = @_;
+       return int(($a+$b)/2);
+}
diff --git a/arrange-sysvinit.pl b/arrange-sysvinit.pl
deleted file mode 100644 (file)
index 1d6362b..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Parse;
-
-my $metainit_path = "./examples";
-my $etc = "./etc";
-
-my @new_scripts = @ARGV;
-
-my %facilities = (
-       '$local_fs'  => 0,
-       '$network'   => 0,
-       '$named'     => 15,
-       '$portmap'   => 18,
-       '$remote_fs' => 21,
-       '$syslog'    => 10,
-       '$time'      => 0,
-);
-
-# Read in all meta-init scripts
-my @metainit_files = <$metainit_path/*.metainit>;
-
-my %metainits;
-
-for my $metainit_file (@metainit_files) {
-       my $data = Parse::parse($metainit_file);
-       $metainits{$data->{Name}} = $data;
-}
-
-
-# Locate existing scripts
-# We check for existing scripts only in /etc/rc2.d
-
-my %startscripts;
-for my $rc_file (<$etc/rc2.d/S??*>) {
-       my ($num, $name) = $rc_file =~ m!S(\d\d)([^/]+)!;
-       $startscripts{$name} = $num;
-}
-
-
-# Sort the scripts to existing and non-existing scripts
-my @existing;
-my @new;
-
-for my $metainit (keys %metainits) {
-       if (exists $startscripts{$metainit}) {
-               push @existing, $metainit;
-       } else {
-               push @new, $metainit;
-       }
-}
-
-# Actually, we only want to treat the passed scripts as new
-@new = @new_scripts;
-
-       
-# Check the dependencies for existing scripts
-
-for my $existing (@existing) {
-       my @deps = @{$metainits{$existing}{"Required-Start"}};
-       for my $dep (@deps) {
-               if (exists $startscripts{$dep}) {
-                       if ($startscripts{$dep} >= $startscripts{$existing}) {
-                               warn "Late dependency $dep of $existing.\n"
-                       }
-               } elsif (exists $facilities{$dep}) {
-                       if ($facilities{$dep} >= $startscripts{$existing}) {
-                               warn "Late facility $dep of $existing.\n"
-                       }
-               } elsif (not exists $startscripts{$dep}){
-                       # Nothing to do here
-               } else {
-                       
-                       warn "Unkown dependency $dep of $existing.\n";
-               }
-       }
-
-}
-
-my @processed = ();
-
-while (@new > 0) {
-       # Check Bounds 
-
-       my %lower;
-       my %upper;
-
-       for my $existing (@existing) {
-               my @deps = @{$metainits{$existing}{"Required-Start"}};
-               for my $dep (@deps) {
-                       if (exists $startscripts{$dep}){
-                               $upper{$dep} = min($startscripts{$existing}, $upper{$dep})
-                       }
-               }
-       }
-
-       for my $new (@new) {
-               my @deps = @{$metainits{$new}{"Required-Start"}};
-               for my $dep (@deps) {
-                       if (not exists $startscripts{$dep}){
-                               $lower{$new} = $startscripts{$dep};
-                               $lower{$new} = max($startscripts{$dep}, $lower{$new})
-                       }
-               }
-       }
-
-       # Put a new scripts at appropriate location
-       my $current = pop @new;
-
-       # Standard case:
-       if (($lower{$current}||0) > ($upper{$current}||99)) {
-               warn "Could not correctly fit in $current, please reorder manually.\n";
-               $startscripts{$current} = $lower{$current}||10 + 10;
-               push @processed, $current;
-               push @existing,  $current;
-       } elsif (($lower{$current}||0 < 20) and not defined $upper{$current}) {
-               $startscripts{$current} = 20;
-               push @processed, $current;
-               push @existing,  $current;
-       } else {
-               $startscripts{$current} = mid($lower{$current}, $upper{$current});
-       }
-
-}
-
-for my $done (@processed) {
-       printf "%s %02d\n", $done, $startscripts{$done}
-}
-
-
-sub max {
-       return $_[1] if (defined $_[1] and $_[0] < $_[1]);
-       return $_[0]
-}
-sub min {
-       return $_[1] if (defined $_[1] and $_[0] > $_[1]);
-       return $_[0]
-}
-sub mid {
-       my ($a,$b) = @_;
-       return int(($a+$b)/2);
-}
diff --git a/create-sysvinit-file b/create-sysvinit-file
new file mode 100644 (file)
index 0000000..40f0be4
--- /dev/null
@@ -0,0 +1,222 @@
+#!/usr/bin/perl -w
+#
+# Creates a sysvinit file from a metainit description.
+#
+
+use lib './lib';
+use MetaInit::Parse;
+
+$filename = shift || die "Filename expected!\n";
+my $output = shift;
+
+# Parse the metainit in
+%initparams = %{MetaInit::Parse::parse($filename)};
+
+if ($output) {
+       open(STDOUT,'>',$output) or die $!;
+}
+
+# Print the "dynamic" part of the initskript
+print << "EOF"
+#! /bin/sh
+#
+# This a generated file. DO NOT EDIT THIS FILE!
+# If you want to modify who this file works, please
+# modify $filename and re-run update-metainit.
+#
+# If you are sure that you want to modify this file,
+# remove this comment, and update-metainit will not override
+# this script any more.
+#
+### BEGIN INIT INFO
+# Provides:          $initparams{"Name"}
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: $initparams{"Desc"}
+EOF
+;
+
+print "# Required-Start:   " . join(" ",@{$initparams{"Required-Start"}}) . "\n";
+print "# Required-Stop:     " . join(" ",@{$initparams{"Required-Stop"}}) . "\n";
+print "# Description:       ";
+print join("\n#                    ",split("\n",$initparams{"Description"})). "\n";
+print "\n";
+
+# prevent quoted strings from breaking the generated script:
+
+my %quoted_initparams;
+
+while (my ($k, $v) = each %initparams){
+       $quoted_initparams{$k} = quotemeta $v;
+}
+
+print << "EOF"
+### END INIT INFO
+
+# WARNING:
+# This initscript has been autogenerated by metainit.
+# Do not edit this file, but edit the corresponding metainit
+# config.
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC=$quoted_initparams{"Desc"}
+NAME=$quoted_initparams{"Name"}
+DAEMON=$initparams{"Path"}
+DAEMON_ARGS=$quoted_initparams{"Args"}
+PIDFILE=/var/run/\$NAME.pid
+SCRIPTNAME=/etc/init.d/\$NAME
+EOF
+;
+
+# ... and the rest of the initscript, that is identical for all
+# metainit-created scripts.
+print << 'EOF'
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+EOF
+;
+
+if($initparams{"Prestart-Hook"}) {
+    print "\t" . join("\n\t",split("\n",$initparams{"Prestart-Hook"}));
+    print "\n";
+}
+
+print << 'EOF'
+       # Return
+       #   0 if daemon has been started
+       #   1 if daemon was already running
+       #   2 if daemon could not be started
+       start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+               || return 1
+       start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+               $DAEMON_ARGS \
+               || return 2
+       # Add code here, if necessary, that waits for the process to be ready
+       # to handle requests from services started subsequently which depend
+       # on this one.  As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+       # Return
+       #   0 if daemon has been stopped
+       #   1 if daemon was already stopped
+       #   2 if daemon could not be stopped
+       #   other if a failure occurred
+       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+       RETVAL="$?"
+       [ "$RETVAL" = 2 ] && return 2
+       # Wait for children to finish too if this is a daemon that forks
+       # and if the daemon is only ever run from this initscript.
+       # If the above conditions are not satisfied then add some other code
+       # that waits for the process to drop all resources that could be
+       # needed by services started subsequently.  A last resort is to
+       # sleep for some time.
+       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       [ "$?" = 2 ] && return 2
+       # Many daemons don't delete their pidfiles when they exit.
+       rm -f $PIDFILE
+EOF
+;
+
+if($initparams{"Poststop-Hook"}) {
+    print "\t" . join("\n\t",split("\n",$initparams{"Poststop-Hook"}));
+    print "\n";
+}
+
+print << 'EOF';
+       return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+       #
+       # If the daemon can reload its configuration without
+       # restarting (for example, when it is sent a SIGHUP),
+       # then implement that here.
+       #
+       start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+       return 0
+}
+
+case "$1" in
+  start)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+       do_start
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+       do_stop
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  #reload|force-reload)
+       #
+       # If do_reload() is not implemented then leave this commented out
+       # and leave 'force-reload' as an alias for 'restart'.
+       #
+       #log_daemon_msg "Reloading $DESC" "$NAME"
+       #do_reload
+       #log_end_msg $?
+       #;;
+  restart|force-reload)
+       #
+       # If the "reload" option is implemented then remove the
+       # 'force-reload' alias
+       #
+       log_daemon_msg "Restarting $DESC" "$NAME"
+       do_stop
+       case "$?" in
+         0|1)
+               do_start
+               case "$?" in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+       echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+EOF
+
+if ($output) {
+       close STDOUT
+}
diff --git a/create-sysvinit-file.pl b/create-sysvinit-file.pl
deleted file mode 100644 (file)
index 64878c7..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Creates a sysvinit file from a metainit description.
-#
-
-use Parse;
-
-$filename = shift || die "Filename expected!\n";
-my $output = shift;
-
-# Parse the metainit in
-%initparams = %{Parse::parse($filename)};
-
-if ($output) {
-       open(STDOUT,'>',$output) or die $!;
-}
-
-# Print the "dynamic" part of the initskript
-print << "EOF"
-#! /bin/sh
-#
-# This a generated file. DO NOT EDIT THIS FILE!
-# If you want to modify who this file works, please
-# modify $filename and re-run update-metainit.
-#
-# If you are sure that you want to modify this file,
-# remove this comment, and update-metainit will not override
-# this script any more.
-#
-### BEGIN INIT INFO
-# Provides:          $initparams{"Name"}
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: $initparams{"Desc"}
-EOF
-;
-
-print "# Required-Start:   " . join(" ",@{$initparams{"Required-Start"}}) . "\n";
-print "# Required-Stop:     " . join(" ",@{$initparams{"Required-Stop"}}) . "\n";
-print "# Description:       ";
-print join("\n#                    ",split("\n",$initparams{"Description"})). "\n";
-print "\n";
-
-# prevent quoted strings from breaking the generated script:
-
-my %quoted_initparams;
-
-while (my ($k, $v) = each %initparams){
-       $quoted_initparams{$k} = quotemeta $v;
-}
-
-print << "EOF"
-### END INIT INFO
-
-# WARNING:
-# This initscript has been autogenerated by metainit.
-# Do not edit this file, but edit the corresponding metainit
-# config.
-
-# PATH should only include /usr/* if it runs after the mountnfs.sh script
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC=$quoted_initparams{"Desc"}
-NAME=$quoted_initparams{"Name"}
-DAEMON=$initparams{"Path"}
-DAEMON_ARGS=$quoted_initparams{"Args"}
-PIDFILE=/var/run/\$NAME.pid
-SCRIPTNAME=/etc/init.d/\$NAME
-EOF
-;
-
-# ... and the rest of the initscript, that is identical for all
-# metainit-created scripts.
-print << 'EOF'
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
-. /lib/lsb/init-functions
-
-#
-# Function that starts the daemon/service
-#
-do_start()
-{
-EOF
-;
-
-if($initparams{"Prestart-Hook"}) {
-    print "\t" . join("\n\t",split("\n",$initparams{"Prestart-Hook"}));
-    print "\n";
-}
-
-print << 'EOF'
-       # Return
-       #   0 if daemon has been started
-       #   1 if daemon was already running
-       #   2 if daemon could not be started
-       start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
-               || return 1
-       start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON -- \
-               $DAEMON_ARGS \
-               || return 2
-       # Add code here, if necessary, that waits for the process to be ready
-       # to handle requests from services started subsequently which depend
-       # on this one.  As a last resort, sleep for some time.
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-       # Return
-       #   0 if daemon has been stopped
-       #   1 if daemon was already stopped
-       #   2 if daemon could not be stopped
-       #   other if a failure occurred
-       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
-       RETVAL="$?"
-       [ "$RETVAL" = 2 ] && return 2
-       # Wait for children to finish too if this is a daemon that forks
-       # and if the daemon is only ever run from this initscript.
-       # If the above conditions are not satisfied then add some other code
-       # that waits for the process to drop all resources that could be
-       # needed by services started subsequently.  A last resort is to
-       # sleep for some time.
-       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
-       [ "$?" = 2 ] && return 2
-       # Many daemons don't delete their pidfiles when they exit.
-       rm -f $PIDFILE
-EOF
-;
-
-if($initparams{"Poststop-Hook"}) {
-    print "\t" . join("\n\t",split("\n",$initparams{"Poststop-Hook"}));
-    print "\n";
-}
-
-print << 'EOF';
-       return "$RETVAL"
-}
-
-#
-# Function that sends a SIGHUP to the daemon/service
-#
-do_reload() {
-       #
-       # If the daemon can reload its configuration without
-       # restarting (for example, when it is sent a SIGHUP),
-       # then implement that here.
-       #
-       start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
-       return 0
-}
-
-case "$1" in
-  start)
-       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
-       do_start
-       case "$?" in
-               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-       esac
-       ;;
-  stop)
-       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
-       do_stop
-       case "$?" in
-               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-       esac
-       ;;
-  #reload|force-reload)
-       #
-       # If do_reload() is not implemented then leave this commented out
-       # and leave 'force-reload' as an alias for 'restart'.
-       #
-       #log_daemon_msg "Reloading $DESC" "$NAME"
-       #do_reload
-       #log_end_msg $?
-       #;;
-  restart|force-reload)
-       #
-       # If the "reload" option is implemented then remove the
-       # 'force-reload' alias
-       #
-       log_daemon_msg "Restarting $DESC" "$NAME"
-       do_stop
-       case "$?" in
-         0|1)
-               do_start
-               case "$?" in
-                       0) log_end_msg 0 ;;
-                       1) log_end_msg 1 ;; # Old process is still running
-                       *) log_end_msg 1 ;; # Failed to start
-               esac
-               ;;
-         *)
-               # Failed to stop
-               log_end_msg 1
-               ;;
-       esac
-       ;;
-  *)
-       #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
-       echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
-       exit 3
-       ;;
-esac
-EOF
-
-if ($output) {
-       close STDOUT
-}
diff --git a/lib/MetaInit/Parse.pm b/lib/MetaInit/Parse.pm
new file mode 100644 (file)
index 0000000..682aab4
--- /dev/null
@@ -0,0 +1,57 @@
+package MetaInit::Parse;
+
+sub parse {
+    my $filename = shift;
+    open(FILE, "<", $filename) || die $!;
+
+    my %parsed;
+    my $lastkey;
+    while (<FILE>) {
+       # Ignore empty lines and comments
+       chomp;
+       next if /^$/ or /^#/;
+        if (my ($key, $value) = m/^(\S.*): (.*)/) {
+            $parsed{$key} = $value;
+           $lastkey = $key;
+        }
+        elsif ($lastkey) {
+            s/^ //;
+            s/^\.$//;
+            $parsed{$lastkey} .= "\n$_";
+        } else {
+           die "Cannot parse $_";
+       }
+    }
+    close FILE;
+
+    if (not exists $parsed{Description}) {
+        $parsed{Description} = $parsed{Name}
+    }
+
+    {
+       no warnings qw(uninitialized);
+       ($parsed{Path}, $parsed{Args}) = split(/\s+/,$parsed{Exec});
+
+       my @splits = qw(Required-Start Should-Start Required-Stop Should-Stop);
+
+       for (@splits){
+               $parsed{$_} = [ split m/\s+/, $parsed{$_} ];
+       }
+    }
+
+    my @mandatory = qw(Exec Name);
+
+    my $error_msg = "";
+    for (@mandatory){
+           $error_msg .= "No '$_:' provided\n" unless $parsed{$_};
+    } 
+    die $error_msg if $error_msg;
+
+    $parsed{File} = $filename;
+
+    return \%parsed;
+}
+
+
+# Return a true value
+1;
diff --git a/translators/sysvinit b/translators/sysvinit
new file mode 100644 (file)
index 0000000..a5714d2
--- /dev/null
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib './lib';
+
+use MetaInit::Parse;
+
+my $metainit_dir = './examples';
+my $etc = './etc';
+my $utils = '.';
+my $updatercd = './update-rc.d';
+
+#
+# Rough plan of operation:
+#    (Maybe:
+#     Check all init files, find all generated ones, see if the metainit 
+#     file is missing and delete them then)
+#    Check all metainit files, whether the init.d file is out of date.
+#    If the init.d file was created, find a suitable rc2.d/ number and run update-rc.
+#
+
+use Getopt::Long;
+
+my $remove = '';
+GetOptions( 'remove-metainit=s' => \$remove );
+
+if ($remove) {
+       # Operation: Remove all geranted files for the given metainit name
+       remove($remove)
+} else {
+       # Operation: Rebuild everything
+       
+       #check_orphaned_initscripts()
+       my @metainits = read_metainits();
+       my @generated = ();
+       foreach my $metainit (@metainits) {
+               my $created = regenerate_initscript($metainit);
+               push @generated, $metainit->{Name} if $created;
+       }
+
+       my %arrangement = ();
+       open(ARRANGE, '-|',"$utils/arrange-sysvinit",@generated) or die $!;
+       while (<ARRANGE>) {
+               if (/^([\w\.-]+) (\d\d)$/){
+                       $arrangement{$1} = $2;
+               } else {
+                       die "Can't parse $_";
+               }
+       }
+       close ARRANGE;
+
+       while (my ($initname,$num) = each %arrangement) {
+               system($updatercd, $initname, "defaults", $num);
+       }
+
+
+}
+
+sub read_metainits{
+       my @metainits;
+       for my $metainit_file (<$metainit_dir/*.metainit>) {
+               push @metainits, MetaInit::Parse::parse($metainit_file);
+       }
+       return @metainits;
+}
+
+sub regenerate_initscript {
+       my ($metainit) = @_;
+       my $initscript = init_script_name($metainit);
+       my $new = not -e $initscript;
+
+       
+       if (not $new) {
+               my $can_touch = 0;
+               open INIT, '<', $initscript or die $!;
+               while (<INIT>) {
+                       if (/DO NOT EDIT THIS FILE/) {
+                               $can_touch = 1;
+                               last;
+                       }
+               }
+               close INIT;
+               warn "Not overriding user-modified init script $initscript.\n";
+               return 0 if (not $can_touch);
+       } else {
+               # Here me might want to check if the file is up-to-date.
+               # For now, we just override it always.
+       }
+
+       system("$utils/create-sysvinit-file", $metainit->{File}, $initscript);
+
+       return $new;
+
+}
+
+sub init_script_name {
+       my ($metainit) = @_;
+       return sprintf "%s/init.d/%s", $etc, $metainit->{Name};
+}
+
+sub remove {
+       die "Remove not yet implemented"
+}
diff --git a/translators/sysvinit.pl b/translators/sysvinit.pl
deleted file mode 100644 (file)
index d0ea910..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Parse;
-
-my $metainit_dir = './examples';
-my $etc = './etc';
-my $utils = '.';
-my $updatercd = './update-rc.d';
-
-#
-# Rough plan of operation:
-#    (Maybe:
-#     Check all init files, find all generated ones, see if the metainit 
-#     file is missing and delete them then)
-#    Check all metainit files, whether the init.d file is out of date.
-#    If the init.d file was created, find a suitable rc2.d/ number and run update-rc.
-#
-
-use Getopt::Long;
-
-my $remove = '';
-GetOptions( 'remove-metainit=s' => \$remove );
-
-if ($remove) {
-       # Operation: Remove all geranted files for the given metainit name
-       remove($remove)
-} else {
-       # Operation: Rebuild everything
-       
-       #check_orphaned_initscripts()
-       my @metainits = read_metainits();
-       my @generated = ();
-       foreach my $metainit (@metainits) {
-               my $created = regenerate_initscript($metainit);
-               push @generated, $metainit->{Name} if $created;
-       }
-
-       my %arrangement = ();
-       open(ARRANGE, '-|',"$utils/arrange-sysvinit.pl",@generated) or die $!;
-       while (<ARRANGE>) {
-               if (/^([\w\.-]+) (\d\d)$/){
-                       $arrangement{$1} = $2;
-               } else {
-                       die "Can't parse $_";
-               }
-       }
-       close ARRANGE;
-
-       while (my ($initname,$num) = each %arrangement) {
-               system($updatercd, $initname, "defaults", $num);
-       }
-
-
-}
-
-sub read_metainits{
-       my @metainits;
-       for my $metainit_file (<$metainit_dir/*.metainit>) {
-               push @metainits, Parse::parse($metainit_file);
-       }
-       return @metainits;
-}
-
-sub regenerate_initscript {
-       my ($metainit) = @_;
-       my $initscript = init_script_name($metainit);
-       my $new = not -e $initscript;
-
-       
-       if (not $new) {
-               my $can_touch = 0;
-               open INIT, '<', $initscript or die $!;
-               while (<INIT>) {
-                       if (/DO NOT EDIT THIS FILE/) {
-                               $can_touch = 1;
-                               last;
-                       }
-               }
-               close INIT;
-               warn "Not overriding user-modified init script $initscript.\n";
-               return 0 if (not $can_touch);
-       } else {
-               # Here me might want to check if the file is up-to-date.
-               # For now, we just override it always.
-       }
-
-       system("$utils/create-sysvinit-file.pl", $metainit->{File}, $initscript);
-
-       return $new;
-
-}
-
-sub init_script_name {
-       my ($metainit) = @_;
-       return sprintf "%s/init.d/%s", $etc, $metainit->{Name};
-}
-
-sub remove {
-       die "Remove not yet implemented"
-}
diff --git a/update-metainits b/update-metainits
new file mode 100644 (file)
index 0000000..3f737dc
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Interface:
+# Rebuild init scripts (e.g., after a meta init script was added or edited)
+# $0 
+# 
+# Removed meta-init-script:
+# $0 --remove-metainit <scriptname>
+#
+# If a init sytem is removed, the maintainer scripts should
+# call a script that cleans up the generated files for that system directly.
+
+# This will probably be /usr/lib/metainit/translators once
+translators_dir='./translators/'
+
+# This is just a thin wrapper around the per-init-system
+# translators. 
+for trans in translators_dir/*
+do
+       trans "$@"
+done
diff --git a/update-metainits.sh b/update-metainits.sh
deleted file mode 100644 (file)
index 3f737dc..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-# Interface:
-# Rebuild init scripts (e.g., after a meta init script was added or edited)
-# $0 
-# 
-# Removed meta-init-script:
-# $0 --remove-metainit <scriptname>
-#
-# If a init sytem is removed, the maintainer scripts should
-# call a script that cleans up the generated files for that system directly.
-
-# This will probably be /usr/lib/metainit/translators once
-translators_dir='./translators/'
-
-# This is just a thin wrapper around the per-init-system
-# translators. 
-for trans in translators_dir/*
-do
-       trans "$@"
-done