- update to 4.11.1-rc1
- drop upstreamed/unused patches
This commit is contained in:
parent
e033e9868a
commit
68ff3e10f7
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,3 +7,4 @@
|
|||||||
/rpm-4.10.90.git11989.tar.bz2
|
/rpm-4.10.90.git11989.tar.bz2
|
||||||
/rpm-4.11.0-beta1.tar.bz2
|
/rpm-4.11.0-beta1.tar.bz2
|
||||||
/rpm-4.11.0.1.tar.bz2
|
/rpm-4.11.0.1.tar.bz2
|
||||||
|
/rpm-4.11.1-rc1.tar.bz2
|
||||||
|
@ -1,117 +0,0 @@
|
|||||||
From 96807d2f3dcec583ca54b503e7fc70014115e308 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Johannes Dewender <rpm@JonnyJD.net>
|
|
||||||
Date: Thu, 4 Apr 2013 17:23:43 +0200
|
|
||||||
Subject: [PATCH] Finish lua 5.2 support, trac #865
|
|
||||||
|
|
||||||
Lua52 support was started with ac959fed0082cb253d45c7a04866e8654e962442.
|
|
||||||
|
|
||||||
Compilation tested with Lua 5.2.1 and Lua 5.1.5.
|
|
||||||
|
|
||||||
The short typerror() snippet is taken from luaL_typerror in Lua 5.1.5
|
|
||||||
(MIT license)
|
|
||||||
|
|
||||||
Signed-off-by: Johannes Dewender <rpm@JonnyJD.net>
|
|
||||||
---
|
|
||||||
luaext/lposix.c | 21 +++++++++++++++------
|
|
||||||
rpmio/rpmlua.c | 8 ++++++++
|
|
||||||
2 files changed, 23 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/luaext/lposix.c b/luaext/lposix.c
|
|
||||||
index f3c787e..a59be3e 100644
|
|
||||||
--- a/luaext/lposix.c
|
|
||||||
+++ b/luaext/lposix.c
|
|
||||||
@@ -58,6 +58,15 @@ static const char *filetype(mode_t m)
|
|
||||||
|
|
||||||
typedef int (*Selector)(lua_State *L, int i, const void *data);
|
|
||||||
|
|
||||||
+/* implemented as luaL_typerror until lua 5.1, dropped in 5.2
|
|
||||||
+ * (C) 1994-2012 Lua.org, PUC-Rio. MIT license
|
|
||||||
+ */
|
|
||||||
+static int typerror (lua_State *L, int narg, const char *tname) {
|
|
||||||
+ const char *msg = lua_pushfstring(L, "%s expected, got %s",
|
|
||||||
+ tname, luaL_typename(L, narg));
|
|
||||||
+ return luaL_argerror(L, narg, msg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int doselection(lua_State *L, int i, const char *const S[], Selector F, const void *data)
|
|
||||||
{
|
|
||||||
if (lua_isnone(L, i))
|
|
||||||
@@ -139,7 +148,7 @@ static uid_t mygetuid(lua_State *L, int i)
|
|
||||||
return (p==NULL) ? -1 : p->pw_uid;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- return luaL_typerror(L, i, "string or number");
|
|
||||||
+ return typerror(L, i, "string or number");
|
|
||||||
}
|
|
||||||
|
|
||||||
static gid_t mygetgid(lua_State *L, int i)
|
|
||||||
@@ -154,7 +163,7 @@ static gid_t mygetgid(lua_State *L, int i)
|
|
||||||
return (g==NULL) ? -1 : g->gr_gid;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- return luaL_typerror(L, i, "string or number");
|
|
||||||
+ return typerror(L, i, "string or number");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -573,7 +582,7 @@ static int Pgetpasswd(lua_State *L) /** getpasswd(name or id) */
|
|
||||||
else if (lua_isstring(L, 1))
|
|
||||||
p = getpwnam(lua_tostring(L, 1));
|
|
||||||
else
|
|
||||||
- luaL_typerror(L, 1, "string or number");
|
|
||||||
+ typerror(L, 1, "string or number");
|
|
||||||
if (p==NULL)
|
|
||||||
lua_pushnil(L);
|
|
||||||
else
|
|
||||||
@@ -590,7 +599,7 @@ static int Pgetgroup(lua_State *L) /** getgroup(name or id) */
|
|
||||||
else if (lua_isstring(L, 1))
|
|
||||||
g = getgrnam(lua_tostring(L, 1));
|
|
||||||
else
|
|
||||||
- luaL_typerror(L, 1, "string or number");
|
|
||||||
+ typerror(L, 1, "string or number");
|
|
||||||
if (g==NULL)
|
|
||||||
lua_pushnil(L);
|
|
||||||
else
|
|
||||||
@@ -709,10 +718,10 @@ static int Puname(lua_State *L) /** uname([string]) */
|
|
||||||
luaL_buffinit(L, &b);
|
|
||||||
for (s=luaL_optstring(L, 1, "%s %n %r %v %m"); *s; s++)
|
|
||||||
if (*s!='%')
|
|
||||||
- luaL_putchar(&b, *s);
|
|
||||||
+ luaL_addchar(&b, *s);
|
|
||||||
else switch (*++s)
|
|
||||||
{
|
|
||||||
- case '%': luaL_putchar(&b, *s); break;
|
|
||||||
+ case '%': luaL_addchar(&b, *s); break;
|
|
||||||
case 'm': luaL_addstring(&b,u.machine); break;
|
|
||||||
case 'n': luaL_addstring(&b,u.nodename); break;
|
|
||||||
case 'r': luaL_addstring(&b,u.release); break;
|
|
||||||
diff --git a/rpmio/rpmlua.c b/rpmio/rpmlua.c
|
|
||||||
index 86d0408..0576318 100644
|
|
||||||
--- a/rpmio/rpmlua.c
|
|
||||||
+++ b/rpmio/rpmlua.c
|
|
||||||
@@ -7,14 +7,22 @@
|
|
||||||
#include <lposix.h>
|
|
||||||
#include <lrexlib.h>
|
|
||||||
|
|
||||||
+/* replaced in 5.1 */
|
|
||||||
#ifndef lua_open
|
|
||||||
#define lua_open() luaL_newstate()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* defined as lua_objlen in 5.1 */
|
|
||||||
#ifndef lua_strlen
|
|
||||||
#define lua_strlen(L,i) lua_rawlen(L, (i))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* deprecated in 5.1, defined as lua_objlen in 5.1 */
|
|
||||||
+#ifndef luaL_getn
|
|
||||||
+#define luaL_getn(L,i) ((int)lua_rawlen(L, i))
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* define added in 5.2 */
|
|
||||||
#ifndef lua_pushglobaltable
|
|
||||||
#define lua_pushglobaltable(L) lua_pushvalue(L, LUA_GLOBALSINDEX)
|
|
||||||
#endif
|
|
||||||
--
|
|
||||||
1.8.1.3
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
commit a712252392eca75443ca45c10a72873cabec7963
|
|
||||||
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Mon Jan 28 12:50:39 2013 +0200
|
|
||||||
|
|
||||||
Be more careful about skipping shared file/directory creation
|
|
||||||
|
|
||||||
- Only skip shared file/dir creation if its actually being created
|
|
||||||
by another package. Previously we could've decided to skip an entry
|
|
||||||
where the other file was also being skipped for some other reason.
|
|
||||||
- Ensure %ghost entries always have FA_SKIP on install, previously
|
|
||||||
they often were FA_CREATE which makes no sense for %ghost. We dont
|
|
||||||
encounter %ghosts at all during install in the FSM as they dont
|
|
||||||
exist in the payload, but the file disposition calculations need
|
|
||||||
to take them into account now that we're avoiding redundant creates.
|
|
||||||
- Fixes a regression from commit f7f5f88f9f3d6587e747b034ccb64a3f00ff4e1e
|
|
||||||
which unearthed the %ghost FA_CREATE issue, reported here:
|
|
||||||
http://lists.fedoraproject.org/pipermail/buildsys/2013-January/004047.html
|
|
||||||
|
|
||||||
diff --git a/lib/transaction.c b/lib/transaction.c
|
|
||||||
index 6e9e025..397f23d 100644
|
|
||||||
--- a/lib/transaction.c
|
|
||||||
+++ b/lib/transaction.c
|
|
||||||
@@ -572,7 +572,8 @@ assert(otherFi != NULL);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Skip create on all but the first instance of a shared file */
|
|
||||||
- if (rpmfsGetAction(otherFs, otherFileNum) != FA_UNKNOWN)
|
|
||||||
+ rpmFileAction oaction = rpmfsGetAction(otherFs, otherFileNum);
|
|
||||||
+ if (oaction != FA_UNKNOWN && !XFA_SKIPPING(oaction))
|
|
||||||
rpmfsSetAction(fs, i, FA_SKIP);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -760,6 +761,17 @@ static void skipInstallFiles(const rpmts ts, rpmte p)
|
|
||||||
ix = rpmfiDX(fi);
|
|
||||||
drc[ix]++;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Always skip %ghosts on install.
|
|
||||||
+ * XXX: Should we skip directory creation if there are only
|
|
||||||
+ * %ghosts in it? Traditionally we create the (empty) directory, so
|
|
||||||
+ * preserving that behavior for now at least: leave the refcount alone.
|
|
||||||
+ */
|
|
||||||
+ if (rpmfiFFlags(fi) & RPMFILE_GHOST) {
|
|
||||||
+ rpmfsSetAction(fs, i, FA_SKIP);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Don't bother with skipped files */
|
|
||||||
if (XFA_SKIPPING(rpmfsGetAction(fs, i))) {
|
|
||||||
drc[ix]--; dff[ix] = 1;
|
|
@ -1,56 +0,0 @@
|
|||||||
commit 452553111b9929074bcbb77a49c041582daae0e8
|
|
||||||
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue Feb 5 10:11:19 2013 +0200
|
|
||||||
|
|
||||||
Check for stale db locks when opening write-cursors
|
|
||||||
|
|
||||||
- During long-running transactions its entirely possible for some
|
|
||||||
other player to come and go leaving stale locks behind and cause
|
|
||||||
the transaction to get stuck until the cavalry comes along in the
|
|
||||||
form of somebody else opening the rpmdb, clearing the blockage.
|
|
||||||
- Presumably dbenv->failchk() is not entirely free of cost so we only
|
|
||||||
do this for writes which are way more critical and also more prone to
|
|
||||||
getting stuck.
|
|
||||||
- dbenv->failchk() could return DB_RUNRECOVER in which case we should
|
|
||||||
abort everything but we lack a mechanism to do it... just add
|
|
||||||
a reminder comment for now.
|
|
||||||
|
|
||||||
diff --git a/lib/backend/db3.c b/lib/backend/db3.c
|
|
||||||
index 656486b..de8071b 100644
|
|
||||||
--- a/lib/backend/db3.c
|
|
||||||
+++ b/lib/backend/db3.c
|
|
||||||
@@ -248,7 +248,7 @@ dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
|
|
||||||
DB * db = dbi->dbi_db;
|
|
||||||
DBC * cursor;
|
|
||||||
int cflags;
|
|
||||||
- int rc;
|
|
||||||
+ int rc = 0;
|
|
||||||
uint32_t eflags = db_envflags(db);
|
|
||||||
|
|
||||||
/* DB_WRITECURSOR requires CDB and writable db */
|
|
||||||
@@ -259,8 +259,23 @@ dbiCursor dbiCursorInit(dbiIndex dbi, unsigned int flags)
|
|
||||||
} else
|
|
||||||
cflags = 0;
|
|
||||||
|
|
||||||
- rc = db->cursor(db, NULL, &cursor, cflags);
|
|
||||||
- rc = cvtdberr(dbi, "db->cursor", rc, _debug);
|
|
||||||
+ /*
|
|
||||||
+ * Check for stale locks which could block writes "forever".
|
|
||||||
+ * XXX: Should we also do this on reads? Reads are less likely
|
|
||||||
+ * to get blocked so it seems excessive...
|
|
||||||
+ * XXX: On DB_RUNRECOVER, we should abort everything. Now
|
|
||||||
+ * we'll just fail to open a cursor again and again and again.
|
|
||||||
+ */
|
|
||||||
+ if (cflags & DB_WRITECURSOR) {
|
|
||||||
+ DB_ENV *dbenv = db->get_env(db);
|
|
||||||
+ rc = dbenv->failchk(dbenv, 0);
|
|
||||||
+ rc = cvtdberr(dbi, "dbenv->failchk", rc, _debug);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (rc == 0) {
|
|
||||||
+ rc = db->cursor(db, NULL, &cursor, cflags);
|
|
||||||
+ rc = cvtdberr(dbi, "db->cursor", rc, _debug);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (rc == 0) {
|
|
||||||
dbc = xcalloc(1, sizeof(*dbc));
|
|
@ -1,138 +0,0 @@
|
|||||||
commit e7d5980e2a7b091d973171144de04397204ebcd7
|
|
||||||
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue May 28 08:56:22 2013 +0300
|
|
||||||
|
|
||||||
Serialize BDB environment open/close (RhBug:924417 etc)
|
|
||||||
|
|
||||||
- Introduce Yet Another Broken Lock[*] to serialize BDB environment open:
|
|
||||||
otherwise we can end up calling dbenv->failchk() while another process
|
|
||||||
is just joining the environment, leading to transient "Thread died in..."
|
|
||||||
DB_RUNRECOVER errors. Also prevents races on chrooted operations where
|
|
||||||
we remove the entire environment on close.
|
|
||||||
- This should also make it possible to handle at least some cases of
|
|
||||||
real DB_RUNRECOVER errors by just nuking the environment but that's
|
|
||||||
another topic...
|
|
||||||
|
|
||||||
[*] YABL as this is nowhere near foolproof or sufficient for all
|
|
||||||
the possible variants, but better than not having it...
|
|
||||||
(cherry picked from commit ad874d60e3804f1bcd64f3510e1e2dfbf81456cd)
|
|
||||||
|
|
||||||
diff --git a/lib/backend/db3.c b/lib/backend/db3.c
|
|
||||||
index de8071b..9d385c6 100644
|
|
||||||
--- a/lib/backend/db3.c
|
|
||||||
+++ b/lib/backend/db3.c
|
|
||||||
@@ -57,10 +57,42 @@ static uint32_t db_envflags(DB * db)
|
|
||||||
return eflags;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Try to acquire db environment open/close serialization lock.
|
|
||||||
+ * Return the open, locked fd on success, -1 on failure.
|
|
||||||
+ */
|
|
||||||
+static int serialize_env(const char *dbhome)
|
|
||||||
+{
|
|
||||||
+ char *lock_path = rstrscat(NULL, dbhome, "/.dbenv.lock", NULL);
|
|
||||||
+ mode_t oldmask = umask(022);
|
|
||||||
+ int fd = open(lock_path, (O_RDWR|O_CREAT), 0644);
|
|
||||||
+ umask(oldmask);
|
|
||||||
+
|
|
||||||
+ if (fd >= 0) {
|
|
||||||
+ int rc;
|
|
||||||
+ struct flock info;
|
|
||||||
+ memset(&info, 0, sizeof(info));
|
|
||||||
+ info.l_type = F_WRLCK;
|
|
||||||
+ info.l_whence = SEEK_SET;
|
|
||||||
+ do {
|
|
||||||
+ rc = fcntl(fd, F_SETLKW, &info);
|
|
||||||
+ } while (rc == -1 && errno == EINTR);
|
|
||||||
+
|
|
||||||
+ if (rc == -1) {
|
|
||||||
+ close(fd);
|
|
||||||
+ fd = -1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ free(lock_path);
|
|
||||||
+ return fd;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int db_fini(rpmdb rdb, const char * dbhome)
|
|
||||||
{
|
|
||||||
DB_ENV * dbenv = rdb->db_dbenv;
|
|
||||||
int rc;
|
|
||||||
+ int lockfd = -1;
|
|
||||||
uint32_t eflags = 0;
|
|
||||||
|
|
||||||
if (dbenv == NULL)
|
|
||||||
@@ -72,6 +104,9 @@ static int db_fini(rpmdb rdb, const char * dbhome)
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) dbenv->get_open_flags(dbenv, &eflags);
|
|
||||||
+ if (!(eflags & DB_PRIVATE))
|
|
||||||
+ lockfd = serialize_env(dbhome);
|
|
||||||
+
|
|
||||||
rc = dbenv->close(dbenv, 0);
|
|
||||||
rc = dbapi_err(rdb, "dbenv->close", rc, _debug);
|
|
||||||
|
|
||||||
@@ -89,6 +124,10 @@ static int db_fini(rpmdb rdb, const char * dbhome)
|
|
||||||
rpmlog(RPMLOG_DEBUG, "removed db environment %s\n", dbhome);
|
|
||||||
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (lockfd >= 0)
|
|
||||||
+ close(lockfd);
|
|
||||||
+
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -122,6 +161,7 @@ static int db_init(rpmdb rdb, const char * dbhome)
|
|
||||||
DB_ENV *dbenv = NULL;
|
|
||||||
int rc, xx;
|
|
||||||
int retry_open = 2;
|
|
||||||
+ int lockfd = -1;
|
|
||||||
struct dbConfig_s * cfg = &rdb->cfg;
|
|
||||||
/* This is our setup, thou shall not have other setups before us */
|
|
||||||
uint32_t eflags = (DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB);
|
|
||||||
@@ -176,6 +216,24 @@ static int db_init(rpmdb rdb, const char * dbhome)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
+ * Serialize shared environment open (and clock) via fcntl() lock.
|
|
||||||
+ * Otherwise we can end up calling dbenv->failchk() while another
|
|
||||||
+ * process is joining the environment, leading to transient
|
|
||||||
+ * DB_RUNRECOVER errors. Also prevents races wrt removing the
|
|
||||||
+ * environment (eg chrooted operation). Silently fall back to
|
|
||||||
+ * private environment on failure to allow non-privileged queries
|
|
||||||
+ * to "work", broken as it might be.
|
|
||||||
+ */
|
|
||||||
+ if (!(eflags & DB_PRIVATE)) {
|
|
||||||
+ lockfd = serialize_env(dbhome);
|
|
||||||
+ if (lockfd < 0) {
|
|
||||||
+ eflags |= DB_PRIVATE;
|
|
||||||
+ retry_open--;
|
|
||||||
+ rpmlog(RPMLOG_DEBUG, "serialize failed, using private dbenv\n");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
* Actually open the environment. Fall back to private environment
|
|
||||||
* if we dont have permission to join/create shared environment or
|
|
||||||
* system doesn't support it..
|
|
||||||
@@ -208,6 +266,8 @@ static int db_init(rpmdb rdb, const char * dbhome)
|
|
||||||
rdb->db_dbenv = dbenv;
|
|
||||||
rdb->db_opens = 1;
|
|
||||||
|
|
||||||
+ if (lockfd >= 0)
|
|
||||||
+ close(lockfd);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
errxit:
|
|
||||||
@@ -216,6 +276,8 @@ errxit:
|
|
||||||
xx = dbenv->close(dbenv, 0);
|
|
||||||
xx = dbapi_err(rdb, "dbenv->close", xx, _debug);
|
|
||||||
}
|
|
||||||
+ if (lockfd >= 0)
|
|
||||||
+ close(lockfd);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
commit 9b734cee5dc9805a6f8d24c3f30ed82a7aef5673
|
|
||||||
Author: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed May 22 08:38:53 2013 +0300
|
|
||||||
|
|
||||||
Only consider files with .pm suffix as perl modules (RhBug:927211)
|
|
||||||
|
|
||||||
- Newer file is more eager to flag files as Perl module source,
|
|
||||||
causing false provides to be generated. Require both magic
|
|
||||||
and path to match for perllib classification to reduce the pain.
|
|
||||||
|
|
||||||
diff --git a/fileattrs/perllib.attr b/fileattrs/perllib.attr
|
|
||||||
index 4e54225..fcad480 100644
|
|
||||||
--- a/fileattrs/perllib.attr
|
|
||||||
+++ b/fileattrs/perllib.attr
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
%__perllib_provides %{_rpmconfigdir}/perl.prov
|
|
||||||
%__perllib_requires %{_rpmconfigdir}/perl.req
|
|
||||||
%__perllib_magic ^Perl[[:digit:]] module source.*
|
|
||||||
+%__perllib_path \\.pm$
|
|
||||||
+%__perllib_flags magic_and_path
|
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/macros.in b/macros.in
|
|
||||||
index 830072a..bdce7f4 100644
|
|
||||||
--- a/macros.in
|
|
||||||
+++ b/macros.in
|
|
||||||
@@ -805,6 +805,8 @@ print (t)\
|
|
||||||
export RPM_BUILD_ROOT}\
|
|
||||||
%{?_javaclasspath:CLASSPATH=\"%{_javaclasspath}\"\
|
|
||||||
export CLASSPATH}\
|
|
||||||
+ PKG_CONFIG_PATH=\"%{_libdir}/pkgconfig:%{_datadir}/pkgconfig\"\
|
|
||||||
+ export PKG_CONFIG_PATH\
|
|
||||||
\
|
|
||||||
%{verbose:set -x}%{!verbose:exec > /dev/null}\
|
|
||||||
umask 022\
|
|
@ -1,127 +0,0 @@
|
|||||||
diff --git a/lib/depends.c b/lib/depends.c
|
|
||||||
index 69aecbb..5101d32 100644
|
|
||||||
--- a/lib/depends.c
|
|
||||||
+++ b/lib/depends.c
|
|
||||||
@@ -386,6 +386,108 @@ static int rpmdbProvides(rpmts ts, depCache dcache, rpmds dep)
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Temporary support for live-conversion of the filesystem hierarchy
|
|
||||||
+ * mailto: kay@redhat.com, harald@redhat.com
|
|
||||||
+ * https://fedoraproject.org/wiki/Features/UsrMove
|
|
||||||
+ *
|
|
||||||
+ * X-CheckUnifiedSystemdir:
|
|
||||||
+ * /bin, /sbin, /lib, /lib64 --> /usr
|
|
||||||
+ *
|
|
||||||
+ * X-CheckUnifiedBindir:
|
|
||||||
+ * /usr/sbin -> /usr/bin
|
|
||||||
+ *
|
|
||||||
+ * X-CheckMultiArchLibdir:
|
|
||||||
+ * /usr/lib64 /usr/lib/<platform tuple> (e.g. x86_64-linux-gnu)
|
|
||||||
+ *
|
|
||||||
+ * This code is not needed for new installations, it can be removed after
|
|
||||||
+ * updates from older systems are no longer supported: Fedora 19 / RHEL 8.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static int CheckLink(const char *dir, const char *root)
|
|
||||||
+{
|
|
||||||
+ char *d = NULL;
|
|
||||||
+ struct stat sbuf;
|
|
||||||
+ int rc = 0;
|
|
||||||
+
|
|
||||||
+ if (!root)
|
|
||||||
+ root = "/";
|
|
||||||
+
|
|
||||||
+ rasprintf(&d, "%s%s", root, dir);
|
|
||||||
+ if (!d) {
|
|
||||||
+ rc = -1;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* directory or symlink does not exist, all is fine */
|
|
||||||
+ if (lstat(d, &sbuf) < 0) {
|
|
||||||
+ rc = 1;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* if it is a symlink, all is fine */
|
|
||||||
+ if (S_ISLNK(sbuf.st_mode))
|
|
||||||
+ rc = 1;
|
|
||||||
+
|
|
||||||
+exit:
|
|
||||||
+ free(d);
|
|
||||||
+ return rc;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int CheckFilesystemHierarchy(rpmds * dsp, const char *root)
|
|
||||||
+{
|
|
||||||
+ static const char *dirs[] = { "bin", "sbin", "lib", "lib64" };
|
|
||||||
+ int check;
|
|
||||||
+ int i;
|
|
||||||
+ rpmds ds;
|
|
||||||
+ int rc = 0;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < sizeof(dirs) / sizeof(dirs[0]); i++) {
|
|
||||||
+ check = CheckLink(dirs[i], root);
|
|
||||||
+ if (check < 0) {
|
|
||||||
+ rc = -1;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (check == 0)
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME,
|
|
||||||
+ "rpmlib(X-CheckUnifiedSystemdir)", "1",
|
|
||||||
+ RPMSENSE_EQUAL);
|
|
||||||
+ rpmdsMerge(dsp, ds);
|
|
||||||
+ rpmdsFree(ds);
|
|
||||||
+
|
|
||||||
+ check = CheckLink("usr/lib64", root);
|
|
||||||
+ if (check < 0) {
|
|
||||||
+ rc = -1;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+ if (check > 0) {
|
|
||||||
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME,
|
|
||||||
+ "rpmlib(X-CheckMultiArchLibdir)", "1",
|
|
||||||
+ RPMSENSE_EQUAL);
|
|
||||||
+ rpmdsMerge(dsp, ds);
|
|
||||||
+ rpmdsFree(ds);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ check = CheckLink("usr/sbin", root);
|
|
||||||
+ if (check < 0) {
|
|
||||||
+ rc = -1;
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+ if (check > 0) {
|
|
||||||
+ ds = rpmdsSingle(RPMTAG_PROVIDENAME,
|
|
||||||
+ "rpmlib(X-CheckUnifiedBindir)", "1",
|
|
||||||
+ RPMSENSE_EQUAL);
|
|
||||||
+ rpmdsMerge(dsp, ds);
|
|
||||||
+ rpmdsFree(ds);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+exit:
|
|
||||||
+ return rc;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* Check dep for an unsatisfied dependency.
|
|
||||||
* @param ts transaction set
|
|
||||||
@@ -410,9 +512,11 @@ retry:
|
|
||||||
*/
|
|
||||||
if (dsflags & RPMSENSE_RPMLIB) {
|
|
||||||
static int oneshot = -1;
|
|
||||||
- if (oneshot)
|
|
||||||
+ if (oneshot) {
|
|
||||||
oneshot = rpmdsRpmlib(&rpmlibP, NULL);
|
|
||||||
-
|
|
||||||
+ CheckFilesystemHierarchy(&rpmlibP, rpmtsRootDir(ts));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (rpmlibP != NULL && rpmdsSearch(rpmlibP, dep) >= 0) {
|
|
||||||
rpmdsNotify(dep, "(rpmlib provides)", rc);
|
|
||||||
goto exit;
|
|
26
rpm.spec
26
rpm.spec
@ -11,7 +11,8 @@
|
|||||||
|
|
||||||
%define rpmhome /usr/lib/rpm
|
%define rpmhome /usr/lib/rpm
|
||||||
|
|
||||||
%define rpmver 4.11.0.1
|
%define rpmver 4.11.1
|
||||||
|
%define snapver rc1
|
||||||
%define srcver %{rpmver}%{?snapver:-%{snapver}}
|
%define srcver %{rpmver}%{?snapver:-%{snapver}}
|
||||||
|
|
||||||
%define bdbname libdb
|
%define bdbname libdb
|
||||||
@ -21,7 +22,7 @@
|
|||||||
Summary: The RPM package management system
|
Summary: The RPM package management system
|
||||||
Name: rpm
|
Name: rpm
|
||||||
Version: %{rpmver}
|
Version: %{rpmver}
|
||||||
Release: %{?snapver:0.%{snapver}.}7%{?dist}
|
Release: %{?snapver:0.%{snapver}.}1%{?dist}
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
Url: http://www.rpm.org/
|
Url: http://www.rpm.org/
|
||||||
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
|
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
|
||||||
@ -32,7 +33,6 @@ BuildRequires: libdb-devel
|
|||||||
%endif
|
%endif
|
||||||
Source10: libsymlink.attr
|
Source10: libsymlink.attr
|
||||||
|
|
||||||
Patch1: rpm-4.5.90-pkgconfig-path.patch
|
|
||||||
# Fedora specspo is setup differently than what rpm expects, considering
|
# Fedora specspo is setup differently than what rpm expects, considering
|
||||||
# this as Fedora-specific patch for now
|
# this as Fedora-specific patch for now
|
||||||
Patch2: rpm-4.9.90-fedora-specspo.patch
|
Patch2: rpm-4.9.90-fedora-specspo.patch
|
||||||
@ -45,16 +45,8 @@ Patch5: rpm-4.9.90-armhfp.patch
|
|||||||
Patch6: rpm-4.9.0-armhfp-logic.patch
|
Patch6: rpm-4.9.0-armhfp-logic.patch
|
||||||
|
|
||||||
# Patches already in upstream
|
# Patches already in upstream
|
||||||
# http://www.rpm.org/ticket/865
|
|
||||||
Patch100: 0001-Finish-lua-5.2-support-trac-865.patch
|
|
||||||
# Check for stale locks when opening write-cursors
|
|
||||||
Patch101: rpm-4.11.x-cursor-failchk.patch
|
|
||||||
# Filter soname dependencies by name
|
# Filter soname dependencies by name
|
||||||
Patch102: rpm-4.11.x-filter-soname-deps.patch
|
Patch100: rpm-4.11.x-filter-soname-deps.patch
|
||||||
# Stricter perllib classification
|
|
||||||
Patch103: rpm-4.11.x-perllib-attr.patch
|
|
||||||
# Serialize BDB environment open+close
|
|
||||||
Patch104: rpm-4.11.x-dbenv-serialize.patch
|
|
||||||
|
|
||||||
# These are not yet upstream
|
# These are not yet upstream
|
||||||
Patch301: rpm-4.6.0-niagara.patch
|
Patch301: rpm-4.6.0-niagara.patch
|
||||||
@ -228,16 +220,11 @@ packages on a system.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{srcver} %{?with_int_bdb:-a 1}
|
%setup -q -n %{name}-%{srcver} %{?with_int_bdb:-a 1}
|
||||||
%patch1 -p1 -b .pkgconfig-path
|
|
||||||
%patch2 -p1 -b .fedora-specspo
|
%patch2 -p1 -b .fedora-specspo
|
||||||
%patch3 -p1 -b .no-man-dirs
|
%patch3 -p1 -b .no-man-dirs
|
||||||
%patch4 -p1 -b .use-gpg2
|
%patch4 -p1 -b .use-gpg2
|
||||||
|
|
||||||
%patch100 -p1 -b .lua-5.2
|
%patch100 -p1 -b .filter-soname-deps
|
||||||
%patch101 -p1 -b .cursor-failchk
|
|
||||||
%patch102 -p1 -b .filter-soname-deps
|
|
||||||
%patch103 -p1 -b .perllib-attr
|
|
||||||
%patch104 -p1 -b .dbenv-serialize
|
|
||||||
|
|
||||||
%patch301 -p1 -b .niagara
|
%patch301 -p1 -b .niagara
|
||||||
%patch302 -p1 -b .geode
|
%patch302 -p1 -b .geode
|
||||||
@ -471,6 +458,9 @@ exit 0
|
|||||||
%doc COPYING doc/librpm/html/*
|
%doc COPYING doc/librpm/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jun 10 2013 Panu Matilainen <pmatilai@redhat.com> - 4.11.1-0.rc1.1
|
||||||
|
- update to 4.11.1-rc1 (http://rpm.org/wiki/Releases/4.11.1)
|
||||||
|
|
||||||
* Tue May 28 2013 Panu Matilainen <pmatilai@redhat.com> - - 4.11.0.1-7
|
* Tue May 28 2013 Panu Matilainen <pmatilai@redhat.com> - - 4.11.0.1-7
|
||||||
- serialize BDB environment open/close (#924417)
|
- serialize BDB environment open/close (#924417)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user