summaryrefslogblamecommitdiffstats
path: root/src/lib/OpenSLX/DistroUtils/Ubuntu.pm
blob: 915c19c6a91d34244ad331c4ea24e9eb2fc0fd66 (plain) (tree)
1
                                         



















                                                                               















                                           












                                                             
                                                                                   










                                               

                                                                      

                                                                                
                                             

                             

                                                








                                                                     
                                            




                                  

















                                                                                      
                






                                               
                


















































                                                                                            
             
            




         
 
# Copyright (c) 2008, 2009 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your suggestions, praise, or complaints to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
# Ubuntu.pm
#    - provides ubuntu specific functions for distro based utils for OpenSLX
# -----------------------------------------------------------------------------
package OpenSLX::DistroUtils::Ubuntu;

use strict;
use warnings;
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;
    
    my $element;
    my $hlc = $initFile->{'configHash'}->{'highlevelConfig'};
    
    while ( $element = shift(@$hlc)){
        switch ($element->{type}) {
            case 'daemon' {
                $element->{binary} =~ m/\/([^\/]*)$/;
                my $shortname = $1;
                my $tpl  = "export %s_PARAMS=\"%s\" \n";
                $tpl .= "if [ -f /etc/default/%s ]; then . /etc/default/%s; fi \n";
                $initFile->addToBlock('head',
                    sprintf(
                        $tpl,
                        uc($shortname),
                        $element->{parameters},
                        $shortname,
                        $shortname
                    )
                );
                
                
                $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->addToCase('start',
                    sprintf(
                        $tpl,
                        $element->{description},
                        $shortname,
                        $shortname,
                        $element->{binary},
                        uc($shortname)
                    )
                );
                
                $tpl  = "start-stop-daemon --stop --quiet --oknodo ";
                $tpl .= "--pidfile /var/run/%s.pid \n";
                $tpl .= "log_end_msg \$?";
                $initFile->addToCase('stop',
                    sprintf(
                        $tpl,
                        $shortname
                    )
                );

                $tpl  = "log_daemon_msg \"Restarting %s\" \"%s\"\n";
                $tpl .= "\$0 stop\n";
                $tpl .= "case \"\$?\" in\n";
                $tpl .= "   0|1)\n";
                $tpl .= "   \$0 start\n";
                $tpl .= "   case \"\$?\" in\n";
                $tpl .= "       0) log_end_msg 0 ;;\n";
                $tpl .= "       1) log_end_msg 1 ;; # Old process is still running\n";
                $tpl .= "       *) log_end_msg 1 ;; # Failed to start\n";
                $tpl .= "   esac\n";
                $tpl .= "   ;;\n";
                $tpl .= "   *)\n";
                $tpl .= "       # Failed to stop\n";
                $tpl .= "       log_end_msg 1\n";
                $tpl .= "       ;;\n";
                $tpl .= "esac\n";
                $tpl .= ";;\n";
                
                $initFile->addToCase('restart',
                    sprintf(
                        $tpl,
                        $shortname
                    )
                );
   
                
                $tpl  = "start-stop-daemon --stop --signal 1 --quiet ";
                $tpl .= "--pidfile /var/run/%s.pid --name \$s\n";
                $tpl .= "return 0\n";
                $initFile->addToCase('reload',
                    sprintf(
                        $tpl,
                        $shortname,
                        $element->{binary}
                    )
                );

                $tpl  = "status_of_proc -p /var/run/%s.pid %s_BIN %s && exit 0 || exit \$?";
                $initFile->addToCase('status',
                    sprintf(
                        $tpl,
                        $element->{shortname},
                        $element->{binary},
                        $element->{shortname}
                    )
                );
                
                
            }
            case 'function' {
                my $tpl;
                $tpl  = "%s () { \n";
                $tpl .= "%s";
                $tpl .= "\n}\n";
                $initFile->addToBlock('functions',
                    sprintf(
                        $tpl,
                        $element->{name},
                        $element->{script}
                    )
                );
                    
            }
            case 'functionCall' {
                my $tpl;
                $tpl  = "%s %s\n";
                #$tpl .= "%s\n ";
                $initFile->addToCase($element->{block},
                    sprintf(
                        $tpl,
                        $element->{function},
                        $element->{parameters},
                        ""
                    ),
                    $element->{priority}
                );
                    
            }
            
        }
    }
    
}

1;