Catalyst-Helper-InitScript-FreeBSD

 view release on metacpan or  search on metacpan

lib/Catalyst/Helper/InitScript/FreeBSD.pm  view on Meta::CPAN


our $VERSION = '0.01';

=head1 NAME

Catalyst::Helper::InitScript::FreeBSD - /usr/local/etc/rc.d/yourapp.sh generator.

=head1 SYNOPSIS

    % ./script/yourapp_create.pl InitScript::FreeBSD -- --help
    usage: ./script/yourapp_create.pl
        -? -help       display this help and exits.
           -user       The real uid of fastcgi process. [default is USERNAME]
           -group      The real gid of fastcgi process. [default is GROUP]
        -p -pidfile    specify filename for pid file.
                       [default is /var/run/yourapp.pid]
        -l -listen     Socket path to listen on can be HOST:PORT, :PORT or a filesystem path.
                       [default is /var/run/yourapp.sockets]
        -n -nproc      specify number of processes to keep to serve requests.
                       [default is 4]
           -mysql      run after init mysql. [default is no]
           -postgresql run after init postgresql. [default is no]

    % ./script/yourapp_create.pl InitScript::FreeBSD -- -nproc 2 -mysql 
    /usr/home/bokutin/svk/YourApp/trunk/script/../yourapp.sh.sample is exist.
            overwrite? (y or n) [default n] y
    /usr/home/bokutin/svk/YourApp/trunk/script/../yourapp.sh.sample was created.

    The following commands were needed to complete setting up.
    % sudo cp /usr/home/bokutin/svk/YourApp/trunk/script/../yourapp.sh.sample /usr/local/etc/rc.d/yourapp.sh
    % sudo chmod 755 /usr/local/etc/rc.d/yourapp.sh
    % sudo touch /var/run/yourapp.pid
    % sudo touch /var/run/yourapp.sockets

=cut

=head2 mk_stuff

=cut

sub mk_stuff {
    my ( $class, $helper, @args ) = @_;

    # vars 
    my $vars = {
        app   => lc($helper->{app}) || die,
        base  => $helper->{base},
        user  => getpwuid($UID) || "",
        group => getgrgid($GID) || "",
        nproc => 4,
        use_socket => 1,
    };
    $vars->{pidfile} = "/var/run/$vars->{app}.pid";
    $vars->{listen}  = "/var/run/$vars->{app}.sockets";
    my $output  = canonpath(catfile($vars->{base}, "$vars->{app}.sh.sample"));

    # parse args
    {
        no warnings 'uninitialized';
        my $opts = {};
        local @ARGV = @args;
        my $ret = GetOptions(
            'help|?'      => \$opts->{help},
            'user=s'      => \$opts->{user},
            'group=s'     => \$opts->{group},
            'pidfile|p=s' => \$opts->{pidfile},
            'listen|l=s'  => \$opts->{listen},
            'nproc|n=i'   => \$opts->{nproc},
            'mysql'       => \$opts->{mysql},
            'postgresql'  => \$opts->{postgresql},
        );
        if (!$ret or $opts->{help}) {
            $class->_usage($vars);
            return 0;
        }
        if ($opts->{listen} =~ m/:\d+$/) {
            $opts->{use_socket} = 0;
        }
        delete $opts->{$_} for (grep { ! length $opts->{$_} } keys %$opts);
        $vars = { %$vars, %$opts };
    }
 
    # processing
    if (-f $output and !$class->_ask_overwite($vars, $output)) {
        print "cancelled.\n";
        return 0;
    }
    else {
        $class->_render_file($helper, $vars, $output);

        my @msgs;
        push @msgs, "$output was created.";
        push @msgs, "";
        push @msgs, "The following commands were needed to complete setting up.";
        push @msgs, "% sudo cp $output /usr/local/etc/rc.d/$vars->{app}.sh";
        push @msgs, "% sudo chmod 755 /usr/local/etc/rc.d/$vars->{app}.sh";
        push @msgs, "% sudo touch $vars->{pidfile}";
        push @msgs, "% sudo touch $vars->{listen}" if $vars->{use_socket};

        print join("\n", @msgs), "\n";
    }

    return 1;
}

sub _usage {
    my ($class, $vars) = @_;

    print <<USAGE;
usage: $0
    -? -help       display this help and exits.
       -user       The real uid of fastcgi process. [default is $vars->{user}]
       -group      The real gid of fastcgi process. [default is $vars->{group}]
    -p -pidfile    specify filename for pid file. 
                   [default is $vars->{pidfile}]
    -l -listen     Socket path to listen on can be HOST:PORT, :PORT or a filesystem path. 
                   [default is $vars->{listen}]
    -n -nproc      specify number of processes to keep to serve requests. 
                   [default is $vars->{nproc}]
       -mysql      run after init mysql. [default is no]
       -postgresql run after init postgresql. [default is no]

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.860 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )