--- /dev/null
+#! /bin/sh
+# $Id$
+
+if [ "$1" = "-u" ];then
+ u=true
+ shift
+else
+ u=false
+fi
+# Do not rebuild the tree if it looks as already setup.
+if [ "$1" = "-s" ];then
+ soft=true
+ shift
+else
+ soft=false
+fi
+if [ "$1" = "-h" ];then
+ echo >&2 "$0 [/var/lib/mock/]<ROOTNAME>..."
+ exit 1
+fi
+if [ $# = 0 ];then
+ l="`echo /var/lib/mock/*`"
+else
+ l="$*"
+fi
+set -e
+trap 'echo >&2 FATAL ERROR' EXIT
+rc=0
+for r in $l;do
+ r="`echo "$r"|tr -s /`"
+ r="${r#/var/lib/mock/}"
+ r="${r%/}"
+ rpath="/var/lib/mock/$r/root"
+ if [ ! -d "$rpath" ];then
+ echo >&2 "$rpath does not exist"
+ exit 1
+ fi
+
+ echo >&2 -n "Locking $rpath/MOCK.mocksetup-lock ..."
+ lockfile -l 10 $rpath/MOCK.mocksetup-lock
+ echo >&2 " done"
+
+ l=""
+ b=""
+ for p in /proc/*/root;do
+ l="`readlink $p || :`"
+ if [ "${l#/var/lib/mock/$r/}" != "$l" ];then
+ p="${p#/proc/}"
+ p="${p%/root}"
+ b="$b $p"
+ fi
+ done
+ if [ -n "$b" ];then
+ echo >&2 "$rpath has existing processes: $b"
+ rc=1
+ rm -f $rpath/MOCK.mocksetup-lock
+ echo >&2 "Unlocked $rpath/MOCK.mocksetup-lock ."
+ continue
+ fi
+
+ if $soft && [ -f $rpath/MOCK ];then
+ rm -f $rpath/MOCK.mocksetup-lock
+ echo >&2 "Unlocked $rpath/MOCK.mocksetup-lock ."
+ continue
+ fi
+
+ rm -f $rpath/MOCK
+
+ # It fails on already mounted /proc. But we do not need it.
+ # mock -q -r $r chroot true echo "$rpath lock check"
+
+ for n in passwd group;do
+ cat /etc/$n $rpath/etc/$n|perl -ne 'print if /^(?:[^:]*:){2}(5\d\d):/'|sort|uniq -u|tee -a $rpath/etc/$n
+ done
+ if [ ! -f $rpath/etc/mtab-orig ];then
+ c="mv -f $rpath/etc/mtab $rpath/etc/mtab-orig"
+ echo $c; $c
+ c="ln -s /proc/mounts $rpath/etc/mtab"
+ echo $c; $c
+ fi
+
+ dir="/dev/pts"
+ c="umount $rpath$dir"
+ while $c 2>&1|grep -v ': not mounted$';do
+ echo $c
+ done
+
+ for dir in /home /usr/local/bin /dev /proc /sys;do
+ c="umount $rpath$dir"
+ while $c 2>&1|grep -v ': not mounted$';do
+ echo $c
+ done
+ if ! $u;then
+ c="mount --bind $dir $rpath$dir"
+ echo $c; $c
+ fi
+ done
+
+ dir="/dev/pts"
+ if ! $u;then
+ c="mount --bind $dir $rpath$dir"
+ echo $c; $c
+ fi
+
+ c="umount $rpath/var/cache/yum"
+ while $c 2>&1|grep -v ': not mounted$';do
+ echo $c
+ done
+ if ! $u;then
+ c="mount --bind /var/cache/mock/$r/yum_cache $rpath/var/cache/yum"
+ echo $c; $c
+ fi
+
+ rm -f $rpath/usr/local/lib/debug
+ if ! $u;then
+ ln -s ../../lib/debug $rpath/usr/local/lib/debug
+ fi
+
+ rm -f $rpath/usr/local/src/debug
+ if ! $u;then
+ ln -s ../../src/debug $rpath/usr/local/src/debug
+ fi
+
+ if ! $u;then
+ echo $r >$rpath/MOCK
+ fi
+
+ rm -f $rpath/MOCK.mocksetup-lock
+ echo >&2 "Unlocked $rpath/MOCK.mocksetup-lock ."
+done
+trap 'echo >&2 done' EXIT
+exit $rc