From: jkratoch <> Date: Thu, 13 Aug 2009 11:36:20 +0000 (+0000) Subject: init X-Git-Url: https://git.jankratochvil.net/?p=nethome.git;a=commitdiff_plain;h=4dc581838220e86f3d890c04a1eda65fe328a342 init --- diff --git a/bin/mocksetup b/bin/mocksetup new file mode 100755 index 0000000..3ff3536 --- /dev/null +++ b/bin/mocksetup @@ -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/]..." + 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