Most linux projects follow a similar release process, and to illustrate that, I will specifically describe the FSlint release process as depicted in the diagram above. Following is a presentation of the actual shell commands I run on my system to affect the releases to the various distributions. It's worth noting here that the config files used to create the packages for the linux distributions are maintained within the source tree of the FSlint project itself. However these config files are not included in the released source packages so that any changes specific to the distribution packages can be done independently of FSlint releases.
ver=2.22 #set the version referenced by the following commands
repositoryHosting your project on a public OSS hosting site is a very good idea. Some possible choices for project hosting are, SourceForge, Google, GNU or Berlios. Personally I don't like the structure of the SourceForge site, though it is improving lately. So I went with Google's project hosting as it became available when I was considering using a public hosting site for my project, and I really like Subversion.
Here we create the release in the google subversion repository and copy it locally.
cd ~/fslint/releases/ svn cp -m "tagging release $ver" \ https://fslint.googlecode.com/svn/trunk/ \ https://fslint.googlecode.com/svn/tags/$ver svn export https://fslint.googlecode.com/svn/tags/$ver fslint-$ver tar -c --exclude=debian --owner=root --numeric-owner fslint-$ver/ | gzip -9 > fslint-$ver.tar.gz rm -Rf fslint-$ver
fedoraFirst of all I build and sign an RPM for people who don't use the fedora package repositories, or want immediate access to the latest fedora package. Before Fedora 11 I did this:
sudo rpmbuild --sign -tb fslint-$ver.tar.gz cp -a /usr/src/redhat/RPMS/noarch/fslint-$ver-1.noarch.rpm .Since fedora 11 we need to do the following to create backwards compatible packages, that are hashed using md5 rather than sha256.
rpmbuild --sign -tb --define "_binary_filedigest_algorithm md5" fslint-$ver.tar.gz cp -a ~/rpmbuild/RPMS/noarch/fslint-$ver-1.noarch.rpm .Currently fedora uses a CVS repository and a higher level client to interact with the project. Until Fedora Core 6 this client was called "plague" but since F7 "koji" is used. I'm a fedora maintainer and so can affect releases to the devel branch and the various fedora releases directly, using the following commands.
cd ~/fslint/rpm/fedora/fslint/ export CVSROOT=":ext:email@example.com:/cvs/pkgs" export CVS_RSH="ssh" cvs update -dPA #update any build infrastructure changes export KOJI_FLAGS="--nowait" #release to rawhide (separate from below so as can check each step) ( cd devel cp -a ~/fslint/releases/fslint-$ver.tar.gz . make new-sources FILES="fslint-$ver.tar.gz" #manually update spec file with new version info make noarch #to test locally cvs commit -m "Update to $ver" make tag build #test remote build ) #check rawhide build info #release to versions for i in FC-6 F-7 F-8; do ( cd $i cp -al ../devel/fslint-$ver.tar.gz . #note file only actually uploaded once make new-sources FILES="fslint-$ver.tar.gz" cp -fal ../devel/fslint.spec . #make noarch cvs commit -m "Update to $ver" make tag build ) done #check FC5/FC6 build info #check F7 build info #Since the merge of Fedora Core and Extras in F7, we need to #explicitly push koji builds into a distro staging area (using bodhi)
debianI chroot to ubuntu from fedora and run the following, to create a source package. This also creates and signs a binary package for people who don't use debian, or want immediate access to the latest debian package.
ver=2.22 cd ~/fslint/releases/debian ln -s ../fslint-$ver.tar.gz fslint_$ver.orig.tar.gz tar xzf fslint_$ver.orig.tar.gz ( cd fslint-$ver svn export https://fslint.googlecode.com/svn/tags/$ver/debian dpkg-buildpackage -rfakeroot -tc -sa ) mv fslint_$ver-1_all.deb .. ln -s ../fslint_$ver-1_all.deb rm -Rf fslint-$verThe requirements of debian packages change often so it's important to use lintian to ensure conformance.
lintian -i -I -E fslint_$ver-1_all.deb lintian -i -I -E fslint_$ver-1.dscI'm not a debian maintainer, so I must upload my source package to mentors.debian.net as follows, and then wait for someone to sponsor the package, i.e. upload it to debian.
dput mentors *$ver*.changesI don't release directly to ubuntu, but they sync periodically with "Debian unstable". One can also request a sync from debian, or request sponsorship for non debian packages.
Publish to this site
cd .. && ./update.web $ver #update packages and sign checksums to local copy of site #manually edit ~/public_html/fslint/index.html cd ~/public_html && ./www.pixelbeat.org.sync #update public site
Publish to news sitesPossibly I could use an XML RPC interface to automate this, but I do releases infrequently enough, and the web forms are simple enough to do this manually. Currently I publish to freshmeat and gnomefiles from where it generally filters to other news sites.
© Jun 29 2007