rpm: Enable creation of RPMs

This is the first step.  I have confirmed that I can install,
update, and remove.  I have also setup the ability for Jenkins
to pass the BuildNumber and use that value as the release
number for the RPM.

The RPM depends on Grizzly(1.8.0) Swift from OpenStack.  To verify
you may need to add the appropiate repo file to your Fedora/RHEL system:
http://repos.fedorapeople.org/repos/openstack/openstack-grizzly

I have not had the opportunity to test that G4S itself works
once installed, but I plan on doing that as the next phase.

Change-Id: Ib90f335f5e1e4fc552c32e00ff29b6e8a680c42a
Signed-off-by: Luis Pabon <lpabon@redhat.com>
Reviewed-on: http://review.gluster.org/5006
Reviewed-by: Peter Portante <pportant@redhat.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Tested-by: Kaleb KEITHLEY <kkeithle@redhat.com>
This commit is contained in:
Luis Pabon 2013-05-14 15:50:49 -04:00 committed by Peter Portante
parent 99d0250a57
commit 952a240852
6 changed files with 155 additions and 11 deletions

8
README
View File

@ -19,4 +19,10 @@ Command to stop the servers (TBD)
swift-init main stop swift-init main stop
Command to gracefully reload the servers Command to gracefully reload the servers
swift-init main reload swift-init main reload
Building RPMs. RPMs will be located in the 'build' directory.
$ bash makerpm.sh
Building RPM with a specific release value, useful for automatic Jenkin builds
$ PROG_RELEASE=123 bash makerpm.sh

View File

@ -1,10 +1,18 @@
""" Gluster Swift UFO """ """ Gluster for Swift """
class Version(object): class PkgInfo(object):
def __init__(self, canonical_version, final): def __init__(self, canonical_version, name, final):
self.canonical_version = canonical_version self.canonical_version = canonical_version
self.name = name
self.final = final self.final = final
def save_config(self, filename):
"""Crates a file with the package configuration
which can be sourced by a bash script"""
with open(filename, 'w') as fd:
fd.write("PKG_NAME=%s\n" % self.name)
fd.write("PKG_VERSION=%s\n" % self.canonical_version)
@property @property
def pretty_version(self): def pretty_version(self):
if self.final: if self.final:
@ -13,6 +21,9 @@ class Version(object):
return '%s-dev' % (self.canonical_version,) return '%s-dev' % (self.canonical_version,)
_version = Version('1.1', False) ###
__version__ = _version.pretty_version ### Change the Package version here
__canonical_version__ = _version.canonical_version ###
_pkginfo = PkgInfo('1.8.0', 'glusterfs-openstack-swift', False)
__version__ = _pkginfo.pretty_version
__canonical_version__ = _pkginfo.canonical_version

View File

@ -15,11 +15,17 @@
%endif %endif
%define _confdir %{_sysconfdir}/swift %define _confdir %{_sysconfdir}/swift
%define _version 1.3
%define _release 0 # The following values are provided by passing the following arguments
# to rpmbuild. For example:
# --define "_version 1.0" --define "_release 1" --define "_name g4s"
#
%{!?_version:%define _version XXX}
%{!?_release:%define _release XXX}
%{!?_name:%define _name XXX}
Summary : GlusterFS Integration with OpenStack Object Storage (Swift). Summary : GlusterFS Integration with OpenStack Object Storage (Swift).
Name : gluster-for-swift Name : %{_name}
Version : %{_version} Version : %{_version}
Release : %{_release} Release : %{_release}
Group : Application/File Group : Application/File
@ -61,6 +67,9 @@ cp -r etc/* %{buildroot}/%{_confdir}/
mkdir -p %{buildroot}/%{_bindir}/ mkdir -p %{buildroot}/%{_bindir}/
cp bin/gluster-swift-gen-builders %{buildroot}/%{_bindir}/ cp bin/gluster-swift-gen-builders %{buildroot}/%{_bindir}/
# Remove tests
%{__rm} -rf %{buildroot}/%{python_sitelib}/test
%clean %clean
rm -rf %{buildroot} rm -rf %{buildroot}

110
makerpm.sh Normal file
View File

@ -0,0 +1,110 @@
#!/bin/bash
# Simple script to create RPMs for G4S
cleanup()
{
rm -rf ${RPMBUILDDIR} > /dev/null 2>&1
rm -f ${PKGCONFIG} > /dev/null 2>&1
}
fail()
{
cleanup
echo $1
exit $2
}
create_dir()
{
if [ ! -d "$1" ] ; then
mkdir -p "$1"
if [ $? -ne 0 ] ; then
fail "Unable to create dir $1" $?
fi
fi
}
gittotar()
{
# Only archives committed changes
git archive --format=tar.gz --prefix=${SRCTAR_DIR}/ HEAD --output ${SRCTAR}
if [ $? -ne 0 ] ; then
fail "Unable to create git archive" $?
fi
}
prep()
{
rm -rf ${RPMBUILDDIR} > /dev/null 2>&1
create_dir ${RPMBUILDDIR}
# Create a tar file out of the current committed changes
gittotar
}
create_rpm()
{
# Create the rpm
# _topdir Notifies rpmbuild the location of the root directory
# containing the RPM information
# _release Allows Jenkins to setup the version using the
# build number
rpmbuild --define "_topdir ${RPMBUILDDIR}" \
--define "_release ${PKG_RELEASE}" \
--define "_version ${PKG_VERSION}" \
--define "_name ${PKG_NAME}" \
-ta ${SRCTAR}
if [ $? -ne 0 ] ; then
fail "Unable to create rpm" $?
fi
# Move the rpms to the root directory
mv ${RPMBUILDDIR_RPMS}/noarch/*rpm ${BUILDDIR}
if [ $? -ne 0 ] ; then
fail "Unable to move rpm to ${BUILDDIR}" $?
fi
echo "RPMS are now available in ${BUILDDIR}"
}
################## MAIN #####################
# Create a config file with the package information
PKGCONFIG=${PWD}/pkgconfig.in
env python pkgconfig.py
if [ ! -f "${PKGCONFIG}" ] ; then
fail "Unable to create package information file ${PKGCONFIG}" 1
fi
# Get PKG_NAME and PKG_VERSION
. ${PKGCONFIG}
if [ -z "${PKG_NAME}" ] ; then
fail "Unable to read the package name from the file created by pkgconfig.py" 1
fi
if [ -z "${PKG_VERSION}" ] ; then
fail "Unable to read the package version from the file created by pkgconfig.py" 1
fi
#
# This can be set by JENKINS builds
# If the environment variable PKG_RELEASE
# has not been set, then we set it locally to
# a default value
#
if [ -z "$PKG_RELEASE" ] ; then
PKG_RELEASE=0
fi
BUILDDIR=$PWD/build
RPMBUILDDIR=${BUILDDIR}/rpmbuild
RPMBUILDDIR_RPMS=${RPMBUILDDIR}/RPMS
SRCNAME=${PKG_NAME}-${PKG_VERSION}-${PKG_RELEASE}
SRCTAR_DIR=${PKG_NAME}-${PKG_VERSION}
SRCTAR=${RPMBUILDDIR}/${SRCNAME}.tar.gz
prep
create_rpm
cleanup

8
pkgconfig.py Normal file
View File

@ -0,0 +1,8 @@
# Simple program to save all package information
# into a file which can be sourced by a bash script
from gluster.swift import _pkginfo as pkginfo
PKGCONFIG='pkgconfig.in'
pkginfo.save_config(PKGCONFIG)

View File

@ -29,7 +29,7 @@ setup(
license='Apache License (2.0)', license='Apache License (2.0)',
author='Red Hat, Inc.', author='Red Hat, Inc.',
author_email='gluster-users@gluster.org', author_email='gluster-users@gluster.org',
url='https://gluster.org/', url='https://forge.gluster.org/gluster-swift',
packages=find_packages(exclude=['test', 'bin']), packages=find_packages(exclude=['test', 'bin']),
test_suite='nose.collector', test_suite='nose.collector',
classifiers=[ classifiers=[