---
name: "splitout_tdeb"
section: "1"
platform: "linux"
package: "emdebian-tdeb"
version: "3.0.7"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/splitout_tdeb"
---

# splitout\_tdeb(1)

splits out a Debian TDeb from a .deb on-the-fly

## 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.
