# Relocateable packages

Relocatable packages are a way to give the user a little control over the installation location of a package. For example, a vendor may distribute their software to install in "/opt" but you'd like it to install in "/usr/opt". If the vendor were distributing a relocatable RPM package, it would be easy.

Not all software can be "relocatable". Before continuing you should think about how the program works, what files it accesses, what other programs access *it* (and expect it to be in a certain place), etc. If you determine that the location of the package doesn't matter, then it can probably be built as "relocatable".

All you need to do to build a relocatable package is put one or more:

      Prefix: <dir>

in your spec file. The "<dir>" will usually be something like "/usr", "/usr/local", or "/opt". Every file in your files list must start with that prefix. For example, if you have "Prefix: /usr" and your files list contains "/etc/foo.conf", the build will fail. The fix for this is to put

      Prefix: /usr
      Prefix: /etc

into the spec file so that the /usr and /etc directories may be relocated separately when this package is installed.

By default, RPM will install a relocatable package in the prefix directory listed in the spec file. You can override this on the RPM install command line with "--prefix <dir>". For example, if the package in question were going to be installed in "/opt" but you don't have enough disk space there (and it is a relocatable package), you could install it "--prefix /usr/opt".

If there is more then one Prefix you may relocate each prefix separately by using syntax like:

      rpm ... --relocate /opt=/usr/opt --relocate /etc=/usr/etc ...

If any of the Prefixs are not being relocated they can be skipped on the command line