]> git.apps.os.sepia.ceph.com Git - ceph-build.git/commitdiff
ceph-build: Initial version of scripts for rpm release. wip-rpm-release
authorGary Lowell <glowell@inktank.com>
Mon, 24 Sep 2012 16:41:59 +0000 (09:41 -0700)
committerGary Lowell <glowell@inktank.com>
Mon, 24 Sep 2012 16:41:59 +0000 (09:41 -0700)
build_rpms.sh [new file with mode: 0755]
do_rpm_release.sh [new file with mode: 0755]
gen_yum_repo.sh [new file with mode: 0755]
release_rpm_tarball.sh [new file with mode: 0755]
sign_rpms.sh [new file with mode: 0755]

diff --git a/build_rpms.sh b/build_rpms.sh
new file mode 100755 (executable)
index 0000000..c1c34f3
--- /dev/null
@@ -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 (executable)
index 0000000..a1e6499
--- /dev/null
@@ -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 (executable)
index 0000000..5526bf3
--- /dev/null
@@ -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 <<EOF > $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 <glowell@inktank.com> - 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 <<EOF > $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 (executable)
index 0000000..08108a5
--- /dev/null
@@ -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 (executable)
index 0000000..e7d714a
--- /dev/null
@@ -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