#! /usr/bin/perl -T # $Id: mockrun,v 1.2 2009/10/03 17:45:41 jkratoch Exp $ use strict; use warnings; use English; die "Need [/var/lib/mock/] []" if @ARGV<1; local $_=shift; delete @ENV{qw(PATH BASH_ENV)}; tr{/}{}s; s{^/var/lib/mock/}{}; my $safe="([-_a-z0-9/]+)"; $_=(/$safe/)[0]; my $HOME=($ENV{"HOME"}=~/$safe/)[0]; my $rpath="/var/lib/mock/$_/root"; system "sudo $HOME/bin/mocksetup -s $_" and die "sudo mocksetup $_"; -e "$rpath/MOCK" or die "mocksetup $_ and still no $rpath/MOCK"; my $user=$ENV{"USER"}; $user=($user=~/$safe/)[0]; # ERROR: Build root is locked by another process. # my $mock="/usr/bin/mock"; # my @l=(qw(mock -r),$_,qw(--shell)); my $mock="/usr/bin/setarch"; my $arch=(/-(i386|x86_64)(?:-.*)?$/)[0] or die; my @l=("setarch",$arch,"/usr/bin/sudo","/usr/sbin/chroot",$rpath); # Untaint @ARGV->@args. my $args=""; for (@ARGV) { $args.=" " if $args; $args.=(/^(.*)$/s)[0]; } my @args=("-l","-c",$args) if $args; push @l,qw(su -),$user,@args; print STDERR "$mock @l\n"; $ENV{"HOSTNAME"}="MOCK-$_"; exec $mock @l;