Ceph Release Process

1. Build environment

There are multiple build environments, debian based packages are built via pbuilder for multiple distributions. The build hosts are listed in the deb_hosts file, and the list of distributions are in deb_dist. All distributions are build on each of the build hosts. Currently there is 1 64 bit and 1 32 bit build host.

The RPM based packages are built natively, so one distribution per build host. The list of hosts is found in rpm_hosts.

Prior to building, it’s necessary to update the pbuilder seed tarballs:

  1. ./update_all_pbuilders.sh

2. Setup keyring for signing packages

  1. export GNUPGHOME=<path to keyring dir>
  2.  
  3. # verify it's accessible
  4. gpg --list-keys

The release key should be present:

  1. pub 4096R/17ED316D 2012-05-20
  2. uid Ceph Release Key <sage@newdream.net>

3. Set up build area

Clone the ceph and ceph-build source trees:

  1. git clone http://github.com/ceph/ceph.git
  2. git clone http://github.com/ceph/ceph-build.git

In the ceph source directory, checkout next branch (for point releases use the {codename} branch):

  1. git checkout next

Checkout the submodules:

  1. git submodule update --force --init --recursive

4. Update Build version numbers

Substitute the ceph release number where indicated below by the string 0.xx.

Edit configure.ac and update the version number. Example diff:

  1. -AC_INIT([ceph], [0.54], [ceph-devel@vger.kernel.org])
  2. +AC_INIT([ceph], [0.55], [ceph-devel@vger.kernel.org])

Update the version number in the debian change log:

  1. DEBEMAIL user@host dch -v 0.xx-1

Commit the changes:

  1. git commit -a

Tag the release:

  1. ../ceph-build/tag-release v0.xx

5. Create Makefiles

The actual configure options used to build packages are in theceph.spec.in and debian/rules files. At this point we justneed to create a Makefile.:

  1. ./do_autogen.sh

6. Run the release scripts

This creates tarballs and copies them, with other needed files tothe build hosts listed in deb_hosts and rpm_hosts, runs a local buildscript, then rsyncs the results back to the specified release directory.:

  1. ../ceph-build/do_release.sh /tmp/release

7. Create RPM Repo

Copy the rpms to the destination repo:

  1. mkdir /tmp/rpm-repo
  2. ../ceph-build/push_to_rpm_repo.sh /tmp/release /tmp/rpm-repo 0.xx

Next add any additional rpms to the repo that are needed such as leveldb andand ceph-deploy. See RPM Backports section

Finally, sign the rpms and build the repo indexes:

  1. ../ceph-build/sign_and_index_rpm_repo.sh /tmp/release /tmp/rpm-repo 0.xx

8. Create Debian repo

The key-id used below is the id of the ceph release key from step 2:

  1. mkdir /tmp/debian-repo
  2. ../ceph-build/gen_reprepro_conf.sh /tmp/debian-repo key-id
  3. ../ceph-build/push_to_deb_repo.sh /tmp/release /tmp/debian-repo 0.xx main

Next add any addition debian packages that are needed such as leveldb andceph-deploy. See the Debian Backports section below.

Debian packages are signed when added to the repo, so no further action isneeded.

9. Push repos to ceph.org

For a development release:

  1. rcp ceph-0.xx.tar.bz2 ceph-0.xx.tar.gz \
  2. ceph_site@ceph.com:ceph.com/downloads/.
  3. rsync -av /tmp/rpm-repo/0.xx/ ceph_site@ceph.com:ceph.com/rpm-testing
  4. rsync -av /tmp/debian-repo/ ceph_site@ceph.com:ceph.com/debian-testing

For a stable release, replace {CODENAME} with the release codename (e.g., argonaut or bobtail):

  1. rcp ceph-0.xx.tar.bz2 \
  2. ceph_site@ceph.com:ceph.com/downloads/ceph-0.xx.tar.bz2
  3. rcp ceph-0.xx.tar.gz \
  4. ceph_site@ceph.com:ceph.com/downloads/ceph-0.xx.tar.gz
  5. rsync -av /tmp/rpm-repo/0.xx/ ceph_site@ceph.com:ceph.com/rpm-{CODENAME}
  6. rsync -auv /tmp/debian-repo/ ceph_site@ceph.com:ceph.com/debian-{CODENAME}

10. Update Git

Point release

For point releases just push the version number update to thebranch and the new tag:

  1. git push origin {codename}
  2. git push origin v0.xx

Development and Stable releases

For a development release, update tags for ceph.git:

  1. git push origin v0.xx
  2. git push origin HEAD:last
  3. git checkout master
  4. git merge next
  5. git push origin master
  6. git push origin HEAD:next

Similarly, for a development release, for both teuthology.git and ceph-qa-suite.git:

  1. git checkout master
  2. git reset --hard origin/master
  3. git branch -f last origin/next
  4. git push -f origin last
  5. git push -f origin master:next