This will be a long post about an interesting topic. (packaging related, not sure if it is interesting to everybody)
- Getting more involved in Debian
- Debian Perl team's repack.sh
- The problem is... (or just go to the technical details)
- Try to patch git-buildpackage
- Okay then patch uscan to handle repack.sh better
- What about adding native repack functionality to uscan?
I had this idea of getting more involved in Debian. I use Perl already so I thought debian-perl can be a good place to start.
I am especially interested in Mojolicious as it is a great Perl web framework
I like to use to create a web UI for accessing administrative tools (sysadmin related).
libmojolicious-perl (the debian package) is more than half a year old in debian so I tried to update it to
The Debian Perl team created a tool for their own use as this happens with
- many packages
- has to be done every time a new upstream release becomes available
They have a nice documentation about packaging and repacking (removing undesired or undistributable parts):
I can create packages quite easily, but I tried to do it in a Debian way as this can also help the package maintainers. OTOH: using these standard tools worth it in the long run.
repack.sh is invoked by uscan from the watch file.
The problem is that the repacking mechanism interacts badly with
imports the original package and not the one with some files removed. This is because uscan unaware that repack happened.
However it is possible for
git-import-orig to obtain this information from uscan output.
% uscan --dehs <dehs> <package>libmojolicious-perl</package> <debian-uversion>2.98+dfsg</debian-uversion> <debian-mangled-uversion>2.98</debian-mangled-uversion> <upstream-version>3.68</upstream-version> <upstream-url>http://search.cpan.org/CPAN/authors/id/S/SR/SRI/Mojolicious-3.68.tar.gz</upstream-url> <status>Newer version available</status> <target>libmojolicious-perl_3.68.orig.tar.gz</target> <messages>Successfully downloaded updated package Mojolicious-3.68.tar.gz and symlinked libmojolicious-perl_3.68.orig.tar.gz to it</messages> <messages>Executing user specified script: sh debian/repack.stub --upstream-version 3.68 ../libmojolicious-perl_3.68.orig.tar.gz; output: Repackaging ../libmojolicious-perl_3.68.orig.tar.gz removed `lib/Mojolicious/public/js/jquery.js' *** ../libmojolicious-perl_3.68+dfsg.orig.tar.gz ready</messages> </dehs>
The line which start with '***' contains the repacked filename so
git-import-orig can learn about it!
I submitted a patch for git-buildpackage (#635920).
To tell the truth I know that this is not the best solution, but there was already an open bugreport and it seemed convenient.
I was told to try fixing / enhancing
So I added a special case if the invoked script is
debian/repack.stub and asked Gregor Herrmann on #debian-perl.
He noted that he has doubts that adding a special case for repack is the right thing to do.
I told him that
uupdate is already handled special.
OTOH if repack.stub (this is what finds and executes the real repack.sh) is handled in a special way then if we want a robust interface repack should be included in devscripts (uscan is part of devscripts) We (Gregor Herrmann and me) agreed on this.
This was my next thinking: why stop there? just improve uscan to know about repack (there is already a repack command line switch in uscan, but that is just recompression nothing more now)
Gregor told me that this is something Andreas Tille has been working on #685787. Oh, well... I looked at it and it seemed entirely in the right direction just it wont happen before wheezy.
Now it is located in this git repo: <git://git.debian.org/git/users/tille/devscripts.git>
I tried how this can replace the already working functionality as used by the debian-perl team. I removed repack.stub from uscan's watch file. No more external commands as this is internal from now on. I also added the right paramenters to the copyright file. It is Files-Excluded see:
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Mojolicious Upstream-Contact: Sebastian Riedel <sri@removed-intentionally> Source: http://search.cpan.org/dist/Mojolicious/ Comment: jquery.js is removed (not the preferred form of modification) to create the +dfsg version. Files-Excluded: lib/Mojolicious/public/js/jquery.js
This works quite well except that it still returns the original filename in the <target> section I am about to file bugreports for this. When it is done:
- There will be a universal way of repacking packages in debian.
- The perl team can migrate to this new format
- As git-import-orig cares about the <target> output of uscan it will just work without any change
- Please merge functionality for repackaging tarballs
- devscripts: Please provide a standard way of repacking upstream tarballs
- devscripts: Enabling uscan to simply remove files from upstream source