Skip to content

Instantly share code, notes, and snippets.

@treydock
Created May 23, 2014 19:04
Show Gist options
  • Save treydock/2a8ad28c15805826e4c0 to your computer and use it in GitHub Desktop.
Save treydock/2a8ad28c15805826e4c0 to your computer and use it in GitHub Desktop.
#!/bin/bash
NAME="qemu-kvm"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
RPMBUILD_OPTS="--define '_topdir ${DIR}' --define 'dist .el6_5' --define 'rhel 6'"
# Default variables that have command line flags
QUIET=0
DEBUG=0
TRACE=0
NOOP=0
MOCK=0
RPMBUILD=0
exec_cmd() {
cmd="$1"
RET=0
[ $NOOP -eq 1 ] && noop_prefix="(NOOP) " || noop_prefix=""
echo "${noop_prefix}Executing: ${cmd}"
if [ $NOOP -eq 0 ]; then
if eval $cmd; then
RET=0
else
RET=1
fi
fi
return $RET
}
usage () {
cat << EOF
usage: $(basename $0) [OPTIONS] QEMU_KVM_SRPM
This script builds RPMs for $NAME.
OPTIONS:
--mock Run mock rebuild of SRPMs
--rpmbuild Run rpmbuild -ba
--debug Show debug output
This option also removes the mock --quiet option.
--trace Show the mock debug output
--noop Do not execute commands
-h, --help Show this message
EXAMPLE:
Build SRPMs
$(basename $0) qemu-kvm-0.12.1.2-2.415.el6_5.8.src.rpm
Build SRPMs and run mock rebuild
$(basename $0) --mock qemu-kvm-0.12.1.2-2.415.el6_5.8.src.rpm
Build RPMs
$(basename $0) --rpmbuild qemu-kvm-0.12.1.2-2.415.el6_5.8.src.rpm
EOF
}
ARGS=`getopt -o h -l mock,rpmbuild,help,debug,trace,noop -n "$0" -- "$@"`
[ $? -ne 0 ] && { usage; exit 1; }
eval set -- "${ARGS}"
while true; do
case "$1" in
-h|--help)
usage
exit 0
;;
--mock)
MOCK=1
shift
;;
--rpmbuild)
RPMBUILD=1
shift
;;
--debug)
DEBUG=1
QUIET=0
shift
;;
--trace)
TRACE=1
shift
;;
--noop)
NOOP=1
shift
;;
--)
shift
break
;;
*)
break
;;
esac
done
if [ $# -ne 1 ]; then
echo "Missing QEMU_KVM_SRPM argument"
usage
exit 1
fi
QEMU_KVM_SRPM=$1
QEMU_KVM_LOCAL_SRPM=$(echo ${QEMU_KVM_SRPM} | sed -r 's|^(.*).src.rpm|\1.local.src.rpm|g')
# Set variables based on command line flags
[ $DEBUG -eq 1 ] && set -x
[ $TRACE -eq 1 ] && mock_trace="--trace" || mock_trace=""
[ $QUIET -eq 1 ] && mock_quiet="--quiet" || mock_quiet=""
exec_cmd "cd ${DIR}"
if [ ! -f "SOURCES/${QEMU_KVM_SRPM}" ]
then
exec_cmd "wget http://vault.centos.org/6.5/updates/Source/SPackages/${QEMU_KVM_SRPM} -O SOURCES/${QEMU_KVM_SRPM} &>/dev/null"
if [ $? -ne 0 ]; then
echo "Failed to download"
exit 1
fi
fi
exec_cmd "cd SOURCES"
exec_cmd "rpm2cpio ${QEMU_KVM_SRPM} | cpio -dimv --quiet 2>/dev/null"
[ $? -ne 0 ] && { echo "Failed extracting ${QEMU_KVM_SRPM}, exiting..."; exit 1; }
exec_cmd "cd ${DIR}"
exec_cmd "sed 's|^%define buildid %{nil}$|%define buildid .local|g' SOURCES/qemu-kvm.spec > ./qemu-kvm.spec"
[ $? -ne 0 ] && { echo "Failed modifying qemu-kvm.spec, exiting..."; exit 1; }
if [ $MOCK -eq 1 ]; then
exec_cmd "rpmbuild -bs ${RPMBUILD_OPTS} qemu-kvm.spec 2>/dev/null"
[ $? -ne 0 ] && { echo "Failed building SRPM, exiting..."; exit 1; }
exec_cmd "/usr/bin/mock -r epel-6-x86_64 ${mock_quiet} ${mock_trace} --resultdir=${DIR}/RPMS/ ${RPMBUILD_OPTS} --rebuild ${DIR}/SRPMS/${QEMU_KVM_LOCAL_SRPM}"
elif [ $RPMBUILD -eq 1 ]; then
exec_cmd "rpmbuild -ba ${RPMBUILD_OPTS} qemu-kvm.spec"
else
exec_cmd "rpmbuild -bs ${RPMBUILD_OPTS} qemu-kvm.spec"
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment