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:
./update_all_pbuilders.sh
2. Setup keyring for signing packages
export GNUPGHOME=<path to keyring dir> # verify it's accessible gpg --list-keys
The release key should be present:
pub 4096R/17ED316D 2012-05-20 uid Ceph Release Key <sage@newdream.net>
3. Set up build area
Clone the ceph and ceph-build source trees:
git clone http://github.com/ceph/ceph.git git clone http://github.com/ceph/ceph-build.git
In the ceph source directory, checkout next branch (for point releases use the {codename} branch):
git checkout next
检出子模块:
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:
-AC_INIT([ceph], [0.54], [ceph-devel@vger.kernel.org]) +AC_INIT([ceph], [0.55], [ceph-devel@vger.kernel.org])
Update the version number in the debian change log:
DEBEMAIL user@host dch -v 0.xx-1
Commit the changes:
git commit -a
Tag the release:
../ceph-build/tag-release v0.xx
5. Create Makefiles
The actual configure options used to build packages are in the ceph.spec.in and debian/rules files. At this point we just need to create a Makefile.:
./do_autogen.sh
6. Run the release scripts
This creates tarballs and copies them, with other needed files to the build hosts listed in deb_hosts and rpm_hosts, runs a local build script, then rsyncs the results back to the specified release directory.:
../ceph-build/do_release.sh /tmp/release
7. Create RPM Repo
Copy the rpms to the destination repo:
mkdir /tmp/rpm-repo ../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 and and ceph-deploy. See RPM Backports section
Finally, sign the rpms and build the repo indexes:
../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:
mkdir /tmp/debian-repo ../ceph-build/gen_reprepro_conf.sh /tmp/debian-repo key-id ../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 and ceph-deploy. See the Debian Backports section below.
Debian packages are signed when added to the repo, so no further action is needed.
9. Push repos to ceph.org
For a development release:
rcp ceph-0.xx.tar.bz2 ceph-0.xx.tar.gz \ ceph_site@ceph.com:ceph.com/downloads/. rsync -av /tmp/rpm-repo/0.xx/ ceph_site@ceph.com:ceph.com/rpm-testing 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):
rcp ceph-0.xx.tar.bz2 \ ceph_site@ceph.com:ceph.com/downloads/ceph-0.xx.tar.bz2 rcp ceph-0.xx.tar.gz \ ceph_site@ceph.com:ceph.com/downloads/ceph-0.xx.tar.gz rsync -av /tmp/rpm-repo/0.xx/ ceph_site@ceph.com:ceph.com/rpm-{CODENAME} 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 the branch and the new tag:
git push origin {codename} git push origin v0.xx
Development and Stable releases
For a development release, update tags for ceph.git:
git push origin v0.xx git push origin HEAD:last git checkout master git merge next git push origin master git push origin HEAD:next
Similarly, for a development release, for both teuthology.git and ceph-qa-suite.git:
git checkout master git reset --hard origin/master git branch -f last origin/next git push -f origin last git push -f origin master:next