From Debian, with ♥ to the Perl community
Outline ♥ Debian and the Debian Perl Group ♥ How to make our lives even easier ♥ Maintaining Perl distributions as Debian packages
Debian ♥ Free Operating System ♥ a.k.a. "Linux Distribution" ♥ since 1993 ♥ as of Aug 21, 2016: 25_806 source packages 51_848 binary amd64 packages
Debian Perl Group ♥ since 2004 ♥ Our goal: Constantly improve the coverage of available Perl modules in Debian. ♥ 3_215 of 3_476 lib.*-perl packages ♥ 127 members ♥ 73 committers last 2 years ♥ We don't maintain perl itself
I believe that the core, beautiful, exciting thing that we do inside Debian, and that any other excellent Linux distribution does, is exactly accepting what upstream does. Not accepting in the sense of passive apathy, but in the sense of wholehearted embrace of upstream's ideas, expertise, passion, and hard work, and finding a way to incorporate that into our distribution. Acceptance in the sense of reaching out with both hands and taking hold of the gift we are given with a firm grasp and a grateful heart. Linux distributions are *all about* upstreams. Those upstreams are the reason why we're here. ―― Russ Allbery
Debian Perl Group and the CPAN In our experience we are quite similar: ♥ Kinda relaxed, cooperative, helpful, friendly ♥ Focus on quality and Doing It Right™ ♥ Solutions before ego boosting (teamwork)
Our humble message to the CPAN community…
Thanks a lot!
What can you do to make our lives even easier?
♥ Keep up the good work! ♥ Make good, state-of-the-art CPAN distributions ♥ Use current tools, follow best practices
Do you want more details?
Changes ♥ Include a Changes file ♥ Changes != $vcs log ♥ Please, don't say: "Fix RT #123" "Merge PR #456"
Bugs ♥ Mention these in Changes: CPAN ticket ID GitHub issue ID ♥ Fill "resources" subkeys in META.* "bugtracker" "repository"
Git ♥ Nice! We use it too ♥ Please tag, sign if you can, and don't forget to "git push --tags"
Tests ♥ Lancaster consensus %ENV: AUTOMATED_TESTING RELEASE_TESTING AUTHOR_TESTING EXTENDED_TESTING ♥ Internet is not guaranteed in build NO_NETWORK_TESTING (Test::RequiresInternet anyone?) ♥ Don't assume anything about build: source directory, blib, uid, .git, … ♥ Recommendation: Test::Spelling
{Makefile,Build}.PL ♥ No prompts NONINTERACTIVE_TESTING ♥ or use ExtUtils::MakeMaker::prompt() ♥ Also think of the CPAN smoke testers
Tarballs ♥ No debian/ directory ♥ or .gitignore ♥ or temporary files ♥ or backup files
System libs ♥ Including external C libraries might be needed for other OSes, ♥ but please make it easy for us to use the Debian system libs (configure switch, env variable…)
inc/ directory is evil ♥ Code duplication, and worse… ♥ bug duplication!
Compiled JavaScriptminified, browserified… JavaScript files are evil as well ♥ Not accepted as source code
Requirements ♥ Minimum required versions… ♥ not what is installed locally ♥ not what is in bleadperl ♥ "47.11 → 0" ?! ♥ 0 → '0' → 0 → '0' → … ?!
Versions ♥ Use a consistent versioning scheme ♥ CPAN: 0.10 < 0.1001 < 0.11 ♥ Debian: 0.10 < 0.1001 > 0.11 ✔ 0.1001 → 0.10.01 (or) ✔ 0.11 → 0.1100 (or else) ✔ 0.11 → 1:0.11
Legal stuff ♥ We need copyright and licenses, ♥ free software licenses, ♥ consistent & complete ♥ Use modern tools, e.g. Dist::Zilla
Maintaining Perl distributions as Debian packages
Communication ♥ 3 mailing lists ♥ IRC (#debian-perl @ OFTC) ♥ Meetings in meatspace: DebConf Debian Perl Sprint (since 2015)
Code ♥ Packages are maintained in Git (svn before summer 2011) ♥ ♥ KGB sends notifications to IRC
Tools ♥ Lots of them ♥ Some generic Debian tools ♥ Some (pkg-)perl specific
PET TrackerPackage Entropy Tracker ♥ ♥ VCS-centered view on packages showing our work: new upstream releases, bugs, pendings uploads…
dh-make-perl ♥ create (or update) Debian package from CPAN tarball ♥ cpan2deb =~ dh-make-perl … --build (a package for local install only) ♥ Foo::Bar is libfoo-bar-perl by default (but we change it for some apps) ♥ Result → a Debian source package: an unpacked tarball + debian/ directory containing meta information and build instructions, on top of a Git repository
pkg-perl-tools ♥ Collection of helpers ♥ CLI called as "dpt …" manipulating our Git repositories forwarding bug reports and patches combining upstream Git repos with ours (hopefully soon, making pull requests)
Track your packages! ♥ Package Tracking System: (subscription to event types available) ♥ Bug Tracking system: ♥ Git repository: ♥ Build logs (XS or source-only arch:all): ♥ Debian Perl team development server
Authors not interested ♥ What happens when upstream authors don't have interest in anything from downstream distros? ♥ How to avoid users sending them complaints? ♥ Should a disclaimer be added to the package description? ♥ Patches and bugs should not be forwarded? ♥ Please, let us know!
Copyright and licenses ♥ This page © 2019, Alex Muntada CC BY-SA 4.0 ♥ Based on the YAPC::Europe 2016 presentation: © 2016, Alex Muntada CC BY-SA 4.0 ♥ Based on: "From Debian with ♥" © 2014, gregor herrmann CC BY-SA 4.0 ♥ "use Debian" logo: © 2009, ghostbar CC BY-NC-SA 2.0 ♥ Parts from "How to maintain 2500 Perl Modules as Debian Packages" © 2013, Axel Beckert CC SA 3.0 DE
Thanks a lot for your amazing work!
TODO ♥ Setup a way for upstream authors to track all their packages Add support for it in Maybe adding a field stating so in META? ♥ Create a "dzil release" plugin to test readiness for Debian ♥ Explain how to request a package (wnpp RFP) ♥ Add some pictures statistics? PET screenshot? cats? ♥ Elaborate why inc/ can become evil (Module::Install) Show good uses cases for inc/