[rpm] add temporary rpmlib patch to support filesystem transition
Lennart Poettering
lennart at fedoraproject.org
Tue Dec 20 14:56:09 UTC 2011
commit 1439f01e4ec6e08c6c2d61719670d7512d787914
Author: Kay Sievers <kay at redhat.com>
Date: Tue Dec 20 14:39:21 2011 +0100
add temporary rpmlib patch to support filesystem transition
https://fedorahosted.org/fpc/ticket/118#comment:14
rpm-4.9.1.2-rpmlib-filesystem-check.patch | 127 +++++++++++++++++++++++++++++
rpm.spec | 10 ++-
2 files changed, 136 insertions(+), 1 deletions(-)
---
diff --git a/rpm-4.9.1.2-rpmlib-filesystem-check.patch b/rpm-4.9.1.2-rpmlib-filesystem-check.patch
new file mode 100644
index 0000000..d9286ee
--- /dev/null
+++ b/rpm-4.9.1.2-rpmlib-filesystem-check.patch
@@ -0,0 +1,127 @@
+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 at redhat.com, harald at 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;
diff --git a/rpm.spec b/rpm.spec
index c862502..323ee6a 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -21,7 +21,7 @@
Summary: The RPM package management system
Name: rpm
Version: %{rpmver}
-Release: %{?snapver:0.%{snapver}.}7%{?dist}
+Release: %{?snapver:0.%{snapver}.}8%{?dist}
Group: System Environment/Base
Url: http://www.rpm.org/
Source0: http://rpm.org/releases/rpm-4.9.x/%{name}-%{srcver}.tar.bz2
@@ -56,6 +56,8 @@ Patch304: rpm-4.9.1.1-ld-flags.patch
Patch305: rpm-4.9.x-gnome-help.patch
# Just warn on STABS instead of failing for now
Patch306: rpm-4.9.x-debugedit-stabs-warn.patch
+# Temporary Patch to provide support for updates
+Patch400: rpm-4.9.1.2-rpmlib-filesystem-check.patch
# Partially GPL/LGPL dual-licensed and some bits with BSD
# SourceLicense: (GPLv2+ and LGPLv2+ with exceptions) and BSD
@@ -227,6 +229,8 @@ packages on a system.
%patch305 -p1 -b .gnome-help
%patch306 -p1 -b .debugedit-stabs-warn
+%patch400 -p1 -b .rpmlib-filesystem-check
+
# this patch cant be applied on softfp builds
%ifnarch armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv7l
%patch5 -p1 -b .armhfp
@@ -444,6 +448,10 @@ exit 0
%doc COPYING doc/librpm/html/*
%changelog
+* Tue Dec 20 2011 Kay Sievers <kay at redhat.com> - 4.9.1.2-8
+- add temporary rpmlib patch to support filesystem transition
+ https://fedoraproject.org/wiki/Features/UsrMove
+
* Fri Dec 02 2011 Panu Matilainen <pmatilai at redhat.com> - 4.9.1.2-7
- switch over to libdb, aka Berkeley DB 5.x
More information about the scm-commits
mailing list