- add DBI_WRITECURSOR to map to db3 flags with CDB database model.
- add rpmdbSetIteratorRewrite to warn of pending lazy (re-)writes.
- harden rpmdb iterators from damaged header instance segfaults.
+ - add cron/logrotate scripts to save installed package filenames.
4.0 -> 4.0.[12]
- add doxygen and lclint annotations most everywhere.
setperms:
@for f in $(rpmbin_PROGRAMS) ; do\
$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(rpmbindir)/$$f ;\
- $(__CHMOD) u+s $(DESTDIR)$(rpmbindir)/$$f ;\
+ $(__CHMOD) g+s $(DESTDIR)$(rpmbindir)/$$f ;\
done
@for f in $(bin_PROGRAMS) ; do\
$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(bindir)/$$f ;\
done
@for f in $(pkglib_PROGRAMS) ; do\
$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir)/$$f ;\
- $(__CHMOD) u+s $(DESTDIR)$(pkglibdir)/$$f ;\
+ $(__CHMOD) g+s $(DESTDIR)$(pkglibdir)/$$f ;\
done
@for f in $(pkglib_SCRIPTS) ; do\
$(__CHOWN) ${RPMUSER}.${RPMGROUP} $(DESTDIR)$(pkglibdir)/$$f ;\
-@$(__CHMOD) 0755 $(DESTDIR)$(varprefix)/lib/rpm/Desktop
-@$(__CHMOD) 0664 $(DESTDIR)$(varprefix)/lib/rpm/__db.*
-.PHONY: unsetuid
-unsetuid:
+.PHONY: unsetgid
+unsetgid:
@for f in $(rpmbin_PROGRAMS) ; do\
- $(__CHMOD) u-s $(DESTDIR)$(rpmbindir)/$$f ;\
+ $(__CHMOD) g-s $(DESTDIR)$(rpmbindir)/$$f ;\
done
@for f in $(pkglib_PROGRAMS) ; do\
- $(__CHMOD) u-s $(DESTDIR)$(pkglibdir)/$$f ;\
+ $(__CHMOD) g-s $(DESTDIR)$(pkglibdir)/$$f ;\
done
.PHONY: tar
.libs
*.la
*.lo
+config.cache
config.log
db_config.h
libtool
include.tcl
db.h
db_int.h
+berkeley_db_svc
db_archive
db_checkpoint
db_deadlock
db_stat
db_upgrade
db_verify
+db_lib_objs
fi->h = rpmdbNextIterator(psm->mi);
if (fi->h)
fi->h = headerLink(fi->h);
+else {
+fprintf(stderr, "*** PSM_RDB_LOAD: header #%u not found\n", fi->record);
+}
psm->mi = rpmdbFreeIterator(psm->mi);
rc = (fi->h ? RPMRC_OK : RPMRC_FAIL);
break;
#/*! \page config_macros Default configuration: /usr/lib/rpm/macros
# \verbatim
#
-# $Id: macros.in,v 1.75 2001/05/09 22:58:56 jbj Exp $
+# $Id: macros.in,v 1.76 2001/05/13 17:55:58 jbj Exp $
#
# This is a global RPM configuration file. All changes made here will
# be lost when the rpm package is upgraded. Any per-system configuration
%_dbapi_rebuild 3
#
-# token Berkeley db flag or value
-# =================================================
+# token works? Berkeley db flag or value
+#==================================================
+#---------------------- DBENV->open flags:
+# create DB_CREATE
+# joinenv DB_JOIN_ENV
+# mpool DB_INIT_MPOOL
+# cdb ~~~ DB_INIT_CDB
+# txn ??? DB_INIT_TXN
+# log ??? DB_INIT_LOG
+# lock ??? DB_INIT_LOCK
+# recover ??? DB_RECOVER
+# recover_fatal ??? DB_RECOVER_FATAL
+# private ~~~ DB_PRIVATE
+# lockdown ??? DB_LOCKDOWN
+# shared ~~~ DB_INIT_SYSTEM_MEM
+# thread ??? DB_THREAD (useless w/o posix mutexes on linux)
+#---------------------- DB->open flags:
+# excl ??? DB_EXCL
+# nommap ??? DB_NOMMAP
+# rdonly DB_RDONLY
+#---------------------- DB->open types:
+# btree ~~~ DB_BTREE
# hash DB_HASH
-# btree DB_BTREE
-# unknown DB_UNKNOWN
+# recno ??? DB_RECNO
+# queue ??? DB_QUEUE
+# unknown ~~~ DB_UNKNOWN
#
# See the db3-devel package, or http://www.sleepycat.com for Berkeley db-3.x
# documentation.
#
# Always on in rpm configuration:
-# usecursors Should DB3 cursors be used in get/put/del ?
-# lockdbfd Should the file be locked using fcntl shared/exclusive locks?
+# usecursors (always on) Should DB3 cursors be used in get/put/del ?
+# lockdbfd (always on Packages) Should fcnt;(2) locking be used ?
#
# Other tokens:
# nofsync Should fsync(2) be done after every write?
# temporaray Remove index when closing rpm database.
#
-# XXX This is what's coming down the pike ...
-#%__dbi_other usedbenv create joinenv cdb mpool shared \
+# XXX Use a CDB model database for concurrent access (under development,
+# cursor teardown with signals needs work, and much more.)
+#%__dbi_other usedbenv create joinenv cdb mpool \
# mp_mmapsize=8Mb mp_size=512Kb usecursors
+# XXX Use transactions and logs for rpmdb durability (no clue yet):
+#%__dbi_other usedbenv create joinenv mpool txn log \
+# mp_mmapsize=8Mb mp_size=512Kb usecursors
+
+# XXX The "traditional" rpmdb shared/exclusive fcntl(2) lock on Packages:
%__dbi_other usecursors
+# Note: adding nofsync here speeds up --rebuilddb a lot.
%__dbi_rebuild nofsync !log !txn !cdb
%__dbi_transient %{__dbi_rebuild} temporary
%__dbi_perms perms=0644
+# This is a colon (or white space) separated list of tokens for Berkeley
+# dbi configuration. The configuration is conditioned on an internal
+# %{_rpmdb_rebuild} switch to permit rebuilding with a different configuration.
+#
+
+#
+#--- Hash database configuration
%__dbi_htconfig \
hash \
%{__dbi_other}\
%{__dbi_perms}\
%{nil}
+%__dbi_htconfig_current %{__dbi_htconfig}
+%__dbi_htconfig_rebuild %{__dbi_htconfig} %{__dbi_rebuild}
+
+%_dbi_htconfig \
+ %{?_rpmdb_rebuild:%{__dbi_htconfig_rebuild}}\
+ %{!?_rpmdb_rebuild:%{__dbi_htconfig_current}}\
+%{nil}
+
+#
+#--- Btree database configuration
%__dbi_btconfig \
btree bt_dup bt_dupsort\
%{__dbi_other}\
%{__dbi_perms}\
%{nil}
-%__dbi_htconfig_current %{__dbi_htconfig}
-%__dbi_htconfig_rebuild %{__dbi_htconfig} %{__dbi_rebuild}
-
%__dbi_btconfig_current %{__dbi_btconfig}
%__dbi_btconfig_rebuild %{__dbi_btconfig} %{__dbi_rebuild}
-# This is a colon (or white space) separated list of tokens for Berkeley
-# dbi configuration. The configuration is conditioned on an internal
-# %{_rpmdb_rebuild} switch to permit rebuilding with a different configuration.
-#
-%_dbi_htconfig \
- %{?_rpmdb_rebuild:%{__dbi_htconfig_rebuild}}\
- %{!?_rpmdb_rebuild:%{__dbi_htconfig_current}}\
-%{nil}
-
%_dbi_btconfig \
%{?_rpmdb_rebuild:%{__dbi_btconfig_rebuild}}\
%{!?_rpmdb_rebuild:%{__dbi_btconfig_current}}\
# The list of tags for which indices will be built.
%_dbi_tags Packages:Name:Basenames:Group:Requirename:Providename:Conflictname:Triggername:Dirnames:Requireversion:Provideversion:Installtid:Removetid:Depends
-# "Packages" needs fcntl shared/exclusive lock.
+# "Packages" should have shared/exclusive fcntl(2) lock using "lockdbfd".
%_dbi_config_Packages %{_dbi_htconfig} lockdbfd
# "Depends" is a per-transaction cache of known dependency resolutions.
make DESTDIR="$RPM_BUILD_ROOT" install
+%ifos linux
+
+# Save list of packages through cron
+mkdir -p ${RPM_BUILD_ROOT}/etc/cron.daily
+install -m 755 scripts/rpm.daily ${RPM_BUILD_ROOT}/etc/cron.daily/rpm
+
+mkdir -p ${RPM_BUILD_ROOT}/etc/logrotate.d
+install -m 755 scripts/rpm.log ${RPM_BUILD_ROOT}/etc/logrotate.d/rpm
+
mkdir -p $RPM_BUILD_ROOT/etc/rpm
cat << E_O_F > $RPM_BUILD_ROOT/etc/rpm/macros.db1
%%_dbapi 1
E_O_F
+%endif
+
%if %{with_apidocs}
gzip -9n apidocs/man/man*/* || :
%endif
%defattr(-,root,root)
%doc RPM-PGP-KEY RPM-GPG-KEY CHANGES GROUPS doc/manual/[a-z]*
%attr(0755, @RPMUSER@, @RPMGROUP@) /bin/rpm
+
+%ifos linux
+%config(missingok) /etc/cron.daily/rpm
+%config(missingok) /etc/logrotate.d/rpm
%dir /etc/rpm
%config(missingok) /etc/rpm/macros.db1
+%endif
+
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpm2cpio
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/gendiff
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/bin/rpmdb
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/convertrpmrc.sh
%attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/macros
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/mkinstalldirs
+%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpm.*
%attr(0755, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpm[deiukqv]
%attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmpopt*
%attr(0644, @RPMUSER@, @RPMGROUP@) %{__prefix}/lib/rpm/rpmrc
extern int _noDirTokens;
static int _rebuildinprogress = 0;
-static int _db_filter_dups = 0;
+static int _db_filter_dups = 1;
/*@-exportlocal@*/
int _filterDbDups = 0; /* Filter duplicate entries ? (bug in pre rpm-3.0.4) */
int rc = -1;
int xx;
+ /* XXX
+ * There's a segfault here with CDB access, let's treat the symptom
+ * while diagnosing the disease.
+ */
+ if (name == NULL || *name == '\0')
+ return 0;
+
dbi = dbiOpen(rpmdb, RPMTAG_NAME, 0);
if (dbi) {
DBC * dbcursor = NULL;
find-prov.pl find-req.pl cpanflute find-provides.perl \
find-requires.perl get_magic.pl getpo.sh http.req \
magic.prov magic.req perl.prov perl.req rpmdiff rpmdiff.cgi \
+ rpm.daily rpm.log rpm.xinetd \
sql.prov sql.req tcl.req trpm u_pkg.sh \
vpkg-provides.sh vpkg-provides2.sh
find-prov.pl find-req.pl cpanflute find-provides.perl \
find-requires.perl get_magic.pl getpo.sh http.req \
magic.prov magic.req perl.prov perl.req rpmdiff rpmdiff.cgi \
+ rpm.daily rpm.log rpm.xinetd \
sql.prov sql.req tcl.req u_pkg.sh \
vpkg-provides.sh vpkg-provides2.sh