In this section we will outline all changes in RPM from version 2.3 until the second edition of Maximum RPM is released.
This is mostly an internal cleanup release.
fork()
and exec() so it doesn't matter
This release is mainly an internal cleanup release for i18n efforts and for some internal functions that didn't behave with serial numbers.
--help routing to have intelligent line wrapping
to make i18n efforts easierRPM_CHAR_TYPE as RPM_INT8_TYPE for queriesrpmEnsureOlder() internal to lib/install.crpmVersionCompare() to compare version/release/serial numbers
for packages -- returns like strcmp()
rpmVersionCompare() which made it worse then
useless (thanks to Norbert Kiesel)
cp -pr instead of cp -ar for %doc expansionchmodglob/fnmatchpopt from getopt, which allows command line aliasing/usr/lib/rpmpopt then /etc/popt and
$HOME/.poptrdev verification (only verifies device files, checks
device related mode bits as well)tools/dumpdb read the rpmrc so it can find the database--nomd5 for -V and -K
%changelog processing--rebuilddb's robustnessdocs/dependencies (see section
Conflicts for more detailed documentation).rpmpopt in libdir--provides and --scripts to rpmpopt--setperms, --setugids--resign/--addsign was broken in 2.3.3 from popt conversion
rpmlib.h-Vp work on URLsumask(0) anymore -- that confused programs which
link against rpmlib quite badlyrpm -v -i to occur after any warnings
to pretty up the output a bit-sx for
some silly shells--root checked for the
sources/specs directory to exist outside of the root -- fixed--qf should send error to stderr
-Vf uses realpath() now-Vp lets you use --ftpproxy, --ftpport:-(--requires, --info to /usr/lib/rpmpoptconfigure.in a tad
-Va-lnsl explicitly rather then linking it
to -lsocket (for NCR SysVR4)dirent.hglob.c to include config.h and use HAVE_DIRENT_HLIBS/LIBPATH mess a bit more
-t? options to build packages from tarballs which contain
.spec files instead of from the .spec files directlyrpmconvert (which is almost
never needed) -- this isolated gdbm dependence to this target--requires shouldn't imply -qrpm --erase wasn't returning proper error codes with package
removal failed
%setup to allow multiple -a and -b options, which
should noticeably ease the task of unapcking multiple tar files--allmatches to allow erasing multiple versions/releases
of a package/message HELP ME
%SOURCEn %PATCHn %percnt;SOURCEURLn %PATCHURLn
--scripts output
RPM_INSTALL_PREFIX environment variable when running
verify scripts/ require files (in
the database!) instead of packages/usr/lib/rpmrc rather then just hoping it's
in the path--enable-broken-chown
to force configure to think chown does indeed follow symlinks.
lchown() if it's availablechown() doesn't follow symlinks
if lchown() isn't available and configure is not being run as root:shescape query format type for strings, which prints strings
which will survive a single level of shell expansion--setperms and --setugids to handle empty packages and
packages with odd filenamesnoarch architecture which everything is compatible withnetsharedpaths--build{arch|os} to --help and usage messages
fsnames and fssizes virtual query tagsrpmdbFindByHeader() and rpmdbFindByTag() public functionsnetsharedpath entries shouldn't match partial directory names
anymore (a netsharedpath of /usr/lib shouldn't affect /usr/libexec)day query format which is like date, but doesn't print
any time--changelog alias to query a packages changelog entryfflags query type displays s for specfiles, m for missingok
files, and n for noreplace files%config(missingok) flag in install--allfiles flag for -i and -U, which forces all files (even
missingok files) to be installed%config(noreplace) for the install, but it hasn't
been tested in any way
--scripts now only outputs info on scripts that are actually presentchroot() for installs --root option-p option to the scripts to specify which program a script is run through. If -p option is used with an empty script the program specified is executed directly.-p option (or /bin/sh if no -p is specified) is now added as a prerequisite.
-qi output only displays package and URL fields if there is something there to display--showrc.provides tag to rpmrc to allow easy fulfillment of automatic dependencies--justdb for install, upgrade, and erasure. This causes a database update without actually adding or removing any files.BuildArchitectures: tag to spec file to enable builds for alternate or multiple architectures.--noorder option to skip package reordering
os_canon entries for BSD/OS and NextStep
find-requires script now adds requires for shell scripts
Obsoletes: tag. An upgrade to a package that obsoletes another package will remove any package that has been obsoleted.%doc (now just name-version instead of name-version-release)
patch greater than version 2.1
--setperms problems
--rmsource option added to remove sources and spec file after successful RPM build-p prog%attr(mode, user, group [, dirmode])%defattr() to set the default attributes for all files following this tag (or until a new defattr tag is reached)%defverify() to set default verify paramters for all files following this tag (or until a new defverify tag is reached)Root: is now deprecated. Use BuildRoot: instead.DocDir: to set alternate documentation directory (default is /usr/doc)%define macros only work if they start on the first character of a line. This is so that you can use the string ``%define'' in comments and/or changelog entries.tag names, buildarch, buildos, buildarch_lc, buildos_lc, PATCHn, SOURCEn, PATCHURLn, SOURCEURLn, sourcedir, builddir, optflagsrequire_distribution, require_icon, require_vendor%lang() now available in the %files section to specify which language set certain files belong to.%description -l <lang> allows you to add descriptions in specified languages.Summary(lang): so that summaries may be given in specified languages.buildshell in rpmrc to set shell used for build scripts (default is /bin/sh)instchangelog in rpmrc to limit the number of changelog entries that are stored in your RPM database for each package installed (use -1 to store all of them). Default is 5.--relocate oldpath=newpath to relocate everything that would have been in oldpath into newpath. This only works if oldpath is specified as a Prefix: or if you use --badreloc to force it.Prefixes: tag so that you can specify more than one relocatable area for a package. Each prefix should be space delimited.