#!/bin/bash shopt -s nullglob rel=rawhide srel=rawhide arch=x86_64 while getopts a:r: opt; do case "$opt" in a) arch="$OPTARG";; r) rel="$OPTARG"; srel="$OPTARG";; \?) echo >&2 "usage: $0 [-r release] [package"; exit 1;; esac done shift `expr $OPTIND - 1` pkg=$1 if [[ ! -f $pkg ]]; then echo "No such package: $pkg"; exit 1; fi if [[ `dirname $pkg` = '.' ]]; then pkg="$PWD/$pkg" fi echo "Building $pkg" cd /tmp MOCKDIR=/mock/fedora-$rel-$arch MOCKCFG=fedora-$srel-$arch runmock() { mock -r $MOCKCFG $* 2>&1 | sed -r -u -n -e ' /^mock.Root.build: LEAVE /d /^root: mock final configuration:/,/^root: +target_arch:/d /^mock.util: (ensuring|run cmd timeout|creating dir)/d /^mock: u?mount /d /^mock.util: (Ran setarch|chroot|Unsharing.|touching file:|remove tree:) /d /^mock.util: Child returncode was: 0/d /^mock.util: Executing command: .*(chcon|mount)/d /^mock.util: warning:\s*$/d /^mock.util: .* does not exist - using root/d s/^mock.utl: // s/^mock.Root.(build|state): // p ' # sed -r -u \ # -e 's/^DEBUG: //' \ # -e 's/^run cmd timeout...: .*//' \ # -e 's/^ensuring that dir exists: .*//' \ # -e 's/^creating dir: .*//' \ # | unbuffer -p cat -s [[ $PIPESTATUS -gt 0 ]] && exit 1 } runmock -v --rebuild $pkg # Preserve logs cp $MOCKDIR/result/build.log $MOCKDIR/result/build.log.$$ cp $MOCKDIR/result/root.log $MOCKDIR/result/root.log.$$ echo Installing rpmlint: runmock --install rpmlint echo Installing built packages: runmock -v --install $MOCKDIR/result/*{i386,x86_64,noarch}.rpm 2>&1 | tee -a $MOCKDIR/result/blah cat <<'EOF' >> $MOCKDIR/root/tmp/run-rpmlint #!/bin/sh rm -f /var/lib/rpm/__db* #rpm --rebuilddb echo rpmlint of SRPM: ls -l /builddir/build/SRPMS/*.rpm rpmlint /builddir/build/SRPMS/*.rpm echo ====== echo echo rpmlint of RPMs: ls -l /builddir/build/RPMS/*.rpm rpmlint /builddir/build/RPMS/*.rpm echo ====== echo rpmlint of installed RPMs: rpmlint `rpm -qp /builddir/build/RPMS/*.rpm --qf "%{NAME} "` echo ====== echo EOF chmod +x $MOCKDIR/root/tmp/run-rpmlint runmock --shell /tmp/run-rpmlint | tee -a $MOCKDIR/result/rpmlint for i in $MOCKDIR/result/*{i386,x86_64,noarch}.rpm do echo -n " " basename $i rpm -qp --provides $i echo " =" rpm -qp --requires $i | uniq | egrep -v '^((libcrypt|libdl|libnsl|libresolv|libc|libm|librt|libpthread)\.so\.[0-9])|rpmlib\(|rtld\(' echo done >> $MOCKDIR/result/rpmlint # Put the logs back cp $MOCKDIR/result/build.log.$$ $MOCKDIR/result/build.log cp $MOCKDIR/result/root.log.$$ $MOCKDIR/result/root.log sed -i -e 's/^mock.Root.build: //' $MOCKDIR/result/build.log echo "Results in $MOCKDIR/result"