Perl Group - New Contributor

(!) This is an incomplete document. I'm building this out while I learn the steps as a new contributor in the Perl Group.

(!) This is not where this document belongs. After is it sufficiently worked out, it'll be moved to a more appropriate place.

Joining the Perl Group

  1. Join the IRC channel #debian-perl at and lurk.

  2. Create a new user on Alioth.

    • Make sure you use an email address that you're okay with the world being able to see. You might get more spam at this address. Same goes with the below steps (you should probably use the same email address for the email list memberships below).
  3. Join the debian-perl mailing list.

  4. Join the pkg-perl-maintainers mailing list.

  5. Send an email to the debian-perl mailing list. Include these things:

    • An appropriate subject line in your email. Something like "Request to join Perl Group" might be sufficient.
    • Your newly created username on Alioth (it probably ends in -guest; if it does, include that part too)

    • A brief description of yourself, your goals with debian-perl, personal experience, and whatever else to get to know you.
  6. Wait until you get an email letting you know that someone added you to the group. (You are now officially part of the group!)
  7. Use IRC or the debian-perl mailing list to ask questions if you can't find the answer elsewhere (but try to look elsewhere first).

What can I do?

Packaging a new Perl Module (not already packaged in Debian)

  1. Start with an installation of Debian that is upgraded to unstable. You'll have better tools and it's more in-line with where your package will end up anyway.

    • No, really. The tools are amazing. You should upgrade to unstable before you do anything else in this process.

    • Modify your /etc/apt/sources.list file to change stable or lenny to unstable, then do an apt-get update && apt-get dist-upgrade.

    • You might prefer using a virtual machine to do this work instead of upgrading your whole computer to unstable. You can use many different virtualization systems to do this (like VirtualBox, KVM, Xen, OpenVZ, etc).

  2. Choose a module that you want to package.
  3. The package name will be libyour-perl-module-name-perl. If your module is Super::Fun::Thing, it would be libsuper-fun-thing-perl.

  4. Check to see if it's already been packaged.
    • See (replacing the libsuper-fun-thing-perl part with the appropriate package name).

      • If it exists, you don't need to package a new one.
  5. Check to see if someone else has filed an ITP (Intent to Package) bug for this package at WNPP ITP.

    • If they haven't, go on to step #6.
    • If they have, you probably can't work on it.
    • You can takeover the ITP by emailing the owner of the ITP and waiting for a response.
      • If you get a response and they don't want to give up the ITP, you can't work on it.
      • If you don't get a response in about 3 weeks, it's usually okay to take ownership of the ITP.
        • To takeover the ITP (after you've confirmed that you should do so), send an email to and BCC (replace 99999999 in that address (as well as everything below) with the ITP bug id).

          • owner 99999999 !
            Your explanation of why you're taking over the bug (and that you got permission from the current owner or that they never responded).
          • See BTS Server Control if you need other things to happen at the same time, like changing the bug's subject, etc.

          • If you takeover the ITP, skip step #6.
  6. File an ITP bug for this new package.
    • Read WNPP (Work-Needing and Prospective Packages) for instructions on how to do this.

    • Available Methods: (pick one)

      • Recommended: Use reportbug --email your@email.address.tld wnpp as a non-root user (replace the fake email address with the real one that was used to create your Alioth user account).

        • Make sure you choose the ITP choice when you are asked for it.

      • Send it by email yourself (see the WNPP page linked above for info).
  7. Make sure you have svn-buildpackage installed.

    • As non-root: sudo apt-get install svn-buildpackage

    • Or as root: same, but without the sudo.

  8. Make sure your apt-file information is updated.

    • As non-root: sudo apt-file update

    • Or as root: same, but without the sudo.

  9. Set your DEBFULLNAME and DEBEMAIL environment variables.

    • DEBFULLNAME is the packager's name that will show up in the package (set it to yours, like so: export DEBFULLNAME="John Doe").

    • DEBEMAIL is the packager's email address that will show up in the package (set it to your Alioth email address, like so: export DEBEMAIL="john@doe.tld").

    • You could stuff this into your ~/.profile file so you don't have to do this over and over again (and run: source ~/.profile).

  10. Get the initial packaging done with dh-make-perl.

    • To make the package from a module on the CPAN: dh-make-perl --pkg-perl --cpan Super-Fun-Thing (replacing Super-Fun-Thing of course)

    • To make a package from your local system: dh-make-perl --pkg-perl /path/to/the/unpacked/source/dir (it'll read the META.yml or Makefile.PL in that directory to figure out the package name)

  11. Fix anything that obviously needs fixed:
    1. Make a nice description for the package in debian/control (could possibly use what is listed in the POD, README, or on the CPAN, but clean it up if you need to).

    2. Put the appropriate copyright info in debian/copyright.

    3. Declare in debian/changelog that you are closing an ITP bug (if it didn't do it for you automatically).

      • Change "* Initial Release." to "* Initial Release. (closes: Bug#99999999)" (using the appropriate ITP bug id).

  12. Polish, polish, polish (make it squeaky clean and better, not speak the language of Poland).
  13. Declare the package ready for review:
    • If you're not ready, skip to the next step (which means you'll leave it as UNRELEASED).

    • If you're ready:
      • Change directory to either Super-Fun-Thing-0.01 (if you haven't ran svn-inject for this package) or libsuper-fun-thing-perl (if you have already ran svn-inject before for this package),

      • Run dch -r to change UNRELEASED to unstable in debian/changelog.

      • Change back to the parent directory (cd ..).

  14. Build a source package:
    • Run: dpkg-source -b Super-Fun-Thing-0.01 (or if you've already ran svn-inject before, run: dpkg-source -b libsuper-fun-thing-perl instead).

  15. Use lintian to make sure you don't have any obvious packaging problems.

    • Example: lintian libsuper-fun-thing-perl_0.01-1.dsc (Run lintian on your generated .dsc file).

    • Run lintian with the --pedantic flag instead as a bonus.

    • Fix any problems that lintian complained about and try running lintian again (after you re-run step #14). Keep doing this until lintian is happy with you.

  16. Upload:
    • For the first time that this package has been uploaded, use svn-inject into pkg-perl SVN.

      • Run: svn-inject -l 2 --setprops libsuper-fun-thing-perl_0.01-1.dsc svn+ssh:// (replace the *.dsc file with the one you made).

    • For each time after, use svn ci to sync your changes to the pkg-perl SVN.

      • Change directory to libsuper-fun-thing-perl (well, the name of your package), then:

      • Run: svn ci to upload your changes into pkg-perl SVN.

      • Change back to the parent directory (cd ..).

  17. Repeat the above steps starting at #12 until all reviewers' notes are fixed or satisfied.
  18. Wait for NEW review.

Updating an existing package

Renaming an existing package