Commit | Line | Data |
4536f655 |
1 | #!/usr/local/bin/perl -w |
2 | |
3 | use strict ; |
4 | |
5 | use Getopt::Std ; |
6 | |
7 | use YAML ; |
8 | |
9 | my %opts ; |
10 | |
11 | getopts( 'v', \%opts ) ; |
12 | |
13 | my $cmds = Load do{ local $/ ; <> } ; |
14 | |
15 | foreach my $boot ( @{$cmds} ) { |
16 | |
17 | if ( my $skip = $boot->{'skip'} ) { |
18 | |
19 | next if $skip eq 'yes' ; |
20 | } |
21 | my $wrap = $boot->{'wrap'} || '/bin/sh -c' ; |
22 | my $cd = $boot->{'cd'} || '.' ; |
23 | my $cmd = $boot->{'cmd'} ; |
24 | |
25 | my $user = $boot->{'user'} || ''; |
26 | |
27 | my $env = $boot->{'env'} || {} ; |
28 | my $stem_env = $boot->{'stem_env'} || {} ; |
29 | |
30 | local( %ENV ) = ( %ENV, %{$env} ) ; |
31 | |
32 | my $cmd_env = join ' ', map( "$_='$stem_env->{$_}'", keys %$stem_env ) ; |
33 | |
34 | $cmd =~ s/run_stem/run_stem $cmd_env/ ; |
35 | |
36 | my $system; |
37 | $system = "su - $user;" if $user && getpwuid($<) ne $user; |
38 | $system .= qq|$wrap "cd $cd ; $cmd" &| ; |
39 | |
40 | print "$system\n" if $opts{'v'} ; |
41 | |
42 | system $system ; |
43 | |
44 | my $delay = $boot->{'delay'} || 3 ; |
45 | |
46 | print "waiting $delay seconds\n" if $opts{'v'}; |
47 | |
48 | sleep $delay ; |
49 | } |