#! /usr/bin/perl -T # $Id$ use strict; use warnings; use English; die "Need [/var/lib/mock/] []" if @ARGV<1; local $_=shift; $EUID==0 or die "Need SUID"; $UID = $EUID; delete @ENV{qw(PATH BASH_ENV)}; tr{/}{}s; s{^/var/lib/mock/}{}; my $safe="([-_a-z0-9]+)"; $_=(/$safe/)[0]; my $rpath="/var/lib/mock/$_/root"; system "/usr/local/sbin/mocksetup -s $_" and die "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/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;