From 40723717042782953fc94985b1d63802259e77af Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Tue, 14 Apr 2009 12:59:13 +0000 Subject: current state of work on runlevel generator.. (still not fully useable) git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@2813 95ad53e4-c205-0410-b2fa-d234c58c8868 --- lib/OpenSLX/DistroUtils.pm | 11 +- lib/OpenSLX/DistroUtils/Base.pm | 302 ++++++++++++++++++++++++++++-------- lib/OpenSLX/DistroUtils/Engine.pm | 5 +- lib/OpenSLX/DistroUtils/InitFile.pm | 114 +++++++++----- lib/OpenSLX/DistroUtils/Suse.pm | 107 +++---------- lib/OpenSLX/DistroUtils/Ubuntu.pm | 41 +++-- 6 files changed, 367 insertions(+), 213 deletions(-) diff --git a/lib/OpenSLX/DistroUtils.pm b/lib/OpenSLX/DistroUtils.pm index 82c85bfa..dd29a46a 100644 --- a/lib/OpenSLX/DistroUtils.pm +++ b/lib/OpenSLX/DistroUtils.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -54,10 +54,17 @@ sub simpleInitFile { sub getInitFileForDistro { my $initFile = shift; my $distroName = shift; + my $distro; my $engine = OpenSLX::DistroUtils::Engine->new(); - my $distro = $engine->loadDistro($distroName); + if ($distroName) { + $distro = $engine->loadDistro($distroName); + } else { + $distro = $engine->loadDistro('Base'); + } + + #return $distro->dumpInit($initFile); return $distro->generateInitFile($initFile); } diff --git a/lib/OpenSLX/DistroUtils/Base.pm b/lib/OpenSLX/DistroUtils/Base.pm index e7e4f367..90cad7a0 100644 --- a/lib/OpenSLX/DistroUtils/Base.pm +++ b/lib/OpenSLX/DistroUtils/Base.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -15,7 +15,11 @@ package OpenSLX::DistroUtils::Base; use Data::Dumper; use OpenSLX::Utils; +use Clone qw(clone); +use Switch; +use strict; +use warnings; sub new { @@ -34,7 +38,7 @@ sub dumpInit print $self->generateInitFile($initFile); } -sub _combineBlock +sub _concatContent { my $self = shift; my $block = shift; @@ -46,7 +50,7 @@ sub _combineBlock $output .= "\n"; my $content = $block->{'content'}; - while ( ($priority, $contentArray) = each %$content ) + while ( my ($priority, $contentArray) = each %$content ) { $output .= join("\n", @$contentArray); $output .= "\n"; @@ -103,82 +107,254 @@ sub _insertSystemHelperFunctions return $content; } -sub generateInitFile +sub _renderHighlevelConfig { my $self = shift; my $initFile = shift; - my $block; - my $config = $initFile->{'configHash'}; + my $element; + my $hlc = $initFile->{'configHash'}->{'highlevelConfig'}; - print Dumper($initFile->{'configHash'}); + while ( $element = shift(@$hlc)){ + switch ($element->{type}) { + case 'daemon' { + my $tpl; + $tpl = "%s_BIN=%s \n"; + $tpl .= "[ -x %s_BIN ] || exit 5\n\n"; + $tpl .= "%s_OPTS=\"%s\" \n"; + $tpl .= "[ -f /etc/sysconfig/%s ] . /etc/sysconfig/%s \n\n"; + $tpl .= "[ -f /etc/default/%s ] . /etc/default/%s \n\n"; + $tpl .= "%s_PIDFILE=\"/var/run/%s.init.pid\" \n\n"; + $initFile->addToBlock('head', + sprintf( + $tpl, + uc($element->{shortname}), + $element->{binary}, + uc($element->{shortname}), + uc($element->{shortname}), + $element->{parameters}, + $element->{shortname}, + $element->{shortname}, + $element->{shortname}, + $element->{shortname}, + uc($element->{shortname}), + $element->{shortname} + ) + ); + + $tpl = "echo -n \"Starting %s \"\n"; + $tpl .= "startproc -f -p \$%s_PIDFILE \$%s_BIN \$%s_OPTS\n"; + $tpl .= "rc_status -v"; + $initFile->addToCase('start', + sprintf( + $tpl, + $element->{desc}, + uc($element->{shortname}), + uc($element->{shortname}), + uc($element->{shortname}) + ) + ); + + $tpl = "echo -n \"Shutting down %s\" \n"; + $tpl .= "killproc -p \$%s_PIDFILE -TERM \$%s_BIN\n"; + $tpl .= "rc_status -v"; + $initFile->addToCase('stop', + sprintf( + $tpl, + $element->{desc}, + uc($element->{shortname}), + uc($element->{shortname}) + ) + ); + + $tpl = "## Stop the service and if this succeeds (i.e. the \n"; + $tpl .= "## service was running before), start it again.\n"; + $tpl .= "\$0 status >/dev/null && \$0 restart\n\n"; + $tpl .= "# Remember status and be quiet\n"; + $tpl .= "rc_status"; + $initFile->addToCase('try-restart', + $tpl + ); + + $tpl = "## Stop the service and regardless of whether it was \n"; + $tpl .= "## running or not, start it again.\n"; + $tpl .= "\$0 stop\n"; + $tpl .= "\$0 start\n\n"; + $tpl .= "# Remember status and be quiet\n"; + $tpl .= "rc_status"; + $initFile->addToCase('restart', + $tpl + ); + + $tpl = "echo -n \"Reload service %s\"\n"; + $tpl .= "killproc -p \$%s_PIDFILE -HUP \$%s_BIN\n"; + $tpl .= "rc_status -v"; + $initFile->addToCase('reload', + sprintf( + $tpl, + $element->{desc}, + uc($element->{shortname}), + uc($element->{shortname}), + uc($element->{shortname}) + ) + ); + + $tpl = "echo -n \"Checking for service %s\"\n"; + $tpl .= "checkproc -p \$%s_PIDFILE \$%s_BIN\n"; + $tpl .= "rc_status -v"; + $initFile->addToCase('status', + sprintf( + $tpl, + $element->{desc}, + uc($element->{shortname}), + uc($element->{shortname}) + ) + ); + + + } + } + } +} + + +sub _getInitsystemIncludes +{ + return "\n"; +} + +sub _renderCasePrefix +{ + return "\n"; +} + +sub _renderFooter +{ + return "exit 0\n"; +} + +sub _generateUsage +{ + my $self = shift; + my $usage = shift; + my $tpl; + + $tpl = "## print out usage \n"; + $tpl .= "echo \"Usage: \$0 {%s}\" >&2 \n"; + $tpl .= "exit 1"; + + return sprintf( + $tpl, + $usage + ); +} + +sub _getAuthorBlock +{ + my $tpl; + + $tpl = "# Copyright (c) 2009 - OpenSLX GmbH \n"; + $tpl .= "# \n"; + $tpl .= "# This program is free software distributed under the GPL version 2. \n"; + $tpl .= "# See http://openslx.org/COPYING \n"; + $tpl .= "# \n"; + $tpl .= "# If you have any feedback please consult http://openslx.org/feedback and \n"; + $tpl .= "# send your suggestions, praise, or complaints to feedback\@openslx.org \n"; + $tpl .= "# \n"; + $tpl .= "# General information about OpenSLX can be found at http://openslx.org/ \n"; + $tpl .= "# -----------------------------------------------------------------------------\n"; + $tpl .= "# §filename§ \n"; + $tpl .= "# - §desc§ \n"; + $tpl .= "# §generated§ \n"; + $tpl .= "# -----------------------------------------------------------------------------\n\n"; + + return sprintf( + $tpl + ); +} + +sub generateInitFile +{ + my $self = shift; + my $initFile = shift; + my $content; + my @usage; + + # get a copy of initFile object before modifying it.. + my $initFileCopy = clone($initFile); + + $self->_renderHighlevelConfig($initFileCopy); - $output = "#!/bin/sh\n\n"; + my $config = $initFileCopy->{'configHash'}; + my $output; + + # head + $output = "#!/bin/sh\n"; + $output .= $self->_getAuthorBlock(); $output .= $self->_renderInfoBlock($config); - $output .= "set -e \n\n"; - if (keys(%{$config->{'head'}->{'content'}}) > 0) { - $output .= $self->_combineBlock($config->{'head'}); - } - if (keys(%{$config->{'functions'}->{'content'}}) > 0) { - $output .= $self->_combineBlock($config->{'functions'}); - } - $output .= "case \"\$1\" in \n"; - if (keys(%{$config->{'start'}->{'content'}}) > 0) { - $output .= " start)\n"; - $block = $self->_combineBlock($config->{'start'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } else { - # trigger error - # start is essential - } - if (keys(%{$config->{'stop'}->{'content'}}) > 0) { - $output .= " stop)\n"; - $block = $self->_combineBlock($config->{'stop'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } else { - # trigger error - # stop is essential + $output .= $self->_getInitsystemIncludes(); + + if (keys(%{$config->{'blocks'}->{'head'}->{'content'}}) > 0) { + $output .= $self->_concatContent($config->{'blocks'}->{'head'}); } - if (keys(%{$config->{'reload'}->{'content'}}) > 0) { - $output .= " reload)\n"; - $block = $self->_combineBlock($config->{'reload'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; + + # functions + if (keys(%{$config->{'blocks'}->{'functions'}->{'content'}}) > 0) { + $output .= $self->_concatContent($config->{'blocks'}->{'functions'}); } - if (keys(%{$config->{'restart'}->{'content'}}) > 0) { - $output .= " restart)\n"; - $block = $self->_combineBlock($config->{'restart'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; + + # case block + $output .= $self->_renderCasePrefix(); + $output .= "\ncase \"\$1\" in \n"; + + # get caseBlocks in defined order + my @blocks = sort{ + $config->{'caseBlocks'}->{$a}->{'order'} <=> + $config->{'caseBlocks'}->{$b}->{'order'} + } + keys(%{$config->{'caseBlocks'}}); + + # case block + while (@blocks) + { + my $block= shift(@blocks); + if (keys(%{$config->{'caseBlocks'}->{$block}->{'content'}}) > 0) { + push(@usage, $block); + $output .= " $block)\n"; + $content = $self->_concatContent($config->{'caseBlocks'}->{$block}); + $content =~ s/^/ /mg; + $output .= $content; + $output .= " ;;\n"; + } else { + if ($config->{'caseBlocks'}->{$block}->{'required'}) { + print "required block $block undefined"; + } + } } - if (keys(%{$config->{'status'}->{'content'}}) > 0) { - $output .= " status)\n"; - $block = $self->_combineBlock($config->{'status'}); - $block =~ s/^/ /mg; - $output .= $block; + + # autogenerate usage + if (scalar(grep(/usage/, @usage)) == 0) { + $initFileCopy->addToCase( + 'usage', + $self->_generateUsage(join(', ',@usage)) + ); + + $output .= " *)\n"; + $content = $self->_concatContent($config->{'caseBlocks'}->{'usage'}); + $content =~ s/^/ /mg; + $output .= $content; $output .= " ;;\n"; + } - if (keys(%{$config->{'usage'}->{'content'}}) > 0) { - $output .= " *)\n"; - $block = $self->_combineBlock($config->{'usage'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " exit 1\n"; - } else { - # try to generate usage - # $this->_generateUsage(); - } + + # footer $output .= "esac\n\n"; - $output .= "exit 0\n"; + $output .= $self->_renderFooter(); + return $output; } + 1; \ No newline at end of file diff --git a/lib/OpenSLX/DistroUtils/Engine.pm b/lib/OpenSLX/DistroUtils/Engine.pm index 28a4bd1d..354210e3 100644 --- a/lib/OpenSLX/DistroUtils/Engine.pm +++ b/lib/OpenSLX/DistroUtils/Engine.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -15,6 +15,9 @@ package OpenSLX::DistroUtils::Engine; use OpenSLX::Basics; +use strict; +use warnings; + sub new { my $class = shift; diff --git a/lib/OpenSLX/DistroUtils/InitFile.pm b/lib/OpenSLX/DistroUtils/InitFile.pm index 704d4eb2..94d7c753 100644 --- a/lib/OpenSLX/DistroUtils/InitFile.pm +++ b/lib/OpenSLX/DistroUtils/InitFile.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -38,50 +38,82 @@ sub _initialConfigHash() { 'defaultStart' => "2 3 4 5", 'defaultStop' => "1", 'shortDesc' => "", - - 'head' => { - 'blockDesc' => "head: file existing checks, etc.", - 'content' => {} + 'blocks' => { + 'head' => { + 'blockDesc' => "head: file existing checks, etc.", + 'content' => {} + }, + 'functions' => { + 'blockDesc' => "functions: helper functions", + 'content' => {} + } }, - 'functions' => { - 'blockDesc' => "functions: helper functions", - 'content' => {} - }, - 'start' => { - 'blockDesc' => "start: defines start function for initscript", - 'content' => {} - }, - 'stop' => { - 'blockDesc' => "stop: defines stop function for initscript", - 'content' => {} - }, - 'reload' => { - 'blockDesc' => "reload: defines reload function for initscript", - 'content' => {} - }, - 'force-reload' => { - 'blockDesc' => "force-reload: defines force-reload function for initscript", - 'content' => {} - }, - 'restart' => { - 'blockDesc' => "restart: defines restart function for initscript", - 'content' => {} - }, - 'try-restart' => { - 'blockDesc' => "restart: defines restart function for initscript", - 'content' => {} - }, - 'status' => { - 'blockDesc' => "status: defines status function for initscript", - 'content' => {} - }, - 'usage' => { - 'blockDesc' => "usage: defines usage function for initscript", - 'content' => {} + 'caseBlocks' => { + 'start' => { + 'blockDesc' => "start: defines start function for initscript", + 'content' => {}, + 'order' => 1, + 'required' => 1 + }, + 'stop' => { + 'blockDesc' => "stop: defines stop function for initscript", + 'content' => {}, + 'order' => 2, + 'required' => 1 + }, + 'reload' => { + 'blockDesc' => "reload: defines reload function for initscript", + 'content' => {}, + 'order' => 3, + 'required' => 0 + }, + 'force-reload' => { + 'blockDesc' => "force-reload: defines force-reload function for initscript", + 'content' => {}, + 'order' => 4, + 'required' => 0 + }, + 'restart' => { + 'blockDesc' => "restart: defines restart function for initscript", + 'content' => {}, + 'order' => 5, + 'required' => 1 + }, + 'try-restart' => { + 'blockDesc' => "restart: defines restart function for initscript", + 'content' => {}, + 'order' => 6, + 'required' => 0 + }, + 'status' => { + 'blockDesc' => "status: defines status function for initscript", + 'content' => {}, + 'order' => 7, + 'required' => 0 + }, + 'usage' => { + 'blockDesc' => "usage: defines usage function for initscript", + 'content' => {}, + 'order' => 8, + 'required' => 0 + } } }; } +sub addToCase { + my $self = shift; + my $blockName = shift; + my $content = shift; + my $priority = shift || 5; + + #check if block is valid.. + + push(@{$self->{'configHash'}->{'caseBlocks'}->{$blockName}->{'content'}->{$priority}}, $content); + + return $self; +} + sub addToBlock { my $self = shift; my $blockName = shift; @@ -90,7 +122,7 @@ sub addToBlock { #check if block is valid.. - push(@{$self->{'configHash'}->{$blockName}->{'content'}->{$priority}}, $content); + push(@{$self->{'configHash'}->{'blocks'}->{$blockName}->{'content'}->{$priority}}, $content); return $self; } diff --git a/lib/OpenSLX/DistroUtils/Suse.pm b/lib/OpenSLX/DistroUtils/Suse.pm index d3d4ae96..3c370489 100644 --- a/lib/OpenSLX/DistroUtils/Suse.pm +++ b/lib/OpenSLX/DistroUtils/Suse.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -53,7 +53,7 @@ sub _renderHighlevelConfig { $tpl = "echo -n \"Starting %s \"\n"; $tpl .= "startproc -f -p \$%s_PIDFILE \$%s_BIN \$%s_OPTS\n"; $tpl .= "rc_status -v"; - $initFile->addToBlock('start', + $initFile->addToCase('start', sprintf( $tpl, $element->{desc}, @@ -66,7 +66,7 @@ sub _renderHighlevelConfig { $tpl = "echo -n \"Shutting down %s\" \n"; $tpl .= "killproc -p \$%s_PIDFILE -TERM \$%s_BIN\n"; $tpl .= "rc_status -v"; - $initFile->addToBlock('stop', + $initFile->addToCase('stop', sprintf( $tpl, $element->{desc}, @@ -80,7 +80,7 @@ sub _renderHighlevelConfig { $tpl .= "\$0 status >/dev/null && \$0 restart\n\n"; $tpl .= "# Remember status and be quiet\n"; $tpl .= "rc_status"; - $initFile->addToBlock('try-restart', + $initFile->addToCase('try-restart', $tpl ); @@ -90,14 +90,14 @@ sub _renderHighlevelConfig { $tpl .= "\$0 start\n\n"; $tpl .= "# Remember status and be quiet\n"; $tpl .= "rc_status"; - $initFile->addToBlock('restart', + $initFile->addToCase('restart', $tpl ); $tpl = "echo -n \"Reload service %s\"\n"; $tpl .= "killproc -p \$%s_PIDFILE -HUP \$%s_BIN\n"; $tpl .= "rc_status -v"; - $initFile->addToBlock('reload', + $initFile->addToCase('reload', sprintf( $tpl, $element->{desc}, @@ -110,7 +110,7 @@ sub _renderHighlevelConfig { $tpl = "echo -n \"Checking for service %s\"\n"; $tpl .= "checkproc -p \$%s_PIDFILE \$%s_BIN\n"; $tpl .= "rc_status -v"; - $initFile->addToBlock('status', + $initFile->addToCase('status', sprintf( $tpl, $element->{desc}, @@ -126,90 +126,19 @@ sub _renderHighlevelConfig { } -sub generateInitFile +sub _getInitsystemIncludes { - my $self = shift; - my $initFile = shift; - my $block; + return ". /etc/rc.status\n\n"; +} - $self->_renderHighlevelConfig($initFile); - - my $config = $initFile->{'configHash'}; - my $output; - - $output = "#!/bin/sh\n\n"; - $output .= $self->_renderInfoBlock($config); - $output .= ". /etc/rc.status \n\n"; - if (keys(%{$config->{'head'}->{'content'}}) > 0) { - $output .= $self->_combineBlock($config->{'head'}); - } - if (keys(%{$config->{'functions'}->{'content'}}) > 0) { - $output .= $self->_combineBlock($config->{'functions'}); - } - $output .= "rc.reset \n\n"; - $output .= "case \"\$1\" in \n"; - if (keys(%{$config->{'start'}->{'content'}}) > 0) { - $output .= " start)\n"; - $block .= $self->_combineBlock($config->{'start'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } else { - # trigger error - # start is essential - } - if (keys(%{$config->{'stop'}->{'content'}}) > 0) { - $output .= " stop)\n"; - $block = $self->_combineBlock($config->{'stop'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } else { - # trigger error - # stop is essential - } - if (keys(%{$config->{'reload'}->{'content'}}) > 0) { - $output .= " reload)\n"; - $block = $self->_combineBlock($config->{'reload'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } - if (keys(%{$config->{'restart'}->{'content'}}) > 0) { - $output .= " restart)\n"; - $block = $self->_combineBlock($config->{'restart'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } - if (keys(%{$config->{'try-restart'}->{'content'}}) > 0) { - $output .= " try-restart)\n"; - $block = $self->_combineBlock($config->{'try-restart'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } - if (keys(%{$config->{'status'}->{'content'}}) > 0) { - $output .= " status)\n"; - $block = $self->_combineBlock($config->{'status'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " ;;\n"; - } - if (keys(%{$config->{'usage'}->{'content'}}) > 0) { - $output .= " *)\n"; - $block = $self->_combineBlock($config->{'usage'}); - $block =~ s/^/ /mg; - $output .= $block; - $output .= " exit 1\n"; - } else { - # try to generate usage - # $this->_generateUsage(); - } - $output .= "esac\n\n"; - $output .= "rc_exit\n"; - return $output; - +sub _renderCasePrefix +{ + return "rc_reset\n"; +} + +sub _renderFooter +{ + return "rc_exit\n"; } 1; \ No newline at end of file diff --git a/lib/OpenSLX/DistroUtils/Ubuntu.pm b/lib/OpenSLX/DistroUtils/Ubuntu.pm index dceae7e4..b2526828 100644 --- a/lib/OpenSLX/DistroUtils/Ubuntu.pm +++ b/lib/OpenSLX/DistroUtils/Ubuntu.pm @@ -1,4 +1,4 @@ -# Copyright (c) 2008 - OpenSLX GmbH +# Copyright (c) 2008, 2009 - OpenSLX GmbH # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING @@ -19,6 +19,22 @@ use Switch; use base qw(OpenSLX::DistroUtils::Base); +sub _getInitsystemIncludes +{ + return ". /lib/lsb/init-functions\n\n"; +} + +sub _renderCasePrefix +{ + return ""; +} + +sub _renderFooter +{ + return "exit 0\n"; +} + + sub _renderHighlevelConfig { my $self = shift; my $initFile = shift; @@ -32,7 +48,7 @@ sub _renderHighlevelConfig { $element->{binary} =~ m/\/([^\/]*)$/; my $shortname = $1; my $tpl = "export %s_PARAMS=\"%s\" \n"; - $tpl .= "[ -f /etc/default/%s ] . /etc/default/%s \n"; + $tpl .= "if [ -f /etc/default/%s ]; then . /etc/default/%s; fi \n"; $initFile->addToBlock('head', sprintf( $tpl, @@ -44,12 +60,15 @@ sub _renderHighlevelConfig { ); - $tpl = "start-stop-daemon --start --quiet --oknodo "; + $tpl = "log_daemon_msg \"Starting %s\" \"%s\" \n"; + $tpl .= "start-stop-daemon --start --quiet --oknodo "; $tpl .= "--pidfile /var/run/%s.pid --exec %s -- \$%s_PARAMS \n"; $tpl .= "log_end_msg \$?"; - $initFile->addToBlock('start', + $initFile->addToCase('start', sprintf( $tpl, + $element->{description}, + $shortname, $shortname, $element->{binary}, uc($shortname) @@ -59,7 +78,7 @@ sub _renderHighlevelConfig { $tpl = "start-stop-daemon --stop --quiet --oknodo "; $tpl .= "--pidfile /var/run/%s.pid \n"; $tpl .= "log_end_msg \$?"; - $initFile->addToBlock('stop', + $initFile->addToCase('stop', sprintf( $tpl, $shortname @@ -73,16 +92,4 @@ sub _renderHighlevelConfig { } -sub generateInitFile -{ - my $self = shift; - my $initFile = shift; - - $initFile->addToBlock('head', '#ubuntu test'); - - $self->_renderHighlevelConfig($initFile); - - return $self->SUPER::generateInitFile($initFile); -} - 1; \ No newline at end of file -- cgit v1.2.3-55-g7522