From 2e0f223ddb0b6f7065f1b65297b7ec40075a7607 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sat, 7 Nov 2020 01:51:14 +0300 Subject: [PATCH] Add RPM build scripts for CentOS 7 --- rpm/build-tarball.sh | 43 +++++++++++++++++++++++++++++++++ rpm/prepare-env.sh | 15 ++++++++++++ rpm/vitastor.spec | 57 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100755 rpm/build-tarball.sh create mode 100755 rpm/prepare-env.sh create mode 100644 rpm/vitastor.spec diff --git a/rpm/build-tarball.sh b/rpm/build-tarball.sh new file mode 100755 index 000000000..6f0e072d2 --- /dev/null +++ b/rpm/build-tarball.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Vitastor depends on QEMU and FIO headers, but QEMU and FIO don't have -devel packages +# So we have to copy their headers into the source tarball + +set -e + +VITASTOR=$(dirname $0) +VITASTOR=$(realpath "$VITASTOR/..") + +. /opt/rh/devtoolset-9/enable +cd ~/rpmbuild/SPECS +rpmbuild -bp fio.spec +perl -i -pe 's/^make V=1/exit 0; make V=1/' qemu.spec +rpmbuild -bc qemu.spec +perl -i -pe 's/^exit 0; make V=1/make V=1/' qemu.spec +cd ~/rpmbuild/BUILD/qemu*/ +rm -rf $VITASTOR/qemu $VITASTOR/fio +mkdir -p $VITASTOR/qemu/b/qemu +make config-host.h +cp config-host.h $VITASTOR/qemu/b/qemu +cp -r include $VITASTOR/qemu +if [ -f qapi-schema.json ]; then + # QEMU 2.0 + make qapi-types.h + cp qapi-types.h $VITASTOR/qemu/b/qemu +else + # QEMU 3.0+ + make qapi + cp -r qapi $VITASTOR/qemu/b/qemu +fi +cd $VITASTOR +sh copy-qemu-includes.sh +rm -rf qemu +mv qemu-copy qemu +ln -s ~/rpmbuild/BUILD/fio*/ fio +sh copy-fio-includes.sh +rm fio +mv fio-copy fio +FIO=`rpm -qa fio | perl -pe 's/^fio-(.*)\.[^\.]+$/$1/'` +QEMU=`rpm -qa qemu | perl -pe 's/^qemu-(.*)\.[^\.]+$/$1/'` +perl -i -pe 's/(Requires:\s*fio)([^\n]+)?/$1 = '$FIO'/' $VITASTOR/rpm/vitastor.spec +perl -i -pe 's/(Requires:\s*qemu)([^\n]+)?/$1 = '$QEMU'/' $VITASTOR/rpm/vitastor.spec +tar --transform 's#^#vitastor-0.5/#' --exclude 'rpm/*.rpm' -czf $VITASTOR/../vitastor-0.5$(rpm --eval '%dist').tar.gz * diff --git a/rpm/prepare-env.sh b/rpm/prepare-env.sh new file mode 100755 index 000000000..f48088335 --- /dev/null +++ b/rpm/prepare-env.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Install/get required packages on CentOS 7 + +set -e + +rm -f /etc/yum.repos.d/CentOS-Media.repo +yum -y --enablerepo=extras install centos-release-scl epel-release yum-utils rpm-build qemu fio +yum -y --enablerepo='*' install devtoolset-9-gcc-c++ devtoolset-9-libatomic-devel gperftools-devel +yumdownloader --source qemu +yumdownloader --source fio +rpm --nomd5 -i qemu*.src.rpm +rpm --nomd5 -i fio*.src.rpm +cd ~/rpmbuild/SPECS +yum-builddep -y --enablerepo='*' qemu.spec +yum-builddep -y --enablerepo='*' fio.spec diff --git a/rpm/vitastor.spec b/rpm/vitastor.spec new file mode 100644 index 000000000..b27b398cb --- /dev/null +++ b/rpm/vitastor.spec @@ -0,0 +1,57 @@ +Name: vitastor +Version: 0.5 +Release: 1%{?dist} +Summary: Vitastor, a fast software-defined clustered block storage + +License: Vitastor Network Public License 1.0 +URL: https://vitastor.io/ +Source0: vitastor-0.5.el7.tar.gz + +BuildRequires: liburing-devel >= 0.6 +BuildRequires: gperftools-devel +BuildRequires: devtoolset-9-gcc-c++ +BuildRequires: rh-nodejs12 +BuildRequires: rh-nodejs12-npm +Requires: fio = 3.7-1.el7 +Requires: qemu = 2.0.0-1.el7.6 +Requires: rh-nodejs12 +Requires: rh-nodejs12-npm +Requires: liburing >= 0.6 + +%description +Vitastor is a small, simple and fast clustered block storage (storage for VM drives), +architecturally similar to Ceph which means strong consistency, primary-replication, +symmetric clustering and automatic data distribution over any number of drives of any +size with configurable redundancy (replication or erasure codes/XOR). + + +%prep +%setup -q + + +%build +. /opt/rh/devtoolset-9/enable +make %{?_smp_mflags} + + +%install +rm -rf $RPM_BUILD_ROOT +%make_install BINDIR=%_bindir LIBDIR=%_libdir QEMU_PLUGINDIR=%_libdir/qemu-kvm +. /opt/rh/rh-nodejs12/enable +cd mon +npm install +cd .. +cp -r mon %buildroot%_libdir/vitastor/mon + + +%files +%doc +%_bindir/vitastor-dump-journal +%_bindir/vitastor-nbd +%_bindir/vitastor-osd +%_bindir/vitastor-rm +%_libdir/qemu-kvm/block-vitastor.so +%_libdir/vitastor + + +%changelog