home *** CD-ROM | disk | FTP | other *** search
- DEPENDENCIES
- ============
-
- Dependencies provide a way for a package builder to require other
- packages or capabilities to be installed before or simultaneously
- with one another. These can be used to require a python interpretor
- for a python based application for example. RPM ensures dependencies
- are satisfied whenever packages are installed, erased, or upgraded.
-
- Requiring Packages
- ------------------
-
- To require packages, use:
-
- Requires: python perl
-
- in the spec file. Note that "Requires python, perl" would work as well. If you
- needed to have a very recent version of python but any version of perl,
-
- Requires: python >= 1.3, perl
-
- would do the trick. Again, the ',' in the line is optional. Instead of
- '>=', you may also use '<', '>', '<=', or '='.
-
- RPM uses an internal algorithm to determine version number orderings which
- works correctly most of the time. For example, it will know that
- 1.9a is older then 1.9b. However, it will also be later then 1.9 which
- may or may not be correct as some programmers use letters in version numbers
- to indicate beta versions.
-
- To work around this, you may specify a serial number for a package like this:
-
- Serial: 23
-
- If a Requires: line should be comparing the given number with a serial number
- instead of a version number, you would do this:
-
- Requires: somepackage =S 23
-
- Virtual Packages
- ----------------
-
- Sometimes you need to make sure the system your package is being installed
- on has a package which provides a certain capability, even though you don't
- care what specific package provides it. For example, sendmail won't work
- properly unless a local delivery agent (lda) is present. You can ensure that
- one is installed like this:
-
- Requires: lda
-
- This will match either a package called lda (as mentioned above), or any
- package which contains:
-
- Provides: lda
-
- in its .spec file. No version numbers may be used with virtual packages.
-
- Automatic Dependencies
- ----------------------
-
- To reduct the amount of work required by the package builder, RPM scans
- the file list of a package when it is being built. Any files in the file
- list which require shared libraries to work (as determined by ldd) cause
- that package to require the shared library.
-
- For example, if your package contains /bin/vi, RPM will add dependencies
- for both libtermcap.so.2 and libc.so.5. These are treated as virtual
- packages, so no version numbers are used.
-
- A similar process allows RPM to add Provides information automatically. Any
- shared library in the file list is examined for its soname (the part of
- the name which must match for two shared libraries to be considered
- equivalent) and that soname is automatically provided by the package. For
- example, the libc-5.3.12 package has provides information added for
- libm.so.5 and libc.so.5. We expect this automatic dependency generation
- to eliminate the need for most packages to use explicit Requires: lines.
-
- Installing and Erasing Packages with Dependencies
- -------------------------------------------------
-
- For the most part, dependencies should be transparent to the user. However,
- a few things will change.
-
- First, when packages are added or upgraded, all of their dependencies
- must be satisfied. If they are not, an error message like this appears:
-
- failed dependencies:
- libICE.so.6 is needed by somepackage-2.11-1
- libSM.so.6 is needed by somepackage-2.11-1
- libc.so.5 is needed by somepackage-2.11-1
-
- Similarly, when packages are removed, a check is made to ensure that
- no installed packages will have their dependency conditions break due to
- the packages being removed. If you wish to turn off dependency checking for
- a particular command, use the --nodeps flag.
-
- Conflicts
- ---------
-
- While conflicts were implemented in earlier versions of RPM they never
- worked properly until RPM 2.3.4 (well, we hope they work properly now
- anyway).
-
- Conflicts allow a package to say it won't work with another package (or
- virtual package) installed on the system. For example, qmail doesn't work
- (w/o custom setup) on machines with sendmail installed. The qmail spec file
- may codify this with a line like:
-
- Conflicts: sendmail
-
- The syntax of the "Conflicts" tag is identical to the syntax of the Requires
- tag and conflict checking may be overridden by using the --nodeps flag.
-
- Querying with Dependencies
- --------------------------
-
- Two new query information selection options are now available. The first,
- --provides, prints a list of all of the capabilities a package provides.
- The second, --requires, shows the other packages that a package requires
- to be installed, along with any version number checking.
-
- There are also two new ways to search for packages. Running a query with
- --whatrequires <item> queries all of the packages that require <item>.
- Similarly, running --whatprovides <item> queries all of the packages that
- provide the <item> virtual package. Note that querying for package that
- provides "python" will not return anything, as python is a package, not
- a virtual package.
-
- Verifying Dependencies
- ----------------------
-
- As of RPM 2.2.2, -V (aka -y, --verify) verifies package dependencies
- by default. You can tell rpm to ignore dependencies during system
- verification with the --nodeps. If you want RPM to verify just dependencies
- and not file attributes (including file existence), use the --nofiles
- flag. Note that "rpm -Va --nofiles --nodeps" will not verify anything at
- all, nor generate an error message.
-