#!/usr/local/bin/perl -w
use strict ;
use Getopt::Std ;
use YAML ;
my %opts ;
getopts( 'v', \%opts ) ;
my $cmds = Load do{ local $/ ; <> } ;
foreach my $boot ( @{$cmds} ) {
if ( my $skip = $boot->{'skip'} ) {
next if $skip eq 'yes' ;
}
my $wrap = $boot->{'wrap'} || '/bin/sh -c' ;
my $cd = $boot->{'cd'} || '.' ;
my $cmd = $boot->{'cmd'} ;
my $user = $boot->{'user'} || '';
my $env = $boot->{'env'} || {} ;
my $stem_env = $boot->{'stem_env'} || {} ;
local( %ENV ) = ( %ENV, %{$env} ) ;
my $cmd_env = join ' ', map( "$_='$stem_env->{$_}'", keys %$stem_env ) ;
$cmd =~ s/run_stem/run_stem $cmd_env/ ;
my $system;
$system = "su - $user;" if $user && getpwuid($<) ne $user;
$system .= qq|$wrap "cd $cd ; $cmd" &| ;
print "$system\n" if $opts{'v'} ;
system $system ;
my $delay = $boot->{'delay'} || 3 ;
print "waiting $delay seconds\n" if $opts{'v'};
sleep $delay ;
}