init
authorjkratoch <>
Thu, 13 Aug 2009 11:36:20 +0000 (11:36 +0000)
committerjkratoch <>
Thu, 13 Aug 2009 11:36:20 +0000 (11:36 +0000)
bin/mocksetup [new file with mode: 0755]

diff --git a/bin/mocksetup b/bin/mocksetup
new file mode 100755 (executable)
index 0000000..3ff3536
--- /dev/null
@@ -0,0 +1,132 @@
+#! /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