upload - Debian Perl Group uploading how-to


Some of the steps here are svn-specific. For git please look into The rest of Russ' how-to is still very helpful ... -- gregoa


The Debian Perl Group has a lot of active contributors, many of whom are not full Debian Developers and hence do not have upload privileges. One of the main ways that Debian Developers can help the group is to upload pending updates from Subversion, either after a request on the group mailing list or after looking at and seeing packages in need of uploading.

This step-by-step tutorial lays out one way of processing an upload, suggesting verification steps and checks. It covers uploading work that's already been committed to the Subversion repository and doesn't cover how to do new work, create new packages, or upgrade packages to new upstream versions.

Note that packages should only be uploaded if the distribution in the changelog header is already set to unstable. Packages with a distribution of UNRELEASED are still being worked on and shouldn't be uploaded without confirmation from the person who made the last changes or someone who regularly works on that package.

Uploading steps

Create a working area

Create a working area if you haven't done this before and cd into it. From this point on, I'll assume that all actions take place in that working area. I find it useful to create a directory only for Debian Perl Group work separate from the rest of my Debian work.

In that working area, create subdirectories:

   mkdir build-area tarballs old

The first two are used by svn-buildpackage. The last is used below for package comparisons.

Check out the package

Check out a package from the repository that you're going to upload:

   svn co svn+ssh://<package>

This will check it out into a directory named after the package inside your working area, which is what you want. Be sure to not add a username before (no user@). If you do, svn-buildpackage --svn-tag will fail later. Instead, if your local username doesn't match your username on, edit ~/.ssh/config and add a stanza like:

       User <user>

where <user> is your username on

Review the changes and update Uploaders

Review debian/changelog to understand what you're uploading.

If you're not already in Uploaders, add yourself.

Update the signature and timestamp for the package with:

    dch -e

(and then exit the editor if you don't need to change anything else). This will also change the signature of the most recent changelog entry to you.

Commit those changes with svn commit.

Download the upstream tarball

Download the upstream tarball. If this is just a Debian revision of a package already in the archive, do that with:

    cd tarballs
    apt-get -t unstable source -d --tar-only <package>

Otherwise, cd to the package directory and run:

    uscan --force-download --rename --destdir ../tarballs

and double-check that the upstream URL from which uscan downloaded the tarball looks reasonable.

Build the package

Build the package with:


(I assume that your ~/.svn-buildpackage.conf file is already set up with the options you want to use, set up to build in an unstable chroot if needed, and so forth.)

Do a basic sanity check on the package

Go to the build-area directory and do a basic sanity check on the package:

       lintian -iI *.changes
       lsdiff -z *.diff.gz
       debc *.changes

lsdiff (from the patchutils package) will tell you if there are any changes outside of the debian directory; if so, they may be accidental or the package maybe should use quilt, but in any case they're worthy of special review. debc shows you the metadata (dpkg -I) and contents (dpkg -c) for each built package.

Compare against previous version

If the package already exists in the archive, see what changed. Go to the old directory created above, and then download the current package:

    apt-get -t unstable source -d <package>

(Obviously, do this on a system with unstable in the apt sources.list.) Then cd up one directory, to the top of your working directory, and compare the new and old package with debdiff:

    debdiff old/*.dsc build-area/*.dsc | less

For the wildcards to work, you'll need to delete the contents of your build-area and old directories after you finish with each package. Make sure the changes look reasonable.

Upload the package

debsign the *.changes file in build-area and the dput or dupload it to the archive.

Tag the package

Change directories back to the checkout of the package and tag it:

    svn-buildpackage --svn-tag --svn-tag-only

Be sure that you've configured svn-buildpackage not to modify debian/changelog after a tag, or if you haven't, add the --svn-noautodch flag.





Copyright (c) 2007 by the individual authors and contributors noted above. All rights reserved. This document is free software; you may redistribute it and/or modify it under the same terms as Perl itself

Perl is distributed under your choice of the GNU General Public License or the Artistic License. On Debian GNU/Linux systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL and the Artistic License in /usr/share/common-licenses/Artistic.