pantheon

 view release on metacpan or  search on metacpan

lib/Poros/Query.pm  view on Meta::CPAN

    my $query = $self->{query};
    my ( $code, $user ) = @$query{ qw( code user ) };

    die "already running $code\n" if ( $code =~ /\.mx$/ ) && !
        Vulcan::ProcLock->new( File::Spec->join( $path{run}, $code ) )->lock();

    die "invalid code\n" unless
        -f ( $code = File::Spec->join( $path{code}, $code ) )
        && ( $code = do $code ) && ref $code eq 'CODE';

    if ( ! $< && $user && $user ne ( getpwuid $< )[0] )
    {
        die "invalid user $user\n" unless my @pw = getpwnam $user;
        @pw = map { 0 + sprintf '%d', $_ } @pw[2,3];
        POSIX::setgid( $pw[1] ); ## setgid must preceed setuid
        POSIX::setuid( $pw[0] );
    }

    &$code( pdir => File::Basename::dirname( $RealBin ), %$query );
}

lib/Vulcan/Sudo.pm  view on Meta::CPAN

=head1 Methods

=head3 sudo( $user )

Become $user ( default root ). 

=cut
sub sudo
{
    my ( $class, $user ) = splice @_;
    my $me = ( getpwuid $< )[0];

    return $user if $me eq ( $user ||= 'root' );
    confess "invalid user $user\n" unless my @pw = getpwnam $user;
    @pw = map { 0 + sprintf '%d', $_ } @pw[2,3];
    POSIX::setgid( $pw[1] );
    return $user if POSIX::setuid( $pw[0] );

    warn "$me: need '$user' privilege, invoking sudo.\n";
    confess "exec $0: $!" unless exec 'sudo', '-u', $user, $0, @ARGV;
}

pantheon/tools/seco/getbuildtype  view on Meta::CPAN

use SECO::Conf::Auto;
use SECO::Engine;

our %FILE = %SECO::Index::FILE;
our %TYPE = %SECO::Index::TYPE;

confess "invalid config file!" unless $seco{index};

my $engine = SECO::Engine->new();
my $user = $engine->{user};
exit 1 unless $user eq ( getpwuid $< )[0];

my $hdfs = $engine->{env}{PECTL}{hdfs} || $seco{index}{hdfs};
my $repo = $seco{index}{repo};

$repo =~ s/\$RUNUSER/$user/;
my $version = $engine->{env}{PECTL}{version} || $engine->{env}{VERSION}{version};

my $host = Sys::Hostname::hostname();
my $conf = SECO::Conf::Auto->new( $seco{conf} );
my $info = $conf->search( $host );

pantheon/tools/seco/search  view on Meta::CPAN


=cut

my ( $option, %seco );
BEGIN { $option = Vulcan::OptConf->load(); %seco = $option->dump( 'seco' ) }

use lib $seco{lib};
use SECO::Conf::Auto;
use SECO::Engine::Search;

die "no ytt!\n" unless -e File::Spec->join( ( getpwuid $< )[7], 'ytt' );

my %o = $option->get( qw( stop start restart load=s lock=s cache=s ) )->dump;
my $conf = SECO::Conf::Auto->new( $seco{conf} );
my $host = Sys::Hostname::hostname;
my $info = $conf->search( $host );

die "no seco config!" unless my ( $tier ) = @{ $info->{$host} };
my $seco = SECO::Engine::Search->new();
my %mode = ( mode => 'qrw' ) if $tier =~ /pw$/;

pantheon/tools/seco/searcherrun  view on Meta::CPAN

}

use lib $seco{lib};
use SECO::Index;
use SECO::Index::Incr;
use SECO::Conf::Auto;
use SECO::Engine;
use SECO::Engine::Search;

die "you has let the user run engine? are sure?\n"
unless -e File::Spec->join( ( getpwuid $< )[7], 'ytt' );

my $host = Sys::Hostname::hostname();
my $conf = SECO::Conf::Auto->new( $seco{conf} );
my $info = $conf->search( $host );
my ( $tier, $dc, $replica ) = @{ $info->{$host} };

confess "invalid config file!" unless $seco{index};

my $engine = SECO::Engine::Search->new();
my $user = $engine->{user};
exit 1 unless $user eq ( getpwuid $< )[0];

my $home = $engine->{path}{home};
my $lock = Vulcan::ProcLock->new( "$home/.runlock" );
exit 1 unless $lock->lock();

my %flags;
map { $flags{$_} = $engine->path( run => ( $seco{index}{$_} || "ops_build.$_" ) ) }
    qw( status inc full pack fastpack lock );

do { warn "locking"; sleep 10; exit 0 } if -f $flags{lock};



( run in 0.276 second using v1.01-cache-2.11-cpan-454fe037f31 )