splitout_tdeb(1) splits out a Debian TDeb from a .deb on-the-fly

Description

Splits a Debian package into a Debian TDeb and a smaller Debian package by unpacking, moving relevant files and repacking with a note in the description and the +t1 version suffix.

When creating a repository containing TDebs, it is strongly recommended to specify .changes files so that the repository can include the original sources, for legal reasons.

If a file exists with the same name in the output directory, it will be overwritten.

Copyright and Licence

 Copyright (C) 1997-2000  Roman Hodek <[email protected]>
 Copyright (C) 2000-2002  Colin Watson <[email protected]>
 Copyright (C) 2002-2004  David Schleef <[email protected]>
 Copyright (C) 2004  Nikita Youshchenko <[email protected]>
 Copyright (C) 2004  Raphael Bossek <[email protected]>
 Copyright (C) 2007-2008  Neil Williams <[email protected]>
 This package is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 3 of the License, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

Converting to TDebs

The idea here is based on dpkg-cross:

 1. receive .deb or .changes as a command-line option
 2. unpack the .deb as dpkg-cross does
 3. create control data for the new TDeb
 4. relocate files into the TDeb
 5. repack the .deb with a TDeb version suffix.
 6. rebuild the original .deb and revise .changes so that the
     original source can be retained.

As few dependencies as possible - this script should be transformed into more usable TDeb support.

Future versions will also have to understand Dpkg Classes but until those are implemented, this uses brute force.

Automation

Relatively simple, but a few checks are needed in case your list of possible packages includes packages already processed by dpkg-cross.

 #!/bin/sh
 set -e
 DIR=/tmp/myrepo/
 for deb in `ls /var/cache/apt/archives/*.deb`; do
    cross=`echo $deb | grep "\-.*-cross" || true`
    if [ ! -z "$cross" ]; then
        echo "skipping dpkg-cross package: $deb"
        continue
    fi
    /usr/share/emdebian-tools/splitout_tdeb -o $DIR $deb
 done

A similar script should be able to cope with obtaining .changes files to retain the source packages.

Despite using dcut internally, splitout_tdeb isn't set up to obtain the .changes files directly from http://incoming.debian.org, a wrapper script would be needed.

An additional wrapper is likely to be needed to allow a TDeb repository to ``catch-up'' with the existing Debian mirrors, e.g. if the first upload to the TDeb repository is a binary-only upload without a referenced .orig.tar.gz. See emdebian-grip for how this could work.

splitout_tdeb does ensure that the .tar.gz is copied into the output directory and reprepro can locate the relevant files if the --ignore=missingfile option is passed. Sadly, this functionality is not preserved in the reprepro processincoming mode.

Problems

Many. :-)

Needs more work, probably to allow (or make default) the option *not* to rebuild the binary package but that depends on the binary already supporting a TDeb. Right now, this is a quick hack to get some TDebs easily. splitout_tdeb probably does not deserve to go into a stable release, the support should be implemented directly within the Debian builds.

The TDeb generated uses the source package name which will complicate things if you try to generate TDebs from binaries belonging to the same source package - use dpkg-gentdeb or dh_gentdeb from within the (native) package build instead.

Also, strict dependencies are not altered by splitout_tdeb - if another package (typically from the same source package) has a strict dependency on a package rebuilt by splitout_tdeb, that package is likely to become uninstallable. i.e. if foo depends on bar (= 1.2.3-4) and bar is rebuilt by splitout_deb, bar will become 1.2.3-4+t1 and foo will be uninstallable. As above, the solution is to prepare the TDeb from within the normal package build. emdebian-grip has also solved this problem but splitout_tdeb is only a convenience script and does not (yet) use this support.

Use the --verbose option to see the generated control file content of the TDeb and the modified binary package.

splitout_tdeb also does not (yet) support +t2 or other revisions of the TDeb - this needs support in dpkg for .diff1.gz so that the +t2 can be uploaded without affecting the binary package(s). The entire mechanism for how translators will update TDebs is yet to be implemented.