init (but older from backup).
authorlace <>
Thu, 13 Aug 2009 11:34:52 +0000 (11:34 +0000)
committerlace <>
Thu, 13 Aug 2009 11:34:52 +0000 (11:34 +0000)
bin/mockrun [new file with mode: 0755]

diff --git a/bin/mockrun b/bin/mockrun
new file mode 100755 (executable)
index 0000000..41e1e45
--- /dev/null
@@ -0,0 +1,40 @@
+#! /usr/bin/perl -T
+# $Id$
+use strict;
+use warnings;
+use English;
+
+die "Need [/var/lib/mock/]<ROOTNAME> [<commandline...>]" 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=(/-([^-]+)$/)[0];
+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;