From 82cf330d41bd8f2d9a6934034170e73ed7c06539 Mon Sep 17 00:00:00 2001 From: Gary Lowell Date: Mon, 24 Sep 2012 09:41:59 -0700 Subject: [PATCH] ceph-build: Initial version of scripts for rpm release. --- build_rpms.sh | 45 ++++++++++++++++ do_rpm_release.sh | 65 ++++++++++++++++++++++++ gen_yum_repo.sh | 113 +++++++++++++++++++++++++++++++++++++++++ release_rpm_tarball.sh | 67 ++++++++++++++++++++++++ sign_rpms.sh | 32 ++++++++++++ 5 files changed, 322 insertions(+) create mode 100755 build_rpms.sh create mode 100755 do_rpm_release.sh create mode 100755 gen_yum_repo.sh create mode 100755 release_rpm_tarball.sh create mode 100755 sign_rpms.sh diff --git a/build_rpms.sh b/build_rpms.sh new file mode 100755 index 00000000..c1c34f37 --- /dev/null +++ b/build_rpms.sh @@ -0,0 +1,45 @@ +#!/bin/sh -x + +set -e + +usage() { + echo "usage: $0 releasedir vers [debsubver] [dists...]" +} + +releasedir=$1 +cephver=$2 +subver=$3 +shift +shift +shift +dists="$*" + +[ -z "$releasedir" ] && echo specify releasedir && usage && exit 1 +[ -z "$cephver" ] && echo specify version && usage && exit 1 +[ -z "$subver" ] && subver=1 +[ -z "$dists" ] && dists="centos6" + +bindir=`dirname $0` +echo "$bindir" | grep -v -q '^/' && bindir=`pwd`"/$bindir" + +rpmver="$cephver-$subver" + +echo rpmver $rpmver + +cd $releasedir/$cephver || exit 1 + +# take note XXX debian version keeping here just in case +echo $dists > rpm_dists +echo $rpmver > rpm_version + +# Set up build area +BUILDAREA=./rpmbuild +mkdir -p ${BUILDAREA}/{SOURCES,SRPMS,SPECS,RPMS,BUILD} +cp -a ceph-*.tar.bz2 ${BUILDAREA}/SOURCES/. + +# Build RPMs +BUILDAREA=`readlink -fn ${BUILDAREA}` ### rpm wants absolute path +rpmbuild -bb --define "_topdir ${BUILDAREA}" --define "_unpackaged_files_terminate_build 0" ceph.spec + +rm -r ceph-$cephver +echo done diff --git a/do_rpm_release.sh b/do_rpm_release.sh new file mode 100755 index 00000000..a1e64992 --- /dev/null +++ b/do_rpm_release.sh @@ -0,0 +1,65 @@ +#!/bin/sh -x + +set -e +trap cleanup INT EXIT + +default_dists="centos6" # just 1 so far +subversion="1" # not used so far +gpgkey='3CF7ABC8' # ceph rpm test key +#rhosts="localhost 192.168.106.235" +rhosts="localhost" +versionfile="" + +cleanup() { + [ -n "$pids" ] && kill $pids + rm $versionfile + [ -n "$vers" ] && rm -rf $releasedir/$vers +} + +usage() { + echo "usage: $0 releasedir [dists]" +} + +bindir=`dirname $0` +releasedir=$1 +shift || true +dists="$*" + +[ -z "$releasedir" ] && usage && exit 1 +[ -z "$dists" ] && dists=$default_dists + +versionfile=`mktemp` +rm $releasedir/* || true + +$bindir/release_rpm_tarball.sh $releasedir $versionfile +vers=`cat $versionfile` +echo "vers = $vers" + +cp ceph.spec $releasedir/$vers/. +$bindir/build_rpms.sh $releasedir $vers $subversion $dists + +$bindir/sign_rpms.sh $releasedir $vers $gpgkey + +$bindir/gen_yum_repo.sh $releasedir/$vers $gpgkey $dists + +# stage the results +rpmdir=$releasedir/$vers/rpmbuild +for dir in $dists +do + distdir=$releasedir/$vers/$dir + mkdir -p $distdir + cp -a $rpmdir/RPMS/* $distdir/. +done +rm -rf $rpmdir + +# Notes: The debian version at this points run the build on several remote +# hosts (pbuilders ?) and syncs the results back. +# rsync -auv root@$rem:/tmp/release/$vers/\*.\{changes\,deb\} $releasedir/$vers +# This version builds locally. We will sort out what machine we actually +# build on later. + +rm $versionfile + +trap true INT EXIT + +exit 0 diff --git a/gen_yum_repo.sh b/gen_yum_repo.sh new file mode 100755 index 00000000..5526bf31 --- /dev/null +++ b/gen_yum_repo.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +# +# Generate the files neccessary for a yum repo conf rpm. +# Needs to be run after all the RPMs are built. + +usage() { + echo "usage: $0 releasedir keyid [repo-host]" +} + +release_dir="$1" +keyid="$2" +repo_host="$3" + +[ -z "$release_dir" ] && echo specify release directory && exit 1 +#[ -z "$keyid" ] && echo specify keyid && exit 1 + +# For testing +[ -z "$keyid" ] && keyid=3CF7ABC8 +[ -z "$repo_host" ] && repo_host="gitbuilder-centos6-amd64" + +# +RPMBUILD=$release_dir/rpmbuild + +# Spec File +cat < $RPMBUILD/SPECS/ceph-release.spec +Name: ceph-release +Version: 1 +Release: 0 +Summary: Ceph repository configuration +Group: System Environment/Base +License: GPLv2 +URL: http://download.ceph.com/pub/ceph +Source0: RPM-GPG-KEY-CEPH +Source1: ceph.repo +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch + +%description +This package contains the Ceph repository GPG key as well as configuration +for yum and up2date. + +%prep + +%setup -q -c -T +install -pm 644 %{SOURCE0} . +install -pm 644 %{SOURCE1} . + +%build + +%install +rm -rf %{buildroot} +install -Dpm 644 %{SOURCE0} \ + %{buildroot}/%{_sysconfdir}/pki/rpm-gpg/RPM-GPG-KEY-CEPH +install -dm 755 %{buildroot}/%{_sysconfdir}/yum.repos.d +install -pm 644 %{SOURCE1} \ + %{buildroot}/%{_sysconfdir}/yum.repos.d + +%clean +#rm -rf %{buildroot} + +%post + +%postun + +%files +%defattr(-,root,root,-) +#%doc GPL +%config(noreplace) /etc/yum.repos.d/* +/etc/pki/rpm-gpg/* + +%changelog +* Tue Aug 27 2011 Gary Lowell - 1-0 +- Initial Package +EOF +# End of ceph-release.spec file. + +# GPG Key +gpg --export --armor $keyid > $RPMBUILD/SOURCES/RPM-GPG-KEY-CEPH +chmod 644 $RPMBUILD/SOURCES/RPM-GPG-KEY-CEPH + +# Install ceph.repo file +cat < $RPMBUILD/SOURCES/ceph.repo +[ceph] +name=Ceph +baseurl=http://gitbuilder-centos6-amd64.front.sepia.ceph.com/rpms/centos6/\$basearch +failovermethod=priority +enabled=1 +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CEPH +EOF +# End of ceph.repo file + +# Build RPMs +echo "$RPMBUILD" | grep -v -q '^/' && \ + RPMBUILD=`readlink -fn ${RPMBUILD}` ### rpm wants absolute path + +rpmbuild -bb --define "_topdir ${RPMBUILD}" --define "_unpackaged_files_terminate_build 0" ${RPMBUILD}/SPECS/ceph-release.spec + +# Package builds as noarch, but we want to move it to x86_64 for centos. +mv ${RPMBUILD}/RPMS/noarch/ceph*.rpm ${RPMBUILD}/RPMS/x86_64/. +[ "$(ls -A ${RPMBUILD}/RPMS/noarch)" ] || rmdir ${RPMBUILD}/RPMS/noarch + +# Construct repodata +for dir in $RPMBUILD/RPMS/* +do + if [ -d $dir ] ; then + createrepo $dir + gpg --detach-sign --armor -u $keyid $dir/repodata/repomd.xml + fi +done + +exit 0 diff --git a/release_rpm_tarball.sh b/release_rpm_tarball.sh new file mode 100755 index 00000000..08108a56 --- /dev/null +++ b/release_rpm_tarball.sh @@ -0,0 +1,67 @@ +#!/bin/bash -x + +set -e + +usage() { + echo "usage: $0 releasedir [versionfile]" +} + +releasedir=$1 +versionfile=$2 + +[ -z "$releasedir" ] && echo specify releasedir && usage && exit 1 + +if git diff --quiet ; then + echo repository is clean +else + echo + echo "**** REPOSITORY IS DIRTY ****" + echo + if [ "$force" != "force" ]; then + echo "add 'force' argument if you really want to continue." + exit 1 + fi + echo "forcing." +fi + +cephver=`git describe | cut -c 2-` +echo current version $cephver + +srcdir=`pwd` + +if [ -d "$releasedir/$cephver" ]; then + echo "$releasedir/$cephver already exists; reuse that release tarball" +else + echo building tarball + rm ceph-*.tar.gz || true + rm ceph-*.tar.bz2 || true + make dist + make dist-bzip2 + + vers=`ls ceph-*.tar.gz | cut -c 6- | sed 's/.tar.gz//'` + echo tarball vers $vers + + echo extracting + mkdir -p $releasedir/$cephver + cd $releasedir/$cephver + + tar zxf $srcdir/ceph-$vers.tar.gz + [ "$vers" != "$cephver" ] && mv ceph-$vers ceph-$cephver + + tar zcf ceph_$cephver.orig.tar.gz ceph-$cephver + cp -a ceph_$cephver.orig.tar.gz ceph-$cephver.tar.gz + + # need bz2 tarball to match name in spec file + cp -a $srcdir/ceph-$vers.tar.bz2 . + + # copy debian dir, too + # cp -a $srcdir/debian debian + # cd $srcdir +fi + +if [ -n "$versionfile" ]; then + echo $cephver > $versionfile + echo "wrote $cephver to $versionfile" +fi + +echo "done." diff --git a/sign_rpms.sh b/sign_rpms.sh new file mode 100755 index 00000000..e7d714a4 --- /dev/null +++ b/sign_rpms.sh @@ -0,0 +1,32 @@ +#!/bin/bash -x + +set -e + +usage() { + echo "usage: $0 releasedir vers key [filetypetosign]" +} + +releasedir=$1 +cephvers=$2 +keyid=$3 +what=$4 + +[ -z "$what" ] && what="dsc changes" + +[ -z "$releasedir" ] && echo specify releasedir && usage && exit 1 +[ -z "$cephvers" ] && echo specify version && usage && exit 1 +[ ! -d "$releasedir/$cephvers" ] && echo missing $releasedir/$cephvers && usage && exit 1 + +[ -z "$keyid" ] && echo specify keyid && exit 1 + +echo version $cephvers key $keyid + +# Sign all the RPMs +rpm_list=`find $releasedir/$cephvers -name "*.rpm" -print` +rpm --addsign --define "_gpg_name $keyid" $rpm_list + +# Sign the repository +#for repo in `find $releasedir/$cephvers -type d -name "repodata" -print` +#do +# gpg --detach-sign --armor -u $keyid $repo/repomd.xml +#done -- 2.39.5