Installation methods for multiple binary CDs
--------------------------------------------

 This package provides three new methods to be used within dselect in
 order to access Debian binary packages stored across multiple binary CD
 ROMs.  It will install itself into the methods directory from dselect
 so the user will be able to use them immediately.

 These are the three new methods:

  . Multiple binary CD-ROMs

  . Multiple binary CD-ROMs, accessed through NFS

  . Multiple binary CD-ROMs, pre-mounted

Acquiring package data
---------------------

 Since this method is derived from the `mounted' method the user is
 able to access up to five binary directories within `dists/stable':

  . main
  . contrib
  . non-free
  . non-US
  . local

 The selected method will try to read the `Packages.cd' file from each
 of these directories if it is available.

Identifying the CD-ROM
----------------------

 A unique name is associated to each CD.  This name should correspond
 with the label on the front of the CD.  The name is also available on
 the CD, so the system can find out which CD is in the drive at any
 time.

Installing the files
--------------------

 At the beginning of the installation the `multicd' package will sort
 the list of to-be-installed packages and install them CD by CD.  If a
 different CD-ROM is required the user will be prompted to exchange
 the CD-ROM.

Preparing multiple binary CD-ROMs
---------------------------------

 Since the `multicd' methods need to know which packages are on which
 CD-ROMs one cannot use regular `Packages' files.  An additional data
 field "X-Medium:" is required.  The first CD-ROM from the set should
 contain all `Packages.cd' files.  To be more convenient you should
 include the `Packages.cd' files on all CD-ROMs.  This ensures that
 you don't have to start with the first CD-ROM all the time.

 Additionally the package needs to gain information which CD-ROM is
 currently used.  Thus each CD-ROM contains the file `.disk/info'
 which contains the symbolic name for the CD-ROM as specified by
 "X-Medium:".

 In order to be able to create the modified `Packages.cd' files, you
 have to use the `-M medium' option of dpkg-scanpackages (supported
 in dpkg-dev >= 1.15.5).

 To split the `main' distribution into two CD-ROMs you'll need to
 create a `Packages.cd' file for each `binary-$arch' directory.
 Afterwards you simply append the second one to the first one and
 put the resulting `Packages.cd' file into both `binary-$arch'
 directories.

Sample Layout
-------------

 CD1 .disk/info = "Debian GNU/Linux binary-i386"
     dists/stable/main/binary-all/
                       binary-i386/Packages.cd.gz
                       binary-i386/net/foo.deb
                  contrib/binary-i386/Packages.cd.gz
                  non-free/binary-i386/Packages.cd.gz
                  non-US/binary-i386/Packages.cd.gz

 CD2 .disk/info = "Debian GNU/Linux contrib-i386"
     dists/stable/main/binary-i386/Packages.cd.gz
                  contrib/binary-all/
                          binary-i386/Packages.cd.gz
                          binary-i386/net/foo.deb
                  non-free/binary-i386/Packages.cd.gz
                  non-US/binary-i386/Packages.cd.gz

 CD3 .disk/info = "Debian GNU/Linux non-free-i386"
     dists/stable/main/binary-i386/Packages.cd.gz
                  contrib/binary-i386/Packages.cd.gz
                  non-free/binary-all/
                           binary-i386/Packages.cd.gz
                           binary-i386/net/foo.deb
                  non-US/binary-all/

 To re-generate the Packages file you have to chdir into
 `dists/stable/$part' and issue `dpkg-scanpackages' as follows.  It's
 assumed that you use regular compressed overrides files in
 /pub/debian/indices.

 CD1: dpkg-scanpackages -M "Debian GNU/Linux binary-i386" \
        binary-i386 /pub/debian/indices/override.hamm.gz \
        dists/stable/ > binary-i386/Packages

 CD2: dpkg-scanpackages -M "Debian GNU/Linux contrib-i386" \
        binary-i386 /pub/debian/indices/override.hamm.contrib.gz \
        dists/stable/ > binary-i386/Packages

 CD3: dpkg-scanpackages -M "Debian GNU/Linux non-free-i386" \
        binary-i386 /pub/debian/indices/override.hamm.non-free.gz \
        dists/stable/ > binary-i386/Packages

Please direct comments to Martin Schulze <joey@infodrom.north.de>
