From fa72ea29d31e42aedaf85ecd611b84f93aee6394 Mon Sep 17 00:00:00 2001 From: Takuya ASADA Date: Mon, 22 May 2017 17:17:59 +0900 Subject: [PATCH] dist/redhat: Use mock for CentOS/RHEL rpms Enable mock for CentOS/RHEL, also support cross building by mock. See scylladb/scylla#630 Signed-off-by: Takuya ASADA Message-Id: <20170522081759.8574-1-syuu@scylladb.com> --- dist/redhat/build_rpm.sh | 75 ++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/dist/redhat/build_rpm.sh b/dist/redhat/build_rpm.sh index 4211191..ba6aea1 100755 --- a/dist/redhat/build_rpm.sh +++ b/dist/redhat/build_rpm.sh @@ -1,34 +1,71 @@ #!/bin/bash -e -RPMBUILD=`pwd`/build/rpmbuild +. /etc/os-release +print_usage() { + echo "build_rpm.sh -target epel-7-x86_64 --configure-user" + echo " --target target distribution in mock cfg name" + exit 1 +} +TARGET= +while [ $# -gt 0 ]; do + case "$1" in + "--target") + TARGET=$2 + shift 2 + ;; + *) + print_usage + ;; + esac +done + +is_redhat_variant() { + [ -f /etc/redhat-release ] +} +pkg_install() { + if is_redhat_variant; then + sudo yum install -y $1 + else + echo "Requires to install following command: $1" + exit 1 + fi +} + if [ ! -e dist/redhat/build_rpm.sh ]; then echo "run build_rpm.sh in top of scylla-jmx dir" exit 1 fi -sudo yum install -y rpm-build git +if [ "$(arch)" != "x86_64" ]; then + echo "Unsupported architecture: $(arch)" + exit 1 +fi +if [ -z "$TARGET" ]; then + if [ "$ID" = "centos" -o "$ID" = "rhel" ] && [ "$VERSION_ID" = "7" ]; then + TARGET=epel-7-x86_64 + elif [ "$ID" = "fedora" ]; then + TARGET=$ID-$VERSION_ID-x86_64 + else + echo "Please specify target" + exit 1 + fi +fi -OS=`awk '{print $1}' /etc/redhat-release` -if [ "$OS" = "Fedora" ] && [ ! -f /usr/bin/mock ]; then - sudo yum -y install mock -elif [ "$OS" = "CentOS" ] && [ ! -f /usr/bin/yum-builddep ]; then - sudo yum -y install yum-utils +if [ ! -f /usr/bin/mock ]; then + pkg_install mock +fi +if [ ! -f /usr/bin/git ]; then + pkg_install git fi VERSION=$(./SCYLLA-VERSION-GEN) SCYLLA_VERSION=$(cat build/SCYLLA-VERSION-FILE) SCYLLA_RELEASE=$(cat build/SCYLLA-RELEASE-FILE) -mkdir -p $RPMBUILD/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} -git archive --format=tar --prefix=scylla-jmx-$SCYLLA_VERSION/ HEAD -o build/rpmbuild/SOURCES/scylla-jmx-$VERSION.tar -cp dist/redhat/scylla-jmx.spec.in $RPMBUILD/SPECS/scylla-jmx.spec -sed -i -e "s/@@VERSION@@/$SCYLLA_VERSION/g" $RPMBUILD/SPECS/scylla-jmx.spec -sed -i -e "s/@@RELEASE@@/$SCYLLA_RELEASE/g" $RPMBUILD/SPECS/scylla-jmx.spec +git archive --format=tar --prefix=scylla-jmx-$SCYLLA_VERSION/ HEAD -o build/scylla-jmx-$VERSION.tar +cp dist/redhat/scylla-jmx.spec.in build/scylla-jmx.spec +sed -i -e "s/@@VERSION@@/$SCYLLA_VERSION/g" build/scylla-jmx.spec +sed -i -e "s/@@RELEASE@@/$SCYLLA_RELEASE/g" build/scylla-jmx.spec -if [ "$OS" = "Fedora" ]; then - rpmbuild -bs --define "_topdir $RPMBUILD" $RPMBUILD/SPECS/scylla-jmx.spec - /usr/bin/mock rebuild --resultdir=`pwd`/build/rpms $RPMBUILD/SRPMS/scylla-jmx-$VERSION*.src.rpm -else - sudo yum-builddep -y $RPMBUILD/SPECS/scylla-jmx.spec - rpmbuild -ba --define "_topdir $RPMBUILD" $RPMBUILD/SPECS/scylla-jmx.spec -fi +sudo mock --buildsrpm --root=$TARGET --resultdir=`pwd`/build/srpms --spec=build/scylla-jmx.spec --sources=build/scylla-jmx-$VERSION.tar +sudo mock --rebuild --root=$TARGET --resultdir=`pwd`/build/rpms build/srpms/scylla-jmx-$VERSION*.src.rpm