Home | Back

  NEWS
  ====

  This is a list of the major changes between RPM 4 and RPM 5.
  For more details please see the CHANGES file.

  New in RPM 5.1
  --------------

  o Major Bufixes:
    - .spec:  fix PGP clearsign signature() verification by correctly skipping RFC2440 "dash-escapes"
    - macro:  permit %{lua:...} to recurse.
    - macro:  fix line-continuation handling in macro definition parsing
    - macro:  fix macro option/argument parsing (again), this time by using POPT_CONTEXT_POSIXMEHARDER

  o New Features:
    - "rpmrepo"
    - "rpmdigest"
    - "rpmgrep"
    - "rpmmtree"
    - ":sqlescape" for use in SQL statements generated by --qf.
    - ":utf8" for use with ":cdata" format
    - ":cdata" to permit strings to be included in XML CDATA.
    - .spec:  verify(N) = E:V-R, verify(*) and verify(/path) runtime dependency probes
    - CLI     new RPM CLI options --noautoreq/--noautoprov
    - CLI:    "+N-V-R.A" path-to-repository expansions with -i/-U
    - CLI:    "-N-V-R.A" erasure args within install/upgrade transactions
    - CLI:    proof-of-concept "rpmbuild --lsb" implementation
    - build:  new Autoconf option --with-path-rpmlua and RPM CLI option --rpmlua for configuring RPM Lua init script path
    - macro:  OSSP uuid support via RPM Lua functions uuid.generate() and uuid.describe()
    - macro:  new "%{uuid:[<version>[, <ns>, <data>]]}" for generating UUIDs of version 1, 3, 4 or 5
    - macro:  new %{getenv:<name>} to lookup environment variables
    - macro:  new %{shrink:<body>} macro for removing leading+trailing and removing intermediate whitespaces
    - macro:  new RPM Lua function posix.glob(<pattern>)
    - macro:  new RPM Lua function rpm.realpath(<path>) to complement RPM macro %{realpath:<path>}
    - macro:  new RPM Lua function rpm.sleep()
    - macro:  new RPM Lua function rpm.slurp() for slurping in the whole content of a file or an URL
    - macro:  new RPM Lua function util.textwrap() for auto-wrapping junks of larger text messages
    - macro:  unconditionally provide RPM Lua functions posix.{setenv,unsetenv}
    - rpmdb:  new tags ORIGIN{TID,TIME} which record the first INSTALL{TID,TIME} of a package
    - rpmlib: function rpmuuidMake() for generating UUIDs of version 1, 3, 4 or 5
    - rpmlib: permit opt-in network access using %_rpmgio macro.
    - rpmlib: support for CPIO, TAR and AR payloads
    - API:    RPM 4 compatibility layer <rpm/rpm4compat.h>
    - macro:  permit %{___NVRA} to parameterize the displayed NVRA while installing.

  o Upgrades:
    - macro:  upgraded from Lua 5.1.2 to 5.1.3
    - macro:  upgraded RPM Lua extension lrexlib from ancient version 1.1x to version 2.2
    - build:  upgraded build environment to use GNU libtool 2.2.2

  o Incompatibilities:
    - rpmdb:  use "struct timeval" timestamp for INSTALL{TID,TIME} and ORIGIN{TID,TIME}

  o Portability:
    - build:  QNX platform support

  New in RPM 5.0
  --------------

  o Project Environment:
    The official RPM code base was relocated from rpm.org to rpm5.org
    and a completely new project environment was established around it,
    including anonymous repository browsing access, new mailing lists,
    etc.

  o Source Tree:
    The RPM source tree was cleaned up by pruning many old and obsolete
    files, removing dangling symbolic links, relocating sub-directories
    and fixing timestamps and other versioning meta-data which got
    broken over 10 years of RPM development.

  o Build Environment:
    The Automake/Autoconf/Libtool-based build environment of RPM was
    completely revamped. Especially the Autoconf parts were finally
    cleaned up from the ground up, including basing the use of all
    third-party libraries on a new sophisticated Autoconf macro
    "RPM_CHECK_LIB". As a result most third-party libraries now can be
    linked externally, too.

  o Development Environment:
    For being able to build RPM under arbitrary Unix platforms despite
    the fact that RPM needs a larger number of third-party libraries,
    the "devtool" environment and its "standalone" script is provided.
    This allows RPM developers to build RPM from scratch under arbitrary
    Unix platforms in a rather self-contained environment.

  o Greatly Improved Portability:
    RPM 5 was ported to all major Unix platforms as of 2007, including
    BSD, Linux and Solaris flavors. It was successfully built (with the
    above "devtool" "standalone") on at least the following particular
    Unix platforms (including Mac OS X "Darwin" and Windows "Cygwin"):
        ix86-freebsd6.2-gcc4.2.0
        ix86-freebsd6.2-gcc4.3.0s20070713
        ix86-freebsd6.2-gcc3.4
        amd64-freebsd6.2-gcc4.1.2
        ix86-freebsd7.0-gcc4.1.2
        ia64-freebsd6.2-gcc4.1.2
        ix86-fedora7-gcc4.2.0
        ix86-fedora7-sunstudio12
        ix86-fedora7-icc10.0
        ix86-debian3.1-gcc4.1.2
        ix86-debian4.0-gcc4.2.0
        ix86-rhel4-gcc4.1.2
        ix86-solaris9-gcc4.1.2
        sparc64-solaris8-gcc4.1.2
        sparc64-solaris9-gcc4.1.2
        sparc64-solaris10-gcc4.1.2
        amd64-solaris10-gcc4.1.2
        ppc-macosx10.4-gcc4.0.1
        ix86-macosx10.4-gcc4.0.1
        ppc-aix5.3-gcc3.3.2
        ix86-cygwin_nt5.1-gcc3.4.4

  o Mac OS X Cross Development:
    RPM 5 can now be built for all recent versions of Mac OS X, with
    detection of Python.framework and with Universal Binary support
    (both PowerPC and Intel architectures in a single binary file). The
    Mac OS X version will install in /usr/local and /var/local. It will
    work with the following versions of the OS and/or SDK, using the
    above devtool and with the target name quoted below:
        Mac OS X 10.x "macosx" - build native version
        Mac OS X 10.3 "panther" - PowerPC (MacOSX10.3.9.sdk)
        Mac OS X 10.4 "tiger" - PowerPC and Intel (MacOSX10.4u.sdk)
        Mac OS X 10.5 "leopard" - PowerPC and Intel (MacOSX10.5.sdk)

  o Source Code Cleanups:
    The RPM source base was completely cleaned up. As a result RPM now
    builds fully warnings-free under all major Unix platforms with GCC.
    Additionally, RPM now can be built without problems with the Sun
    Studio and Intel C/C++ compilers, too.

  o Third-Party Library Upgrades:
    RPM now is able to build against the latest versions of all
    third-party libraries. Additionally, the internal copies of
    third-party libraries were also upgraded to the latest versions,
    including Berkeley-DB 4.6.21, Lua 5.1.2, XAR 1.5.2, etc.

  o RPM Database:
    The RPM database (RPMDB) now out-of-the-box supports both
    Berkeley-DB and SQLite. The SQLite support was greatly improved, but
    nevertheless inherently still lacks some features of the Berkeley-DB
    RPMDB. Nevertheless, one can build RPM with an SQLite-only
    RPMDB, too. But this is not officially supported. It is just an
    experimental developer feature.

  o Compression:
    The RPM packages support both Bzip2 and LZMA payloads, in addition
    to the default Gzip compression format. Support for LZMA_Alone with
    rpmio was added, with the lzma syntax upgraded to newer LZMA Utils.

  o "rpmrc" and Platform Detections:
    Support for the old "rpmrc" (which was used mainly for architecture
    mappings, etc) was completely removed. Everything is now configured
    through RPM "macros" only. Additionally, the internal C-based
    platform detections were completely removed, too.

  o XAR Format Support:
    Initial support for the XML Archive (XAR) file format was added
    to RPM. The initial implementation establishes a wrapper archive
    format for mapping the 4 sections used in *.rpm package file (Lead,
    Signature, Header and Payload) to files with the same name in a XAR
    archive wrapper. A wrapper archive to carry package sections is
    already used by Apple Leopard *.pkg (using XAR) and Debian *.deb
    packages (using AR), rpm-5.0 now has a well defined representation
    of *.rpm packages in a wrapper archive format. Establishing a direct
    mapping between rpm tags and XAR attributes/properties in XML in
    order to fully use the extensibility of an XAR archive will be
    attempted for RPM 5.1.

  o Removed RPMv3 Package Format Support:
    The support for the old RPMv3 (LSB) package format was removed to
    cleanup and simplify the code base. RPM 5 now supports RPMv4 package
    format only.

  o Additional Specification Features:
    A larger set of additional features or provided for use in package
    specifications (.spec): new tag "Class" for quality assurance
    based classification, new section "%track" for vcheck(1) based
    upstream vendor source version tracking, new section "%sanitycheck"
    for sanity checking the run-time of a package by performing
    run-time tests, etc. Additionally, RPM can be configured via
    macro %{_arbitrary_tags_arbitrary_tags} to support so-called
    "arbitrary tags" -- this allows one to attach custom information
    with an RPM package. Finally, the macro processor now supports the
    "%{@<name>:<separator>}" syntax for expanding all values from the
    macro stack of a macro <name> by concatenating the values with
    <separator>.

  o Additional Command Line Interface (CLI) Features:
    The CLI supports additional options, including "-bt" for executing
    the new "%track" section (the step logically coming before "-bp"),
    "--undefine '<macroname>'" for reversing the effect of "--define
    '<macroname> <macrovalue>'", etc.

  o Application Programming Interface (API) Changes:
    There were various RPM C API changes. See CHANGES file for more
    details.