Man Linux: Main Page and Category List

NAME

       splitout_tdeb - 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 <roman@hodek.net>
        Copyright (C) 2000-2002  Colin Watson <cjwatson@debian.org>
        Copyright (C) 2002-2004  David Schleef <ds@schleef.org>
        Copyright (C) 2004  Nikita Youshchenko <yoush@cs.msu.su>
        Copyright (C) 2004  Raphael Bossek <bossekr@debian.org>
        Copyright (C) 2007-2008  Neil Williams <codehelp@debian.org>

        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.