This is a list of "frequently" asked questions.

1.1) What can I do when reprepro complains about a missing .orig.tar.gz?
1.2) Why does it refuse a file when one in another suite has the same name?
1.4) The key to sign my Release files needs a passphrase, what to do?
1.5) How do I change how files are downloaded.
1.6) How to omit packages missing files when updating.
2.1) Does reprepro support to generate Release.gpg files?
2.2) Does reprepro support tildes ('~') in versions?
2.3) Does reprepro support generation of Contents-<arch>.gz files?
3.1) Can I have two versions of a package in the same distribution?
3.2) Can reprepro pass through a server-supplied Release.gpg?
9) Feature ... is missing, can you add it?


1.1) What can I do when reprepro complains about a missing .orig.tar.gz?
------------------------------------------------------------------------
When 'include'ing a .changes file reprepro by default only adds files
referenced in the .changes file into the pool/-hierarchy and does not
search for files referenced in a .dsc file and thus fails if this .orig.tar.gz
is not already in the pool.
You are facing the choice:
- copy the .orig.tar.gz by hand into the appropriate place within pool/
  and try again. reprepro will find it there when you try it the next time
  and add it to its database.
- use --ignore=missingfile to tell reprepro to search for such files
  in the directory the .changes file resides in.
- modify the .changes file by hand to reference the .orig.tar.gz
- use changestool (comes with reprepro since version 1.3.0) to
  list the file. ("changestool <.changesfile> includeallsources")
- use dpkg-buildpackage -sa the next time you build a package so that
  it calls dpkg-genchanges with -sa which then always lists .orig.tar.gz
  and not only if it ends in -0 or -1.

1.2) Why does it refuse a file when one in another suite has the same name?
----------------------------------------------------------------------------
Reprepro uses Debian's way to organize the pool hierarchy, which means
that the directory and name a file is saved under is only determined by
its sourcename, its name and its version and especially not by the
distribution it belongs to. (This is the intent of having a pool directory,
so that if two distributions have the same version, the disk space is only
used once). This means that if different versions of a packaged having the
same version string are put in the same reprepro repository (even if put
into different distributions within that), reprepro will refuse to do so.
(Unless you have a md5sum collision, in which case it will put the one and
just replace the second with the first).

The only way to work around, is too put the different distributions into
different repositories. But in general it is really worth the effort to
get the versioning right instead: Having multiple packages with the same
version make it hard to track down problems, because it is easy to mix
them up. Also up/downgrading a host from one distribution to the other
will not change the package but just keep the old (as they are the
same version, so they have to be the same, apt and dpkg will think).

How to deal with this without separating repositories depends on how
you reached this situation:

- in the past Debian's stable and stable-security buildds sometimes both
  built a package and for some architectures the one version entered
  security.debian.org and the other ftp.debian.org with the next
  point release. (This should be fixed now. And it is always considered
  a bug, so if you hit this, please report it). If you mirror such
  a situation, just update one of the distributions and manually
  include the package into the other distribution. As the versions
  are the same, reprepro will keep with this and not try to download
  the other version, err other same version, err ...
- backports (i.e. packages rebuild for older distributions)
  Common practise is to append the version with reducing ~,
  i.e. 1.0-1 becomes 1.0-1~bpo.7, or 3.0 becomes 3.0~sarge.
  (This makes sure that if a host is updated the backport is
   replaced by the real package).
  If backporting to multiple distributions you get bonus points
  for making sure newer distributions have higher version numbers.
  (To make sure which version is considered newer by dpkg use
   dpkg's --compare-versions action).
- a package built for multiple distributions
  is equivalent to the backports case
- locally modified packages that should be replace by newer official
  versions: append something like "a0myname". If it should be
  replaced by security updates of the official package, make sure (using
  dpkg's --compare-versions) that a security update would have
  a higher version.
- locally modified packages that should not be replaced by newer
  official versions: prefix the version with "99:" and perhaps appending
  it with something like "-myname". (appending only makes it easier to
  distinguish, as some tools do not show epochs).

1.4) The key to sign my Release files needs a passphrase, what to do?
---------------------------------------------------------------------
Please take a look at gpg-agent.
You can also use the --ask-passphrase option, but please note this is quite insecure.

1.5) How do I change how files are downloaded.
----------------------------------------------
reprepro just calls apt's methods for file retrieval.
You can give them options in conf/updates like
Config: Acquire::Http::Proxy=http://proxy.yours.org:8080
or replace them with other programs speaking the same
interface.

1.6) How to omit packages missing files when updating.
------------------------------------------------------
reprepro does not like broken upstream repositories and just splits out
errors and does not process the rest. (Implementing simply a ignore for
that is not that easy, as I would have special case holding an old version
in that case when unavailable packages should be deleted, and make some
costly information-pushing between layers (after all, each file can belong
to multiple packages and packages can have more than one file, so keeping
track which package should get a mark that files where missing needs a
n-to-n relation that should never be uses expect the case where such a
error happens)).
What you can do when a upstream repository you update from misses a file:
- try once with a different mirror not missing those files. You can either
  change the mirror to use once and change it back afterwards. Or if both
  mirrors have the same inner directory structure (they usually have) and
  are accessible via the same method (like both http or both ftp) you can
  also use the Fallback: option in conf/updates to tell reprepro to get
  missing files from the other Mirror. This an even be used for things not
  being a mirror of the same thing, but only having some files at the same
  place. For example to work around etch r1 listing many older kernel
  packages but no longer having the needed files, a line
  Fallback: http://snapshot.debian.net/archive/2007/04/02/debian/
  can help. (But make sure to look at the run and remove this line
  once reprepro downloaded the missing files. With this line active and
  the primary mirror you list in Method: unreachable, reprepro will also
  download index files from snapshot and make your repository a copy of
  unstable from 2007-04-02 instead of an updated etch version.)
- get the file elsewhere (with the correct md5sum), place it in the
  appropriate place in the pool/ hierarchy and do the update. Reprepro will
  see the file is already there, add it to its database and just continue
  with the update.
- tell reprepro to exclude this package
* There are multiple ways to do so. Easiest is adding something like
  FilterFormula: package (!= xen-shell)
  or
  FilterFormula: package (!= xen-shell) | version (!=1.0-2) | !files
  to your rule in conf/updates. ( the "| ! files" tells it to only
  omit the source package xen-shell, as source packages have a files
  field. Make sure the package in question does not require you to
  make the source available or you are not making your repository
  accessible to others).
* Another way is adding something like
  FilterList: install excludefile
  and adding a file conf/excludefile with content
  xen-shell deinstall
  (the install will tell it to install what is not listed in the file,
   the deinstall on xen-shell will tell it to not install that package)
* Finally you can also supply a ListHook: with a script copying
  its first argument to the second argument, removing all occurrences
  of the package you do not want (take a look intro the dctrl-tool
  package for tools helping you with this).
- the worst solution is to just propagate the problem further, by just
  telling reprepro the file is there with the correct md5sum while it
  is not. (Via the _addmd5sums command of reprepro). Unless you
  run checkpool reprepro will not notice what you have done and will
  not even try to download that file once it becomes available. So
  don't do this.

2.1) Does reprepro support to generate Release.gpg files?
---------------------------------------------------------
Yes, add a SignWith in the suite's definition in conf/distributions.
(and take a look what the man page says about SignWith)

2.2) Does reprepro support tildes ('~') in versions?
----------------------------------------------------
Yes, but in .changes files only since version 0.5.
(You can work around this in older versions by using includedeb and
 includedsc on the .deb and .dsc files within the .changes file, though)

2.3) Does reprepro support generation of Contents-<arch>.gz files?
------------------------------------------------------------------
Yes, since version 1.1.0 (well, actually since 0.8.2 but a bug
caused the generated files to not be up to date unless manually
exporting the distributions in question).
Look for "Contents" in the man page.

3.1) Can I have two versions of a package in the same distribution?
-------------------------------------------------------------------
Sorry, this is not possible right now, as reprepro heavily optimizes
at only having one version of a package in a suite-type-component-architecture
quadruple.
You can have different versions in different architectures and/or components
within the same suite. (Even different versions of a architecture all package
in different architectures of the same suite). But within the same
architecture and the same component of a distribution it is not possible.

3.2) Can reprepro pass through a server-supplied Release.gpg?
-------------------------------------------------------------------
No.
The reason for this is that the Release file will be different,
so a Release.gpg would not match.
The reason that the Release file looks differently is that reprepro
mirrors packages. While it can create a distribution with the same
packages as a distribution it mirrors. It will decide on its own where
to put the files, so their Filename: or Directory: might differ. It may
create a different set of compressions for the generated index files.
It does not mirror Packages.diff directories (but only comes with helpers
to create diffs between different states of the mirror). It does not mirror
Contents files but creates them; and so on. So to be able to mirror
distribution signatures almost all the functionality of reprepro would need
to be duplicated (once supporting literal mirroring, once support local
packages, partial mirroring, merging mirroring, pool condensing), thus I
decided that this is better a task for another program. (Note that if
you already have a local literal mirror, you can also use that as upstream
for partial/merged/extended mirrored distributions of that. If you use
the file:/// in Method: (as opposed to copy:///), reprepro will make
hardlinks for files in pool/ if possible).

9) Feature ... is missing, can you add it?
------------------------------------------
First, please take another look at the man page. My documentation is not
very good, so it is easy to overlook some feature even when it is described
already. If it is not there, just write me a mail (or better write a wishlist
report to the Debian BTS, then it cannot get lost). Some things I add quite
fast, other stuff takes a bit. Things incompatible with the current underlying
infrastructures or past design decisions may never come, but if I have it on the
TODO list of things to add, it help the code to develop in a direction that
things like that might be possible in the future.
