#! /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/]..." 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" if $soft && [ -f $rpath/MOCK ];then rm -f $rpath/MOCK.mocksetup-lock echo >&2 "Unlocked $rpath/MOCK.mocksetup-lock ." continue fi 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 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}(10\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 /root;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 if [ -d /var/cache/mock/$r/yum_cache ];then cr=$r else cr=`echo $r|sed 's/-[^-]*$//'` fi c="mount --bind /var/cache/mock/$cr/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 rm -f $rpath/usr/local/share/gdb if ! $u;then mkdir -p $rpath/usr/local/share ln -s ../../share/gdb $rpath/usr/local/share/gdb fi # Old systems incl. RHEL-6 do not feature it. if [ -d $rpath/etc/sudoers.d ];then rm -f $rpath/etc/sudoers.d/inteltest if ! $u;then ln /etc/sudoers.d/inteltest $rpath/etc/sudoers.d/inteltest fi 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