Initial revision

CVS patchset: 795
CVS date: 1996/07/12 02:31:16
This commit is contained in:
ewt 1996-07-12 02:31:16 +00:00
parent 3d2adecc22
commit 0d58d15991
5 changed files with 368 additions and 0 deletions

110
docs/dependencies Normal file
View File

@ -0,0 +1,110 @@
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.
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.

93
docs/queryformat Normal file
View File

@ -0,0 +1,93 @@
QUERY FORMATS
=============
As it is impossible to please everyone with one style of query output, RPM
allows you to specify what information should be printed during a query
operation and how it should be formatted.
Tags
----
All of the information a package contains, apart from signatures and the
actual files, is in a part of the package called the header. Each piece
of information in the header has a tag associated with it which allows
RPM to to tell the difference between the name and description of a
package.
To get a list of all of the tags your version of RPM knows about, run the
command 'rpm --querytags'. It will print out a list like (but much longer
then) this:
RPMTAG_NAME
RPMTAG_VERSION
RPMTAG_RELEASE
RPMTAG_SERIAL
RPMTAG_SUMMARY
RPMTAG_DESCRIPTION
RPMTAG_BUILDTIME
RPMTAG_BUILDHOST
RPMTAG_INSTALLTIME
RPMTAG_SIZE
As all of these tags begin with RPMTAG_, you may omit it from query format
specifiers and it will be omitted from the rest of this documentation for
the same reason.
A tag can consist of one element or an array of elements. Each element can
be a string or number only.
Query Formats
-------------
A query format is passed to RPM after the --queryformat argument, and normally
should be enclosed in single quotes. This query format is then used to print
the information section of a query. This means that when both -i and
--queryformat are used in a command, the -i is essentially ignored.
The query format is similar to a C style printf string, which the printf(2)
man page provides a good introduction to. However, as RPM already knows the
type of data that is being printed, you must omit the type specifier. In
its place put the tag name you with to print enclosed in curly braces
({}). For example, the following RPM command prints the names and sizes
of all of the packages installed on a system:
rpm -qa --queryformat "%{NAME} %{SIZE}\n"
If you want to use printf formatters, they go between the % and {. To
change the above command to print the NAME in the first 30 bytes and
right align the size to, use:
rpm -qa --queryformat "%-30{NAME} %10{SIZE}\n"
Arrays
------
RPM uses many parallel arrays internally. For example, file sizes and
file names are kept as an array of numbers and an array of strings
respectively, with the first element in the size array corresponding
to the first element in the name array.
To iterate over a set of parallel arrays, enclose the format to be used
to print each item in the array within square brackets ([]). For example,
to print all of the files and their sizes in the slang-devel package
followed by their sizes, with one file per line, use this command:
rpm -q --queryformat "[%-50{FILENAMES} %10{FILESIZES}\n]" slang-devel
Note that since the trailing newline is inside of the square brackets, one
newline is printed for each filename.
Formatting Tags
---------------
One of the weaknesses with query formats is that it doesn't recognize
that the INSTALLTIME tag (for example) should be printed as a date instead
of as a number. To compensate, you can specify one of a few different
formats to use when printing tags by placing a colon followed the formatting
name after the tag name. Here are some examples:
rpm -q --queryformat "%{NAME} %{INSTALLTIME:date}\n" fileutils
rpm -q --queryformat "[%{FILEMODES:perms} %{FILENAMES}\n]" rpm
rpm -q --queryformat \
"[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" \
vlock

36
docs/relocatable Normal file
View File

@ -0,0 +1,36 @@
RELOCATABLE 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.
Building a Relocatable Package
------------------------------
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:
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.
Installing Relocatable Packages
-------------------------------
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".

70
docs/signatures Normal file
View File

@ -0,0 +1,70 @@
New RPM Signatures
==================
The 2.1 release of RPM had a few improvements in the area of
digital package signatures. The usage of PGP has been cleaned
up and extended, the signature section in the RPM file format
has been made easily extensible with new signature types, and
packages can have multiple signatures.
PGP
---
RPM's previous usage of PGP was cumbersome, and only supported
1024 bit keys. Both of these problems have been corrected.
Whereas previously you needed many rpmrc entries to clue in
RPM about keyring locations and such, RPM now behaves as PGP
users would expect. The PGPPATH environment variable can be
used to specify keyring locations. You can also use a
"pgp_path:" line in your rpmrc to specify a different value
for RPM to use for PGPPATH. If neither of these are used PGP
uses its default ($HOME/.pgp).
If you just want to verify packages, you do not need any entries
in your rpmrc (except possibly "pgp_path:"). The minimal rpmrc
entries to use PGP for package building are:
signature: pgp
pgp_name: <name to uniquely select the key to use for signing>
Signature Creation
------------------
Signature creation is the same as previous releases: just add
a --sign to your build command line. You can sign a package
after the package is built with:
rpm --resign <package>
Using --resign removes any previous signature in the package.
To *add* a signature to a package, leaving all existing
signatures use:
rpm --addsign <package>
RPM always creates MD5 and SIZE signatures when it build
packages, which means that packages built without --sign can
be "verified" to some extent. The MD5 signature should catch
problems like corrupt packages, faulty downloads, etc.
Signature Verification
----------------------
Package signature verification is the same as previous releases:
rpm -K <package>
RPM will verify evey signature in the package, which may include
more than one PGP signature. The output indicates what types of
signatures are being checked. If any checks fail you'll see a
"NOT OK" message, and you should be worried.
If you have a package with PGP signatures, but don't have PGP
installed, but still want to verify it as much as possible, you
can do:
rpm -K --nopgp <package>
That will cause RPM to skip any PGP signatures, but still check
any others (currently only MD5 and SIZE).

59
docs/spec Normal file
View File

@ -0,0 +1,59 @@
SPEC FILE ADDITIONS
===================
A few additions have been made to the spec file format.
Summary and Description
-----------------------
The Summary: tag should be use to give a short (50 char or so) summary
of the package. Most package's Description: line should be changed to
a Summary: line. The Description: tag is still supported but should
be changed to a "%description" entry similar to %package and %files.
At some point in the future support will be removed for "Description:".
As an example, this spec file fragment:
Description: Screen drawing library
Name: screenlib
Version: 1.0
%package devel
Description: Screen drawing library headers and static libs
might be changed to:
Summary: Screen drawing library
Name: screenlib
Version: 1.0
%description
The screen drawing library
is a handy development tool
%package devel
Summary: Screen drawing library headers and static libs
%description devel
This package contains all of the
headers and the static libraries for
screenlib.
You'll only need this package if you
are doing development.
The description is free form text, but there are two things to note.
The first regards reformating. Lines that begin with white space
are considered "pre-formatted" and will be left alone. Adjacent
lines without leading whitespace are considered a single paragraph
and may be subject to formatting by glint or another RPM tool.
Other Tags
----------
Two new tags are "URL:" and "Packager:". "URL:" is a place to put a
URL for more information and/or documentation on the software
contained in the package. Some future RPM package tool may make use
of this. The Packager: tag is meant to contain the name and email
address of the person who "maintains" the RPM package (which may be
different from the person who actually maintains the program the
package contains).