rpmsafereduce: revert
[nethome.git] / bin / mockrun
1 #! /usr/bin/perl -T
2 # $Id: mockrun,v 1.2 2009/10/03 17:45:41 jkratoch Exp $
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 delete @ENV{qw(PATH BASH_ENV)};
10 tr{/}{}s;
11 s{^/var/lib/mock/}{};
12 my $safe="([-_a-z0-9/]+)";
13 $_=(/$safe/)[0];
14 my $HOME=($ENV{"HOME"}=~/$safe/)[0];
15 my $rpath="/var/lib/mock/$_/root";
16 system "sudo $HOME/bin/mocksetup -s $_" and die "sudo mocksetup $_";
17 -e "$rpath/MOCK" or die "mocksetup $_ and still no $rpath/MOCK";
18 my $user=$ENV{"USER"};
19 $user=($user=~/$safe/)[0];
20
21 # ERROR: Build root is locked by another process.
22 # my $mock="/usr/bin/mock";
23 # my @l=(qw(mock -r),$_,qw(--shell));
24 my $mock="/usr/bin/setarch";
25 my $arch=(/-(i386|x86_64)(?:-.*)?$/)[0] or die;
26 my @l=("setarch",$arch,"/usr/bin/sudo","/usr/sbin/chroot",$rpath);
27
28 # Untaint @ARGV->@args.
29 my $args="";
30 for (@ARGV) {
31   $args.=" " if $args;
32   $args.=(/^(.*)$/s)[0];
33 }
34 my @args=("-l","-c",$args) if $args;
35
36 push @l,qw(su -),$user,@args;
37 print STDERR "$mock @l\n";
38 $ENV{"HOSTNAME"}="MOCK-$_";
39 exec $mock @l;