The problems of mixed suites

There can be problems mixing rapidly changing suites with stable suites in a single Multistrap configuration, especially if you want reproducible results. Unstable is constantly changing, frequently includes packages which are not installable and the dependency chain of unchanged packages can still be affected by transitions in other packages. Multistrap depends on apt for dependency resolution and if apt is not able to resolve the entire dependency chain, it will fail the entire chain, leaving multistrap with no option but to fail the bootstrap process. One method to avoid such problems is to insulate yourself from the changes in unstable, either by choosing to use testing instead of unstable or by taking a partial copy of the bits of unstable which you need as a partial mirror. ?reprepro is recommended.

reprepro setup

Choose your directory which will act as the top level of the repository. Whilst some of the directories created below this point may be publicly visible, not all of the directories should be exported. It is usually best to create another directory for the public information and symlink the dists, pool and, if used, logs directories to that public location. The http:// address of that public location can then be passed to ?apt and ?multistrap. If you want to use file:///, use copy:/// instead.

reprepro configuration

# conf/distributions
Origin: Debian
Label: mypartialMirror
Suite: unstable
Codename: sid
Version: 1.1
Architectures: i386 amd64 armel powerpc mips mipsel sh4 source
Components: main dev doc debug java
UDebComponents: main
Description: Selected packages from unstable
Log: sid-log

Configuration Changes

Select the architectures you want to host, remove those which you don't need. If you are bringing packages in from Emdebian, retain the relevant components; change the components to match Debian (main, contrib, non-free) if you want to pull in packages from Debian.

Generating the repository

$ reprepro export
$ reprepro createsymlinks

Until you put any packages into the repository, pool will not exist.

Adding packages

$ reprepro includedsc sid /path/to/source_version.dsc
$ reprepro includedeb sid /path/to/binary_version.deb

Only include the binaries that you need - there is no need to include every binary package built by the source package. To make life easier for future updates, always include the relevant source package too - reprepro uses the source package to track changes in the binary packages.

Updating packages

Having a partial mirror puts the updating of the packages under your explicit control but there will still be times when you do want the packages updated. By only including the selected packages which you need, these specific binary and source packages can be updated automatically.

# conf/updates
Name: updaterule
Method: http://ftp.uk.debian.org/debian
Suite: unstable
Architectures: i386 amd64 arm armel powerpc mips mipsel source
Components: main
FilterList: deinstall pkglist
VerifyRelease: AED4B06F473041FA

Add the name of this rule to the distribution stanza in conf/distributions.

Update: updaterule

See the reprepro manpage for more information.

See also http://lostwebsite.wordpress.com/2008/10/21/partial-debian-mirrors/