8163f24f9d41b4e7b0fed0d47ccab69816a2b13c
[nethome.git] / bin / mockrun
1 #! /usr/bin/perl -T
2 # $Id$
3 use strict;
4 use warnings;
5 use English;
6
7 die "Need [/var/lib/mock/]<ROOTNAME> [<commandline...>]" if @ARGV<1;
8 local $_=shift;
9 $EUID==0 or die "Need SUID";
10 $UID = $EUID;
11 delete @ENV{qw(PATH BASH_ENV)};
12 tr{/}{}s;
13 s{^/var/lib/mock/}{};
14 my $safe="([-_a-z0-9]+)";
15 $_=(/$safe/)[0];
16 my $rpath="/var/lib/mock/$_/root";
17 system "/usr/local/sbin/mocksetup -s $_" and die "mocksetup $_";
18 -e "$rpath/MOCK" or die "mocksetup $_ and still no $rpath/MOCK";
19 my $user=$ENV{"USER"};
20 $user=($user=~/$safe/)[0];
21
22 # ERROR: Build root is locked by another process.
23 # my $mock="/usr/bin/mock";
24 # my @l=(qw(mock -r),$_,qw(--shell));
25 my $mock="/usr/bin/setarch";
26 my $arch=(/-(i386|x86_64)(?:-.*)?$/)[0] or die;
27 my @l=("setarch",$arch,"/usr/sbin/chroot",$rpath);
28
29 # Untaint @ARGV->@args.
30 my $args="";
31 for (@ARGV) {
32   $args.=" " if $args;
33   $args.=(/^(.*)$/s)[0];
34 }
35 my @args=("-l","-c",$args) if $args;
36
37 push @l,qw(su -),$user,@args;
38 print STDERR "$mock @l\n";
39 $ENV{"HOSTNAME"}="MOCK-$_";
40 exec $mock @l;