# The debdelta suite

### Andrea C. G. Mennucci

Copyright © 2006-2011

debdelta is an application suite designed to compute changes between Debian packages. These changes (that we will call 'deltas') are similar to the output of the "diff" program in that they may be used to store and transmit only the changes between Debian packages. This suite contains 'debdelta-upgrade', that downloads deltas and use them to create all Debian packages needed for an 'apt-get upgrade'.

## 1. Overview

The debdelta application suite is really composed of different applications.

### 1.1. debdelta

'debdelta' computes the delta, that is, a file that encodes the difference between two Debian packages. Example:

    $ a=/var/cache/apt/archives
    $ debdelta -v $a/emacs-snapshot-common_1%3a20060512-1_all.deb \
      $a/emacs-snapshot-common_1%3a20060518-1_all.deb /tmp/emacs.debdelta

the result is: deb delta is 12.5% of deb ; that is, 15452kB would be saved

### 1.2. debpatch

'debpatch' can use the delta file and a copy of the old Debian package to recreate the new Debian package. (This process is called "applying the delta file"). If the old Debian package is not available, but is installed in the host, it can use the installed data; in this case, '/' is used in lieu of the old .deb. Example:

    $ debpatch -A  /tmp/emacs.debdelta / /tmp/emacs.deb

### 1.3. debdeltas

'debdeltas' can be used to generate deltas for many debs at once. It will generate delta files with names such as package_old-version_new-version_architecture.debdelta and put them in the directory where the new .deb is. If the delta exceeds ~70% of the deb, 'debdeltas' will delete it and leave a stamp of the form package_old-version_new-version_architecture.debdelta-too-big Example usages are in the man page; see also the scripts /usr/share/debdelta/debmirror-delta-security and /usr/share/debdelta/debmirror-deltas

### 1.4. debdelta-upgrade

This command will download necessary deltas and apply them to create debs for an 'apt-get upgrade' . The deltas are available for upgrades in 'stable' , 'stable-security' , 'testing', 'unstable' and 'experimental', for i386 and amd64. Example usage:

    # apt-get update && debdelta-upgrade && apt-get upgrade

If run by a non-root user, debs are saved in /tmp/archives : do not forget to move them in /var/cache/apt/archives debdelta-upgrade will also download .debs for which no delta is available (this is done in parallel to patching, to maximize speed). See the explanation of "debdelta-upgrade --deb-policy" in the man page for more info and customization on which debs get downloaded. More info are in README.upgrade

## 2. Todo

1. Prepare an APT method so that 'apt-get upgrade' would actually use deltas. Some code is already written.

2. It would be nice if debdelta-upgrade would actually choose if

   - download a delta and use it to create the .deb

   - download the deb depending on which one would be faster.

   Unfortunately, this decision must depend on a good model to predict the speed of patching... and this I still cannot achieve.