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.